mirror of https://github.com/iSoron/uhabits.git
parent
a9acbd6cab
commit
8c011af2e7
@ -0,0 +1,32 @@
|
||||
package org.isoron.uhabits.database
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import androidx.work.CoroutineWorker
|
||||
import androidx.work.WorkerParameters
|
||||
import org.isoron.uhabits.HabitsApplication
|
||||
import org.isoron.uhabits.utils.DatabaseUtils
|
||||
import org.isoron.uhabits.utils.UriUtils
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
||||
class PublicBackupWorker(
|
||||
appContext: Context,
|
||||
params: WorkerParameters
|
||||
) : CoroutineWorker(appContext, params) {
|
||||
|
||||
override suspend fun doWork(): Result {
|
||||
val app = applicationContext as HabitsApplication
|
||||
val prefs = app.component.preferences
|
||||
val uriString = prefs.publicBackupUri ?: return Result.failure()
|
||||
val path = UriUtils.getPathFromTreeUri(applicationContext, Uri.parse(uriString))
|
||||
?: return Result.failure()
|
||||
return try {
|
||||
val addDate = prefs.isPublicBackupAddDateEnabled
|
||||
DatabaseUtils.saveDatabaseCopy(applicationContext, File(path), addDate)
|
||||
Result.success()
|
||||
} catch (e: IOException) {
|
||||
Result.retry()
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package org.isoron.uhabits.utils
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.os.Environment
|
||||
import android.provider.DocumentsContract
|
||||
|
||||
object UriUtils {
|
||||
fun getPathFromTreeUri(context: Context, uri: Uri): String? {
|
||||
val docId = DocumentsContract.getTreeDocumentId(uri)
|
||||
val parts = docId.split(":")
|
||||
val type = parts[0]
|
||||
val relPath = if (parts.size > 1) parts[1] else ""
|
||||
val base = if ("primary" == type) {
|
||||
Environment.getExternalStorageDirectory().path
|
||||
} else {
|
||||
"/storage/" + type
|
||||
}
|
||||
return if (relPath.isEmpty()) base else "$base/$relPath"
|
||||
}
|
||||
}
|
Loading…
Reference in new issue