Skip to content

Commit

Permalink
Functionality and option in Triggers Task-dropdown to run all Tasks w…
Browse files Browse the repository at this point in the history
…ith only one Trigger. The Tasks will run one by one in alphabetical order.
  • Loading branch information
nabemono committed Nov 17, 2023
1 parent 985f37f commit f30fd61
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class TriggerActivity : AppCompatActivity() {

companion object {
const val ID_EXTRA = "TRIGGER_EDIT_ID"
const val ID_ALL_TASKS = -1000L
}

private lateinit var mTrigger: Trigger
Expand Down Expand Up @@ -195,7 +196,11 @@ class TriggerActivity : AppCompatActivity() {

mTargetDropdown.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View, pos: Int, id: Long) {
mTrigger.triggerTarget = mTaskList[pos].id
if (pos == (mTaskList.size)) {
mTrigger.triggerTarget = ID_ALL_TASKS
} else {
mTrigger.triggerTarget = mTaskList[pos].id
}
}

override fun onNothingSelected(parent: AdapterView<*>?) {}
Expand All @@ -213,10 +218,11 @@ class TriggerActivity : AppCompatActivity() {
* Set up Task-Target Dropdown
*/
private fun setUpTargetsDropdown() {
val items = arrayOfNulls<String>(this.mTaskList.size)
val items = arrayOfNulls<String>(if (this.mTaskList.size == 0) 0 else (this.mTaskList.size + 1))
for (i in this.mTaskList.indices) {
items[i] = this.mTaskList[i].title
}
if (this.mTaskList.size > 0) items[this.mTaskList.size] = this.resources.getString(R.string.sync_option_all_tasks_asc)
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, items)
mTargetDropdown.adapter = adapter
}
Expand Down Expand Up @@ -258,7 +264,9 @@ class TriggerActivity : AppCompatActivity() {

//Todo properly populate the fields
for (task in mTaskList) {
if (task.id == mTrigger.triggerTarget) {
if (mTrigger.triggerTarget == ID_ALL_TASKS) {
mTargetDropdown.setSelection(mTaskList.size)
} else if (task.id == mTrigger.triggerTarget) {
mTargetDropdown.setSelection(mTaskList.indexOf(task))
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ca.pkay.rcloneexplorer.RecyclerViewAdapters;


import static ca.pkay.rcloneexplorer.Activities.TriggerActivity.ID_ALL_TASKS;
import static ca.pkay.rcloneexplorer.Items.Trigger.TRIGGER_DAY_FRI;
import static ca.pkay.rcloneexplorer.Items.Trigger.TRIGGER_DAY_MON;
import static ca.pkay.rcloneexplorer.Items.Trigger.TRIGGER_DAY_SAT;
Expand Down Expand Up @@ -82,9 +83,13 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
final Trigger selectedTrigger = triggers.get(position);

Task task = (new DatabaseHandler(context)).getTask(selectedTrigger.getTriggerTarget());
String targetTaskTitle = "ERR: NOTFOUND";
if(task != null){ targetTaskTitle = task.getTitle(); }
if (selectedTrigger.getTriggerTarget() == ID_ALL_TASKS) {
targetTaskTitle = context.getResources().getString(R.string.sync_title_all_tasks_asc);
} else {
Task task = (new DatabaseHandler(context)).getTask(selectedTrigger.getTriggerTarget());
if (task != null) { targetTaskTitle = task.getTitle(); }
}

switch (holder.getItemViewType()) {
case VIEW_TYPE_SCHEDULE:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,54 @@ package ca.pkay.rcloneexplorer.workmanager
import android.content.Context
import android.util.Log
import androidx.work.Data
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequest
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.WorkRequest
import ca.pkay.rcloneexplorer.Activities.TriggerActivity.Companion.ID_ALL_TASKS
import ca.pkay.rcloneexplorer.Database.DatabaseHandler
import ca.pkay.rcloneexplorer.Items.Task
import ca.pkay.rcloneexplorer.Items.Trigger
import java.util.Random

class SyncManager(private var mContext: Context) {

private var mDatabase = DatabaseHandler(mContext)

fun queue(trigger: Trigger) {
queue(trigger.triggerTarget)
if (trigger.triggerTarget == ID_ALL_TASKS) {
queueAllTasks()
} else {
queue(trigger.triggerTarget)
}
}

fun queue(task: Task) {
queue(task.id)
}

fun queue(taskID: Long) {
work(getOneTimeWorkRequest(taskID))
}

private fun queueAllTasks() {
val mTaskList = mDatabase.allTasks
mTaskList.sortedBy { it.title }
for (i in mTaskList.indices) {
workOneByOne(getOneTimeWorkRequest(mTaskList[i].id))
}
}

private fun getOneTimeWorkRequest(taskID: Long): OneTimeWorkRequest {
val uploadWorkRequest = OneTimeWorkRequestBuilder<SyncWorker>()

val data = Data.Builder()
data.putLong(SyncWorker.TASK_ID, taskID)

uploadWorkRequest.setInputData(data.build())
uploadWorkRequest.addTag(taskID.toString())
work(uploadWorkRequest.build())
return uploadWorkRequest.build()
}

fun queueEphemeral(task: Task) {
Expand All @@ -50,6 +71,10 @@ class SyncManager(private var mContext: Context) {
.enqueue(request)
}

private fun workOneByOne(request: OneTimeWorkRequest) {
WorkManager.getInstance(mContext).enqueueUniqueWork("all_tasks_one_by_one", ExistingWorkPolicy.APPEND_OR_REPLACE, request)
}

fun cancel() {
WorkManager.getInstance(mContext)
.cancelAllWork()
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,8 @@
<string name="description_sync_direction_copy_toremote">Copy new or modified files from local storage to remote storage. No files are deleted, existing files on the remote may be overwritten.</string>
<string name="description_sync_direction_copy_tolocal">Copy new or modified files from remote storage to local storage. No files are deleted, existing files on the local storage may be overwritten.</string>
<string name="description_sync_direction_sync_bidirectional">Make sure local and remote storage have the same files by transferring, downloading, and deleting files as needed to maintain an identical folder structure.</string>
<string name="sync_option_all_tasks_asc">All tasks (in alphabetical order)</string>
<string name="sync_title_all_tasks_asc">All tasks</string>
<string name="intro_success">Success!</string>
<string name="intro_successful_setup">You are now ready to start!</string>
<string name="intro_write_external_storage_denied">File access permission not granted</string>
Expand Down

0 comments on commit f30fd61

Please sign in to comment.