diff --git a/README.md b/README.md index fed0b6a1d..4b0455001 100644 --- a/README.md +++ b/README.md @@ -70,10 +70,9 @@ If you encounter issues or wish to help improve the project, please refer to the > [!IMPORTANT] > Bug reports are only accepted if they are based on the **latest debug build**. > -> *Notice for Chinese speakers:* +> *致中文用户:* > -> 为了提高沟通效率,本项目仅接受英文 Issue。请使用 [DeepL](https://www.deepl.com/zh/translator) 或其他翻译工具提交您的反馈。 - +> 为保障问题沟通与处理效率,本项目仅受理英文 Issue。请使用 [DeepL](https://www.deepl.com/zh/translator) 或其他翻译工具如各种AI将反馈内容译为英文后提交。 --- ### Developer Resources diff --git a/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java b/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java index bb4db3271..cd1ad07ee 100644 --- a/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java +++ b/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java @@ -77,13 +77,16 @@ public boolean upgradable(long versionCode, String versionName) { private final Set listeners = ConcurrentHashMap.newKeySet(); private boolean repoLoaded = false; private static final String originRepoUrl = "https://modules.lsposed.org/"; - private static final String backupRepoUrl = "https://modules-blogcdn.lsposed.org/"; - - private static final String secondBackupRepoUrl = "https://modules-cloudflare.lsposed.org/"; + private static final String backupRepoUrl = "https://backup.modules.lsposed.org/"; private static String repoUrl = originRepoUrl; private final Resources resources = App.getInstance().getResources(); private final String[] channels = resources.getStringArray(R.array.update_channel_values); + private String getPreferredRepoUrl() { + var source = App.getPreferences().getString("repo_source", "SOURCE_ORIGIN"); + return "SOURCE_BACKUP".equals(source) ? backupRepoUrl : originRepoUrl; + } + public boolean isRepoLoaded() { return repoLoaded; } @@ -97,6 +100,11 @@ public static synchronized RepoLoader getInstance() { } synchronized public void loadRemoteData() { + loadRemoteData(getPreferredRepoUrl(), true); + } + + synchronized private void loadRemoteData(String url, boolean allowFallback) { + repoUrl = url; repoLoaded = false; try { try (var response = App.getOkHttpClient().newCall(new Request.Builder().url(repoUrl + "modules.json").build()).execute()) { @@ -122,12 +130,8 @@ synchronized public void loadRemoteData() { for (RepoListener listener : listeners) { listener.onThrowable(e); } - if (repoUrl.equals(originRepoUrl)) { - repoUrl = backupRepoUrl; - loadRemoteData(); - } else if (repoUrl.equals(backupRepoUrl)) { - repoUrl = secondBackupRepoUrl; - loadRemoteData(); + if (allowFallback) { + loadRemoteData(url.equals(originRepoUrl) ? backupRepoUrl : originRepoUrl, false); } } } @@ -248,16 +252,18 @@ else if (module.getLatestBetaReleaseTime() != null) } public void loadRemoteReleases(String packageName) { - App.getOkHttpClient().newCall(new Request.Builder().url(String.format(repoUrl + "module/%s.json", packageName)).build()).enqueue(new Callback() { + loadRemoteReleases(packageName, repoUrl, true); + } + + private void loadRemoteReleases(String packageName, String url, boolean allowFallback) { + App.getOkHttpClient().newCall(new Request.Builder().url(String.format(url + "module/%s.json", packageName)).build()).enqueue(new Callback() { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { Log.e(App.TAG, call.request().url() + e.getMessage()); - if (repoUrl.equals(originRepoUrl)) { - repoUrl = backupRepoUrl; - loadRemoteReleases(packageName); - } else if (repoUrl.equals(backupRepoUrl)) { - repoUrl = secondBackupRepoUrl; - loadRemoteReleases(packageName); + if (allowFallback) { + String nextUrl = url.equals(originRepoUrl) ? backupRepoUrl : originRepoUrl; + repoUrl = nextUrl; + loadRemoteReleases(packageName, nextUrl, false); } else { for (RepoListener listener : listeners) { listener.onThrowable(e); diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 21d4339ec..ccd29c449 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -202,6 +202,9 @@ إشعارات الحالة إظهار إشعار يمكنه فتح مدير الطفيليات قناة التحديث + مصدر المستودع + الافتراضي + احتياطي مستقر تجريبي البناء الليلي diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3e0991f7f..da7407e30 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -198,6 +198,9 @@ Notificación de estado Mostrar una notificación que puede abrir el gestor de parásitos Actualizar canal + Fuente del repositorio + Predeterminado + Respaldo Estable Beta Construcción nocturna diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index da73d619e..d20926a6c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -200,6 +200,9 @@ JingMatrix Notification d\'état Afficher une notification qui peut ouvrir le gestionnaire de parasites Canal de mise à jour + Source du dépôt + Par défaut + Secours Stable Bêta Alpha diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e73c850f8..48a72719d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -202,6 +202,9 @@ Уведомление о состоянии Показывать уведомление, через которое можно открыть parasitic-менеджер (т. е. LSPosed в скрытом режиме) Канал обновлений + Источник репозитория + По умолчанию + Резервный Стабильные версии Бета-версии Еженочные версии diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2f3fc89c9..c9365b54c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -197,6 +197,9 @@ JingMatrix 状态通知 显示一个通知以打开寄生管理器 模块更新通道 + 仓库来源 + 默认 + 备用 稳定版 测试版 每夜版 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 3e2ed8526..3070ff76b 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -196,6 +196,9 @@ 狀態通知 顯示通知以便開啟寄生管理員 更新頻道 + 倉庫來源 + 預設 + 備援 穩定版 測試版 每夜構建 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 82de0478d..9da25af6a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -192,6 +192,9 @@ 狀態通知 顯示通知以便開啟寄生管理員 更新通道 + 倉庫來源 + 預設 + 備援 穩定版 測試版 每夜構建 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 2ddb9495a..29f8d6223 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -88,4 +88,14 @@ CHANNEL_NIGHTLY + + @string/repo_source_origin + @string/repo_source_backup + + + + SOURCE_ORIGIN + SOURCE_BACKUP + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8d3c4dbb2..ef26b63d1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -198,6 +198,9 @@ Status Notification Show a notification that can open parasitic manager Update channel + Repository source + Default + Backup Stable Beta Nightly build diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml index 35511c6b3..ba87a1259 100644 --- a/app/src/main/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -116,6 +116,14 @@ android:key="update_channel" android:summary="%s" android:title="@string/settings_update_channel" /> +