From 1b2deaee16d7ec6abe1ce241d3bb116b9f5cc9e6 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 5 Nov 2023 00:15:42 +0800 Subject: [PATCH] Support prefers backup --- .../com/fongmi/android/tv/db/AppDatabase.java | 4 ++++ .../java/com/github/catvod/utils/Prefers.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) 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 38f5d40ca..e630f00bd 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 @@ public abstract class AppDatabase extends RoomDatabase { 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 @@ public abstract class AppDatabase extends RoomDatabase { 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 dc3c9a1ec..8e0bad16c 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Prefers.java +++ b/catvod/src/main/java/com/github/catvod/utils/Prefers.java @@ -5,6 +5,14 @@ import android.content.SharedPreferences; 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 { @@ -12,6 +20,17 @@ public class Prefers { 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 map = gson.fromJson(Path.read(file), new TypeToken>() {}.getType()); + if (map != null) for (Map.Entry entry : map.entrySet()) Prefers.put(entry.getKey(), entry.getValue()); + Path.clear(file); + } + public static String getString(String key) { return getString(key, ""); } @@ -48,6 +67,8 @@ public class Prefers { getPrefers().edit().putInt(key, (Integer) obj).apply(); } else if (obj instanceof Long) { getPrefers().edit().putLong(key, (Long) obj).apply(); + } else if (obj instanceof LazilyParsedNumber) { + getPrefers().edit().putInt(key, ((LazilyParsedNumber) obj).intValue()).apply(); } }