diff --git a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WorkersModule.kt b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WorkersModule.kt index 5d3f33d2d9..a4ef80ab81 100644 --- a/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WorkersModule.kt +++ b/app/src/main/java/info/nightscout/androidaps/dependencyInjection/WorkersModule.kt @@ -3,6 +3,7 @@ package info.nightscout.androidaps.dependencyInjection import dagger.Module import dagger.android.ContributesAndroidInjector 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.NSClientAddUpdateWorker import info.nightscout.androidaps.plugins.general.nsclient.NSClientMbgWorker @@ -30,4 +31,5 @@ abstract class WorkersModule { @ContributesAndroidInjector abstract fun contributesNSClientUpdateRemoveAckWorker(): NSClientUpdateRemoveAckWorker @ContributesAndroidInjector abstract fun contributesNSClientMbgWorker(): NSClientMbgWorker @ContributesAndroidInjector abstract fun contributesFoodWorker(): FoodPlugin.FoodWorker + @ContributesAndroidInjector abstract fun contributesCsvExportWorker(): ImportExportPrefsImpl.CsvExportWorker } \ No newline at end of file diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefsImpl.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefsImpl.kt index 90a3edba81..a6db885f14 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefsImpl.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefsImpl.kt @@ -11,7 +11,10 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import androidx.work.* +import dagger.android.HasAndroidInjector import info.nightscout.androidaps.BuildConfig +import info.nightscout.androidaps.MainApp import info.nightscout.androidaps.R import info.nightscout.androidaps.activities.DaggerAppCompatActivityWithResult import info.nightscout.androidaps.activities.PreferencesActivity @@ -64,7 +67,6 @@ class ImportExportPrefsImpl @Inject constructor( private val encryptedPrefsFormat: EncryptedPrefsFormat, private val prefFileList: PrefFileListProvider, private val uel: UserEntryLogger, - private val repository: AppRepository, private val dateUtil: DateUtil ) : ImportExportPrefs { @@ -363,19 +365,48 @@ class ImportExportPrefsImpl @Inject constructor( } override fun exportUserEntriesCsv(activity: FragmentActivity) { - val entries = repository.getUserEntryFilteredDataFromTime(MidnightTime.calc() - T.days(90).msecs()).blockingGet() - prefFileList.ensureExportDirExists() - val newFile = prefFileList.newExportCsvFile() + WorkManager.getInstance(activity).enqueueUniqueWork( + "export", + ExistingWorkPolicy.APPEND_OR_REPLACE, + OneTimeWorkRequest.Builder(CsvExportWorker::class.java).build() + ) + } - try { - classicPrefsFormat.saveCsv(newFile, entries) - ToastUtils.okToast(activity, resourceHelper.gs(R.string.ue_exported)) - } catch (e: FileNotFoundException) { - ToastUtils.errorToast(activity, resourceHelper.gs(R.string.filenotfound) + " " + newFile) - log.error(LTag.CORE, "Unhandled exception", e) - } catch (e: IOException) { - ToastUtils.errorToast(activity, e.message) - log.error(LTag.CORE, "Unhandled exception", e) + class CsvExportWorker( + context: Context, + params: WorkerParameters + ) : Worker(context, params) { + + @Inject lateinit var injector: HasAndroidInjector + @Inject lateinit var aapsLogger: AAPSLogger + @Inject lateinit var repository: AppRepository + @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 } } } \ No newline at end of file