diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/BackupSettings.java b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/BackupSettings.java index 2ca3409b..496683b7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/BackupSettings.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/BackupSettings.java @@ -32,6 +32,7 @@ import ml.docilealligator.infinityforreddit.BuildConfig; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.account.Account; +import ml.docilealligator.infinityforreddit.comment.CommentDraft; import ml.docilealligator.infinityforreddit.commentfilter.CommentFilter; import ml.docilealligator.infinityforreddit.commentfilter.CommentFilterUsage; import ml.docilealligator.infinityforreddit.customtheme.CustomTheme; @@ -39,6 +40,8 @@ import ml.docilealligator.infinityforreddit.multireddit.AnonymousMultiredditSubr import ml.docilealligator.infinityforreddit.multireddit.MultiReddit; import ml.docilealligator.infinityforreddit.postfilter.PostFilter; import ml.docilealligator.infinityforreddit.postfilter.PostFilterUsage; +import ml.docilealligator.infinityforreddit.readpost.ReadPost; +import ml.docilealligator.infinityforreddit.reminder.Reminder; import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData; import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData; import ml.docilealligator.infinityforreddit.utils.CustomThemeSharedPreferencesUtils; @@ -141,6 +144,18 @@ public class BackupSettings { String commentFilterUsageJson = new Gson().toJson(commentFilterUsage); boolean res19 = saveDatabaseTableToFile(commentFilterUsageJson, databaseDirFile.getAbsolutePath(), "/comment_filter_usage.json"); + List commentDrafts = redditDataRoomDatabase.commentDraftDao().getCommentDraftsForBackup(); + String commentDraftsJson = new Gson().toJson(commentDrafts); + boolean res20 = saveDatabaseTableToFile(commentDraftsJson, databaseDirFile.getAbsolutePath(), "/comment_drafts.json"); + + List readPosts = redditDataRoomDatabase.readPostDao().getAllReadPostsForBackup(); + String readPostsJson = new Gson().toJson(readPosts); + boolean res21 = saveDatabaseTableToFile(readPostsJson, databaseDirFile.getAbsolutePath(), "/read_posts.json"); + + List reminders = redditDataRoomDatabase.reminderDao().getAllRemindersForBackup(); + String remindersJson = new Gson().toJson(reminders); + boolean res22 = saveDatabaseTableToFile(remindersJson, databaseDirFile.getAbsolutePath(), "/reminders.json"); + boolean zipRes = zipAndMoveToDestinationDir(context, cacheDir, contentResolver, destinationDirUri); try { @@ -152,7 +167,7 @@ public class BackupSettings { handler.post(() -> { boolean finalResult = res && res1 && res2 && res3 && res4 && res5 && res6 && res7 && res8 && res9 && res10 && res11 && res12 && res13 && res14 && res15 && res16 && res17 - && res18 && res19 && zipRes; + && res18 && res19 && res20 && res21 && res22 && zipRes; if (finalResult) { backupSettingsListener.success(); } else { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/RestoreSettings.java b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/RestoreSettings.java index 0a69028f..96fd74d7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/RestoreSettings.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/RestoreSettings.java @@ -32,6 +32,7 @@ import java.util.concurrent.Executor; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.account.Account; +import ml.docilealligator.infinityforreddit.comment.CommentDraft; import ml.docilealligator.infinityforreddit.commentfilter.CommentFilter; import ml.docilealligator.infinityforreddit.commentfilter.CommentFilterUsage; import ml.docilealligator.infinityforreddit.customtheme.CustomTheme; @@ -39,6 +40,8 @@ import ml.docilealligator.infinityforreddit.multireddit.AnonymousMultiredditSubr import ml.docilealligator.infinityforreddit.multireddit.MultiReddit; import ml.docilealligator.infinityforreddit.postfilter.PostFilter; import ml.docilealligator.infinityforreddit.postfilter.PostFilterUsage; +import ml.docilealligator.infinityforreddit.readpost.ReadPost; +import ml.docilealligator.infinityforreddit.reminder.Reminder; import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData; import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData; import ml.docilealligator.infinityforreddit.utils.CustomThemeSharedPreferencesUtils; @@ -141,6 +144,9 @@ public class RestoreSettings { File postFilterUsageFile = new File(f.getAbsolutePath() + "/post_filter_usage.json"); File commentFiltersFile = new File(f.getAbsolutePath() + "/comment_filters.json"); File commentFilterUsageFile = new File(f.getAbsolutePath() + "/comment_filter_usage.json"); + File commentDraftsFile = new File(f.getAbsolutePath() + "/comment_drafts.json"); + File readPostsFile = new File(f.getAbsolutePath() + "/read_posts.json"); + File remindersFile = new File(f.getAbsolutePath() + "/reminders.json"); if (anonymousSubscribedSubredditsFile.exists()) { List anonymousSubscribedSubreddits = getListFromFile(anonymousSubscribedSubredditsFile, new TypeToken>() {}.getType()); @@ -181,6 +187,24 @@ public class RestoreSettings { redditDataRoomDatabase.commentFilterUsageDao().insertAll(commentFilterUsage); } } + if (commentDraftsFile.exists()) { + List commentDrafts = getListFromFile(commentDraftsFile, new TypeToken>() {}.getType()); + if (commentDrafts != null) { + redditDataRoomDatabase.commentDraftDao().insertAll(commentDrafts); + } + } + if (readPostsFile.exists()) { + List readPosts = getListFromFile(readPostsFile, new TypeToken>() {}.getType()); + if (readPosts != null) { + redditDataRoomDatabase.readPostDao().insertAll(readPosts); + } + } + if (remindersFile.exists()) { + List reminders = getListFromFile(remindersFile, new TypeToken>() {}.getType()); + if (reminders != null) { + redditDataRoomDatabase.reminderDao().insertAll(reminders); + } + } } } } else { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/CommentDraftDao.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/CommentDraftDao.kt index 84dfc9f1..f88d0740 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/CommentDraftDao.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/CommentDraftDao.kt @@ -6,15 +6,22 @@ import androidx.room.Delete import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query +import ml.docilealligator.infinityforreddit.commentfilter.CommentFilterUsage @Dao interface CommentDraftDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(commentDraft: CommentDraft) + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertAll(commentDrafts: List) + @Delete suspend fun delete(commentDraft: CommentDraft) @Query("SELECT * FROM comment_draft WHERE full_name = :fullName AND draft_type = :draftType") fun getCommentDraftLiveData(fullName: String, draftType: DraftType): LiveData + + @Query("SELECT * FROM comment_draft") + fun getCommentDraftsForBackup(): List } \ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/readpost/ReadPostDao.java b/app/src/main/java/ml/docilealligator/infinityforreddit/readpost/ReadPostDao.java index 43d13f36..3cdc1e0c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/readpost/ReadPostDao.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/readpost/ReadPostDao.java @@ -14,12 +14,18 @@ public interface ReadPostDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(ReadPost readPost); + @Insert(onConflict = OnConflictStrategy.REPLACE) + void insertAll(List readPosts); + @Query("SELECT * FROM read_posts WHERE username = :username AND (:before IS NULL OR time < :before) AND read_post_type = :readPostType ORDER BY time DESC LIMIT 25") ListenableFuture> getAllReadPostsListenableFuture(String username, Long before, @ReadPostType int readPostType); @Query("SELECT * FROM read_posts WHERE username = :username AND (:before IS NULL OR time < :before) AND read_post_type = :readPostType ORDER BY time DESC LIMIT 25") List getAllReadPosts(String username, Long before, @ReadPostType int readPostType); + @Query("SELECT * FROM read_posts") + List getAllReadPostsForBackup(); + @Query("SELECT * FROM read_posts WHERE username = :username AND read_post_type != :excludedReadPostType AND read_post_type != 0 AND id IN (:postIds)") List getAllReadPostsForMetadata(String username, @ReadPostType int excludedReadPostType, List postIds); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderDao.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderDao.kt index c4a243e7..1659cf11 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderDao.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderDao.kt @@ -12,9 +12,15 @@ interface ReminderDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(reminder: Reminder) + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertAll(reminders: List) + @Query("SELECT * FROM reminders") suspend fun getAllReminders(): List + @Query("SELECT * FROM reminders") + fun getAllRemindersForBackup(): List + @Query("SELECT * FROM reminders") fun getAllRemindersFlow(): Flow>