Add Worker to launch exportUserEntriesCsv in Background
This commit is contained in:
parent
9c9d7e0ee8
commit
26c702c7c0
5 changed files with 54 additions and 17 deletions
|
@ -68,7 +68,7 @@ class TreatmentsUserEntryFragment : DaggerFragment() {
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.ue_export_to_csv) + "?") {
|
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.ue_export_to_csv) + "?") {
|
||||||
uel.log(Action.EXPORT_CSV, Sources.Treatments)
|
uel.log(Action.EXPORT_CSV, Sources.Treatments)
|
||||||
importExportPrefs.exportUserEntriesCsv(activity)
|
importExportPrefs.exportUserEntriesCsv()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package info.nightscout.androidaps.dependencyInjection
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.android.ContributesAndroidInjector
|
import dagger.android.ContributesAndroidInjector
|
||||||
import info.nightscout.androidaps.plugins.general.food.FoodPlugin
|
import info.nightscout.androidaps.plugins.general.food.FoodPlugin
|
||||||
|
import info.nightscout.androidaps.plugins.general.maintenance.ImportExportPrefsImpl
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.NSClientAddAckWorker
|
import info.nightscout.androidaps.plugins.general.nsclient.NSClientAddAckWorker
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.NSClientAddUpdateWorker
|
import info.nightscout.androidaps.plugins.general.nsclient.NSClientAddUpdateWorker
|
||||||
import info.nightscout.androidaps.plugins.general.nsclient.NSClientMbgWorker
|
import info.nightscout.androidaps.plugins.general.nsclient.NSClientMbgWorker
|
||||||
|
@ -30,4 +31,5 @@ abstract class WorkersModule {
|
||||||
@ContributesAndroidInjector abstract fun contributesNSClientUpdateRemoveAckWorker(): NSClientUpdateRemoveAckWorker
|
@ContributesAndroidInjector abstract fun contributesNSClientUpdateRemoveAckWorker(): NSClientUpdateRemoveAckWorker
|
||||||
@ContributesAndroidInjector abstract fun contributesNSClientMbgWorker(): NSClientMbgWorker
|
@ContributesAndroidInjector abstract fun contributesNSClientMbgWorker(): NSClientMbgWorker
|
||||||
@ContributesAndroidInjector abstract fun contributesFoodWorker(): FoodPlugin.FoodWorker
|
@ContributesAndroidInjector abstract fun contributesFoodWorker(): FoodPlugin.FoodWorker
|
||||||
|
@ContributesAndroidInjector abstract fun contributesCsvExportWorker(): ImportExportPrefsImpl.CsvExportWorker
|
||||||
}
|
}
|
|
@ -11,7 +11,13 @@ import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import androidx.work.OneTimeWorkRequest
|
||||||
|
import androidx.work.Worker
|
||||||
|
import androidx.work.WorkerParameters
|
||||||
|
import androidx.work.workDataOf
|
||||||
|
import dagger.android.HasAndroidInjector
|
||||||
import info.nightscout.androidaps.BuildConfig
|
import info.nightscout.androidaps.BuildConfig
|
||||||
|
import info.nightscout.androidaps.MainApp
|
||||||
import info.nightscout.androidaps.R
|
import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.activities.DaggerAppCompatActivityWithResult
|
import info.nightscout.androidaps.activities.DaggerAppCompatActivityWithResult
|
||||||
import info.nightscout.androidaps.activities.PreferencesActivity
|
import info.nightscout.androidaps.activities.PreferencesActivity
|
||||||
|
@ -26,6 +32,7 @@ import info.nightscout.androidaps.logging.LTag
|
||||||
import info.nightscout.androidaps.logging.UserEntryLogger
|
import info.nightscout.androidaps.logging.UserEntryLogger
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
import info.nightscout.androidaps.plugins.general.maintenance.formats.*
|
import info.nightscout.androidaps.plugins.general.maintenance.formats.*
|
||||||
|
import info.nightscout.androidaps.receivers.DataWorker
|
||||||
import info.nightscout.androidaps.utils.AndroidPermission
|
import info.nightscout.androidaps.utils.AndroidPermission
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.MidnightTime
|
import info.nightscout.androidaps.utils.MidnightTime
|
||||||
|
@ -64,7 +71,7 @@ class ImportExportPrefsImpl @Inject constructor(
|
||||||
private val encryptedPrefsFormat: EncryptedPrefsFormat,
|
private val encryptedPrefsFormat: EncryptedPrefsFormat,
|
||||||
private val prefFileList: PrefFileListProvider,
|
private val prefFileList: PrefFileListProvider,
|
||||||
private val uel: UserEntryLogger,
|
private val uel: UserEntryLogger,
|
||||||
private val repository: AppRepository,
|
private val dataWorker: DataWorker,
|
||||||
private val dateUtil: DateUtil
|
private val dateUtil: DateUtil
|
||||||
) : ImportExportPrefs {
|
) : ImportExportPrefs {
|
||||||
|
|
||||||
|
@ -362,20 +369,48 @@ class ImportExportPrefsImpl @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun exportUserEntriesCsv(activity: FragmentActivity) {
|
override fun exportUserEntriesCsv() {
|
||||||
val entries = repository.getUserEntryFilteredDataFromTime(MidnightTime.calc() - T.days(90).msecs()).blockingGet()
|
dataWorker.enqueue(
|
||||||
prefFileList.ensureExportDirExists()
|
OneTimeWorkRequest.Builder(CsvExportWorker::class.java)
|
||||||
val newFile = prefFileList.newExportCsvFile()
|
.build()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
class CsvExportWorker(
|
||||||
classicPrefsFormat.saveCsv(newFile, entries)
|
context: Context,
|
||||||
ToastUtils.okToast(activity, resourceHelper.gs(R.string.ue_exported))
|
params: WorkerParameters
|
||||||
} catch (e: FileNotFoundException) {
|
) : Worker(context, params) {
|
||||||
ToastUtils.errorToast(activity, resourceHelper.gs(R.string.filenotfound) + " " + newFile)
|
|
||||||
log.error(LTag.CORE, "Unhandled exception", e)
|
@Inject lateinit var injector: HasAndroidInjector
|
||||||
} catch (e: IOException) {
|
@Inject lateinit var aapsLogger: AAPSLogger
|
||||||
ToastUtils.errorToast(activity, e.message)
|
@Inject lateinit var repository: AppRepository
|
||||||
log.error(LTag.CORE, "Unhandled exception", e)
|
@Inject lateinit var classicPrefsFormat: ClassicPrefsFormat
|
||||||
|
@Inject lateinit var resourceHelper: ResourceHelper
|
||||||
|
@Inject lateinit var prefFileList: PrefFileListProvider
|
||||||
|
@Inject lateinit var mainApp: MainApp
|
||||||
|
|
||||||
|
init {
|
||||||
|
(context.applicationContext as HasAndroidInjector).androidInjector().inject(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun doWork(): Result {
|
||||||
|
val entries = repository.getUserEntryFilteredDataFromTime(MidnightTime.calc() - T.days(90).msecs()).blockingGet()
|
||||||
|
prefFileList.ensureExportDirExists()
|
||||||
|
val newFile = prefFileList.newExportCsvFile()
|
||||||
|
var ret = Result.success()
|
||||||
|
try {
|
||||||
|
classicPrefsFormat.saveCsv(newFile, entries)
|
||||||
|
ToastUtils.okToast(mainApp, resourceHelper.gs(R.string.ue_exported))
|
||||||
|
} catch (e: FileNotFoundException) {
|
||||||
|
ToastUtils.errorToast(mainApp, resourceHelper.gs(R.string.filenotfound) + " " + newFile)
|
||||||
|
aapsLogger.error(LTag.CORE, "Unhandled exception", e)
|
||||||
|
ret = Result.failure(workDataOf("Error" to "Error FileNotFoundException"))
|
||||||
|
} catch (e: IOException) {
|
||||||
|
ToastUtils.errorToast(mainApp, e.message)
|
||||||
|
aapsLogger.error(LTag.CORE, "Unhandled exception", e)
|
||||||
|
ret = Result.failure(workDataOf("Error" to "Error IOException"))
|
||||||
|
}
|
||||||
|
return ret
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -118,7 +118,7 @@ class MaintenanceFragment : DaggerFragment() {
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.ue_export_to_csv) + "?") {
|
OKDialog.showConfirmation(activity, resourceHelper.gs(R.string.ue_export_to_csv) + "?") {
|
||||||
uel.log(Action.EXPORT_CSV, Sources.Maintenance)
|
uel.log(Action.EXPORT_CSV, Sources.Maintenance)
|
||||||
importExportPrefs.exportUserEntriesCsv(activity)
|
importExportPrefs.exportUserEntriesCsv()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,5 +14,5 @@ interface ImportExportPrefs {
|
||||||
fun prefsFileExists(): Boolean
|
fun prefsFileExists(): Boolean
|
||||||
fun verifyStoragePermissions(fragment: Fragment, onGranted: Runnable)
|
fun verifyStoragePermissions(fragment: Fragment, onGranted: Runnable)
|
||||||
fun exportSharedPreferences(f: Fragment)
|
fun exportSharedPreferences(f: Fragment)
|
||||||
fun exportUserEntriesCsv(activity: FragmentActivity)
|
fun exportUserEntriesCsv()
|
||||||
}
|
}
|
Loading…
Reference in a new issue