~/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; } }