mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-12-30 21:07:11 +01:00
Restore more data.
This commit is contained in:
parent
f1dfadecb6
commit
ddfc478e0e
@ -277,6 +277,7 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||||
|
case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT:
|
||||||
String multiRedditName;
|
String multiRedditName;
|
||||||
if (name.endsWith("/")) {
|
if (name.endsWith("/")) {
|
||||||
multiRedditName = name.substring(0, name.length() - 1);
|
multiRedditName = name.substring(0, name.length() - 1);
|
||||||
@ -302,7 +303,8 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
if (postType == PostPagingSource.TYPE_USER) {
|
if (postType == PostPagingSource.TYPE_USER) {
|
||||||
bundle.putString(PostFragment.EXTRA_USER_NAME, name);
|
bundle.putString(PostFragment.EXTRA_USER_NAME, name);
|
||||||
bundle.putString(PostFragment.EXTRA_USER_WHERE, userWhere);
|
bundle.putString(PostFragment.EXTRA_USER_WHERE, userWhere);
|
||||||
} else if (postType == PostPagingSource.TYPE_SUBREDDIT || postType == PostPagingSource.TYPE_MULTI_REDDIT) {
|
} else if (postType == PostPagingSource.TYPE_SUBREDDIT || postType == PostPagingSource.TYPE_MULTI_REDDIT
|
||||||
|
|| postType == PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT) {
|
||||||
bundle.putString(PostFragment.EXTRA_NAME, name);
|
bundle.putString(PostFragment.EXTRA_NAME, name);
|
||||||
} else if (postType == PostPagingSource.TYPE_SEARCH) {
|
} else if (postType == PostPagingSource.TYPE_SEARCH) {
|
||||||
bundle.putString(PostFragment.EXTRA_NAME, name);
|
bundle.putString(PostFragment.EXTRA_NAME, name);
|
||||||
|
@ -6,6 +6,12 @@ import android.content.SharedPreferences;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import com.google.gson.stream.JsonReader;
|
||||||
|
|
||||||
import net.lingala.zip4j.ZipFile;
|
import net.lingala.zip4j.ZipFile;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
@ -13,20 +19,33 @@ import org.apache.commons.io.FileUtils;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import ml.docilealligator.infinityforreddit.R;
|
import ml.docilealligator.infinityforreddit.R;
|
||||||
|
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
||||||
|
import ml.docilealligator.infinityforreddit.account.Account;
|
||||||
|
import ml.docilealligator.infinityforreddit.customtheme.CustomTheme;
|
||||||
|
import ml.docilealligator.infinityforreddit.multireddit.AnonymousMultiredditSubreddit;
|
||||||
|
import ml.docilealligator.infinityforreddit.multireddit.MultiReddit;
|
||||||
|
import ml.docilealligator.infinityforreddit.postfilter.PostFilter;
|
||||||
|
import ml.docilealligator.infinityforreddit.postfilter.PostFilterUsage;
|
||||||
|
import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData;
|
||||||
|
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData;
|
||||||
import ml.docilealligator.infinityforreddit.utils.CustomThemeSharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.CustomThemeSharedPreferencesUtils;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
public class RestoreSettings {
|
public class RestoreSettings {
|
||||||
public static void restoreSettings(Context context, Executor executor, Handler handler,
|
public static void restoreSettings(Context context, Executor executor, Handler handler,
|
||||||
ContentResolver contentResolver, Uri zipFileUri,
|
ContentResolver contentResolver, Uri zipFileUri,
|
||||||
|
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||||
SharedPreferences defaultSharedPreferences,
|
SharedPreferences defaultSharedPreferences,
|
||||||
SharedPreferences lightThemeSharedPreferences,
|
SharedPreferences lightThemeSharedPreferences,
|
||||||
SharedPreferences darkThemeSharedPreferences,
|
SharedPreferences darkThemeSharedPreferences,
|
||||||
@ -77,6 +96,7 @@ public class RestoreSettings {
|
|||||||
boolean result = true;
|
boolean result = true;
|
||||||
if (restoreFiles != null) {
|
if (restoreFiles != null) {
|
||||||
for (File f : restoreFiles) {
|
for (File f : restoreFiles) {
|
||||||
|
if (f.isFile()) {
|
||||||
if (f.getName().startsWith(SharedPreferencesUtils.DEFAULT_PREFERENCES_FILE)) {
|
if (f.getName().startsWith(SharedPreferencesUtils.DEFAULT_PREFERENCES_FILE)) {
|
||||||
result = result & importSharedPreferencsFromFile(defaultSharedPreferences, f.toString());
|
result = result & importSharedPreferencsFromFile(defaultSharedPreferences, f.toString());
|
||||||
} else if (f.getName().startsWith(CustomThemeSharedPreferencesUtils.LIGHT_THEME_SHARED_PREFERENCES_FILE)) {
|
} else if (f.getName().startsWith(CustomThemeSharedPreferencesUtils.LIGHT_THEME_SHARED_PREFERENCES_FILE)) {
|
||||||
@ -100,6 +120,50 @@ public class RestoreSettings {
|
|||||||
} else if (f.getName().startsWith(SharedPreferencesUtils.POST_HISTORY_SHARED_PREFERENCES_FILE)) {
|
} else if (f.getName().startsWith(SharedPreferencesUtils.POST_HISTORY_SHARED_PREFERENCES_FILE)) {
|
||||||
result = result & importSharedPreferencsFromFile(postHistorySharedPreferences, f.toString());
|
result = result & importSharedPreferencsFromFile(postHistorySharedPreferences, f.toString());
|
||||||
}
|
}
|
||||||
|
} else if (f.isDirectory() && f.getName().equals("database")) {
|
||||||
|
if (!redditDataRoomDatabase.accountDao().isAnonymousAccountInserted()) {
|
||||||
|
redditDataRoomDatabase.accountDao().insert(Account.getAnonymousAccount());
|
||||||
|
}
|
||||||
|
|
||||||
|
File anonymousSubscribedSubredditsFile = new File(f.getAbsolutePath() + "/anonymous_subscribed_subreddits.json");
|
||||||
|
File anonymousSubscribedUsersFile = new File(f.getAbsolutePath() + "/anonymous_subscribed_users.json");
|
||||||
|
File anonymousMultiredditsFile = new File(f.getAbsolutePath() + "/anonymous_multireddits.json");
|
||||||
|
File anonymousMultiredditSubredditsFile = new File(f.getAbsolutePath() + "/anonymous_multireddit_subreddits.json");
|
||||||
|
File customThemesFile = new File(f.getAbsolutePath() + "/custom_themes.json");
|
||||||
|
File postFiltersFile = new File(f.getAbsolutePath() + "/post_filters.json");
|
||||||
|
File postFilterUsageFile = new File(f.getAbsolutePath() + "/post_filter_usage.json");
|
||||||
|
|
||||||
|
if (anonymousSubscribedSubredditsFile.exists()) {
|
||||||
|
List<SubscribedSubredditData> anonymousSubscribedSubreddits = getListFromFile(anonymousSubscribedSubredditsFile, new TypeToken<List<SubscribedSubredditData>>() {}.getType());
|
||||||
|
redditDataRoomDatabase.subscribedSubredditDao().insertAll(anonymousSubscribedSubreddits);
|
||||||
|
}
|
||||||
|
if (anonymousSubscribedUsersFile.exists()) {
|
||||||
|
List<SubscribedUserData> anonymousSubscribedUsers = getListFromFile(anonymousSubscribedUsersFile, new TypeToken<List<SubscribedUserData>>() {}.getType());
|
||||||
|
redditDataRoomDatabase.subscribedUserDao().insertAll(anonymousSubscribedUsers);
|
||||||
|
}
|
||||||
|
if (anonymousMultiredditsFile.exists()) {
|
||||||
|
List<MultiReddit> anonymousMultireddits = getListFromFile(anonymousMultiredditsFile, new TypeToken<List<MultiReddit>>() {}.getType());
|
||||||
|
redditDataRoomDatabase.multiRedditDao().insertAll(anonymousMultireddits);
|
||||||
|
|
||||||
|
if (anonymousMultiredditSubredditsFile.exists()) {
|
||||||
|
List<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits = getListFromFile(anonymousMultiredditSubredditsFile, new TypeToken<List<AnonymousMultiredditSubreddit>>() {}.getType());
|
||||||
|
redditDataRoomDatabase.anonymousMultiredditSubredditDao().insertAll(anonymousMultiredditSubreddits);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (customThemesFile.exists()) {
|
||||||
|
List<CustomTheme> customThemes = getListFromFile(customThemesFile, new TypeToken<List<CustomTheme>>() {}.getType());
|
||||||
|
redditDataRoomDatabase.customThemeDao().insertAll(customThemes);
|
||||||
|
}
|
||||||
|
if (postFiltersFile.exists()) {
|
||||||
|
List<PostFilter> postFilters = getListFromFile(postFiltersFile, new TypeToken<List<PostFilter>>() {}.getType());
|
||||||
|
redditDataRoomDatabase.postFilterDao().insertAll(postFilters);
|
||||||
|
|
||||||
|
if (postFilterUsageFile.exists()) {
|
||||||
|
List<PostFilterUsage> postFilterUsage = getListFromFile(postFilterUsageFile, new TypeToken<List<PostFilterUsage>>() {}.getType());
|
||||||
|
redditDataRoomDatabase.postFilterUsageDao().insertAll(postFilterUsage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
handler.post(() -> restoreSettingsListener.failed(context.getString(R.string.restore_settings_failed_file_corrupted)));
|
handler.post(() -> restoreSettingsListener.failed(context.getString(R.string.restore_settings_failed_file_corrupted)));
|
||||||
@ -164,6 +228,18 @@ public class RestoreSettings {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static <T> List<T> getListFromFile(File file, Type dataType) {
|
||||||
|
try (JsonReader reader = new JsonReader(new FileReader(file))) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
return gson.fromJson(reader, dataType);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public interface RestoreSettingsListener {
|
public interface RestoreSettingsListener {
|
||||||
void success();
|
void success();
|
||||||
void failed(String errorMessage);
|
void failed(String errorMessage);
|
||||||
|
@ -13,6 +13,9 @@ public interface CustomThemeDao {
|
|||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
void insert(CustomTheme customTheme);
|
void insert(CustomTheme customTheme);
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
void insertAll(List<CustomTheme> customThemes);
|
||||||
|
|
||||||
@Query("SELECT * FROM custom_themes")
|
@Query("SELECT * FROM custom_themes")
|
||||||
LiveData<List<CustomTheme>> getAllCustomThemes();
|
LiveData<List<CustomTheme>> getAllCustomThemes();
|
||||||
|
|
||||||
|
@ -11,7 +11,10 @@ import java.util.List;
|
|||||||
@Dao
|
@Dao
|
||||||
public interface MultiRedditDao {
|
public interface MultiRedditDao {
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
void insert(MultiReddit MultiReddit);
|
void insert(MultiReddit multiReddit);
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
void insertAll(List<MultiReddit> multiReddits);
|
||||||
|
|
||||||
@Query("SELECT * FROM multi_reddits WHERE username = :username ORDER BY name COLLATE NOCASE ASC")
|
@Query("SELECT * FROM multi_reddits WHERE username = :username ORDER BY name COLLATE NOCASE ASC")
|
||||||
LiveData<List<MultiReddit>> getAllMultiReddits(String username);
|
LiveData<List<MultiReddit>> getAllMultiReddits(String username);
|
||||||
|
@ -14,6 +14,9 @@ public interface PostFilterDao {
|
|||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
void insert(PostFilter postFilter);
|
void insert(PostFilter postFilter);
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
void insertAll(List<PostFilter> postFilters);
|
||||||
|
|
||||||
@Query("DELETE FROM post_filter")
|
@Query("DELETE FROM post_filter")
|
||||||
void deleteAllPostFilters();
|
void deleteAllPostFilters();
|
||||||
|
|
||||||
|
@ -21,7 +21,10 @@ public interface PostFilterUsageDao {
|
|||||||
List<PostFilterUsage> getAllPostFilterUsageForBackup();
|
List<PostFilterUsage> getAllPostFilterUsageForBackup();
|
||||||
|
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
void insertPostFilterUsage(PostFilterUsage postFilterUsage);
|
void insert(PostFilterUsage postFilterUsage);
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
void insertAll(List<PostFilterUsage> postFilterUsageList);
|
||||||
|
|
||||||
@Delete
|
@Delete
|
||||||
void deletePostFilterUsage(PostFilterUsage postFilterUsage);
|
void deletePostFilterUsage(PostFilterUsage postFilterUsage);
|
||||||
|
@ -27,7 +27,7 @@ public class SavePostFilter {
|
|||||||
redditDataRoomDatabase.postFilterDao().insert(postFilter);
|
redditDataRoomDatabase.postFilterDao().insert(postFilter);
|
||||||
for (PostFilterUsage postFilterUsage : postFilterUsages) {
|
for (PostFilterUsage postFilterUsage : postFilterUsages) {
|
||||||
postFilterUsage.name = postFilter.name;
|
postFilterUsage.name = postFilter.name;
|
||||||
redditDataRoomDatabase.postFilterUsageDao().insertPostFilterUsage(postFilterUsage);
|
redditDataRoomDatabase.postFilterUsageDao().insert(postFilterUsage);
|
||||||
}
|
}
|
||||||
handler.post(savePostFilterListener::success);
|
handler.post(savePostFilterListener::success);
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,6 @@ import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
|||||||
public class SavePostFilterUsage {
|
public class SavePostFilterUsage {
|
||||||
public static void savePostFilterUsage(RedditDataRoomDatabase redditDataRoomDatabase, Executor executor,
|
public static void savePostFilterUsage(RedditDataRoomDatabase redditDataRoomDatabase, Executor executor,
|
||||||
PostFilterUsage postFilterUsage) {
|
PostFilterUsage postFilterUsage) {
|
||||||
executor.execute(() -> redditDataRoomDatabase.postFilterUsageDao().insertPostFilterUsage(postFilterUsage));
|
executor.execute(() -> redditDataRoomDatabase.postFilterUsageDao().insert(postFilterUsage));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -322,7 +322,7 @@ public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
|
|||||||
} else if (requestCode == SELECT_RESTORE_SETTINGS_DIRECTORY_REQUEST_CODE) {
|
} else if (requestCode == SELECT_RESTORE_SETTINGS_DIRECTORY_REQUEST_CODE) {
|
||||||
Uri uri = data.getData();
|
Uri uri = data.getData();
|
||||||
RestoreSettings.restoreSettings(activity, executor, new Handler(), activity.getContentResolver(), uri,
|
RestoreSettings.restoreSettings(activity, executor, new Handler(), activity.getContentResolver(), uri,
|
||||||
mSharedPreferences, lightThemeSharedPreferences, darkThemeSharedPreferences,
|
mRedditDataRoomDatabase, mSharedPreferences, lightThemeSharedPreferences, darkThemeSharedPreferences,
|
||||||
amoledThemeSharedPreferences, mSortTypeSharedPreferences, mPostLayoutSharedPreferences,
|
amoledThemeSharedPreferences, mSortTypeSharedPreferences, mPostLayoutSharedPreferences,
|
||||||
postFeedScrolledPositionSharedPreferences, mainActivityTabsSharedPreferences,
|
postFeedScrolledPositionSharedPreferences, mainActivityTabsSharedPreferences,
|
||||||
nsfwAndBlurringSharedPreferences, bottomAppBarSharedPreferences, postHistorySharedPreferences,
|
nsfwAndBlurringSharedPreferences, bottomAppBarSharedPreferences, postHistorySharedPreferences,
|
||||||
|
@ -13,6 +13,9 @@ public interface SubscribedSubredditDao {
|
|||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
void insert(SubscribedSubredditData subscribedSubredditData);
|
void insert(SubscribedSubredditData subscribedSubredditData);
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
void insertAll(List<SubscribedSubredditData> subscribedSubredditDataList);
|
||||||
|
|
||||||
@Query("DELETE FROM subscribed_subreddits")
|
@Query("DELETE FROM subscribed_subreddits")
|
||||||
void deleteAllSubscribedSubreddits();
|
void deleteAllSubscribedSubreddits();
|
||||||
|
|
||||||
|
@ -13,6 +13,9 @@ public interface SubscribedUserDao {
|
|||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
void insert(SubscribedUserData subscribedUserData);
|
void insert(SubscribedUserData subscribedUserData);
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
void insertAll(List<SubscribedUserData> subscribedUserDataList);
|
||||||
|
|
||||||
@Query("SELECT * FROM subscribed_users WHERE username = :accountName COLLATE NOCASE ORDER BY name COLLATE NOCASE ASC")
|
@Query("SELECT * FROM subscribed_users WHERE username = :accountName COLLATE NOCASE ORDER BY name COLLATE NOCASE ASC")
|
||||||
LiveData<List<SubscribedUserData>> getAllSubscribedUsers(String accountName);
|
LiveData<List<SubscribedUserData>> getAllSubscribedUsers(String accountName);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user