From 0741766c06825843609513ac239b47db02361264 Mon Sep 17 00:00:00 2001 From: Malte Heinrich Date: Sun, 19 Oct 2025 14:36:12 +0200 Subject: [PATCH 1/2] Added move functionality to Tasks --- .../rcloneexplorer/Activities/TaskActivity.kt | 26 ++++++++++++++++--- .../Items/SyncDirectionObject.java | 3 +++ .../java/ca/pkay/rcloneexplorer/Rclone.java | 4 +++ .../TasksRecyclerViewAdapter.java | 3 +++ app/src/main/res/values/strings.xml | 4 ++- .../main/res/values/sync_direction_array.xml | 1 + 6 files changed, 37 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Activities/TaskActivity.kt b/app/src/main/java/ca/pkay/rcloneexplorer/Activities/TaskActivity.kt index 99de31c3a..a3f32e2d2 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/Activities/TaskActivity.kt +++ b/app/src/main/java/ca/pkay/rcloneexplorer/Activities/TaskActivity.kt @@ -238,7 +238,15 @@ class TaskActivity : AppCompatActivity(), FolderSelectorCallback{ taskToPopulate.title = findViewById(R.id.task_title_textfield).text.toString() val remotename = remoteDropdown.selectedItem.toString() taskToPopulate.remoteId = remotename - val direction = syncDirection.selectedItemPosition + 1 + // Map spinner position to internal SyncDirection constants explicitly + val directionMap = arrayOf( + SyncDirectionObject.SYNC_LOCAL_TO_REMOTE, + SyncDirectionObject.SYNC_REMOTE_TO_LOCAL, + SyncDirectionObject.COPY_LOCAL_TO_REMOTE, + SyncDirectionObject.COPY_REMOTE_TO_LOCAL, + SyncDirectionObject.MOVE_LOCAL_TO_REMOTE + ) + val direction = if (syncDirection.selectedItemPosition >= 0 && syncDirection.selectedItemPosition < directionMap.size) directionMap[syncDirection.selectedItemPosition] else SyncDirectionObject.SYNC_LOCAL_TO_REMOTE for (ri in rcloneInstance.remotes) { if (ri.name == taskToPopulate.remoteId) { taskToPopulate.remoteType = ri.type @@ -246,7 +254,7 @@ class TaskActivity : AppCompatActivity(), FolderSelectorCallback{ } taskToPopulate.remotePath = remotePath.text.toString() taskToPopulate.localPath = localPath.text.toString() - taskToPopulate.direction = direction + taskToPopulate.direction = direction taskToPopulate.wifionly = switchWifi.isChecked taskToPopulate.md5sum = switchMD5sum.isChecked @@ -491,7 +499,17 @@ class TaskActivity : AppCompatActivity(), FolderSelectorCallback{ override fun onNothingSelected(adapterView: AdapterView<*>?) {} } - syncDirection.setSelection((((existingTask?.direction?.minus(1)) ?: 0)) ) + // Ensure spinner selection reflects existing task direction by mapping stored constant to index + val directionMap = arrayOf( + SyncDirectionObject.SYNC_LOCAL_TO_REMOTE, + SyncDirectionObject.SYNC_REMOTE_TO_LOCAL, + SyncDirectionObject.COPY_LOCAL_TO_REMOTE, + SyncDirectionObject.COPY_REMOTE_TO_LOCAL, + SyncDirectionObject.MOVE_LOCAL_TO_REMOTE + ) + val currentDirection = existingTask?.direction ?: SyncDirectionObject.SYNC_LOCAL_TO_REMOTE + val selectionIndex = directionMap.indexOf(currentDirection).let { if (it >= 0) it else 0 } + syncDirection.setSelection(selectionIndex) } private fun updateSpinnerDescription(value: Int) { @@ -503,6 +521,8 @@ class TaskActivity : AppCompatActivity(), FolderSelectorCallback{ getString(R.string.description_sync_direction_sync_tolocal) SyncDirectionObject.COPY_LOCAL_TO_REMOTE -> text = getString(R.string.description_sync_direction_copy_toremote) + SyncDirectionObject.MOVE_LOCAL_TO_REMOTE -> text = + getString(R.string.description_sync_direction_move_toremote) SyncDirectionObject.COPY_REMOTE_TO_LOCAL -> text = getString(R.string.description_sync_direction_copy_tolocal) SyncDirectionObject.SYNC_BIDIRECTIONAL -> text = diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Items/SyncDirectionObject.java b/app/src/main/java/ca/pkay/rcloneexplorer/Items/SyncDirectionObject.java index 56cc9e566..4b9165b20 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/Items/SyncDirectionObject.java +++ b/app/src/main/java/ca/pkay/rcloneexplorer/Items/SyncDirectionObject.java @@ -36,6 +36,9 @@ public class SyncDirectionObject { public static final int SYNC_BIDIRECTIONAL_INITIAL = 5; public static final int SYNC_BIDIRECTIONAL = 6; + // Move local to remote (use rclone move) + public static final int MOVE_LOCAL_TO_REMOTE = 7; + public static String[] getOptionsArray(Context context) { return context.getResources().getStringArray(R.array.sync_direction_array); diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java b/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java index a227ff87c..786b753c9 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java +++ b/app/src/main/java/ca/pkay/rcloneexplorer/Rclone.java @@ -707,6 +707,10 @@ public Process sync(RemoteItem remoteItem, String localPath, String remotePath, Collections.addAll(directionParameter, "copy", localPath, remoteSection); directionParameter.addAll(defaultParameter); command = createCommandWithOptions(directionParameter); + } else if (syncDirection == SyncDirectionObject.MOVE_LOCAL_TO_REMOTE) { + Collections.addAll(directionParameter, "move", localPath, remoteSection); + directionParameter.addAll(defaultParameter); + command = createCommandWithOptions(directionParameter); }else if (syncDirection == SyncDirectionObject.COPY_REMOTE_TO_LOCAL) { Collections.addAll(directionParameter, "copy", remoteSection, localPath); directionParameter.addAll(defaultParameter); diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/RecyclerViewAdapters/TasksRecyclerViewAdapter.java b/app/src/main/java/ca/pkay/rcloneexplorer/RecyclerViewAdapters/TasksRecyclerViewAdapter.java index 5d6061399..59e784902 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/RecyclerViewAdapters/TasksRecyclerViewAdapter.java +++ b/app/src/main/java/ca/pkay/rcloneexplorer/RecyclerViewAdapters/TasksRecyclerViewAdapter.java @@ -105,6 +105,9 @@ public void onBindViewHolder(@NonNull final ViewHolder holder, final int positio case SyncDirectionObject.COPY_REMOTE_TO_LOCAL: holder.taskSyncDirection.setText(view.getResources().getString(R.string.copy)); break; + case SyncDirectionObject.MOVE_LOCAL_TO_REMOTE: + holder.taskSyncDirection.setText(view.getResources().getString(R.string.move)); + break; case SyncDirectionObject.SYNC_BIDIRECTIONAL_INITIAL: case SyncDirectionObject.SYNC_BIDIRECTIONAL: holder.taskSyncDirection.setText(view.getResources().getString(R.string.bisync)); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 685fb6fe1..c513af1c3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,7 +15,6 @@ Select all Serve… Download - Move Rename Delete App Version @@ -333,6 +332,8 @@ Copied ID "%s" to clipboard! Unknown error importing task! Copy local to remote + Move local to remote + Move Copy remote to local Copy %s sync successful @@ -486,6 +487,7 @@ Copy new or modified files from local storage to remote storage. No files are deleted, existing files on the remote may be overwritten. Copy new or modified files from remote storage to local storage. No files are deleted, existing files on the local storage may be overwritten. Make sure local and remote storage have the same files by transferring, downloading, and deleting files as needed to maintain an identical folder structure. + Move files from local storage to remote storage. Files will be removed from the local source after successful transfer. Include Exclude Success! diff --git a/app/src/main/res/values/sync_direction_array.xml b/app/src/main/res/values/sync_direction_array.xml index 047373223..dc9bb56d4 100644 --- a/app/src/main/res/values/sync_direction_array.xml +++ b/app/src/main/res/values/sync_direction_array.xml @@ -5,6 +5,7 @@ @string/sync_direction_remote_local @string/sync_direction_copy_local_remote @string/sync_direction_copy_remote_local + @string/sync_direction_move_local_remote \ No newline at end of file From d627f1d30b28a06f74343abd77a392e4e79f23ba Mon Sep 17 00:00:00 2001 From: Malte Heinrich Date: Sun, 19 Oct 2025 14:57:51 +0200 Subject: [PATCH 2/2] Added german translation --- app/src/main/res/values-de/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e4f6f558c..a1307fd05 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -296,6 +296,7 @@ Aufgabenkennung "%s" in Zwischenspeicher kopiert! Unbekannter Fehler beim Importieren! Kopiere von lokalem Speicher zu entferntem Speicher + Verschiebe von lokalem Speicher zu entferntem Speicher Kopiere von entferntem Speicher nach lokalem Speicher Kopieren %s war erfolgreich @@ -435,6 +436,7 @@ Synchronisieren Sie Dateien vom lokalen Speicher auf den entfernten Speicher. Alle Dateien, die lokal nicht vorhanden sind, werden auf dem entfernten Speicher gelöscht. Dies betrifft nur die Dateien auf dem entfernten Speicher. Kopiere neue oder geänderte Dateien vom lokalen Speicher zum entfernten Speicher. Dateien werden nicht gelöscht, bestehende Dateien auf dem entfernten Speicher können überschrieben werden. Kopiere neue oder geänderte Dateien vom entfernten Speicher zum lokalen Speicher. Dateien werden nicht gelöscht, bestehende Dateien auf dem lokalen Speicher können überschrieben werden. + Verschiebe Dateien vom lokalen Speicher zum entfernten Speicher. Dateien werden nach erfolgreichem Transfer vom lokalen Speicher entfernt. Stellt sicher das lokaler und entfernter Speicher identisch sind. Dateien werden gelöscht, geupdated und erstellt nach Bedarf. Erfolg! Der Anbieter ist unbekannt!