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 99de31c3..a3f32e2d 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 56cc9e56..4b9165b2 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 a227ff87..786b753c 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 5d606139..59e78490 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-de/strings.xml b/app/src/main/res/values-de/strings.xml index e4f6f558..a1307fd0 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! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 685fb6fe..c513af1c 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 04737322..dc9bb56d 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