From ee883c8354dc8387aa06ce7f6870dc36bbb22603 Mon Sep 17 00:00:00 2001 From: eshifri <46511024+eshifri@users.noreply.github.com> Date: Sat, 4 Dec 2021 16:50:08 -0800 Subject: [PATCH] Support file copy within the same folder (#1209) * support file copy to the same folder #294 * support file copy to the same folder; B&W radios added. * fix the syntax --- radio/src/gui/colorlcd/radio_sdmanager.cpp | 19 +++++++++++++------ .../src/gui/common/stdlcd/radio_sdmanager.cpp | 15 ++++++++++++--- radio/src/sdcard.h | 2 ++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_sdmanager.cpp b/radio/src/gui/colorlcd/radio_sdmanager.cpp index 1b752c5d7..c3a7afc01 100644 --- a/radio/src/gui/colorlcd/radio_sdmanager.cpp +++ b/radio/src/gui/colorlcd/radio_sdmanager.cpp @@ -411,13 +411,20 @@ void RadioSdManagerPage::build(FormWindow * window) menu->addLine(STR_PASTE, [=]() { static char lfn[FF_MAX_LFN + 1]; // TODO optimize that! f_getcwd((TCHAR *)lfn, FF_MAX_LFN); - // prevent copying to the same directory - if (strcmp(clipboard.data.sd.directory, lfn)) { - sdCopyFile(clipboard.data.sd.filename, - clipboard.data.sd.directory, - clipboard.data.sd.filename, lfn); - clipboard.type = CLIPBOARD_TYPE_NONE; + // prevent copying to the same directory with the same name + char *destNamePtr = clipboard.data.sd.filename; + if (!strcmp(clipboard.data.sd.directory, lfn)) { + char destFileName[2 * CLIPBOARD_PATH_LEN + 1]; + destNamePtr = strAppend(destFileName, FILE_COPY_PREFIX, + CLIPBOARD_PATH_LEN); + destNamePtr = strAppend(destNamePtr, clipboard.data.sd.filename, + CLIPBOARD_PATH_LEN); + destNamePtr = destFileName; } + sdCopyFile(clipboard.data.sd.filename, + clipboard.data.sd.directory, destNamePtr, lfn); + clipboard.type = CLIPBOARD_TYPE_NONE; + rebuild(window); }); } diff --git a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp index 6f1fd55de..6dde5381c 100644 --- a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp +++ b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp @@ -164,10 +164,19 @@ void onSdManagerMenu(const char * result) strcat(lfn, "/"); strcat(lfn, line); } - if (strcmp(clipboard.data.sd.directory, lfn)) { // prevent copying to the same directory - POPUP_WARNING(sdCopyFile(clipboard.data.sd.filename, clipboard.data.sd.directory, clipboard.data.sd.filename, lfn)); - REFRESH_FILES(); + char *destNamePtr = clipboard.data.sd.filename; + if (!strcmp(clipboard.data.sd.directory, lfn)) { + // prevent copying to the same directory under the same name + char destFileName[2 * CLIPBOARD_PATH_LEN + 1]; + destNamePtr = + strAppend(destFileName, FILE_COPY_PREFIX, CLIPBOARD_PATH_LEN); + destNamePtr = strAppend(destNamePtr, clipboard.data.sd.filename, + CLIPBOARD_PATH_LEN); + destNamePtr = destFileName; } + POPUP_WARNING(sdCopyFile(clipboard.data.sd.filename, + clipboard.data.sd.directory, destNamePtr, lfn)); + REFRESH_FILES(); } else if (result == STR_RENAME_FILE) { memcpy(reusableBuffer.sdManager.originalName, line, sizeof(reusableBuffer.sdManager.originalName)); diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index 862057f02..3d590ad66 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -29,6 +29,8 @@ extern FIL g_oLogFile; #include "translations.h" +#define FILE_COPY_PREFIX "cp_" + #define PATH_SEPARATOR "/" #define ROOT_PATH PATH_SEPARATOR #define MODELS_PATH ROOT_PATH "MODELS" // no trailing slash = important