diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 90f7258..1867e4c 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "استخدام خدمة مقدمة للتحقق من التحديثات (أكثر موثوقية وتستهلك طاقة أكبر)", "fgServiceNotice": "هذا الإشعار مطلوب للتحقق من التحديث في الخلفية (يمكن إخفاؤه في إعدادات نظام التشغيل)", "excludeSecrets": "استبعاد الأسرار", + "GHReqPrefix": "مثيل \"sky22333/hubproxy\" لطلبات GitHub", "removeAppQuestion": { "one": "إزالة التطبيق؟", "other": "إزالة التطبيقات؟" diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 2a6143b..8641173 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "excludeSecrets": "Exclude secrets", + "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "removeAppQuestion": { "one": "Želite li ukloniti aplikaciju?", "other": "Želite li ukloniti aplikacije?" diff --git a/assets/translations/ca.json b/assets/translations/ca.json index d640ba6..4b7d5d1 100644 --- a/assets/translations/ca.json +++ b/assets/translations/ca.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Usa el servei d'Obtainium en primer pla per comprovar les actualitzacions (és més fiable però consumeix més bateria)", "fgServiceNotice": "Aquesta notificació és necessària per comprovar les actualitzacions en segon pla (la pots ocultar als paràmetres del Sistema Operatiu)", "excludeSecrets": "Exclude secrets", + "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "removeAppQuestion": { "one": "¿Suprimeixo l'aplicació?", "other": "¿Suprimeixo les aplicacions?" diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 684e8c2..5f81c07 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Použít službu v popředí pro kontrolu aktualizací (spolehlivější, spotřebovává více energie)", "fgServiceNotice": "Toto oznámení je nutné pro kontrolu aktualizací na pozadí (lze jej skrýt v nastavení systému)", "excludeSecrets": "Vyloučit tajemství", + "GHReqPrefix": "instance 'sky22333/hubproxy' pro požadavky GitHubu", "removeAppQuestion": { "one": "Odstranit aplikaci?", "other": "Odstranit aplikace?" diff --git a/assets/translations/da.json b/assets/translations/da.json index b106a87..059a7e4 100644 --- a/assets/translations/da.json +++ b/assets/translations/da.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Brug en forgrundstjeneste til opdateringskontrol (mere pålidelig, bruger mere strøm)", "fgServiceNotice": "Denne meddelelse er nødvendig for baggrundsopdateringskontrol (den kan skjules i OS-indstillingerne).", "excludeSecrets": "Udeluk hemmeligheder", + "GHReqPrefix": "'sky22333/hubproxy'-instans til GitHub-anmodninger", "removeAppQuestion": { "one": "Fjern app?", "other": "Fjern apps?" diff --git a/assets/translations/de.json b/assets/translations/de.json index 26cdda9..0a85f31 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Aktualisierungsprüfung im Vordergrund durchführen (zuverlässiger, verbraucht mehr Strom)", "fgServiceNotice": "Diese Benachrichtigung ist für die Prüfung von Updates im Hintergrund erforderlich (sie kann in den Betriebssystemeinstellungen ausgeblendet werden)", "excludeSecrets": "Geheimnisse ausschließen", + "GHReqPrefix": "sky22333/hubproxy'-Instanz für GitHub-Anfragen", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en-EO.json b/assets/translations/en-EO.json index 17702dc..060db6e 100644 --- a/assets/translations/en-EO.json +++ b/assets/translations/en-EO.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "excludeSecrets": "Exclude secrets", + "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "removeAppQuestion": { "one": "Forigi la aplikaĵon?", "other": "Forigi la aplikaĵojn?" diff --git a/assets/translations/en.json b/assets/translations/en.json index 5d58f96..0fd891a 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "excludeSecrets": "Exclude secrets", + "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "removeAppQuestion": { "one": "Remove app?", "other": "Remove apps?" diff --git a/assets/translations/es.json b/assets/translations/es.json index 9136a67..bf6da72 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Usar un servicio en primer plano para comprobar las actualizaciones (más fiable, consume más energía).", "fgServiceNotice": "Esta notificación es necesaria para la comprobación de actualizaciones en segundo plano (puede ocultarse en la configuración del sistema operativo).", "excludeSecrets": "Excluir secretos", + "GHReqPrefix": "Instancia \"sky22333/hubproxy\" para las solicitudes de GitHub", "removeAppQuestion": { "one": "¿Eliminar aplicación?", "other": "¿Eliminar aplicaciones?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 7a46917..902c409 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "excludeSecrets": "Exclude secrets", + "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index f3675c5..6b8fc5b 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Utiliser un service de premier plan pour la vérification des mises à jour (plus fiable, consomme plus d'énergie)", "fgServiceNotice": "Cette notification est nécessaire pour la vérification des mises à jour en arrière-plan (elle peut être masquée dans les paramètres du système d'exploitation).", "excludeSecrets": "Exclure les secrets", + "GHReqPrefix": "instance 'sky22333/hubproxy' pour les requêtes GitHub", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index 22857a0..cf858ac 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Előtér-szolgáltatás használata a frissítések ellenőrzéséhez (megbízhatóbb, de több energiát fogyaszt)", "fgServiceNotice": "Ez az értesítés a háttérben történő frissítésellenőrzéshez szükséges (a rendszer beállításaiban elrejthető).", "excludeSecrets": "Érzékeny adatok (például: személyes hozzáférési tokenek) kihagyása", + "GHReqPrefix": "'sky22333/hubproxy' példány a GitHub kérésekhez", "removeAppQuestion": { "one": "Eltávolítja az alkalmazást?", "other": "Eltávolítja az alkalmazásokat?" diff --git a/assets/translations/id.json b/assets/translations/id.json index c85da4c..ab90b0e 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Gunakan layanan latar depan untuk pemeriksaan pembaruan (lebih dapat diandalkan, menghabiskan lebih banyak daya)", "fgServiceNotice": "Pemberitahuan ini diperlukan untuk pemeriksaan pembaruan latar belakang (dapat disembunyikan dalam pengaturan OS)", "excludeSecrets": "Mengecualikan rahasia", + "GHReqPrefix": "Instance 'sky22333/hubproxy' untuk permintaan GitHub", "removeAppQuestion": { "one": "Hapus aplikasi?", "other": "Hapus aplikasi?" diff --git a/assets/translations/it.json b/assets/translations/it.json index 02afc03..50c051e 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Utilizzare un servizio in primo piano per il controllo degli aggiornamenti (più affidabile, consuma più energia)", "fgServiceNotice": "Questa notifica è necessaria per il controllo degli aggiornamenti in background (può essere nascosta nelle impostazioni del sistema operativo).", "excludeSecrets": "Escludere i segreti", + "GHReqPrefix": "istanza 'sky22333/hubproxy' per le richieste a GitHub", "removeAppQuestion": { "one": "Rimuovere l'app?", "other": "Rimuovere le app?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index c7d64c6..64a4997 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)", "fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要です(OSの設定で非表示にできます)。", "excludeSecrets": "シークレットを除く", + "GHReqPrefix": "GitHub リクエスト用の 'sky22333/hubproxy' インスタンス", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/ko.json b/assets/translations/ko.json index f7e6b3d..6ec4cda 100644 --- a/assets/translations/ko.json +++ b/assets/translations/ko.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "업데이트 확인을 위해 포그라운드 서비스 사용(안정성 향상, 전력 소비량 증가)", "fgServiceNotice": "이 알림은 백그라운드 업데이트 확인에 필요합니다(OS 설정에서 숨길 수 있음).", "excludeSecrets": "비밀 제외", + "GHReqPrefix": "GitHub 요청을 위한 'sky22333/hubproxy' 인스턴스", "removeAppQuestion": { "one": "앱을 제거하시겠습니까?", "other": "앱을 제거하시겠습니까?" diff --git a/assets/translations/ml.json b/assets/translations/ml.json index 932ae23..93dae6f 100644 --- a/assets/translations/ml.json +++ b/assets/translations/ml.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "excludeSecrets": "Exclude secrets", + "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "removeAppQuestion": { "one": "ആപ്പ് നീക്കം ചെയ്യണോ?", "other": "ആപ്പുകൾ നീക്കം ചെയ്യണോ?" diff --git a/assets/translations/nl.json b/assets/translations/nl.json index ea88d61..cfe1d7d 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Gebruik een voorgronddienst voor het controleren van updates (betrouwbaarder, verbruikt meer stroom)", "fgServiceNotice": "Deze melding is nodig voor het controleren van updates op de achtergrond (kan worden verborgen in de OS-instellingen)", "excludeSecrets": "Geheimen uitsluiten", + "GHReqPrefix": "'sky22333/hubproxy' instantie voor GitHub verzoeken", "removeAppQuestion": { "one": "App verwijderen?", "other": "Apps verwijderen?" diff --git a/assets/translations/pl.json b/assets/translations/pl.json index f792638..81e609f 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Używanie usługi pierwszoplanowej do sprawdzania aktualizacji (bardziej niezawodne, zużywa więcej energii)", "fgServiceNotice": "To powiadomienie jest wymagane do sprawdzania aktualizacji w tle (można je ukryć w ustawieniach systemu operacyjnego).", "excludeSecrets": "Wyklucz sekrety", + "GHReqPrefix": "Instancja \"sky22333/hubproxy\" dla żądań GitHub", "removeAppQuestion": { "one": "Usunąć aplikację?", "few": "Usunąć aplikacje?", diff --git a/assets/translations/pt-BR.json b/assets/translations/pt-BR.json index 19b01a5..cb385b5 100644 --- a/assets/translations/pt-BR.json +++ b/assets/translations/pt-BR.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Usar um serviço em primeiro plano para verificação de atualizações (mais confiável, consome mais energia)", "fgServiceNotice": "Essa notificação é necessária para a verificação de atualizações em segundo plano (ela pode ser ocultada nas configurações do sistema operacional)", "excludeSecrets": "Excluir segredos", + "GHReqPrefix": "Instância \"sky22333/hubproxy\" para solicitações do GitHub", "removeAppQuestion": { "one": "Remover app?", "other": "Remover apps?" diff --git a/assets/translations/pt.json b/assets/translations/pt.json index adbe671..789bcab 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Utilizar um serviço em primeiro plano para verificação de actualizações (mais fiável, consome mais energia)", "fgServiceNotice": "Esta notificação é necessária para a verificação de actualizações em segundo plano (pode ser ocultada nas definições do SO)", "excludeSecrets": "Excluir segredos", + "GHReqPrefix": "Instância 'sky22333/hubproxy' para pedidos de GitHub", "removeAppQuestion": { "one": "Remover aplicação?", "other": "Remover aplicações?" diff --git a/assets/translations/ru.json b/assets/translations/ru.json index dd8974e..d14f5df 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Использовать приоритетную службу для проверки обновлений (надёжнее, энергозатратнее)", "fgServiceNotice": "Это уведомление необходимо для фоновой проверки обновлений (оно может быть скрыто в настройках ОС)", "excludeSecrets": "Исключить секреты", + "GHReqPrefix": "Экземпляр 'sky22333/hubproxy' для запросов на GitHub", "removeAppQuestion": { "one": "Удалить приложение?", "other": "Удалить приложения?" diff --git a/assets/translations/sv.json b/assets/translations/sv.json index a51ed1a..83ef1f0 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Använd en förgrundstjänst för uppdateringskontroll (mer tillförlitlig, förbrukar mer ström)", "fgServiceNotice": "Detta meddelande krävs för bakgrundsuppdateringskontroll (det kan döljas i OS-inställningarna)", "excludeSecrets": "Utesluta hemligheter", + "GHReqPrefix": "Instansen \"sky22333/hubproxy\" för GitHub-förfrågningar", "removeAppQuestion": { "one": "Ta Bort App?", "other": "Ta Bort Appar?" diff --git a/assets/translations/tr.json b/assets/translations/tr.json index b33bb18..87450de 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Güncelleme denetimi için bir ön plan hizmeti kullanın (daha güvenilir, daha fazla güç tüketir)", "fgServiceNotice": "Bu bildirim arka planda güncelleme kontrolü için gereklidir (işletim sistemi ayarlarından gizlenebilir)", "excludeSecrets": "Sırları hariç tut", + "GHReqPrefix": "GitHub istekleri için 'sky22333/hubproxy' örneği", "removeAppQuestion": { "one": "Uygulamayı Kaldır?", "other": "Uygulamaları Kaldır?" diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 4199541..f634688 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Використовуйте службу переднього плану для перевірки оновлень (надійніша, споживає більше енергії)", "fgServiceNotice": "Це сповіщення необхідне для фонової перевірки оновлень (його можна приховати в налаштуваннях ОС)", "excludeSecrets": "Виключити секрети", + "GHReqPrefix": "екземпляр 'sky22333/hubproxy' для запитів на GitHub", "removeAppQuestion": { "one": "Видалити застосунок?", "other": "Видалити застосунки?" diff --git a/assets/translations/vi.json b/assets/translations/vi.json index 270cc72..2933d6a 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Sử dụng dịch vụ nền trước để kiểm tra cập nhật (đáng tin cậy hơn, tiêu tốn nhiều pin hơn)", "fgServiceNotice": "Thông báo này là bắt buộc để kiểm tra cập nhật nền (có thể ẩn trong cài đặt hệ điều hành).", "excludeSecrets": "Loại trừ thông tin bí mật", + "GHReqPrefix": "Thực thể 'sky22333/hubproxy' cho các yêu cầu GitHub", "removeAppQuestion": { "one": "Gỡ ứng dụng?", "other": "Gỡ ứng dụng?" diff --git a/assets/translations/zh-Hant-TW.json b/assets/translations/zh-Hant-TW.json index a8eb1d1..da52339 100644 --- a/assets/translations/zh-Hant-TW.json +++ b/assets/translations/zh-Hant-TW.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "excludeSecrets": "Exclude secrets", + "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "removeAppQuestion": { "one": "移除應用程式?", "other": "移除應用程式?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 296e9c7..e94b4de 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -336,6 +336,7 @@ "foregroundServiceExplanation": "使用前台服务检查更新(更稳定,但也更耗电)", "fgServiceNotice": "后台检查更新时需要此通知(可在操作系统设置中隐藏)", "excludeSecrets": "排除机密", + "GHReqPrefix": "用于 GitHub 请求的 \"sky22333/hubproxy \"实例", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/app_sources/apkcombo.dart b/lib/app_sources/apkcombo.dart index 71fc596..37f6b2b 100644 --- a/lib/app_sources/apkcombo.dart +++ b/lib/app_sources/apkcombo.dart @@ -82,13 +82,13 @@ class APKCombo extends AppSource { } @override - Future apkUrlPrefetchModifier( - String apkUrl, + Future assetUrlPrefetchModifier( + String assetUrl, String standardUrl, Map additionalSettings, ) async { var freshURLs = await getApkUrls(standardUrl, additionalSettings); - var path2Match = Uri.parse(apkUrl).path; + var path2Match = Uri.parse(assetUrl).path; for (var url in freshURLs) { if (Uri.parse(url.value).path == path2Match) { return url.value; diff --git a/lib/app_sources/github.dart b/lib/app_sources/github.dart index fa15b1a..7823517 100644 --- a/lib/app_sources/github.dart +++ b/lib/app_sources/github.dart @@ -45,6 +45,45 @@ class GitHub extends AppSource { const SizedBox(height: 4), ], ), + GeneratedFormTextField( + 'GHReqPrefix', + label: tr('GHReqPrefix'), + hint: 'gh-proxy.com', + required: false, + additionalValidators: [ + (value) { + try { + if (Uri.parse( + 'https://${value}/api.github.com', + ).scheme.isNotEmpty) { + throw true; + } + } catch (e) { + return tr('invalidInput'); + } + return null; + }, + ], + belowWidgets: [ + const SizedBox(height: 4), + GestureDetector( + onTap: () { + launchUrlString( + 'https://github.com/sky22333/hubproxy', + mode: LaunchMode.externalApplication, + ); + }, + child: Text( + tr('about'), + style: const TextStyle( + decoration: TextDecoration.underline, + fontSize: 12, + ), + ), + ), + const SizedBox(height: 4), + ], + ), ]; additionalSourceAppSpecificSettingFormItems = [ @@ -270,6 +309,18 @@ class GitHub extends AppSource { return null; } + @override + Future generalReqPrefetchModifier( + String reqUrl, + Map additionalSettings, + ) async { + if ((additionalSettings['GHReqPrefix'] as String? ?? '').isNotEmpty) { + var uri = Uri.parse(reqUrl); + return 'https://${additionalSettings['GHReqPrefix']}/${uri.toString().substring('https://'.length)}'; + } + return reqUrl; + } + Future getAPIHost(Map additionalSettings) async => 'https://api.${hosts[0]}'; @@ -289,6 +340,12 @@ class GitHub extends AppSource { Map additionalSettings, { Function(Response)? onHttpErrorCode, }) async { + SettingsProvider settingsProvider = SettingsProvider(); + await settingsProvider.initializeSettings(); + var sourceConfigSettingValues = await getSourceConfigValues( + additionalSettings, + settingsProvider, + ); bool includePrereleases = additionalSettings['includePrereleases'] == true; bool fallbackToOlderReleases = additionalSettings['fallbackToOlderReleases'] == true; @@ -344,6 +401,7 @@ class GitHub extends AppSource { var url = !e['name'].toString().toLowerCase().endsWith('.apk') ? (e['browser_download_url'] ?? e['url']) : (e['url'] ?? e['browser_download_url']); + url = undoGHProxyMod(url, sourceConfigSettingValues); e['final_url'] = (e['name'] != null) && (url != null) ? MapEntry(e['name'] as String, url as String) : const MapEntry('', ''); @@ -522,7 +580,10 @@ class GitHub extends AppSource { allAssetUrls.add( MapEntry( (targetRelease['version'] ?? 'source') + '.tar.gz', - targetRelease['tarball_url'], + undoGHProxyMod( + targetRelease['tarball_url'], + sourceConfigSettingValues, + ), ), ); } @@ -530,7 +591,10 @@ class GitHub extends AppSource { allAssetUrls.add( MapEntry( (targetRelease['version'] ?? 'source') + '.zip', - targetRelease['zipball_url'], + undoGHProxyMod( + targetRelease['zipball_url'], + sourceConfigSettingValues, + ), ), ); } @@ -652,12 +716,23 @@ class GitHub extends AppSource { } } + undoGHProxyMod( + String reqUrl, + Map sourceConfigSettingValues, + ) => reqUrl.replaceFirst( + 'https://${sourceConfigSettingValues['GHReqPrefix']}/', + '', + ); + @override Future>> search( String query, { Map querySettings = const {}, }) async { - return searchCommon( + var sp = SettingsProvider(); + await sp.initializeSettings(); + var sourceConfigSettingValues = await getSourceConfigValues({}, sp); + var results = await searchCommon( query, '${await getAPIHost({})}/search/repositories?q=${Uri.encodeQueryComponent(query)}&per_page=100', 'items', @@ -666,6 +741,15 @@ class GitHub extends AppSource { }, querySettings: querySettings, ); + if ((sourceConfigSettingValues['GHReqPrefix'] ?? '').isNotEmpty) { + Map> results2 = {}; + results.forEach((k, v) { + results2[undoGHProxyMod(k, sourceConfigSettingValues)] = v; + }); + return results2; + } else { + return results; + } } void rateLimitErrorCheck(Response res) { diff --git a/lib/app_sources/gitlab.dart b/lib/app_sources/gitlab.dart index 14cc009..18617f1 100644 --- a/lib/app_sources/gitlab.dart +++ b/lib/app_sources/gitlab.dart @@ -129,14 +129,14 @@ class GitLab extends AppSource { } @override - Future apkUrlPrefetchModifier( - String apkUrl, + Future assetUrlPrefetchModifier( + String assetUrl, String standardUrl, Map additionalSettings, ) async { String? PAT = await getPATIfAny(hostChanged ? additionalSettings : {}); String optionalAuth = (PAT != null) ? 'private_token=$PAT' : ''; - return '$apkUrl${(Uri.parse(apkUrl).query.isEmpty ? '?' : '&')}$optionalAuth'; + return '$assetUrl${(Uri.parse(assetUrl).query.isEmpty ? '?' : '&')}$optionalAuth'; } @override diff --git a/lib/app_sources/uptodown.dart b/lib/app_sources/uptodown.dart index 7315675..63b4678 100644 --- a/lib/app_sources/uptodown.dart +++ b/lib/app_sources/uptodown.dart @@ -124,12 +124,12 @@ class Uptodown extends AppSource { } @override - Future apkUrlPrefetchModifier( - String apkUrl, + Future assetUrlPrefetchModifier( + String assetUrl, String standardUrl, Map additionalSettings, ) async { - var res = await sourceRequest(apkUrl, additionalSettings); + var res = await sourceRequest(assetUrl, additionalSettings); if (res.statusCode != 200) { throw getObtainiumHttpError(res); } diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index 586c77f..abea2cd 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -319,13 +319,24 @@ class _SettingsPageState extends State { if (e.sourceConfigSettingFormItems.isNotEmpty) { return GeneratedForm( items: e.sourceConfigSettingFormItems.map((e) { - e.defaultValue = settingsProvider.getSettingString(e.key); + if (e is GeneratedFormSwitch) { + e.defaultValue = settingsProvider.getSettingBool(e.key); + } else { + e.defaultValue = settingsProvider.getSettingString(e.key); + } return [e]; }).toList(), onValueChanges: (values, valid, isBuilding) { if (valid && !isBuilding) { values.forEach((key, value) { - settingsProvider.setSettingString(key, value); + var formItem = e.sourceConfigSettingFormItems + .where((i) => i.key == key) + .firstOrNull; + if (formItem is GeneratedFormSwitch) { + settingsProvider.setSettingBool(key, value == true); + } else { + settingsProvider.setSettingString(key, value ?? ''); + } }); } }, diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index e61c89a..299d5d3 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -606,10 +606,20 @@ class AppsProvider with ChangeNotifier { app.url, overrideSource: app.overrideSource, ); - String downloadUrl = await source.apkUrlPrefetchModifier( - app.apkUrls[app.preferredApkIndex].value, + var additionalSettingsPlusSourceConfig = { + ...app.additionalSettings, + ...(await source.getSourceConfigValues( + app.additionalSettings, + settingsProvider, + )), + }; + String downloadUrl = await source.assetUrlPrefetchModifier( + await source.generalReqPrefetchModifier( + app.apkUrls[app.preferredApkIndex].value, + additionalSettingsPlusSourceConfig, + ), app.url, - app.additionalSettings, + additionalSettingsPlusSourceConfig, ); var notif = DownloadNotification(app.finalName, 100); notificationsProvider?.cancel(notif.id); @@ -1324,15 +1334,26 @@ class AppsProvider with ChangeNotifier { evenIfSingleChoice: true, ); if (tempFileUrl != null) { + var s = SourceProvider().getSource( + apps[id]!.app.url, + overrideSource: apps[id]!.app.overrideSource, + ); + var additionalSettingsPlusSourceConfig = { + ...apps[id]!.app.additionalSettings, + ...(await s.getSourceConfigValues( + apps[id]!.app.additionalSettings, + settingsProvider, + )), + }; fileUrl = MapEntry( tempFileUrl.key, - await (SourceProvider().getSource( + await s.assetUrlPrefetchModifier( + await s.generalReqPrefetchModifier( + tempFileUrl.value, + additionalSettingsPlusSourceConfig, + ), apps[id]!.app.url, - overrideSource: apps[id]!.app.overrideSource, - )).apkUrlPrefetchModifier( - tempFileUrl.value, - apps[id]!.app.url, - apps[id]!.app.additionalSettings, + additionalSettingsPlusSourceConfig, ), ); } diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 121ad1e..43f4b70 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -249,6 +249,15 @@ class SettingsProvider with ChangeNotifier { notifyListeners(); } + bool? getSettingBool(String settingId) { + return prefs?.getBool(settingId) ?? false; + } + + void setSettingBool(String settingId, bool value) { + prefs?.setBool(settingId, value); + notifyListeners(); + } + Map get categories => Map.from(jsonDecode(prefs?.getString('categories') ?? '{}')); diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index aa338f3..b7dc317 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -686,14 +686,27 @@ abstract class AppSource { bool followRedirects = true, Object? postBody, }) async { + var sp = SettingsProvider(); + await sp.initializeSettings(); + getSourceConfigValues(additionalSettings, sp); + var additionalSettingsPlusSourceConfig = { + ...additionalSettings, + ...(await getSourceConfigValues(additionalSettings, sp)), + }; + url = await generalReqPrefetchModifier( + url, + additionalSettingsPlusSourceConfig, + ); var method = postBody == null ? 'GET' : 'POST'; - var requestHeaders = await getRequestHeaders(additionalSettings); + var requestHeaders = await getRequestHeaders( + additionalSettingsPlusSourceConfig, + ); var streamedResponseUrlWithResponseAndClient = await sourceRequestStreamResponse( method, url, requestHeaders, - additionalSettings, + additionalSettingsPlusSourceConfig, followRedirects: followRedirects, postBody: postBody, ); @@ -911,12 +924,19 @@ abstract class AppSource { return null; } - Future apkUrlPrefetchModifier( - String apkUrl, + Future assetUrlPrefetchModifier( + String assetUrl, String standardUrl, Map additionalSettings, ) async { - return apkUrl; + return assetUrl; + } + + Future generalReqPrefetchModifier( + String reqUrl, + Map additionalSettings, + ) async { + return reqUrl; } bool canSearch = false;