From 0834a6f1759057dd9d7de5712cf3dd1937e9892e Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <mail@justjanne.de>
Date: Mon, 13 Nov 2023 02:51:04 +0100
Subject: [PATCH] wip: progress

---
 .../chaosdorf/meteroid/MeteroidApplication.kt | 21 ++++++-
 .../de/chaosdorf/meteroid/sync/SyncManager.kt | 55 +++++++++++++++----
 2 files changed, 64 insertions(+), 12 deletions(-)

diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/MeteroidApplication.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/MeteroidApplication.kt
index 1d67c5c..6ae713b 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/MeteroidApplication.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/MeteroidApplication.kt
@@ -25,7 +25,26 @@
 package de.chaosdorf.meteroid
 
 import android.app.Application
+import coil.ImageLoader
+import coil.ImageLoaderFactory
+import coil.disk.DiskCache
+import coil.memory.MemoryCache
 import dagger.hilt.android.HiltAndroidApp
 
 @HiltAndroidApp
-class MeteroidApplication : Application()
+class MeteroidApplication : Application(), ImageLoaderFactory {
+  override fun newImageLoader() = ImageLoader.Builder(applicationContext)
+    .memoryCache {
+      MemoryCache.Builder(applicationContext)
+        .maxSizePercent(0.25)
+        .build()
+    }
+    .diskCache {
+      DiskCache.Builder()
+        .directory(applicationContext.cacheDir.resolve("image_cache"))
+        .maxSizePercent(0.02)
+        .build()
+    }
+    .respectCacheHeaders(false)
+    .build()
+}
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/sync/SyncManager.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/sync/SyncManager.kt
index cda175b..2387d29 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/sync/SyncManager.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/sync/SyncManager.kt
@@ -24,6 +24,7 @@
 
 package de.chaosdorf.meteroid.sync
 
+import android.util.Log
 import de.chaosdorf.mete.model.MeteApiFactory
 import de.chaosdorf.meteroid.model.AccountInfo
 import de.chaosdorf.meteroid.model.Drink
@@ -39,34 +40,66 @@ class SyncManager @Inject constructor(
   private val transactionSyncHandler: TransactionSyncHandler
 ) {
   suspend fun sync(server: Server, user: User?) {
-    userSyncHandler.sync(server)
-    drinkSyncHandler.sync(server)
-    if (user != null) {
-      transactionSyncHandler.sync(Pair(server, user.userId))
+    try {
+      userSyncHandler.sync(server)
+      drinkSyncHandler.sync(server)
+      if (user != null) {
+        transactionSyncHandler.sync(Pair(server, user.userId))
+      }
+    } catch (e: Exception) {
+      Log.e(
+        "Sync",
+        "Could not finish transaction for ${user.name} (${user.userId}) on ${account.server.url}",
+        e
+      )
     }
   }
 
   suspend fun purchase(account: AccountInfo, drink: Drink) {
     account.user?.let { user ->
       val api = factory.newInstance(account.server.url)
-      api.purchase(user.userId, drink.drinkId)
-      sync(account.server, user)
+      try {
+        api.purchase(user.userId, drink.drinkId)
+        sync(account.server, user)
+      } catch (e: Exception) {
+        Log.e(
+          "Sync",
+          "Could not finish transaction for ${user.name} (${user.userId}) on ${account.server.url}",
+          e
+        )
+      }
     }
   }
 
   suspend fun deposit(account: AccountInfo, amount: BigDecimal) {
     account.user?.let { user ->
-      val api = factory.newInstance(account.server.url)
-      api.deposit(user.userId, amount)
-      sync(account.server, user)
+      try {
+        val api = factory.newInstance(account.server.url)
+        api.deposit(user.userId, amount)
+        sync(account.server, user)
+      } catch (e: Exception) {
+        Log.e(
+          "Sync",
+          "Could not finish transaction for ${user.name} (${user.userId}) on ${account.server.url}",
+          e
+        )
+      }
     }
   }
 
   suspend fun withdraw(account: AccountInfo, amount: BigDecimal) {
     account.user?.let { user ->
       val api = factory.newInstance(account.server.url)
-      api.withdraw(user.userId, amount)
-      sync(account.server, user)
+      try {
+        api.withdraw(user.userId, amount)
+        sync(account.server, user)
+      } catch (e: Exception) {
+        Log.e(
+          "Sync",
+          "Could not finish transaction for ${user.name} (${user.userId}) on ${account.server.url}",
+          e
+        )
+      }
     }
   }
 }
-- 
GitLab