Skip to content

Commit

Permalink
Prototype of sync task launcher
Browse files Browse the repository at this point in the history
  • Loading branch information
cyanomiko committed Aug 31, 2021
1 parent 774b237 commit 7d69639
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 5 deletions.
32 changes: 28 additions & 4 deletions app/src/main/java/net/dcnnt/DCWorker.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,51 @@ import androidx.work.*
//import androidx.work.Worker
//import androidx.work.WorkerParameters
import net.dcnnt.core.APP
import net.dcnnt.plugins.SyncPlugin
import java.util.*
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit

class DCWorker(appContext: Context, workerParams: WorkerParameters):
Worker(appContext, workerParams) {

companion object {
const val TAG = "DCWorker"
fun initWorker(context: Context, workIntervalMinutes: Long) {
val backgroundWorkRequest: WorkRequest = PeriodicWorkRequestBuilder<DCWorker>(
workIntervalMinutes, TimeUnit.MINUTES).build()
val intervalTag = "$TAG/$workIntervalMinutes"
val bgWorkRequest: PeriodicWorkRequest = PeriodicWorkRequestBuilder<DCWorker>(
workIntervalMinutes, TimeUnit.MINUTES).addTag(TAG).addTag(intervalTag).build()
// WorkManager.initialize(
// context,
// Configuration.Builder()
// .setExecutor(Executors.newFixedThreadPool(1))
// .build())
WorkManager.getInstance(context).enqueue(backgroundWorkRequest)
val wm = WorkManager.getInstance(context)
val worksToCancel = mutableListOf<UUID>()
wm.getWorkInfosByTag(TAG).get().forEach {
if (!it.tags.contains(intervalTag)) worksToCancel.add(it.id)
}
worksToCancel.forEach { wm.cancelWorkById(it) }
wm.cancelAllWork() // ToDo: debug only!
wm.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.KEEP, bgWorkRequest)
}
}

override fun doWork(): Result {
APP.log("DCWorker - OK")
APP.log("DCWorker $id - OK")
APP.dm.devices.values.forEach { device ->
APP.log("UIN = ${device.uin}")
try {
val plugin = SyncPlugin(APP, device)
plugin.init(applicationContext)
plugin.conf.getTasks().forEach {
APP.log("task '${it.name.value}'")
it.execute(plugin)
}
} catch (e: Exception) {
APP.logException(e)
}
}
return Result.success()
}
}
19 changes: 18 additions & 1 deletion app/src/main/java/net/dcnnt/plugins/SyncPlugin.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package net.dcnnt.plugins

import android.Manifest
import android.content.ContentResolver
import android.content.Context
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.util.Log
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.documentfile.provider.DocumentFile
import net.dcnnt.R
import net.dcnnt.core.*
Expand Down Expand Up @@ -50,6 +54,7 @@ abstract class SyncTask(val parent: SyncPluginConf, key: String): DCConf(key) {
}

abstract fun getTextInfo(): String
abstract fun execute(plugin: SyncPlugin)
}

class DirectorySyncTask(parent: SyncPluginConf, key: String): SyncTask(parent, key) {
Expand All @@ -62,7 +67,7 @@ class DirectorySyncTask(parent: SyncPluginConf, key: String): SyncTask(parent, k

override fun init() {
super.init()
directory = DirEntry(this, "directory", "").init() as DirEntry
directory = DirEntry(this, "directory", "", true).init() as DirEntry
mode = SelectEntry(this, "mode", listOf(
SelectOption("upload", R.string.conf_sync_dir_mode_upload),
SelectOption("download", R.string.conf_sync_dir_mode_download),
Expand All @@ -81,6 +86,18 @@ class DirectorySyncTask(parent: SyncPluginConf, key: String): SyncTask(parent, k
}

override fun getTextInfo(): String = Uri.decode(directory.value.split('/').last())

override fun execute(plugin: SyncPlugin) {
val dir = DocumentFile.fromTreeUri(plugin.context, Uri.parse(directory.value)) ?: return
val l = dir.length()
val p = (ContextCompat.checkSelfPermission(plugin.context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
val p2 = (ContextCompat.checkSelfPermission(plugin.context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
APP.log("URI: ${directory.value} (${dir.isDirectory}, $p, $p2)")
APP.log("Length: $l")
dir.listFiles().asIterable().forEach {
APP.log("${it.uri}")
}
}
}


Expand Down

0 comments on commit 7d69639

Please sign in to comment.