Liu Song’s Projects


~/Projects/tvbox

git clone https://code.lsong.org/tvbox

Commit

Commit
1b2deaee16d7ec6abe1ce241d3bb116b9f5cc9e6
Author
FongMi <[email protected]>
Date
2023-11-05 00:15:42 +0800 +0800
Diffstat
 app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java | 4 +
 catvod/src/main/java/com/github/catvod/utils/Prefers.java | 22 +++++++

Support prefers backup


diff --git a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
index 38f5d40cadb7cf0a3dfd2c9007b1da113a5817ef..e630f00bd8fc34c9c77e116b41b998d7bef5ec94 100644
--- a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
+++ b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
@@ -25,6 +25,7 @@ import com.fongmi.android.tv.db.dao.SiteDao;
 import com.fongmi.android.tv.db.dao.TrackDao;
 import com.fongmi.android.tv.utils.Util;
 import com.github.catvod.utils.Path;
+import com.github.catvod.utils.Prefers;
 
 import java.io.File;
 import java.text.SimpleDateFormat;
@@ -57,6 +58,7 @@             File shm = App.get().getDatabasePath(NAME + "-shm").getAbsoluteFile();
             if (db.exists()) Path.copy(db, new File(Path.tv(), db.getName()));
             if (wal.exists()) Path.copy(wal, new File(Path.tv(), wal.getName()));
             if (shm.exists()) Path.copy(shm, new File(Path.tv(), shm.getName()));
+            Prefers.backup(new File(Path.tv(), NAME + "-pref"));
             App.post(callback::success);
         });
     }
@@ -66,9 +68,11 @@         App.execute(() -> {
             File db = new File(Path.tv(), NAME);
             File wal = new File(Path.tv(), NAME + "-wal");
             File shm = new File(Path.tv(), NAME + "-shm");
+            File pref = new File(Path.tv(), NAME + "-pref");
             if (db.exists()) Path.move(db, App.get().getDatabasePath(db.getName()).getAbsoluteFile());
             if (wal.exists()) Path.move(wal, App.get().getDatabasePath(wal.getName()).getAbsoluteFile());
             if (shm.exists()) Path.move(shm, App.get().getDatabasePath(shm.getName()).getAbsoluteFile());
+            if (pref.exists()) Prefers.restore(pref);
             App.post(callback::success);
         });
     }




diff --git a/catvod/src/main/java/com/github/catvod/utils/Prefers.java b/catvod/src/main/java/com/github/catvod/utils/Prefers.java
index dc3c9a1ec784884b26b3af4e376d59e72d75e8c2..8e0bad16cb016ba86aa80eeb79a2bcc541bd09ae 100644
--- a/catvod/src/main/java/com/github/catvod/utils/Prefers.java
+++ b/catvod/src/main/java/com/github/catvod/utils/Prefers.java
@@ -5,11 +5,30 @@
 import androidx.preference.PreferenceManager;
 
 import com.github.catvod.Init;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.ToNumberPolicy;
+import com.google.gson.internal.LazilyParsedNumber;
+import com.google.gson.reflect.TypeToken;
+
+import java.io.File;
+import java.util.Map;
 
 public class Prefers {
 
     private static SharedPreferences getPrefers() {
         return PreferenceManager.getDefaultSharedPreferences(Init.context());
+    }
+
+    public static void backup(File file) {
+        Path.write(file, new Gson().toJson(getPrefers().getAll()).getBytes());
+    }
+
+    public static void restore(File file) {
+        Gson gson = new GsonBuilder().setObjectToNumberStrategy(ToNumberPolicy.LAZILY_PARSED_NUMBER).create();
+        Map<String, Object> map = gson.fromJson(Path.read(file), new TypeToken<Map<String, Object>>() {}.getType());
+        if (map != null) for (Map.Entry<String, ?> entry : map.entrySet()) Prefers.put(entry.getKey(), entry.getValue());
+        Path.clear(file);
     }
 
     public static String getString(String key) {
@@ -48,6 +67,9 @@         } else if (obj instanceof Integer) {
             getPrefers().edit().putInt(key, (Integer) obj).apply();
         } else if (obj instanceof Long) {
 import android.content.SharedPreferences;
+import android.content.SharedPreferences;
+        } else if (obj instanceof LazilyParsedNumber) {
+import com.github.catvod.Init;
 import android.content.SharedPreferences;
         }
     }