mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-09 00:30:16 +02:00
Compare commits
22 Commits
v0.14.37-b
...
v0.14.40-b
Author | SHA1 | Date | |
---|---|---|---|
|
b63a798d86 | ||
|
eacf3777a4 | ||
|
a5a7436bb1 | ||
|
2a4cc35df7 | ||
|
cdccf58b76 | ||
|
27300383a1 | ||
|
13066b3b4a | ||
|
ccbe9d00c8 | ||
|
ce291582cb | ||
|
bb37bc3b51 | ||
|
5a7747acd1 | ||
|
1bc2ec9461 | ||
|
2b977fc2b0 | ||
|
cc4b016c64 | ||
|
f64f561d6f | ||
|
80bddf8a6b | ||
|
cbaaec961c | ||
|
5477b3f936 | ||
|
fd59a93ede | ||
|
cd316b7138 | ||
|
d1955192ed | ||
|
9beb839bf4 |
1
.github/ISSUE_TEMPLATE/bug_report.md
vendored
1
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -9,6 +9,7 @@ assignees: ''
|
|||||||
|
|
||||||
**Prerequisites**
|
**Prerequisites**
|
||||||
<!-- Please ensure your request is not part of an existing issue. -->
|
<!-- Please ensure your request is not part of an existing issue. -->
|
||||||
|
<!-- Please ensure you have checked the Obtainium Wiki. -->
|
||||||
|
|
||||||
**Describe the bug**
|
**Describe the bug**
|
||||||
<!-- A clear and concise description of what the bug is. -->
|
<!-- A clear and concise description of what the bug is. -->
|
||||||
|
1
.github/ISSUE_TEMPLATE/feature_request.md
vendored
1
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -9,6 +9,7 @@ assignees: ''
|
|||||||
|
|
||||||
**Prerequisites**
|
**Prerequisites**
|
||||||
<!-- Please ensure your request is not part of an existing issue. -->
|
<!-- Please ensure your request is not part of an existing issue. -->
|
||||||
|
<!-- Please ensure you have checked the Obtainium Wiki. -->
|
||||||
|
|
||||||
**Describe the feature**
|
**Describe the feature**
|
||||||
<!-- A clear and concise description of what you want to happen.
|
<!-- A clear and concise description of what you want to happen.
|
||||||
|
@@ -6,6 +6,8 @@ Obtainium allows you to install and update Apps directly from their releases pag
|
|||||||
|
|
||||||
Motivation: [Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed](https://youtu.be/FFz57zNR_M0)
|
Motivation: [Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed](https://youtu.be/FFz57zNR_M0)
|
||||||
|
|
||||||
|
Wiki: [https://github.com/ImranR98/Obtainium/wiki](https://github.com/ImranR98/Obtainium/wiki)
|
||||||
|
|
||||||
Currently supported App sources:
|
Currently supported App sources:
|
||||||
- Open Source - General:
|
- Open Source - General:
|
||||||
- [GitHub](https://github.com/)
|
- [GitHub](https://github.com/)
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
|
||||||
android:viewportWidth="142.129"
|
android:viewportWidth="142.129"
|
||||||
android:viewportHeight="142.129"
|
android:viewportHeight="142.129"
|
||||||
android:width="503.6066dp"
|
android:width="108dp"
|
||||||
android:height="503.6066dp">
|
android:height="108dp">
|
||||||
<group
|
<group
|
||||||
android:translateX="-30.39437"
|
android:translateX="-30.39437"
|
||||||
android:translateY="-54.68043">
|
android:translateY="-54.68043">
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Probajte izabrati preloženu (verziju) versionCode APK-a",
|
"trySelectingSuggestedVersionCode": "Probajte izabrati preloženu (verziju) versionCode APK-a",
|
||||||
"dontSortReleasesList": "Zadrži redosled izdanja iz API-a",
|
"dontSortReleasesList": "Zadrži redosled izdanja iz API-a",
|
||||||
"reverseSort": "Obrni redosled",
|
"reverseSort": "Obrni redosled",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Meni za otkrivanje grešaka",
|
"debugMenu": "Meni za otkrivanje grešaka",
|
||||||
"bgTaskStarted": "Rad u pozadini pokrenut - provjerite log-ove.",
|
"bgTaskStarted": "Rad u pozadini pokrenut - provjerite log-ove.",
|
||||||
"runBgCheckNow": "Pokrenite pozadinsku provjeru ažuriranja sad",
|
"runBgCheckNow": "Pokrenite pozadinsku provjeru ažuriranja sad",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Isključivo provjerite ažuriranje za instalirane i aplikacije 'samo za praćenje'",
|
"onlyCheckInstalledOrTrackOnlyApps": "Isključivo provjerite ažuriranje za instalirane i aplikacije 'samo za praćenje'",
|
||||||
"supportFixedAPKURL": "Podržite fiksne APK URL-ove",
|
"supportFixedAPKURL": "Podržite fiksne APK URL-ove",
|
||||||
"selectX": "Izaberite {}",
|
"selectX": "Izaberite {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Želite li ukloniti aplikaciju?",
|
"one": "Želite li ukloniti aplikaciju?",
|
||||||
"other": "Želite li ukloniti aplikacije?"
|
"other": "Želite li ukloniti aplikacije?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Zkusit vybrat navrhovaný kód verze APK",
|
"trySelectingSuggestedVersionCode": "Zkusit vybrat navrhovaný kód verze APK",
|
||||||
"dontSortReleasesList": "Retain release order from API",
|
"dontSortReleasesList": "Retain release order from API",
|
||||||
"reverseSort": "Reverse sorting",
|
"reverseSort": "Reverse sorting",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Debug Menu",
|
"debugMenu": "Debug Menu",
|
||||||
"bgTaskStarted": "Background task started - check logs.",
|
"bgTaskStarted": "Background task started - check logs.",
|
||||||
"runBgCheckNow": "Run Background Update Check Now",
|
"runBgCheckNow": "Run Background Update Check Now",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Odstranit Apku?",
|
"one": "Odstranit Apku?",
|
||||||
"other": "Odstranit Apky?"
|
"other": "Odstranit Apky?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Versuchen, den vorgeschlagenen APK-Versionscode auszuwählen",
|
"trySelectingSuggestedVersionCode": "Versuchen, den vorgeschlagenen APK-Versionscode auszuwählen",
|
||||||
"dontSortReleasesList": "Freigaberelease von der API ordern",
|
"dontSortReleasesList": "Freigaberelease von der API ordern",
|
||||||
"reverseSort": "Umgekehrtes Sortieren",
|
"reverseSort": "Umgekehrtes Sortieren",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Debug-Menü",
|
"debugMenu": "Debug-Menü",
|
||||||
"bgTaskStarted": "Hintergrundaufgabe gestartet – Logs prüfen.",
|
"bgTaskStarted": "Hintergrundaufgabe gestartet – Logs prüfen.",
|
||||||
"runBgCheckNow": "Hintergrundaktualisierungsprüfung jetzt durchführen",
|
"runBgCheckNow": "Hintergrundaktualisierungsprüfung jetzt durchführen",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Überprüfe nur installierte und mit „nur Nachverfolgen“ markierte Apps auf Aktualisierungen",
|
"onlyCheckInstalledOrTrackOnlyApps": "Überprüfe nur installierte und mit „nur Nachverfolgen“ markierte Apps auf Aktualisierungen",
|
||||||
"supportFixedAPKURL": "neuere Version anhand der ersten dreißig Zahlen der Checksumme der APK URL erraten, wenn anderweitig nicht unterstützt",
|
"supportFixedAPKURL": "neuere Version anhand der ersten dreißig Zahlen der Checksumme der APK URL erraten, wenn anderweitig nicht unterstützt",
|
||||||
"selectX": "Wähle {}",
|
"selectX": "Wähle {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
|
"trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
|
||||||
"dontSortReleasesList": "Retain release order from API",
|
"dontSortReleasesList": "Retain release order from API",
|
||||||
"reverseSort": "Reverse sorting",
|
"reverseSort": "Reverse sorting",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Debug Menu",
|
"debugMenu": "Debug Menu",
|
||||||
"bgTaskStarted": "Background task started - check logs.",
|
"bgTaskStarted": "Background task started - check logs.",
|
||||||
"runBgCheckNow": "Run Background Update Check Now",
|
"runBgCheckNow": "Run Background Update Check Now",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remove App?",
|
"one": "Remove App?",
|
||||||
"other": "Remove Apps?"
|
"other": "Remove Apps?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Prueba seleccionando la versionCode APK sugerida",
|
"trySelectingSuggestedVersionCode": "Prueba seleccionando la versionCode APK sugerida",
|
||||||
"dontSortReleasesList": "Mantener el order de publicación desde API",
|
"dontSortReleasesList": "Mantener el order de publicación desde API",
|
||||||
"reverseSort": "Orden inverso",
|
"reverseSort": "Orden inverso",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Menu Depurar",
|
"debugMenu": "Menu Depurar",
|
||||||
"bgTaskStarted": "Iniciada tarea en segundo plano - revisa los logs.",
|
"bgTaskStarted": "Iniciada tarea en segundo plano - revisa los logs.",
|
||||||
"runBgCheckNow": "Ejecutar verficiación de actualizaciones en segundo plano",
|
"runBgCheckNow": "Ejecutar verficiación de actualizaciones en segundo plano",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
||||||
"supportFixedAPKURL": "Soporte para URLs fijas de APK",
|
"supportFixedAPKURL": "Soporte para URLs fijas de APK",
|
||||||
"selectX": "Selecciona {}",
|
"selectX": "Selecciona {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "¿Eliminar Aplicación?",
|
"one": "¿Eliminar Aplicación?",
|
||||||
"other": "¿Eliminar Aplicaciones?"
|
"other": "¿Eliminar Aplicaciones?"
|
||||||
|
@@ -245,8 +245,8 @@
|
|||||||
"enableBackgroundUpdates": "به روز رسانی پس زمینه را فعال کنید",
|
"enableBackgroundUpdates": "به روز رسانی پس زمینه را فعال کنید",
|
||||||
"backgroundUpdateReqsExplanation": "به روز رسانی پس زمینه ممکن است برای همه برنامه ها امکان پذیر نباشد.",
|
"backgroundUpdateReqsExplanation": "به روز رسانی پس زمینه ممکن است برای همه برنامه ها امکان پذیر نباشد.",
|
||||||
"backgroundUpdateLimitsExplanation": "موفقیت نصب پسزمینه تنها زمانی مشخص میشود که Obtainium باز شود.",
|
"backgroundUpdateLimitsExplanation": "موفقیت نصب پسزمینه تنها زمانی مشخص میشود که Obtainium باز شود.",
|
||||||
"verifyLatestTag": "برچسب "آخرین" را تأیید کنید",
|
"verifyLatestTag": "برچسب \"آخرین\" را تأیید کنید",
|
||||||
"intermediateLinkRegex": "برای اولین بار بازدید از لینک "متوسط" را فیلتر کنید",
|
"intermediateLinkRegex": "برای اولین بار بازدید از لینک \"متوسط\" را فیلتر کنید",
|
||||||
"intermediateLinkNotFound": "لینک میانی پیدا نشد",
|
"intermediateLinkNotFound": "لینک میانی پیدا نشد",
|
||||||
"exemptFromBackgroundUpdates": "معاف از بهروزرسانیهای پسزمینه (در صورت فعال بودن)",
|
"exemptFromBackgroundUpdates": "معاف از بهروزرسانیهای پسزمینه (در صورت فعال بودن)",
|
||||||
"bgUpdatesOnWiFiOnly": "بهروزرسانیهای پسزمینه را در صورت عدم اتصال به WiFi غیرفعال کنید",
|
"bgUpdatesOnWiFiOnly": "بهروزرسانیهای پسزمینه را در صورت عدم اتصال به WiFi غیرفعال کنید",
|
||||||
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "نسخه پیشنهادی APK نسخه کد را انتخاب کنید",
|
"trySelectingSuggestedVersionCode": "نسخه پیشنهادی APK نسخه کد را انتخاب کنید",
|
||||||
"dontSortReleasesList": "حفظ سفارش انتشار از API",
|
"dontSortReleasesList": "حفظ سفارش انتشار از API",
|
||||||
"reverseSort": "مرتب سازی معکوس",
|
"reverseSort": "مرتب سازی معکوس",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "منوی اشکال زدایی",
|
"debugMenu": "منوی اشکال زدایی",
|
||||||
"bgTaskStarted": "کار پس زمینه شروع شد - لاگ های مربوط را بررسی کنید.",
|
"bgTaskStarted": "کار پس زمینه شروع شد - لاگ های مربوط را بررسی کنید.",
|
||||||
"runBgCheckNow": "اکنون بهروزرسانی پسزمینه را بررسی کنید",
|
"runBgCheckNow": "اکنون بهروزرسانی پسزمینه را بررسی کنید",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "فقط برنامه های نصب شده و فقط ردیابی را برای به روز رسانی بررسی کنید",
|
"onlyCheckInstalledOrTrackOnlyApps": "فقط برنامه های نصب شده و فقط ردیابی را برای به روز رسانی بررسی کنید",
|
||||||
"supportFixedAPKURL": "پشتیبانی از URL های APK ثابت",
|
"supportFixedAPKURL": "پشتیبانی از URL های APK ثابت",
|
||||||
"selectX": "انتخاب کنید {}",
|
"selectX": "انتخاب کنید {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "برنامه حذف شود؟",
|
"one": "برنامه حذف شود؟",
|
||||||
"other": "برنامه ها حذف شوند؟"
|
"other": "برنامه ها حذف شوند؟"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
|
"trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
|
||||||
"dontSortReleasesList": "Retain release order from API",
|
"dontSortReleasesList": "Retain release order from API",
|
||||||
"reverseSort": "Reverse sorting",
|
"reverseSort": "Reverse sorting",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Debug Menu",
|
"debugMenu": "Debug Menu",
|
||||||
"bgTaskStarted": "Background task started - check logs.",
|
"bgTaskStarted": "Background task started - check logs.",
|
||||||
"runBgCheckNow": "Run Background Update Check Now",
|
"runBgCheckNow": "Run Background Update Check Now",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
|
@@ -260,6 +260,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Próbálja ki a javasolt verziókódú APK-t",
|
"trySelectingSuggestedVersionCode": "Próbálja ki a javasolt verziókódú APK-t",
|
||||||
"dontSortReleasesList": "Az API-ból származó kiadási sorrend megőrzése",
|
"dontSortReleasesList": "Az API-ból származó kiadási sorrend megőrzése",
|
||||||
"reverseSort": "Fordított rendezés",
|
"reverseSort": "Fordított rendezés",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Hibakereső menü",
|
"debugMenu": "Hibakereső menü",
|
||||||
"bgTaskStarted": "A háttérfeladat elindult – ellenőrizze a naplókat.",
|
"bgTaskStarted": "A háttérfeladat elindult – ellenőrizze a naplókat.",
|
||||||
"enableBackgroundUpdates": "Frissítések a háttérben",
|
"enableBackgroundUpdates": "Frissítések a háttérben",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Csak a telepített és a csak követhető appokat ellenőrizze frissítésekért",
|
"onlyCheckInstalledOrTrackOnlyApps": "Csak a telepített és a csak követhető appokat ellenőrizze frissítésekért",
|
||||||
"supportFixedAPKURL": "Támogatja a rögzített APK URL-eket",
|
"supportFixedAPKURL": "Támogatja a rögzített APK URL-eket",
|
||||||
"selectX": "Kiválaszt {}",
|
"selectX": "Kiválaszt {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Eltávolítja az alkalmazást?",
|
"one": "Eltávolítja az alkalmazást?",
|
||||||
"other": "Eltávolítja az alkalmazást?"
|
"other": "Eltávolítja az alkalmazást?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Prova a selezionare APK con versionCode suggerito",
|
"trySelectingSuggestedVersionCode": "Prova a selezionare APK con versionCode suggerito",
|
||||||
"dontSortReleasesList": "Conserva l'ordine di release da API",
|
"dontSortReleasesList": "Conserva l'ordine di release da API",
|
||||||
"reverseSort": "Ordine inverso",
|
"reverseSort": "Ordine inverso",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Menu di debug",
|
"debugMenu": "Menu di debug",
|
||||||
"bgTaskStarted": "Attività in secondo piano iniziata - controllo log.",
|
"bgTaskStarted": "Attività in secondo piano iniziata - controllo log.",
|
||||||
"runBgCheckNow": "Inizia aggiornamento in secondo piano ora",
|
"runBgCheckNow": "Inizia aggiornamento in secondo piano ora",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Cerca aggiornamenti solo per app installate e app in Solo-Monitoraggio",
|
"onlyCheckInstalledOrTrackOnlyApps": "Cerca aggiornamenti solo per app installate e app in Solo-Monitoraggio",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Rimuovere l'app?",
|
"one": "Rimuovere l'app?",
|
||||||
"other": "Rimuovere le app?"
|
"other": "Rimuovere le app?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "提案されたバージョンコードのAPKを選択する",
|
"trySelectingSuggestedVersionCode": "提案されたバージョンコードのAPKを選択する",
|
||||||
"dontSortReleasesList": "APIからのリリース順を保持する",
|
"dontSortReleasesList": "APIからのリリース順を保持する",
|
||||||
"reverseSort": "逆順ソート",
|
"reverseSort": "逆順ソート",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "デバッグメニュー",
|
"debugMenu": "デバッグメニュー",
|
||||||
"bgTaskStarted": "バックグラウンドタスクが開始されました - ログを確認してください。",
|
"bgTaskStarted": "バックグラウンドタスクが開始されました - ログを確認してください。",
|
||||||
"runBgCheckNow": "今すぐバックグラウンドでのアップデート確認を開始する",
|
"runBgCheckNow": "今すぐバックグラウンドでのアップデート確認を開始する",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "インストール済みのアプリと「追跡のみ」のアプリのアップデートのみを確認する",
|
"onlyCheckInstalledOrTrackOnlyApps": "インストール済みのアプリと「追跡のみ」のアプリのアップデートのみを確認する",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Probeer de voorgestelde versiecode APK te selecteren",
|
"trySelectingSuggestedVersionCode": "Probeer de voorgestelde versiecode APK te selecteren",
|
||||||
"dontSortReleasesList": "Volgorde van releases behouden vanuit de API",
|
"dontSortReleasesList": "Volgorde van releases behouden vanuit de API",
|
||||||
"reverseSort": "Sortering omkeren",
|
"reverseSort": "Sortering omkeren",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Debug menu",
|
"debugMenu": "Debug menu",
|
||||||
"bgTaskStarted": "Achtergrondtaak gestart - controleer de logs.",
|
"bgTaskStarted": "Achtergrondtaak gestart - controleer de logs.",
|
||||||
"runBgCheckNow": "Voer nu een achtergrondupdatecontrole uit",
|
"runBgCheckNow": "Voer nu een achtergrondupdatecontrole uit",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Alleen geïnstalleerde en Track-Only apps controleren op updates",
|
"onlyCheckInstalledOrTrackOnlyApps": "Alleen geïnstalleerde en Track-Only apps controleren op updates",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App verwijderen?",
|
"one": "App verwijderen?",
|
||||||
"other": "Apps verwijderen?"
|
"other": "Apps verwijderen?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK",
|
"trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK",
|
||||||
"dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API",
|
"dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API",
|
||||||
"reverseSort": "Odwrotne sortowanie",
|
"reverseSort": "Odwrotne sortowanie",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Menu debugowania",
|
"debugMenu": "Menu debugowania",
|
||||||
"bgTaskStarted": "Uruchomiono zadanie w tle - sprawdź logi.",
|
"bgTaskStarted": "Uruchomiono zadanie w tle - sprawdź logi.",
|
||||||
"runBgCheckNow": "Wymuś sprawdzenie aktualizacji w tle",
|
"runBgCheckNow": "Wymuś sprawdzenie aktualizacji w tle",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Sprawdzaj tylko zainstalowane i obserwowane aplikacje pod kątem aktualizacji",
|
"onlyCheckInstalledOrTrackOnlyApps": "Sprawdzaj tylko zainstalowane i obserwowane aplikacje pod kątem aktualizacji",
|
||||||
"supportFixedAPKURL": "Obsługuj stałe adresy URL APK",
|
"supportFixedAPKURL": "Obsługuj stałe adresy URL APK",
|
||||||
"selectX": "Wybierz {}",
|
"selectX": "Wybierz {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Usunąć aplikację?",
|
"one": "Usunąć aplikację?",
|
||||||
"few": "Usunąć aplikacje?",
|
"few": "Usunąć aplikacje?",
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Tente selecionar a versão sugerida",
|
"trySelectingSuggestedVersionCode": "Tente selecionar a versão sugerida",
|
||||||
"dontSortReleasesList": "Reter a ordem de lançamento da API",
|
"dontSortReleasesList": "Reter a ordem de lançamento da API",
|
||||||
"reverseSort": "Ordenação reversa",
|
"reverseSort": "Ordenação reversa",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Menu Debug",
|
"debugMenu": "Menu Debug",
|
||||||
"bgTaskStarted": "Tarefa em segundo plano iniciada - verifique os logs.",
|
"bgTaskStarted": "Tarefa em segundo plano iniciada - verifique os logs.",
|
||||||
"runBgCheckNow": "Execute a verificação de atualização em segundo plano agora",
|
"runBgCheckNow": "Execute a verificação de atualização em segundo plano agora",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remover App?",
|
"one": "Remover App?",
|
||||||
"other": "Remover Apps?"
|
"other": "Remover Apps?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Попробуйте выбрать предложенный код версии APK",
|
"trySelectingSuggestedVersionCode": "Попробуйте выбрать предложенный код версии APK",
|
||||||
"dontSortReleasesList": "Сохранить порядок релизов от API",
|
"dontSortReleasesList": "Сохранить порядок релизов от API",
|
||||||
"reverseSort": "Обратная сортировка",
|
"reverseSort": "Обратная сортировка",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Меню отладки",
|
"debugMenu": "Меню отладки",
|
||||||
"bgTaskStarted": "Фоновая задача начата — проверьте журналы",
|
"bgTaskStarted": "Фоновая задача начата — проверьте журналы",
|
||||||
"runBgCheckNow": "Запустить проверку фонового обновления сейчас",
|
"runBgCheckNow": "Запустить проверку фонового обновления сейчас",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
"onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Удалить приложение?",
|
"one": "Удалить приложение?",
|
||||||
"other": "Удалить приложения?"
|
"other": "Удалить приложения?"
|
||||||
|
@@ -261,9 +261,12 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
|
"trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
|
||||||
"dontSortReleasesList": "Retain release order from API",
|
"dontSortReleasesList": "Retain release order from API",
|
||||||
"reverseSort": "Omvänd sortering",
|
"reverseSort": "Omvänd sortering",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Felsökningsmeny",
|
"debugMenu": "Felsökningsmeny",
|
||||||
"bgTaskStarted": "Background task started - check logs.",
|
"bgTaskStarted": "Background task started - check logs.",
|
||||||
"runBgCheckNow": "Kör Bakgrundsuppdateringskoll Nu",
|
"runBgCheckNow": "Kör Bakgrundsuppdateringskoll Nu",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Ta Bort App?",
|
"one": "Ta Bort App?",
|
||||||
"other": "Ta Bort Appar?"
|
"other": "Ta Bort Appar?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Önerilen sürüm kodunu seçmeyi dene",
|
"trySelectingSuggestedVersionCode": "Önerilen sürüm kodunu seçmeyi dene",
|
||||||
"dontSortReleasesList": "API'den sıralama düzenini koru",
|
"dontSortReleasesList": "API'den sıralama düzenini koru",
|
||||||
"reverseSort": "Ters sıralama",
|
"reverseSort": "Ters sıralama",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Hata Ayıklama Menüsü",
|
"debugMenu": "Hata Ayıklama Menüsü",
|
||||||
"bgTaskStarted": "Arka plan görevi başladı - günlükleri kontrol et.",
|
"bgTaskStarted": "Arka plan görevi başladı - günlükleri kontrol et.",
|
||||||
"runBgCheckNow": "Arka Plan Güncelleme Kontrolünü Şimdi Çalıştır",
|
"runBgCheckNow": "Arka Plan Güncelleme Kontrolünü Şimdi Çalıştır",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Yalnızca yüklü ve Yalnızca İzleme Uygulamalarını güncelleme",
|
"onlyCheckInstalledOrTrackOnlyApps": "Yalnızca yüklü ve Yalnızca İzleme Uygulamalarını güncelleme",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Uygulamayı Kaldır?",
|
"one": "Uygulamayı Kaldır?",
|
||||||
"other": "Uygulamaları Kaldır?"
|
"other": "Uygulamaları Kaldır?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "Thử chọn APK Mã phiên bản được đề xuất",
|
"trySelectingSuggestedVersionCode": "Thử chọn APK Mã phiên bản được đề xuất",
|
||||||
"dontSortReleasesList": "Giữ lại thứ tự phát hành từ API",
|
"dontSortReleasesList": "Giữ lại thứ tự phát hành từ API",
|
||||||
"reverseSort": "Sắp xếp ngược",
|
"reverseSort": "Sắp xếp ngược",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "Danh sách gỡ lỗi",
|
"debugMenu": "Danh sách gỡ lỗi",
|
||||||
"bgTaskStarted": "Tác vụ nền đã bắt đầu - kiểm tra nhật ký.",
|
"bgTaskStarted": "Tác vụ nền đã bắt đầu - kiểm tra nhật ký.",
|
||||||
"runBgCheckNow": "Chạy kiểm tra cập nhật nền ngay bây giờ",
|
"runBgCheckNow": "Chạy kiểm tra cập nhật nền ngay bây giờ",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "Chỉ kiểm tra các ứng dụng đã cài đặt và Chỉ-Theo dõi để biết các bản cập nhật",
|
"onlyCheckInstalledOrTrackOnlyApps": "Chỉ kiểm tra các ứng dụng đã cài đặt và Chỉ-Theo dõi để biết các bản cập nhật",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion":{
|
"removeAppQuestion":{
|
||||||
"one": "Gỡ ứng dụng?",
|
"one": "Gỡ ứng dụng?",
|
||||||
"other": "Gỡ ứng dụng?"
|
"other": "Gỡ ứng dụng?"
|
||||||
|
@@ -261,6 +261,8 @@
|
|||||||
"trySelectingSuggestedVersionCode": "尝试选择推荐版本的 APK 文件",
|
"trySelectingSuggestedVersionCode": "尝试选择推荐版本的 APK 文件",
|
||||||
"dontSortReleasesList": "保持来自 API 的发行顺序",
|
"dontSortReleasesList": "保持来自 API 的发行顺序",
|
||||||
"reverseSort": "反转排序",
|
"reverseSort": "反转排序",
|
||||||
|
"takeFirstLink": "Take first link",
|
||||||
|
"skipSort": "Skip sorting",
|
||||||
"debugMenu": "调试选项",
|
"debugMenu": "调试选项",
|
||||||
"bgTaskStarted": "后台任务已启动 - 详见日志",
|
"bgTaskStarted": "后台任务已启动 - 详见日志",
|
||||||
"runBgCheckNow": "立即进行后台更新检查",
|
"runBgCheckNow": "立即进行后台更新检查",
|
||||||
@@ -278,6 +280,7 @@
|
|||||||
"onlyCheckInstalledOrTrackOnlyApps": "只对已安装和“仅追踪”的应用进行更新检查",
|
"onlyCheckInstalledOrTrackOnlyApps": "只对已安装和“仅追踪”的应用进行更新检查",
|
||||||
"supportFixedAPKURL": "Support fixed APK URLs",
|
"supportFixedAPKURL": "Support fixed APK URLs",
|
||||||
"selectX": "Select {}",
|
"selectX": "Select {}",
|
||||||
|
"parallelDownloads": "Allow parallel downloads",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "是否删除应用?",
|
"one": "是否删除应用?",
|
||||||
"other": "是否删除应用?"
|
"other": "是否删除应用?"
|
||||||
|
@@ -65,7 +65,7 @@ class FDroid extends AppSource {
|
|||||||
) async {
|
) async {
|
||||||
String? appId = await tryInferringAppId(standardUrl);
|
String? appId = await tryInferringAppId(standardUrl);
|
||||||
String host = Uri.parse(standardUrl).host;
|
String host = Uri.parse(standardUrl).host;
|
||||||
return getAPKUrlsFromFDroidPackagesAPIResponse(
|
var details = getAPKUrlsFromFDroidPackagesAPIResponse(
|
||||||
await sourceRequest('https://$host/api/v1/packages/$appId'),
|
await sourceRequest('https://$host/api/v1/packages/$appId'),
|
||||||
'https://$host/repo/$appId',
|
'https://$host/repo/$appId',
|
||||||
standardUrl,
|
standardUrl,
|
||||||
@@ -80,6 +80,23 @@ class FDroid extends AppSource {
|
|||||||
true
|
true
|
||||||
? additionalSettings['filterVersionsByRegEx']
|
? additionalSettings['filterVersionsByRegEx']
|
||||||
: null);
|
: null);
|
||||||
|
if (!hostChanged) {
|
||||||
|
try {
|
||||||
|
var res = await sourceRequest(
|
||||||
|
'https://gitlab.com/fdroid/fdroiddata/-/raw/master/metadata/$appId.yml');
|
||||||
|
String author = res.body
|
||||||
|
.split('\n')
|
||||||
|
.where((l) => l.startsWith('AuthorName: '))
|
||||||
|
.first
|
||||||
|
.split(': ')
|
||||||
|
.sublist(1)
|
||||||
|
.join(': ');
|
||||||
|
details.names.author = author;
|
||||||
|
} catch (e) {
|
||||||
|
// Fail silently
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return details;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -111,79 +128,79 @@ class FDroid extends AppSource {
|
|||||||
throw getObtainiumHttpError(res);
|
throw getObtainiumHttpError(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
APKDetails getAPKUrlsFromFDroidPackagesAPIResponse(
|
APKDetails getAPKUrlsFromFDroidPackagesAPIResponse(
|
||||||
Response res, String apkUrlPrefix, String standardUrl, String sourceName,
|
Response res, String apkUrlPrefix, String standardUrl, String sourceName,
|
||||||
{bool autoSelectHighestVersionCode = false,
|
{bool autoSelectHighestVersionCode = false,
|
||||||
bool trySelectingSuggestedVersionCode = false,
|
bool trySelectingSuggestedVersionCode = false,
|
||||||
String? filterVersionsByRegEx}) {
|
String? filterVersionsByRegEx}) {
|
||||||
if (res.statusCode == 200) {
|
if (res.statusCode == 200) {
|
||||||
var response = jsonDecode(res.body);
|
var response = jsonDecode(res.body);
|
||||||
List<dynamic> releases = response['packages'] ?? [];
|
List<dynamic> releases = response['packages'] ?? [];
|
||||||
if (releases.isEmpty) {
|
if (releases.isEmpty) {
|
||||||
throw NoReleasesError();
|
throw NoReleasesError();
|
||||||
}
|
|
||||||
String? version;
|
|
||||||
Iterable<dynamic> releaseChoices = [];
|
|
||||||
// Grab the versionCode suggested if the user chose to do that
|
|
||||||
// Only do so at this stage if the user has no release filter
|
|
||||||
if (trySelectingSuggestedVersionCode &&
|
|
||||||
response['suggestedVersionCode'] != null &&
|
|
||||||
filterVersionsByRegEx == null) {
|
|
||||||
var suggestedReleases = releases.where((element) =>
|
|
||||||
element['versionCode'] == response['suggestedVersionCode']);
|
|
||||||
if (suggestedReleases.isNotEmpty) {
|
|
||||||
releaseChoices = suggestedReleases;
|
|
||||||
version = suggestedReleases.first['versionName'];
|
|
||||||
}
|
}
|
||||||
}
|
String? version;
|
||||||
// Apply the release filter if any
|
Iterable<dynamic> releaseChoices = [];
|
||||||
if (filterVersionsByRegEx?.isNotEmpty == true) {
|
// Grab the versionCode suggested if the user chose to do that
|
||||||
version = null;
|
// Only do so at this stage if the user has no release filter
|
||||||
releaseChoices = [];
|
if (trySelectingSuggestedVersionCode &&
|
||||||
for (var i = 0; i < releases.length; i++) {
|
response['suggestedVersionCode'] != null &&
|
||||||
if (RegExp(filterVersionsByRegEx!)
|
filterVersionsByRegEx == null) {
|
||||||
.hasMatch(releases[i]['versionName'])) {
|
var suggestedReleases = releases.where((element) =>
|
||||||
version = releases[i]['versionName'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (version == null) {
|
|
||||||
throw NoVersionError();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Default to the highest version
|
|
||||||
version ??= releases[0]['versionName'];
|
|
||||||
if (version == null) {
|
|
||||||
throw NoVersionError();
|
|
||||||
}
|
|
||||||
// If a suggested release was not already picked, pick all those with the selected version
|
|
||||||
if (releaseChoices.isEmpty) {
|
|
||||||
releaseChoices =
|
|
||||||
releases.where((element) => element['versionName'] == version);
|
|
||||||
}
|
|
||||||
// For the remaining releases, use the toggles to auto-select one if possible
|
|
||||||
if (releaseChoices.length > 1) {
|
|
||||||
if (autoSelectHighestVersionCode) {
|
|
||||||
releaseChoices = [releaseChoices.first];
|
|
||||||
} else if (trySelectingSuggestedVersionCode &&
|
|
||||||
response['suggestedVersionCode'] != null) {
|
|
||||||
var suggestedReleases = releaseChoices.where((element) =>
|
|
||||||
element['versionCode'] == response['suggestedVersionCode']);
|
element['versionCode'] == response['suggestedVersionCode']);
|
||||||
if (suggestedReleases.isNotEmpty) {
|
if (suggestedReleases.isNotEmpty) {
|
||||||
releaseChoices = suggestedReleases;
|
releaseChoices = suggestedReleases;
|
||||||
|
version = suggestedReleases.first['versionName'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Apply the release filter if any
|
||||||
|
if (filterVersionsByRegEx?.isNotEmpty == true) {
|
||||||
|
version = null;
|
||||||
|
releaseChoices = [];
|
||||||
|
for (var i = 0; i < releases.length; i++) {
|
||||||
|
if (RegExp(filterVersionsByRegEx!)
|
||||||
|
.hasMatch(releases[i]['versionName'])) {
|
||||||
|
version = releases[i]['versionName'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (version == null) {
|
||||||
|
throw NoVersionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Default to the highest version
|
||||||
|
version ??= releases[0]['versionName'];
|
||||||
|
if (version == null) {
|
||||||
|
throw NoVersionError();
|
||||||
|
}
|
||||||
|
// If a suggested release was not already picked, pick all those with the selected version
|
||||||
|
if (releaseChoices.isEmpty) {
|
||||||
|
releaseChoices =
|
||||||
|
releases.where((element) => element['versionName'] == version);
|
||||||
|
}
|
||||||
|
// For the remaining releases, use the toggles to auto-select one if possible
|
||||||
|
if (releaseChoices.length > 1) {
|
||||||
|
if (autoSelectHighestVersionCode) {
|
||||||
|
releaseChoices = [releaseChoices.first];
|
||||||
|
} else if (trySelectingSuggestedVersionCode &&
|
||||||
|
response['suggestedVersionCode'] != null) {
|
||||||
|
var suggestedReleases = releaseChoices.where((element) =>
|
||||||
|
element['versionCode'] == response['suggestedVersionCode']);
|
||||||
|
if (suggestedReleases.isNotEmpty) {
|
||||||
|
releaseChoices = suggestedReleases;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (releaseChoices.isEmpty) {
|
||||||
|
throw NoReleasesError();
|
||||||
|
}
|
||||||
|
List<String> apkUrls = releaseChoices
|
||||||
|
.map((e) => '${apkUrlPrefix}_${e['versionCode']}.apk')
|
||||||
|
.toList();
|
||||||
|
return APKDetails(version, getApkUrlsFromUrls(apkUrls.toSet().toList()),
|
||||||
|
AppNames(sourceName, Uri.parse(standardUrl).pathSegments.last));
|
||||||
|
} else {
|
||||||
|
throw getObtainiumHttpError(res);
|
||||||
}
|
}
|
||||||
if (releaseChoices.isEmpty) {
|
|
||||||
throw NoReleasesError();
|
|
||||||
}
|
|
||||||
List<String> apkUrls = releaseChoices
|
|
||||||
.map((e) => '${apkUrlPrefix}_${e['versionCode']}.apk')
|
|
||||||
.toList();
|
|
||||||
return APKDetails(version, getApkUrlsFromUrls(apkUrls.toSet().toList()),
|
|
||||||
AppNames(sourceName, Uri.parse(standardUrl).pathSegments.last));
|
|
||||||
} else {
|
|
||||||
throw getObtainiumHttpError(res);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -234,7 +234,7 @@ class GitHub extends AppSource {
|
|||||||
bool verifyLatestTag = additionalSettings['verifyLatestTag'] == true;
|
bool verifyLatestTag = additionalSettings['verifyLatestTag'] == true;
|
||||||
bool dontSortReleasesList =
|
bool dontSortReleasesList =
|
||||||
additionalSettings['dontSortReleasesList'] == true;
|
additionalSettings['dontSortReleasesList'] == true;
|
||||||
String? latestTag;
|
dynamic latestRelease;
|
||||||
if (verifyLatestTag) {
|
if (verifyLatestTag) {
|
||||||
var temp = requestUrl.split('?');
|
var temp = requestUrl.split('?');
|
||||||
Response res = await sourceRequest(
|
Response res = await sourceRequest(
|
||||||
@@ -245,12 +245,20 @@ class GitHub extends AppSource {
|
|||||||
}
|
}
|
||||||
throw getObtainiumHttpError(res);
|
throw getObtainiumHttpError(res);
|
||||||
}
|
}
|
||||||
var jsres = jsonDecode(res.body);
|
latestRelease = jsonDecode(res.body);
|
||||||
latestTag = jsres['tag_name'] ?? jsres['name'];
|
|
||||||
}
|
}
|
||||||
Response res = await sourceRequest(requestUrl);
|
Response res = await sourceRequest(requestUrl);
|
||||||
if (res.statusCode == 200) {
|
if (res.statusCode == 200) {
|
||||||
var releases = jsonDecode(res.body) as List<dynamic>;
|
var releases = jsonDecode(res.body) as List<dynamic>;
|
||||||
|
if (latestRelease != null) {
|
||||||
|
var latestTag = latestRelease['tag_name'] ?? latestRelease['name'];
|
||||||
|
if (releases
|
||||||
|
.where((element) =>
|
||||||
|
(element['tag_name'] ?? element['name']) == latestTag)
|
||||||
|
.isEmpty) {
|
||||||
|
releases = [latestRelease, ...releases];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<MapEntry<String, String>> getReleaseAPKUrls(dynamic release) =>
|
List<MapEntry<String, String>> getReleaseAPKUrls(dynamic release) =>
|
||||||
(release['assets'] as List<dynamic>?)
|
(release['assets'] as List<dynamic>?)
|
||||||
@@ -299,13 +307,13 @@ class GitHub extends AppSource {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (latestTag != null &&
|
if (latestRelease != null &&
|
||||||
releases.isNotEmpty &&
|
releases.isNotEmpty &&
|
||||||
latestTag !=
|
latestRelease !=
|
||||||
(releases[releases.length - 1]['tag_name'] ??
|
(releases[releases.length - 1]['tag_name'] ??
|
||||||
releases[0]['name'])) {
|
releases[0]['name'])) {
|
||||||
var ind = releases.indexWhere(
|
var ind = releases.indexWhere((element) =>
|
||||||
(element) => latestTag == (element['tag_name'] ?? element['name']));
|
latestRelease == (element['tag_name'] ?? element['name']));
|
||||||
if (ind >= 0) {
|
if (ind >= 0) {
|
||||||
releases.add(releases.removeAt(ind));
|
releases.add(releases.removeAt(ind));
|
||||||
}
|
}
|
||||||
|
@@ -94,7 +94,8 @@ class HTML extends AppSource {
|
|||||||
GeneratedFormSwitch('sortByFileNamesNotLinks',
|
GeneratedFormSwitch('sortByFileNamesNotLinks',
|
||||||
label: tr('sortByFileNamesNotLinks'))
|
label: tr('sortByFileNamesNotLinks'))
|
||||||
],
|
],
|
||||||
[GeneratedFormSwitch('reverseSort', label: tr('reverseSort'))],
|
[GeneratedFormSwitch('skipSort', label: tr('skipSort'))],
|
||||||
|
[GeneratedFormSwitch('reverseSort', label: tr('takeTopLink'))],
|
||||||
[
|
[
|
||||||
GeneratedFormSwitch('supportFixedAPKURL',
|
GeneratedFormSwitch('supportFixedAPKURL',
|
||||||
defaultValue: true, label: tr('supportFixedAPKURL')),
|
defaultValue: true, label: tr('supportFixedAPKURL')),
|
||||||
@@ -185,12 +186,15 @@ class HTML extends AppSource {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
List<String> links = [];
|
List<String> links = [];
|
||||||
|
bool skipSort = additionalSettings['skipSort'] == true;
|
||||||
if ((additionalSettings['intermediateLinkRegex'] as String?)
|
if ((additionalSettings['intermediateLinkRegex'] as String?)
|
||||||
?.isNotEmpty ==
|
?.isNotEmpty ==
|
||||||
true) {
|
true) {
|
||||||
var reg = RegExp(additionalSettings['intermediateLinkRegex']);
|
var reg = RegExp(additionalSettings['intermediateLinkRegex']);
|
||||||
links = allLinks.where((element) => reg.hasMatch(element)).toList();
|
links = allLinks.where((element) => reg.hasMatch(element)).toList();
|
||||||
links.sort((a, b) => compareAlphaNumeric(a, b));
|
if (!skipSort) {
|
||||||
|
links.sort((a, b) => compareAlphaNumeric(a, b));
|
||||||
|
}
|
||||||
if (links.isEmpty) {
|
if (links.isEmpty) {
|
||||||
throw ObtainiumError(tr('intermediateLinkNotFound'));
|
throw ObtainiumError(tr('intermediateLinkNotFound'));
|
||||||
}
|
}
|
||||||
@@ -211,10 +215,14 @@ class HTML extends AppSource {
|
|||||||
Uri.parse(element).path.toLowerCase().endsWith('.apk'))
|
Uri.parse(element).path.toLowerCase().endsWith('.apk'))
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
links.sort((a, b) => additionalSettings['sortByFileNamesNotLinks'] == true
|
if (!skipSort) {
|
||||||
? compareAlphaNumeric(a.split('/').where((e) => e.isNotEmpty).last,
|
links.sort((a, b) =>
|
||||||
b.split('/').where((e) => e.isNotEmpty).last)
|
additionalSettings['sortByFileNamesNotLinks'] == true
|
||||||
: compareAlphaNumeric(a, b));
|
? compareAlphaNumeric(
|
||||||
|
a.split('/').where((e) => e.isNotEmpty).last,
|
||||||
|
b.split('/').where((e) => e.isNotEmpty).last)
|
||||||
|
: compareAlphaNumeric(a, b));
|
||||||
|
}
|
||||||
if (additionalSettings['reverseSort'] == true) {
|
if (additionalSettings['reverseSort'] == true) {
|
||||||
links = links.reversed.toList();
|
links = links.reversed.toList();
|
||||||
}
|
}
|
||||||
|
@@ -40,7 +40,7 @@ class IzzyOnDroid extends AppSource {
|
|||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
) async {
|
) async {
|
||||||
String? appId = await tryInferringAppId(standardUrl);
|
String? appId = await tryInferringAppId(standardUrl);
|
||||||
return getAPKUrlsFromFDroidPackagesAPIResponse(
|
return fd.getAPKUrlsFromFDroidPackagesAPIResponse(
|
||||||
await sourceRequest(
|
await sourceRequest(
|
||||||
'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'),
|
'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'),
|
||||||
'https://android.izzysoft.de/frepo/$appId',
|
'https://android.izzysoft.de/frepo/$appId',
|
||||||
|
@@ -19,7 +19,7 @@ import 'package:easy_localization/src/easy_localization_controller.dart';
|
|||||||
// ignore: implementation_imports
|
// ignore: implementation_imports
|
||||||
import 'package:easy_localization/src/localization.dart';
|
import 'package:easy_localization/src/localization.dart';
|
||||||
|
|
||||||
const String currentVersion = '0.14.37';
|
const String currentVersion = '0.14.40';
|
||||||
const String currentReleaseTag =
|
const String currentReleaseTag =
|
||||||
'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES
|
'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES
|
||||||
|
|
||||||
|
@@ -496,14 +496,8 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
var transparent =
|
var transparent =
|
||||||
Theme.of(context).colorScheme.background.withAlpha(0).value;
|
Theme.of(context).colorScheme.background.withAlpha(0).value;
|
||||||
List<double> stops = [
|
List<double> stops = [
|
||||||
...listedApps[index]
|
...listedApps[index].app.categories.asMap().entries.map(
|
||||||
.app
|
(e) => ((e.key / (listedApps[index].app.categories.length - 1)))),
|
||||||
.categories
|
|
||||||
.asMap()
|
|
||||||
.entries
|
|
||||||
.map((e) =>
|
|
||||||
((e.key / (listedApps[index].app.categories.length - 1))))
|
|
||||||
,
|
|
||||||
1
|
1
|
||||||
];
|
];
|
||||||
if (stops.length == 2) {
|
if (stops.length == 2) {
|
||||||
@@ -516,13 +510,9 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
begin: const Alignment(-1, 0),
|
begin: const Alignment(-1, 0),
|
||||||
end: const Alignment(-0.97, 0),
|
end: const Alignment(-0.97, 0),
|
||||||
colors: [
|
colors: [
|
||||||
...listedApps[index]
|
...listedApps[index].app.categories.map((e) =>
|
||||||
.app
|
Color(settingsProvider.categories[e] ?? transparent)
|
||||||
.categories
|
.withAlpha(255)),
|
||||||
.map((e) =>
|
|
||||||
Color(settingsProvider.categories[e] ?? transparent)
|
|
||||||
.withAlpha(255))
|
|
||||||
,
|
|
||||||
Color(transparent)
|
Color(transparent)
|
||||||
])),
|
])),
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
@@ -881,7 +871,7 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
onPressed: () {
|
onPressed: () {
|
||||||
String urls = '';
|
String urls = '';
|
||||||
for (var a in selectedApps) {
|
for (var a in selectedApps) {
|
||||||
urls += '${a.url}\n';
|
urls += 'obtainium://add/${a.url}\n';
|
||||||
}
|
}
|
||||||
urls = urls.substring(0, urls.length - 1);
|
urls = urls.substring(0, urls.length - 1);
|
||||||
Share.share(urls,
|
Share.share(urls,
|
||||||
@@ -981,10 +971,8 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
defaultValue: filter.sourceFilter,
|
defaultValue: filter.sourceFilter,
|
||||||
[
|
[
|
||||||
MapEntry('', tr('none')),
|
MapEntry('', tr('none')),
|
||||||
...sourceProvider.sources
|
...sourceProvider.sources.map(
|
||||||
.map((e) =>
|
(e) => MapEntry(e.runtimeType.toString(), e.name))
|
||||||
MapEntry(e.runtimeType.toString(), e.name))
|
|
||||||
|
|
||||||
])
|
])
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
@@ -347,7 +347,8 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
: () {
|
: () {
|
||||||
runObtainiumExport(pickOnly: true);
|
runObtainiumExport(pickOnly: true);
|
||||||
},
|
},
|
||||||
child: Text(tr('pickExportDir')),
|
child: Text(tr('pickExportDir'),
|
||||||
|
textAlign: TextAlign.center),
|
||||||
)),
|
)),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
width: 16,
|
width: 16,
|
||||||
@@ -360,7 +361,8 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
snapshot.data == null
|
snapshot.data == null
|
||||||
? null
|
? null
|
||||||
: runObtainiumExport,
|
: runObtainiumExport,
|
||||||
child: Text(tr('obtainiumExport')),
|
child: Text(tr('obtainiumExport'),
|
||||||
|
textAlign: TextAlign.center),
|
||||||
)),
|
)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -375,7 +377,8 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
onPressed: importInProgress
|
onPressed: importInProgress
|
||||||
? null
|
? null
|
||||||
: runObtainiumImport,
|
: runObtainiumImport,
|
||||||
child: Text(tr('obtainiumImport')))),
|
child: Text(tr('obtainiumImport'),
|
||||||
|
textAlign: TextAlign.center))),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
if (snapshot.data != null)
|
if (snapshot.data != null)
|
||||||
|
@@ -327,6 +327,19 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
})
|
})
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
height16,
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Flexible(child: Text(tr('parallelDownloads'))),
|
||||||
|
Switch(
|
||||||
|
value: settingsProvider.parallelDownloads,
|
||||||
|
onChanged: (value) {
|
||||||
|
settingsProvider.parallelDownloads =
|
||||||
|
value;
|
||||||
|
})
|
||||||
|
],
|
||||||
|
),
|
||||||
height32,
|
height32,
|
||||||
Text(
|
Text(
|
||||||
tr('sourceSpecific'),
|
tr('sourceSpecific'),
|
||||||
|
@@ -657,7 +657,7 @@ class AppsProvider with ChangeNotifier {
|
|||||||
appsToInstall =
|
appsToInstall =
|
||||||
moveStrToEnd(appsToInstall, obtainiumId, strB: obtainiumTempId);
|
moveStrToEnd(appsToInstall, obtainiumId, strB: obtainiumTempId);
|
||||||
|
|
||||||
for (var id in appsToInstall) {
|
Future<void> updateFn(String id, {bool skipInstalls = false}) async {
|
||||||
try {
|
try {
|
||||||
var downloadedArtifact =
|
var downloadedArtifact =
|
||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
@@ -682,24 +682,26 @@ class AppsProvider with ChangeNotifier {
|
|||||||
apps[id]?.downloadProgress = -1;
|
apps[id]?.downloadProgress = -1;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
try {
|
try {
|
||||||
if (downloadedFile != null) {
|
if (!skipInstalls) {
|
||||||
if (willBeSilent && context == null) {
|
if (downloadedFile != null) {
|
||||||
installApk(downloadedFile, needsBGWorkaround: true);
|
if (willBeSilent && context == null) {
|
||||||
|
installApk(downloadedFile, needsBGWorkaround: true);
|
||||||
|
} else {
|
||||||
|
await installApk(downloadedFile);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
await installApk(downloadedFile);
|
if (willBeSilent && context == null) {
|
||||||
|
installXApkDir(downloadedDir!, needsBGWorkaround: true);
|
||||||
|
} else {
|
||||||
|
await installXApkDir(downloadedDir!);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (willBeSilent && context == null) {
|
if (willBeSilent && context == null) {
|
||||||
installXApkDir(downloadedDir!, needsBGWorkaround: true);
|
notificationsProvider?.notify(SilentUpdateAttemptNotification(
|
||||||
} else {
|
[apps[appId]!.app],
|
||||||
await installXApkDir(downloadedDir!);
|
id: appId.hashCode));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (willBeSilent && context == null) {
|
|
||||||
notificationsProvider?.notify(SilentUpdateAttemptNotification(
|
|
||||||
[apps[appId]!.app],
|
|
||||||
id: appId.hashCode));
|
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
apps[id]?.downloadProgress = null;
|
apps[id]?.downloadProgress = null;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
@@ -710,6 +712,18 @@ class AppsProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!settingsProvider.parallelDownloads) {
|
||||||
|
for (var id in appsToInstall) {
|
||||||
|
await updateFn(id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await Future.wait(
|
||||||
|
appsToInstall.map((id) => updateFn(id, skipInstalls: true)));
|
||||||
|
for (var id in appsToInstall) {
|
||||||
|
await updateFn(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (errors.idsByErrorString.isNotEmpty) {
|
if (errors.idsByErrorString.isNotEmpty) {
|
||||||
throw errors;
|
throw errors;
|
||||||
}
|
}
|
||||||
@@ -726,12 +740,15 @@ class AppsProvider with ChangeNotifier {
|
|||||||
return appsDir;
|
return appsDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<PackageInfo?> getInstalledInfo(String? packageName) async {
|
Future<PackageInfo?> getInstalledInfo(String? packageName,
|
||||||
|
{bool printErr = true}) async {
|
||||||
if (packageName != null) {
|
if (packageName != null) {
|
||||||
try {
|
try {
|
||||||
return await pm.getPackageInfo(packageName: packageName);
|
return await pm.getPackageInfo(packageName: packageName);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e); // OK
|
if (printErr) {
|
||||||
|
print(e); // OK
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -1230,7 +1247,7 @@ class AppsProvider with ChangeNotifier {
|
|||||||
|
|
||||||
Future<MapEntry<int, bool>> import(String appsJSON) async {
|
Future<MapEntry<int, bool>> import(String appsJSON) async {
|
||||||
var decodedJSON = jsonDecode(appsJSON);
|
var decodedJSON = jsonDecode(appsJSON);
|
||||||
var newFormat = !(decodedJSON is List);
|
var newFormat = decodedJSON is! List;
|
||||||
List<App> importedApps =
|
List<App> importedApps =
|
||||||
((newFormat ? decodedJSON['apps'] : decodedJSON) as List<dynamic>)
|
((newFormat ? decodedJSON['apps'] : decodedJSON) as List<dynamic>)
|
||||||
.map((e) => App.fromJson(e))
|
.map((e) => App.fromJson(e))
|
||||||
@@ -1239,9 +1256,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
await Future.delayed(const Duration(microseconds: 1));
|
await Future.delayed(const Duration(microseconds: 1));
|
||||||
}
|
}
|
||||||
for (App a in importedApps) {
|
for (App a in importedApps) {
|
||||||
if (apps[a.id]?.app.installedVersion != null) {
|
a.installedVersion =
|
||||||
a.installedVersion = apps[a.id]?.app.installedVersion;
|
(await getInstalledInfo(a.id, printErr: false))?.versionName;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
await saveApps(importedApps, onlyIfExists: false);
|
await saveApps(importedApps, onlyIfExists: false);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
@@ -425,4 +425,13 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
prefs?.setBool('exportSettings', val);
|
prefs?.setBool('exportSettings', val);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get parallelDownloads {
|
||||||
|
return prefs?.getBool('parallelDownloads') ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
set parallelDownloads(bool val) {
|
||||||
|
prefs?.setBool('parallelDownloads', val);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -684,8 +684,9 @@ class SourceProvider {
|
|||||||
name = name.isNotEmpty ? name : apk.names.name;
|
name = name.isNotEmpty ? name : apk.names.name;
|
||||||
App finalApp = App(
|
App finalApp = App(
|
||||||
currentApp?.id ??
|
currentApp?.id ??
|
||||||
((!source.appIdInferIsOptional ||
|
(!trackOnly &&
|
||||||
(source.appIdInferIsOptional && inferAppIdIfOptional))
|
(!source.appIdInferIsOptional ||
|
||||||
|
(source.appIdInferIsOptional && inferAppIdIfOptional))
|
||||||
? await source.tryInferringAppId(standardUrl,
|
? await source.tryInferringAppId(standardUrl,
|
||||||
additionalSettings: additionalSettings)
|
additionalSettings: additionalSettings)
|
||||||
: null) ??
|
: null) ??
|
||||||
@@ -705,8 +706,9 @@ class SourceProvider {
|
|||||||
changeLog: apk.changeLog,
|
changeLog: apk.changeLog,
|
||||||
overrideSource: overrideSource ?? currentApp?.overrideSource,
|
overrideSource: overrideSource ?? currentApp?.overrideSource,
|
||||||
allowIdChange: currentApp?.allowIdChange ??
|
allowIdChange: currentApp?.allowIdChange ??
|
||||||
source.appIdInferIsOptional &&
|
trackOnly ||
|
||||||
inferAppIdIfOptional // Optional ID inferring may be incorrect - allow correction on first install
|
(source.appIdInferIsOptional &&
|
||||||
|
inferAppIdIfOptional) // Optional ID inferring may be incorrect - allow correction on first install
|
||||||
);
|
);
|
||||||
return source.endOfGetAppChanges(finalApp);
|
return source.endOfGetAppChanges(finalApp);
|
||||||
}
|
}
|
||||||
|
24
pubspec.lock
24
pubspec.lock
@@ -206,10 +206,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: dynamic_color
|
name: dynamic_color
|
||||||
sha256: "8b8bd1d798bd393e11eddeaa8ae95b12ff028bf7d5998fc5d003488cd5f4ce2f"
|
sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.6.8"
|
version: "1.6.9"
|
||||||
easy_localization:
|
easy_localization:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -267,10 +267,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_archive
|
name: flutter_archive
|
||||||
sha256: aec85d1da65e5b33a529db00a86df0b8e92bda78088a7cfaeeba5187701d0d85
|
sha256: "004132780d382df5171589ab793e2efc9c3eef570fe72d78b4ccfbfbe52762ae"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.0"
|
version: "6.0.0"
|
||||||
flutter_fgbg:
|
flutter_fgbg:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -783,10 +783,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: synchronized
|
name: synchronized
|
||||||
sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60"
|
sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.1.0+1"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -919,26 +919,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: e313dcdf45d4c95bcb8960351ef2389b7f0687b90bc92483f7f7983ae5758456
|
sha256: b54c89fe14a6d26a2a46e24880da0441cdd2bf1f6d01a5b3e1d39558feb1de0b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.13.0"
|
version: "3.13.1"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_platform_interface
|
name: webview_flutter_platform_interface
|
||||||
sha256: "68e86162aa8fc646ae859e1585995c096c95fc2476881fa0c4a8d10f56013a5a"
|
sha256: dbe745ee459a16b6fec296f7565a8ef430d0d681001d8ae521898b9361854943
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.8.0"
|
version: "2.9.0"
|
||||||
webview_flutter_wkwebview:
|
webview_flutter_wkwebview:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_wkwebview
|
name: webview_flutter_wkwebview
|
||||||
sha256: accdaaa49a2aca2dc3c3230907988954cdd23fed0a19525d6c9789d380f4dc76
|
sha256: eebfabfa8a115b535b52031b8b26f7a4b58ceceab378bc9db8762b0fb46f7b5d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.9.4"
|
version: "3.10.0"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 0.14.37+231 # When changing this, update the tag in main() accordingly
|
version: 0.14.40+234 # When changing this, update the tag in main() accordingly
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.0.0 <4.0.0'
|
sdk: '>=3.0.0 <4.0.0'
|
||||||
@@ -62,7 +62,7 @@ dependencies:
|
|||||||
easy_localization: ^3.0.1
|
easy_localization: ^3.0.1
|
||||||
android_intent_plus: ^4.0.0
|
android_intent_plus: ^4.0.0
|
||||||
flutter_markdown: ^0.6.14
|
flutter_markdown: ^0.6.14
|
||||||
flutter_archive: ^5.0.0
|
flutter_archive: ^6.0.0
|
||||||
hsluv: ^1.1.3
|
hsluv: ^1.1.3
|
||||||
connectivity_plus: ^5.0.0
|
connectivity_plus: ^5.0.0
|
||||||
shared_storage: ^0.8.0
|
shared_storage: ^0.8.0
|
||||||
|
Reference in New Issue
Block a user