diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java index 4675e76bf..0df5f372b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java @@ -17,11 +17,13 @@ package com.hippo.ehviewer.ui.fragment; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.util.Log; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; @@ -38,6 +40,11 @@ import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.EhDB; import com.hippo.ehviewer.GetText; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.Settings; +import com.hippo.ehviewer.client.EhClient; +import com.hippo.ehviewer.client.EhRequest; +import com.hippo.ehviewer.client.data.FavListUrlBuilder; +import com.hippo.ehviewer.client.parser.FavoritesParser; import com.hippo.ehviewer.ui.scene.BaseScene; import com.hippo.util.ExceptionUtils; import com.hippo.util.IoThreadPoolExecutor; @@ -52,6 +59,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Arrays; +import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -63,6 +71,7 @@ public class AdvancedFragment extends BasePreferenceFragment { private static final String KEY_IMPORT_DATA = "import_data"; private static final String KEY_EXPORT_DATA = "export_data"; private static final String KEY_OPEN_BY_DEFAULT = "open_by_default"; + private static final String KEY_BACKUP_FAVORITE = "backup_favorite"; ActivityResultLauncher exportLauncher = registerForActivityResult( new ActivityResultContracts.CreateDocument(), @@ -232,6 +241,7 @@ public class AdvancedFragment extends BasePreferenceFragment { Preference importData = findPreference(KEY_IMPORT_DATA); Preference exportData = findPreference(KEY_EXPORT_DATA); Preference openByDefault = findPreference(KEY_OPEN_BY_DEFAULT); + Preference backupFavorite = findPreference(KEY_BACKUP_FAVORITE); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { openByDefault.setVisible(false); @@ -243,6 +253,7 @@ public class AdvancedFragment extends BasePreferenceFragment { clearMemoryCache.setOnPreferenceClickListener(this); importData.setOnPreferenceClickListener(this); exportData.setOnPreferenceClickListener(this); + backupFavorite.setOnPreferenceClickListener(this); appLanguage.setOnPreferenceChangeListener(this); } @@ -289,10 +300,62 @@ public class AdvancedFragment extends BasePreferenceFragment { startActivity(intent); } return true; + } else if (KEY_BACKUP_FAVORITE.equals(key)) { + try { + showTip(R.string.backup_favorite_start, BaseScene.LENGTH_SHORT); + backupFavorite(); + } catch (Exception e) { + ExceptionUtils.throwIfFatal(e); + showTip(R.string.backup_favorite_failed, BaseScene.LENGTH_SHORT); + } + return true; } return false; } + private void backupFavorite() { + AtomicInteger page = new AtomicInteger(0); + Context context = requireContext(); + Activity activity = requireActivity(); + EhClient mClient = EhApplication.getEhClient(context); + FavListUrlBuilder favListUrlBuilder = new FavListUrlBuilder(); + favListUrlBuilder.setIndex(page.get()); + + EhRequest request = new EhRequest(); + request.setMethod(EhClient.METHOD_GET_FAVORITES); + request.setCallback(new EhClient.Callback() { + @Override + public void onSuccess(Object result) { + try { + FavoritesParser.Result result1 = (FavoritesParser.Result) result; + EhDB.putLocalFavorites(result1.galleryInfoList); + Log.d("LocalFavorites", "now backup page " + page.get()); + if (!result1.galleryInfoList.isEmpty()) { + favListUrlBuilder.setIndex(page.incrementAndGet()); + request.setArgs(favListUrlBuilder.build(), Settings.getShowJpnTitle()); + mClient.execute(request); + } else { + showTip(R.string.backup_favorite_success, BaseScene.LENGTH_SHORT); + } + } catch (Exception e) { + showTip(R.string.backup_favorite_failed, BaseScene.LENGTH_SHORT); + } + } + + @Override + public void onFailure(Exception e) { + showTip(R.string.backup_favorite_failed, BaseScene.LENGTH_SHORT); + } + + @Override + public void onCancel() { + showTip(R.string.backup_favorite_failed, BaseScene.LENGTH_SHORT); + } + }); + request.setArgs(favListUrlBuilder.build(), Settings.getShowJpnTitle()); + mClient.execute(request); + } + @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 670c43920..bfe64516a 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -769,4 +769,9 @@ 密码错误 密码不能为空 详情模式下缩略图大小 + 备份收藏列表 + 备份云端收藏列表到本地 + 备份收藏列表失败 + 备份收藏列表成功 + 正在备份收藏列表 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a93b6268d..45070e242 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -833,4 +833,9 @@ Password Wrong Password can\'t be empty Thumb size in thumb mode + Backup favorite list + Backup remote favorite list to local + Backup favorite list failed + backup favorite list success + Now starting backup favorite list diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml index 1f35ef6d7..c8121c6c3 100644 --- a/app/src/main/res/xml/advanced_settings.xml +++ b/app/src/main/res/xml/advanced_settings.xml @@ -109,4 +109,10 @@ android:title="@string/open_by_default" app:iconSpaceReserved="false" /> + +