mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-19 13:09:30 +02:00
Merge pull request #2439 from ImranR98/dev
- Restore Oxford comma but only for English (#2245) - Minor bug in F-Droid variant (#2373) - Minor language-specific case tweaks (#2396) - Add "de/select all" button to multi-select menus (#2401) - Minor wording changes (#2402, #2406) - Allow excluding secret values from export file (#2430) - Added farsroid.com as a source (#2435) - Don't init the foreground service unless it is needed (#2437) - Fix occasional RangeError after importing apps (#2438)
This commit is contained in:
2
.flutter
2
.flutter
Submodule .flutter updated: d7b523b356...edada7c56e
@@ -33,6 +33,7 @@ Currently supported App sources:
|
|||||||
- [CoolApk](https://coolapk.com/)
|
- [CoolApk](https://coolapk.com/)
|
||||||
- [vivo App Store (CN)](https://h5.appstore.vivo.com.cn/)
|
- [vivo App Store (CN)](https://h5.appstore.vivo.com.cn/)
|
||||||
- [RuStore](https://rustore.ru/)
|
- [RuStore](https://rustore.ru/)
|
||||||
|
- [Farsroid](https://www.farsroid.com)
|
||||||
- Jenkins Jobs
|
- Jenkins Jobs
|
||||||
- [APKMirror](https://apkmirror.com/) (Track-Only)
|
- [APKMirror](https://apkmirror.com/) (Track-Only)
|
||||||
- Other - App-Specific:
|
- Other - App-Specific:
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "تعطيل تصحيح الإصدار (يبدو أن الملحق لا يعمل)",
|
"versionCorrectionDisabled": "تعطيل تصحيح الإصدار (يبدو أن الملحق لا يعمل)",
|
||||||
"unknown": "غير معروف",
|
"unknown": "غير معروف",
|
||||||
"none": "لا شيء",
|
"none": "لا شيء",
|
||||||
|
"all": "الكل",
|
||||||
"never": "أبدًا",
|
"never": "أبدًا",
|
||||||
"latestVersionX": "الأحدث: {}",
|
"latestVersionX": "الأحدث: {}",
|
||||||
"installedVersionX": "المثبت: {}",
|
"installedVersionX": "المثبت: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "الحصول على خدمة الحصول على خدمة المقدمة",
|
"foregroundService": "الحصول على خدمة الحصول على خدمة المقدمة",
|
||||||
"foregroundServiceExplanation": "استخدام خدمة مقدمة للتحقق من التحديثات (أكثر موثوقية وتستهلك طاقة أكبر)",
|
"foregroundServiceExplanation": "استخدام خدمة مقدمة للتحقق من التحديثات (أكثر موثوقية وتستهلك طاقة أكبر)",
|
||||||
"fgServiceNotice": "هذا الإشعار مطلوب للتحقق من التحديث في الخلفية (يمكن إخفاؤه في إعدادات نظام التشغيل)",
|
"fgServiceNotice": "هذا الإشعار مطلوب للتحقق من التحديث في الخلفية (يمكن إخفاؤه في إعدادات نظام التشغيل)",
|
||||||
|
"excludeSecrets": "استبعاد الأسرار",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "إزالة التطبيق؟",
|
"one": "إزالة التطبيق؟",
|
||||||
"other": "إزالة التطبيقات؟"
|
"other": "إزالة التطبيقات؟"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Ispravka verzije je onemogućena (izgleda da plugin ne radi)",
|
"versionCorrectionDisabled": "Ispravka verzije je onemogućena (izgleda da plugin ne radi)",
|
||||||
"unknown": "Nepoznato",
|
"unknown": "Nepoznato",
|
||||||
"none": "Ništa",
|
"none": "Ništa",
|
||||||
|
"all": "All",
|
||||||
"never": "Nikad",
|
"never": "Nikad",
|
||||||
"latestVersionX": "Najnovija verzija: {}",
|
"latestVersionX": "Najnovija verzija: {}",
|
||||||
"installedVersionX": "Instalirana verzija: {}",
|
"installedVersionX": "Instalirana verzija: {}",
|
||||||
@@ -327,12 +328,13 @@
|
|||||||
"smartname": "Name (Smart)",
|
"smartname": "Name (Smart)",
|
||||||
"sortMethod": "Sort Method",
|
"sortMethod": "Sort Method",
|
||||||
"welcome": "Welcome",
|
"welcome": "Welcome",
|
||||||
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.",
|
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions, and other resources that will help you understand how to use the app.",
|
||||||
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
|
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
|
||||||
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
|
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
|
||||||
"foregroundService": "Obtainium foreground service",
|
"foregroundService": "Obtainium foreground service",
|
||||||
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
|
"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)",
|
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
|
||||||
|
"excludeSecrets": "Exclude secrets",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Želite li ukloniti aplikaciju?",
|
"one": "Želite li ukloniti aplikaciju?",
|
||||||
"other": "Želite li ukloniti aplikacije?"
|
"other": "Želite li ukloniti aplikacije?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Correcció de versions desactivada (el plugin sembla que no funciona)",
|
"versionCorrectionDisabled": "Correcció de versions desactivada (el plugin sembla que no funciona)",
|
||||||
"unknown": "Desconegut",
|
"unknown": "Desconegut",
|
||||||
"none": "Cap",
|
"none": "Cap",
|
||||||
|
"all": "All",
|
||||||
"never": "Mai",
|
"never": "Mai",
|
||||||
"latestVersionX": "Última versió: {}",
|
"latestVersionX": "Última versió: {}",
|
||||||
"installedVersionX": "Versió instal·lada: {}",
|
"installedVersionX": "Versió instal·lada: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Servei d'Obtainium en primer pla",
|
"foregroundService": "Servei d'Obtainium en primer pla",
|
||||||
"foregroundServiceExplanation": "Usa el servei d'Obtainium en primer pla per comprovar les actualitzacions (és més fiable però consumeix més bateria)",
|
"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)",
|
"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",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "¿Suprimeixo l'aplicació?",
|
"one": "¿Suprimeixo l'aplicació?",
|
||||||
"other": "¿Suprimeixo les aplicacions?"
|
"other": "¿Suprimeixo les aplicacions?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Oprava verze zakázána (zásuvný modul zřejmě nefunguje)",
|
"versionCorrectionDisabled": "Oprava verze zakázána (zásuvný modul zřejmě nefunguje)",
|
||||||
"unknown": "Neznám",
|
"unknown": "Neznám",
|
||||||
"none": "Žádný",
|
"none": "Žádný",
|
||||||
|
"all": "Všechny",
|
||||||
"never": "Nikdy",
|
"never": "Nikdy",
|
||||||
"latestVersionX": "Nejnovější verze: {}",
|
"latestVersionX": "Nejnovější verze: {}",
|
||||||
"installedVersionX": "Nainstalovaná verze: {}",
|
"installedVersionX": "Nainstalovaná verze: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Služba Obtainium na popředí",
|
"foregroundService": "Služba Obtainium na popředí",
|
||||||
"foregroundServiceExplanation": "Použít službu v popředí pro kontrolu aktualizací (spolehlivější, spotřebovává více energie)",
|
"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)",
|
"fgServiceNotice": "Toto oznámení je nutné pro kontrolu aktualizací na pozadí (lze jej skrýt v nastavení systému)",
|
||||||
|
"excludeSecrets": "Vyloučit tajemství",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Odstranit aplikaci?",
|
"one": "Odstranit aplikaci?",
|
||||||
"other": "Odstranit aplikace?"
|
"other": "Odstranit aplikace?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Versionskorrektion deaktiveret (plugin ser ikke ud til at virke)",
|
"versionCorrectionDisabled": "Versionskorrektion deaktiveret (plugin ser ikke ud til at virke)",
|
||||||
"unknown": "Ukendt",
|
"unknown": "Ukendt",
|
||||||
"none": "Ingen",
|
"none": "Ingen",
|
||||||
|
"all": "Alle",
|
||||||
"never": "Aldrig",
|
"never": "Aldrig",
|
||||||
"latestVersionX": "Seneste: {}",
|
"latestVersionX": "Seneste: {}",
|
||||||
"installedVersionX": "Installeret: {}",
|
"installedVersionX": "Installeret: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium forgrundstjeneste",
|
"foregroundService": "Obtainium forgrundstjeneste",
|
||||||
"foregroundServiceExplanation": "Brug en forgrundstjeneste til opdateringskontrol (mere pålidelig, bruger mere strøm)",
|
"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).",
|
"fgServiceNotice": "Denne meddelelse er nødvendig for baggrundsopdateringskontrol (den kan skjules i OS-indstillingerne).",
|
||||||
|
"excludeSecrets": "Udeluk hemmeligheder",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Fjern app?",
|
"one": "Fjern app?",
|
||||||
"other": "Fjern apps?"
|
"other": "Fjern apps?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Versionskorrektur deaktiviert (Plugin scheint nicht zu funktionieren)",
|
"versionCorrectionDisabled": "Versionskorrektur deaktiviert (Plugin scheint nicht zu funktionieren)",
|
||||||
"unknown": "Unbekannt",
|
"unknown": "Unbekannt",
|
||||||
"none": "Keine",
|
"none": "Keine",
|
||||||
|
"all": "Alle",
|
||||||
"never": "Nie",
|
"never": "Nie",
|
||||||
"latestVersionX": "Neueste Version: {}",
|
"latestVersionX": "Neueste Version: {}",
|
||||||
"installedVersionX": "Installierte Version: {}",
|
"installedVersionX": "Installierte Version: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium-Vordergrunddienst",
|
"foregroundService": "Obtainium-Vordergrunddienst",
|
||||||
"foregroundServiceExplanation": "Aktualisierungsprüfung im Vordergrund durchführen (zuverlässiger, verbraucht mehr Strom)",
|
"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)",
|
"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",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Versiokorekto malaktivigita (ŝajnas, ke la kromaĵo ne funkcias)",
|
"versionCorrectionDisabled": "Versiokorekto malaktivigita (ŝajnas, ke la kromaĵo ne funkcias)",
|
||||||
"unknown": "Nekonata",
|
"unknown": "Nekonata",
|
||||||
"none": "Nenio",
|
"none": "Nenio",
|
||||||
|
"all": "All",
|
||||||
"never": "Neniam",
|
"never": "Neniam",
|
||||||
"latestVersionX": "Lasta versio: {}",
|
"latestVersionX": "Lasta versio: {}",
|
||||||
"installedVersionX": "Instalita versio: {}",
|
"installedVersionX": "Instalita versio: {}",
|
||||||
@@ -327,12 +328,13 @@
|
|||||||
"smartname": "Name (Smart)",
|
"smartname": "Name (Smart)",
|
||||||
"sortMethod": "Sort Method",
|
"sortMethod": "Sort Method",
|
||||||
"welcome": "Welcome",
|
"welcome": "Welcome",
|
||||||
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.",
|
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions, and other resources that will help you understand how to use the app.",
|
||||||
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
|
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
|
||||||
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
|
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
|
||||||
"foregroundService": "Obtainium foreground service",
|
"foregroundService": "Obtainium foreground service",
|
||||||
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
|
"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)",
|
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
|
||||||
|
"excludeSecrets": "Exclude secrets",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Forigi la aplikaĵon?",
|
"one": "Forigi la aplikaĵon?",
|
||||||
"other": "Forigi la aplikaĵojn?"
|
"other": "Forigi la aplikaĵojn?"
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
"standard": "Standard",
|
"standard": "Standard",
|
||||||
"custom": "Custom",
|
"custom": "Custom",
|
||||||
"useMaterialYou": "Use Material You",
|
"useMaterialYou": "Use Material You",
|
||||||
"githubStarredRepos": "GitHub starred repos",
|
"githubStarredRepos": "GitHub starred repositories",
|
||||||
"uname": "Username",
|
"uname": "Username",
|
||||||
"wrongArgNum": "Wrong number of arguments provided",
|
"wrongArgNum": "Wrong number of arguments provided",
|
||||||
"xIsTrackOnly": "{} is track-only",
|
"xIsTrackOnly": "{} is track-only",
|
||||||
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Version correction disabled (plugin doesn't seem to work)",
|
"versionCorrectionDisabled": "Version correction disabled (plugin doesn't seem to work)",
|
||||||
"unknown": "Unknown",
|
"unknown": "Unknown",
|
||||||
"none": "None",
|
"none": "None",
|
||||||
|
"all": "All",
|
||||||
"never": "Never",
|
"never": "Never",
|
||||||
"latestVersionX": "Latest: {}",
|
"latestVersionX": "Latest: {}",
|
||||||
"installedVersionX": "Installed: {}",
|
"installedVersionX": "Installed: {}",
|
||||||
@@ -313,7 +314,7 @@
|
|||||||
"badDownload": "The APK could not be parsed (incompatible or partial download)",
|
"badDownload": "The APK could not be parsed (incompatible or partial download)",
|
||||||
"beforeNewInstallsShareToAppVerifier": "Share new apps with AppVerifier (if available)",
|
"beforeNewInstallsShareToAppVerifier": "Share new apps with AppVerifier (if available)",
|
||||||
"appVerifierInstructionToast": "Share to AppVerifier, then return here when ready.",
|
"appVerifierInstructionToast": "Share to AppVerifier, then return here when ready.",
|
||||||
"wiki": "Help/Wiki",
|
"wiki": "Help/wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourced app configurations (use at your own risk)",
|
"crowdsourcedConfigsLabel": "Crowdsourced app configurations (use at your own risk)",
|
||||||
"crowdsourcedConfigsShort": "Crowdsourced app configurations",
|
"crowdsourcedConfigsShort": "Crowdsourced app configurations",
|
||||||
"allowInsecure": "Allow insecure HTTP requests",
|
"allowInsecure": "Allow insecure HTTP requests",
|
||||||
@@ -327,12 +328,13 @@
|
|||||||
"smartname": "Name (smart)",
|
"smartname": "Name (smart)",
|
||||||
"sortMethod": "Sort method",
|
"sortMethod": "Sort method",
|
||||||
"welcome": "Welcome",
|
"welcome": "Welcome",
|
||||||
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.",
|
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions, and other resources that will help you understand how to use the app.",
|
||||||
"batteryOptimizationNote": "Note that background downloads may work more reliably if you switch to the \"foreground service\" in the Obtainium settings and/or disable battery optimization for Obtainium in your OS settings.",
|
"batteryOptimizationNote": "Note that background downloads may work more reliably if you switch to the \"foreground service\" in the Obtainium settings and/or disable battery optimization for Obtainium in your OS settings.",
|
||||||
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
|
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
|
||||||
"foregroundService": "Obtainium foreground service",
|
"foregroundService": "Obtainium foreground service",
|
||||||
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
|
"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)",
|
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
|
||||||
|
"excludeSecrets": "Exclude secrets",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remove app?",
|
"one": "Remove app?",
|
||||||
"other": "Remove apps?"
|
"other": "Remove apps?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Corrección de versiones desactivada (el plugin parece no funcionar)",
|
"versionCorrectionDisabled": "Corrección de versiones desactivada (el plugin parece no funcionar)",
|
||||||
"unknown": "Desconocido",
|
"unknown": "Desconocido",
|
||||||
"none": "Ninguno",
|
"none": "Ninguno",
|
||||||
|
"all": "Todos",
|
||||||
"never": "Nunca",
|
"never": "Nunca",
|
||||||
"latestVersionX": "Última versión: {}",
|
"latestVersionX": "Última versión: {}",
|
||||||
"installedVersionX": "Versión instalada: {}",
|
"installedVersionX": "Versión instalada: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium servicio en primer plano",
|
"foregroundService": "Obtainium servicio en primer plano",
|
||||||
"foregroundServiceExplanation": "Utilizar un servicio en primer plano para comprobar las actualizaciones (más fiable, consume más energía).",
|
"foregroundServiceExplanation": "Utilizar 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).",
|
"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",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "¿Eliminar aplicación?",
|
"one": "¿Eliminar aplicación?",
|
||||||
"other": "¿Eliminar aplicaciones?"
|
"other": "¿Eliminar aplicaciones?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "تصحیح نسخه غیرفعال شد (به نظر می رسد افزونه کار نمی کند)",
|
"versionCorrectionDisabled": "تصحیح نسخه غیرفعال شد (به نظر می رسد افزونه کار نمی کند)",
|
||||||
"unknown": "ناشناخته",
|
"unknown": "ناشناخته",
|
||||||
"none": "هیچ",
|
"none": "هیچ",
|
||||||
|
"all": "All",
|
||||||
"never": "هرگز",
|
"never": "هرگز",
|
||||||
"latestVersionX": "آخرین نسخه: {}",
|
"latestVersionX": "آخرین نسخه: {}",
|
||||||
"installedVersionX": "نسخه نصب شده: {}",
|
"installedVersionX": "نسخه نصب شده: {}",
|
||||||
@@ -327,12 +328,13 @@
|
|||||||
"smartname": "Name (Smart)",
|
"smartname": "Name (Smart)",
|
||||||
"sortMethod": "Sort Method",
|
"sortMethod": "Sort Method",
|
||||||
"welcome": "Welcome",
|
"welcome": "Welcome",
|
||||||
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.",
|
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions, and other resources that will help you understand how to use the app.",
|
||||||
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
|
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
|
||||||
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
|
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
|
||||||
"foregroundService": "Obtainium foreground service",
|
"foregroundService": "Obtainium foreground service",
|
||||||
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
|
"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)",
|
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
|
||||||
|
"excludeSecrets": "Exclude secrets",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "برنامه حذف شود؟",
|
"one": "برنامه حذف شود؟",
|
||||||
"other": "برنامه ها حذف شوند؟"
|
"other": "برنامه ها حذف شوند؟"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Correction de version désactivée (le plugin ne semble pas fonctionner)",
|
"versionCorrectionDisabled": "Correction de version désactivée (le plugin ne semble pas fonctionner)",
|
||||||
"unknown": "Inconnu",
|
"unknown": "Inconnu",
|
||||||
"none": "Aucun",
|
"none": "Aucun",
|
||||||
|
"all": "Tous",
|
||||||
"never": "Jamais",
|
"never": "Jamais",
|
||||||
"latestVersionX": "Dernière version : {}",
|
"latestVersionX": "Dernière version : {}",
|
||||||
"installedVersionX": "Version installée : {}",
|
"installedVersionX": "Version installée : {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Service d'avant-plan Obtainium",
|
"foregroundService": "Service d'avant-plan Obtainium",
|
||||||
"foregroundServiceExplanation": "Utiliser un service de premier plan pour la vérification des mises à jour (plus fiable, consomme plus d'énergie)",
|
"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).",
|
"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",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Verziókorrekció letiltva (úgy tűnik, hogy a bővítmény nem működik)",
|
"versionCorrectionDisabled": "Verziókorrekció letiltva (úgy tűnik, hogy a bővítmény nem működik)",
|
||||||
"unknown": "Ismeretlen",
|
"unknown": "Ismeretlen",
|
||||||
"none": "Semmi",
|
"none": "Semmi",
|
||||||
|
"all": "Minden",
|
||||||
"never": "Soha",
|
"never": "Soha",
|
||||||
"latestVersionX": "Legújabb verzió: {}",
|
"latestVersionX": "Legújabb verzió: {}",
|
||||||
"installedVersionX": "Telepített verzió: {}",
|
"installedVersionX": "Telepített verzió: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium előtér-szolgáltatás",
|
"foregroundService": "Obtainium előtér-szolgáltatás",
|
||||||
"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)",
|
"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ő).",
|
"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": "Titkok kizárása",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Eltávolítja az alkalmazást?",
|
"one": "Eltávolítja az alkalmazást?",
|
||||||
"other": "Eltávolítja az alkalmazásokat?"
|
"other": "Eltávolítja az alkalmazásokat?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Koreksi versi dinonaktifkan (sepertinya plugin tidak berfungsi)",
|
"versionCorrectionDisabled": "Koreksi versi dinonaktifkan (sepertinya plugin tidak berfungsi)",
|
||||||
"unknown": "Tidak diketahui",
|
"unknown": "Tidak diketahui",
|
||||||
"none": "Tidak ada",
|
"none": "Tidak ada",
|
||||||
|
"all": "Semua",
|
||||||
"never": "Tidak pernah",
|
"never": "Tidak pernah",
|
||||||
"latestVersionX": "Terbaru: {}",
|
"latestVersionX": "Terbaru: {}",
|
||||||
"installedVersionX": "Terpasang: {}",
|
"installedVersionX": "Terpasang: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Layanan latar depan Obtainium",
|
"foregroundService": "Layanan latar depan Obtainium",
|
||||||
"foregroundServiceExplanation": "Gunakan layanan latar depan untuk pemeriksaan pembaruan (lebih dapat diandalkan, menghabiskan lebih banyak daya)",
|
"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)",
|
"fgServiceNotice": "Pemberitahuan ini diperlukan untuk pemeriksaan pembaruan latar belakang (dapat disembunyikan dalam pengaturan OS)",
|
||||||
|
"excludeSecrets": "Mengecualikan rahasia",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Hapus aplikasi?",
|
"one": "Hapus aplikasi?",
|
||||||
"other": "Hapus aplikasi?"
|
"other": "Hapus aplikasi?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Correzione della versione disattivata (il plugin sembra non funzionare)",
|
"versionCorrectionDisabled": "Correzione della versione disattivata (il plugin sembra non funzionare)",
|
||||||
"unknown": "Sconosciuto",
|
"unknown": "Sconosciuto",
|
||||||
"none": "Nessuno",
|
"none": "Nessuno",
|
||||||
|
"all": "Tutti",
|
||||||
"never": "Mai",
|
"never": "Mai",
|
||||||
"latestVersionX": "Ultima versione: {}",
|
"latestVersionX": "Ultima versione: {}",
|
||||||
"installedVersionX": "Versione installata: {}",
|
"installedVersionX": "Versione installata: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Servizio Obtainium in primo piano",
|
"foregroundService": "Servizio Obtainium in primo piano",
|
||||||
"foregroundServiceExplanation": "Utilizzare un servizio in primo piano per il controllo degli aggiornamenti (più affidabile, consuma più energia)",
|
"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).",
|
"fgServiceNotice": "Questa notifica è necessaria per il controllo degli aggiornamenti in background (può essere nascosta nelle impostazioni del sistema operativo).",
|
||||||
|
"excludeSecrets": "Escludere i segreti",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Rimuovere l'app?",
|
"one": "Rimuovere l'app?",
|
||||||
"other": "Rimuovere le app?"
|
"other": "Rimuovere le app?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "バージョン補正無効 (プラグインが動作していません)",
|
"versionCorrectionDisabled": "バージョン補正無効 (プラグインが動作していません)",
|
||||||
"unknown": "不明",
|
"unknown": "不明",
|
||||||
"none": "なし",
|
"none": "なし",
|
||||||
|
"all": "すべて",
|
||||||
"never": "しない",
|
"never": "しない",
|
||||||
"latestVersionX": "最新のバージョン: {}",
|
"latestVersionX": "最新のバージョン: {}",
|
||||||
"installedVersionX": "インストールされたバージョン: {}",
|
"installedVersionX": "インストールされたバージョン: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium フォアグラウンドサービス",
|
"foregroundService": "Obtainium フォアグラウンドサービス",
|
||||||
"foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)",
|
"foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)",
|
||||||
"fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要です(OSの設定で非表示にできます)。",
|
"fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要です(OSの設定で非表示にできます)。",
|
||||||
|
"excludeSecrets": "秘密を除く",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "버전 수정 비활성화됨 (플러그인이 작동하지 않는 것 같습니다)",
|
"versionCorrectionDisabled": "버전 수정 비활성화됨 (플러그인이 작동하지 않는 것 같습니다)",
|
||||||
"unknown": "알 수 없음",
|
"unknown": "알 수 없음",
|
||||||
"none": "없음",
|
"none": "없음",
|
||||||
|
"all": "모두",
|
||||||
"never": "절대",
|
"never": "절대",
|
||||||
"latestVersionX": "최신: {}",
|
"latestVersionX": "최신: {}",
|
||||||
"installedVersionX": "설치됨: {}",
|
"installedVersionX": "설치됨: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "오베티움 포그라운드 서비스",
|
"foregroundService": "오베티움 포그라운드 서비스",
|
||||||
"foregroundServiceExplanation": "업데이트 확인을 위해 포그라운드 서비스 사용(안정성 향상, 전력 소비량 증가)",
|
"foregroundServiceExplanation": "업데이트 확인을 위해 포그라운드 서비스 사용(안정성 향상, 전력 소비량 증가)",
|
||||||
"fgServiceNotice": "이 알림은 백그라운드 업데이트 확인에 필요합니다(OS 설정에서 숨길 수 있음).",
|
"fgServiceNotice": "이 알림은 백그라운드 업데이트 확인에 필요합니다(OS 설정에서 숨길 수 있음).",
|
||||||
|
"excludeSecrets": "비밀 제외",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "앱을 제거하시겠습니까?",
|
"one": "앱을 제거하시겠습니까?",
|
||||||
"other": "앱을 제거하시겠습니까?"
|
"other": "앱을 제거하시겠습니까?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "പതിപ്പ് തിരുത്തൽ പ്രവർത്തനരഹിതമാക്കി (പ്ലഗിൻ പ്രവർത്തിക്കുന്നതായി തോന്നുന്നില്ല)",
|
"versionCorrectionDisabled": "പതിപ്പ് തിരുത്തൽ പ്രവർത്തനരഹിതമാക്കി (പ്ലഗിൻ പ്രവർത്തിക്കുന്നതായി തോന്നുന്നില്ല)",
|
||||||
"unknown": "അജ്ഞാതം",
|
"unknown": "അജ്ഞാതം",
|
||||||
"none": "ഒന്നുമില്ല",
|
"none": "ഒന്നുമില്ല",
|
||||||
|
"all": "All",
|
||||||
"never": "ഒരിക്കലുമില്ല",
|
"never": "ഒരിക്കലുമില്ല",
|
||||||
"latestVersionX": "ഏറ്റവും പുതിയത്: {}",
|
"latestVersionX": "ഏറ്റവും പുതിയത്: {}",
|
||||||
"installedVersionX": "ഇൻസ്റ്റാൾ ചെയ്തത്: {}",
|
"installedVersionX": "ഇൻസ്റ്റാൾ ചെയ്തത്: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium foreground service",
|
"foregroundService": "Obtainium foreground service",
|
||||||
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
|
"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)",
|
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
|
||||||
|
"excludeSecrets": "Exclude secrets",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "ആപ്പ് നീക്കം ചെയ്യണോ?",
|
"one": "ആപ്പ് നീക്കം ചെയ്യണോ?",
|
||||||
"other": "ആപ്പുകൾ നീക്കം ചെയ്യണോ?"
|
"other": "ആപ്പുകൾ നീക്കം ചെയ്യണോ?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Versiecorrectie uitgeschakeld (de plug-in lijkt niet te werken)",
|
"versionCorrectionDisabled": "Versiecorrectie uitgeschakeld (de plug-in lijkt niet te werken)",
|
||||||
"unknown": "Onbekend",
|
"unknown": "Onbekend",
|
||||||
"none": "Geen",
|
"none": "Geen",
|
||||||
|
"all": "Alle",
|
||||||
"never": "Nooit",
|
"never": "Nooit",
|
||||||
"latestVersionX": "Laatste versie: {}",
|
"latestVersionX": "Laatste versie: {}",
|
||||||
"installedVersionX": "Geïnstalleerde versie: {}",
|
"installedVersionX": "Geïnstalleerde versie: {}",
|
||||||
@@ -313,7 +314,7 @@
|
|||||||
"badDownload": "De APK kon niet worden verwerkt (incompatibele of gedeeltelijke download)",
|
"badDownload": "De APK kon niet worden verwerkt (incompatibele of gedeeltelijke download)",
|
||||||
"beforeNewInstallsShareToAppVerifier": "Nieuwe Apps delen met AppVerifier (indien beschikbaar)",
|
"beforeNewInstallsShareToAppVerifier": "Nieuwe Apps delen met AppVerifier (indien beschikbaar)",
|
||||||
"appVerifierInstructionToast": "Deel het met AppVerifier en keer daarna hier terug.",
|
"appVerifierInstructionToast": "Deel het met AppVerifier en keer daarna hier terug.",
|
||||||
"wiki": "Help/Wiki",
|
"wiki": "Help/wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourced App-configuraties (gebruik op eigen risico)",
|
"crowdsourcedConfigsLabel": "Crowdsourced App-configuraties (gebruik op eigen risico)",
|
||||||
"crowdsourcedConfigsShort": "App-configuraties door menigte",
|
"crowdsourcedConfigsShort": "App-configuraties door menigte",
|
||||||
"allowInsecure": "Onveilige HTTP-verzoeken toestaan",
|
"allowInsecure": "Onveilige HTTP-verzoeken toestaan",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium foreground service",
|
"foregroundService": "Obtainium foreground service",
|
||||||
"foregroundServiceExplanation": "Gebruik een voorgronddienst voor het controleren van updates (betrouwbaarder, verbruikt meer stroom)",
|
"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)",
|
"fgServiceNotice": "Deze melding is nodig voor het controleren van updates op de achtergrond (kan worden verborgen in de OS-instellingen)",
|
||||||
|
"excludeSecrets": "Geheimen uitsluiten",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App verwijderen?",
|
"one": "App verwijderen?",
|
||||||
"other": "Apps verwijderen?"
|
"other": "Apps verwijderen?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Korekta wersji wyłączona (wtyczka wydaje się nie działać)",
|
"versionCorrectionDisabled": "Korekta wersji wyłączona (wtyczka wydaje się nie działać)",
|
||||||
"unknown": "Nieznane",
|
"unknown": "Nieznane",
|
||||||
"none": "Brak",
|
"none": "Brak",
|
||||||
|
"all": "Wszystkie",
|
||||||
"never": "Nigdy",
|
"never": "Nigdy",
|
||||||
"latestVersionX": "Najnowsza wersja: {}",
|
"latestVersionX": "Najnowsza wersja: {}",
|
||||||
"installedVersionX": "Zainstalowana wersja: {}",
|
"installedVersionX": "Zainstalowana wersja: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Usługa nowej generacji Obtainium",
|
"foregroundService": "Usługa nowej generacji Obtainium",
|
||||||
"foregroundServiceExplanation": "Używanie usługi pierwszoplanowej do sprawdzania aktualizacji (bardziej niezawodne, zużywa więcej energii)",
|
"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).",
|
"fgServiceNotice": "To powiadomienie jest wymagane do sprawdzania aktualizacji w tle (można je ukryć w ustawieniach systemu operacyjnego).",
|
||||||
|
"excludeSecrets": "Wyklucz sekrety",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Usunąć aplikację?",
|
"one": "Usunąć aplikację?",
|
||||||
"few": "Usunąć aplikacje?",
|
"few": "Usunąć aplikacje?",
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Correção de versão desativada (o plugin parece não funcionar)",
|
"versionCorrectionDisabled": "Correção de versão desativada (o plugin parece não funcionar)",
|
||||||
"unknown": "Desconhecido",
|
"unknown": "Desconhecido",
|
||||||
"none": "Nenhum",
|
"none": "Nenhum",
|
||||||
|
"all": "Todos",
|
||||||
"never": "Nunca",
|
"never": "Nunca",
|
||||||
"latestVersionX": "Mais recente: {}",
|
"latestVersionX": "Mais recente: {}",
|
||||||
"installedVersionX": "Instalado: {}",
|
"installedVersionX": "Instalado: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Serviço de primeiro plano do Obtainium",
|
"foregroundService": "Serviço de primeiro plano do Obtainium",
|
||||||
"foregroundServiceExplanation": "Usar um serviço em primeiro plano para verificação de atualizações (mais confiável, consome mais energia)",
|
"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)",
|
"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",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remover app?",
|
"one": "Remover app?",
|
||||||
"other": "Remover apps?"
|
"other": "Remover apps?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Correção de versão desativada (plugin parece não funcionar)",
|
"versionCorrectionDisabled": "Correção de versão desativada (plugin parece não funcionar)",
|
||||||
"unknown": "Desconhecido",
|
"unknown": "Desconhecido",
|
||||||
"none": "Nenhum",
|
"none": "Nenhum",
|
||||||
|
"all": "Todos",
|
||||||
"never": "Nunca",
|
"never": "Nunca",
|
||||||
"latestVersionX": "Última versão: {}",
|
"latestVersionX": "Última versão: {}",
|
||||||
"installedVersionX": "Versão instalada: {}",
|
"installedVersionX": "Versão instalada: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Serviço de primeiro plano Obtainium",
|
"foregroundService": "Serviço de primeiro plano Obtainium",
|
||||||
"foregroundServiceExplanation": "Utilizar um serviço em primeiro plano para verificação de actualizações (mais fiável, consome mais energia)",
|
"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)",
|
"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",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remover aplicativo?",
|
"one": "Remover aplicativo?",
|
||||||
"other": "Remover aplicativos?"
|
"other": "Remover aplicativos?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Коррекция версий отключена (плагин, кажется, не работает)",
|
"versionCorrectionDisabled": "Коррекция версий отключена (плагин, кажется, не работает)",
|
||||||
"unknown": "Неизвестно",
|
"unknown": "Неизвестно",
|
||||||
"none": "Отсутствует",
|
"none": "Отсутствует",
|
||||||
|
"all": "Все",
|
||||||
"never": "Никогда",
|
"never": "Никогда",
|
||||||
"latestVersionX": "Последняя версия: {}",
|
"latestVersionX": "Последняя версия: {}",
|
||||||
"installedVersionX": "Установленная версия: {}",
|
"installedVersionX": "Установленная версия: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Приоритетная служба Obtainium",
|
"foregroundService": "Приоритетная служба Obtainium",
|
||||||
"foregroundServiceExplanation": "Использовать приоритетную службу для проверки обновлений (надёжнее, энергозатратнее)",
|
"foregroundServiceExplanation": "Использовать приоритетную службу для проверки обновлений (надёжнее, энергозатратнее)",
|
||||||
"fgServiceNotice": "Это уведомление необходимо для фоновой проверки обновлений (оно может быть скрыто в настройках ОС)",
|
"fgServiceNotice": "Это уведомление необходимо для фоновой проверки обновлений (оно может быть скрыто в настройках ОС)",
|
||||||
|
"excludeSecrets": "Исключить секреты",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Удалить приложение?",
|
"one": "Удалить приложение?",
|
||||||
"other": "Удалить приложения?"
|
"other": "Удалить приложения?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Versionskorrigering inaktiverat (plugin verkar inte fungera)",
|
"versionCorrectionDisabled": "Versionskorrigering inaktiverat (plugin verkar inte fungera)",
|
||||||
"unknown": "Okänd",
|
"unknown": "Okänd",
|
||||||
"none": "Ingen",
|
"none": "Ingen",
|
||||||
|
"all": "Alla",
|
||||||
"never": "Aldrig",
|
"never": "Aldrig",
|
||||||
"latestVersionX": "Senaste Version: {}",
|
"latestVersionX": "Senaste Version: {}",
|
||||||
"installedVersionX": "Installerad Version: {}",
|
"installedVersionX": "Installerad Version: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium förgrundstjänst",
|
"foregroundService": "Obtainium förgrundstjänst",
|
||||||
"foregroundServiceExplanation": "Använd en förgrundstjänst för uppdateringskontroll (mer tillförlitlig, förbrukar mer ström)",
|
"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)",
|
"fgServiceNotice": "Detta meddelande krävs för bakgrundsuppdateringskontroll (det kan döljas i OS-inställningarna)",
|
||||||
|
"excludeSecrets": "Utesluta hemligheter",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Ta Bort App?",
|
"one": "Ta Bort App?",
|
||||||
"other": "Ta Bort Appar?"
|
"other": "Ta Bort Appar?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Sürüm düzeltme devre dışı bırakıldı (eklenti çalışmıyor gibi görünüyor)",
|
"versionCorrectionDisabled": "Sürüm düzeltme devre dışı bırakıldı (eklenti çalışmıyor gibi görünüyor)",
|
||||||
"unknown": "Bilinmiyor",
|
"unknown": "Bilinmiyor",
|
||||||
"none": "Hiçbiri",
|
"none": "Hiçbiri",
|
||||||
|
"all": "Tümü",
|
||||||
"never": "Asla",
|
"never": "Asla",
|
||||||
"latestVersionX": "En Son Sürüm: {}",
|
"latestVersionX": "En Son Sürüm: {}",
|
||||||
"installedVersionX": "Yüklenen Sürüm: {}",
|
"installedVersionX": "Yüklenen Sürüm: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium ön plan hizmeti",
|
"foregroundService": "Obtainium ön plan hizmeti",
|
||||||
"foregroundServiceExplanation": "Güncelleme denetimi için bir ön plan hizmeti kullanın (daha güvenilir, daha fazla güç tüketir)",
|
"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)",
|
"fgServiceNotice": "Bu bildirim arka planda güncelleme kontrolü için gereklidir (işletim sistemi ayarlarından gizlenebilir)",
|
||||||
|
"excludeSecrets": "Sırları hariç tut",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Uygulamayı Kaldır?",
|
"one": "Uygulamayı Kaldır?",
|
||||||
"other": "Uygulamaları Kaldır?"
|
"other": "Uygulamaları Kaldır?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Виправлення версії вимкнено (здається, плагін не працює)",
|
"versionCorrectionDisabled": "Виправлення версії вимкнено (здається, плагін не працює)",
|
||||||
"unknown": "Невідомо",
|
"unknown": "Невідомо",
|
||||||
"none": "Нічого",
|
"none": "Нічого",
|
||||||
|
"all": "Усе.",
|
||||||
"never": "Ніколи",
|
"never": "Ніколи",
|
||||||
"latestVersionX": "Остання версія: {}",
|
"latestVersionX": "Остання версія: {}",
|
||||||
"installedVersionX": "Встановлено: {}",
|
"installedVersionX": "Встановлено: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Обслуговування переднього плану Obtainium",
|
"foregroundService": "Обслуговування переднього плану Obtainium",
|
||||||
"foregroundServiceExplanation": "Використовуйте службу переднього плану для перевірки оновлень (надійніша, споживає більше енергії)",
|
"foregroundServiceExplanation": "Використовуйте службу переднього плану для перевірки оновлень (надійніша, споживає більше енергії)",
|
||||||
"fgServiceNotice": "Це сповіщення необхідне для фонової перевірки оновлень (його можна приховати в налаштуваннях ОС)",
|
"fgServiceNotice": "Це сповіщення необхідне для фонової перевірки оновлень (його можна приховати в налаштуваннях ОС)",
|
||||||
|
"excludeSecrets": "Виключити секрети",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Видалити застосунок?",
|
"one": "Видалити застосунок?",
|
||||||
"other": "Видалити застосунки?"
|
"other": "Видалити застосунки?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "Tính năng sửa phiên bản bị vô hiệu hóa (plugin dường như không hoạt động)",
|
"versionCorrectionDisabled": "Tính năng sửa phiên bản bị vô hiệu hóa (plugin dường như không hoạt động)",
|
||||||
"unknown": "Không xác định",
|
"unknown": "Không xác định",
|
||||||
"none": "Không",
|
"none": "Không",
|
||||||
|
"all": "Tất cả",
|
||||||
"never": "Không bao giờ",
|
"never": "Không bao giờ",
|
||||||
"latestVersionX": "Phiên bản mới nhất: {}",
|
"latestVersionX": "Phiên bản mới nhất: {}",
|
||||||
"installedVersionX": "Phiên bản đã cài đặt: {}",
|
"installedVersionX": "Phiên bản đã cài đặt: {}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Dịch vụ nền Obtainium",
|
"foregroundService": "Dịch vụ nền Obtainium",
|
||||||
"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)",
|
"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).",
|
"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",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Gỡ ứng dụng?",
|
"one": "Gỡ ứng dụng?",
|
||||||
"other": "Gỡ ứng dụng?"
|
"other": "Gỡ ứng dụng?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "版本校正已停用(外掛程式似乎無法正常工作)",
|
"versionCorrectionDisabled": "版本校正已停用(外掛程式似乎無法正常工作)",
|
||||||
"unknown": "未知",
|
"unknown": "未知",
|
||||||
"none": "無",
|
"none": "無",
|
||||||
|
"all": "All",
|
||||||
"never": "從不",
|
"never": "從不",
|
||||||
"latestVersionX": "最新版本:{}",
|
"latestVersionX": "最新版本:{}",
|
||||||
"installedVersionX": "已安裝版本:{}",
|
"installedVersionX": "已安裝版本:{}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium foreground service",
|
"foregroundService": "Obtainium foreground service",
|
||||||
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
|
"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)",
|
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
|
||||||
|
"excludeSecrets": "Exclude secrets",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "移除應用程式?",
|
"one": "移除應用程式?",
|
||||||
"other": "移除應用程式?"
|
"other": "移除應用程式?"
|
||||||
|
@@ -167,6 +167,7 @@
|
|||||||
"versionCorrectionDisabled": "禁用版本号更正(插件似乎未起作用)",
|
"versionCorrectionDisabled": "禁用版本号更正(插件似乎未起作用)",
|
||||||
"unknown": "未知",
|
"unknown": "未知",
|
||||||
"none": "无",
|
"none": "无",
|
||||||
|
"all": "全部",
|
||||||
"never": "从未",
|
"never": "从未",
|
||||||
"latestVersionX": "最新版本:{}",
|
"latestVersionX": "最新版本:{}",
|
||||||
"installedVersionX": "当前版本:{}",
|
"installedVersionX": "当前版本:{}",
|
||||||
@@ -333,6 +334,7 @@
|
|||||||
"foregroundService": "Obtainium 前台服务",
|
"foregroundService": "Obtainium 前台服务",
|
||||||
"foregroundServiceExplanation": "使用前台服务检查更新(更稳定,但也更耗电)",
|
"foregroundServiceExplanation": "使用前台服务检查更新(更稳定,但也更耗电)",
|
||||||
"fgServiceNotice": "后台检查更新时需要此通知(可在操作系统设置中隐藏)",
|
"fgServiceNotice": "后台检查更新时需要此通知(可在操作系统设置中隐藏)",
|
||||||
|
"excludeSecrets": "排除机密",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "是否删除应用?",
|
"one": "是否删除应用?",
|
||||||
"other": "是否删除应用?"
|
"other": "是否删除应用?"
|
||||||
|
76
lib/app_sources/farsroid.dart
Normal file
76
lib/app_sources/farsroid.dart
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:html/parser.dart';
|
||||||
|
import 'package:obtainium/app_sources/html.dart';
|
||||||
|
import 'package:obtainium/custom_errors.dart';
|
||||||
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
|
|
||||||
|
class Farsroid extends AppSource {
|
||||||
|
Farsroid() {
|
||||||
|
hosts = ['farsroid.com'];
|
||||||
|
name = 'Farsroid';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
|
RegExp standardUrlRegEx = RegExp(
|
||||||
|
'^https?://([^\\.]+\\.)${getSourceRegex(hosts)}/[^/]+',
|
||||||
|
caseSensitive: false,
|
||||||
|
);
|
||||||
|
RegExpMatch? match = standardUrlRegEx.firstMatch(url);
|
||||||
|
if (match == null) {
|
||||||
|
throw InvalidURLError(name);
|
||||||
|
}
|
||||||
|
return match.group(0)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<APKDetails> getLatestAPKDetails(
|
||||||
|
String standardUrl,
|
||||||
|
Map<String, dynamic> additionalSettings,
|
||||||
|
) async {
|
||||||
|
String appName = Uri.parse(standardUrl).pathSegments.last;
|
||||||
|
|
||||||
|
var res = await sourceRequest(standardUrl, additionalSettings);
|
||||||
|
if (res.statusCode != 200) {
|
||||||
|
throw getObtainiumHttpError(res);
|
||||||
|
}
|
||||||
|
var html = parse(res.body);
|
||||||
|
var dlinks = html.querySelectorAll('.download-links');
|
||||||
|
if (dlinks.isEmpty) {
|
||||||
|
throw NoReleasesError();
|
||||||
|
}
|
||||||
|
var postId = dlinks.first.attributes['data-post-id'] ?? '';
|
||||||
|
var version = dlinks.first.attributes['data-post-version'] ?? '';
|
||||||
|
|
||||||
|
if (postId.isEmpty || version.isEmpty) {
|
||||||
|
throw NoVersionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
var res2 = await sourceRequest(
|
||||||
|
Uri.encodeFull(
|
||||||
|
'https://${hosts[0]}/api/download-box/?post_id=$postId&post_version=$version',
|
||||||
|
),
|
||||||
|
additionalSettings,
|
||||||
|
);
|
||||||
|
var html2 = jsonDecode(res2.body)?['data']?['content'] as String? ?? '';
|
||||||
|
if (html2.isEmpty) {
|
||||||
|
throw NoAPKError();
|
||||||
|
}
|
||||||
|
var apkLinks =
|
||||||
|
(await grabLinksCommon(html2, res2.request!.url, additionalSettings))
|
||||||
|
.map((l) => MapEntry(Uri.parse(l.key).pathSegments.last, l.key))
|
||||||
|
.where(
|
||||||
|
(l) => l.key.toLowerCase().startsWith(
|
||||||
|
'$appName-$version'.toLowerCase(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
if (apkLinks.isEmpty) {
|
||||||
|
throw NoAPKError();
|
||||||
|
}
|
||||||
|
|
||||||
|
return APKDetails(version, apkLinks, AppNames(name, appName));
|
||||||
|
}
|
||||||
|
}
|
@@ -113,14 +113,23 @@ List<MapEntry<String, String>> getLinksInLines(String lines) =>
|
|||||||
|
|
||||||
// Given an HTTP response, grab some links according to the common additional settings
|
// Given an HTTP response, grab some links according to the common additional settings
|
||||||
// (those that apply to intermediate and final steps)
|
// (those that apply to intermediate and final steps)
|
||||||
Future<List<MapEntry<String, String>>> grabLinksCommon(
|
Future<List<MapEntry<String, String>>> grabLinksCommonFromRes(
|
||||||
Response res,
|
Response res,
|
||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
) async {
|
) async {
|
||||||
if (res.statusCode != 200) {
|
if (res.statusCode != 200) {
|
||||||
throw getObtainiumHttpError(res);
|
throw getObtainiumHttpError(res);
|
||||||
}
|
}
|
||||||
var html = parse(res.body);
|
return grabLinksCommon(res.body, res.request!.url, additionalSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note keys are URLs, values are filenames (opposite to the AppSource apkUrls)
|
||||||
|
Future<List<MapEntry<String, String>>> grabLinksCommon(
|
||||||
|
String rawBody,
|
||||||
|
Uri reqUrl,
|
||||||
|
Map<String, dynamic> additionalSettings,
|
||||||
|
) async {
|
||||||
|
var html = parse(rawBody);
|
||||||
List<MapEntry<String, String>> allLinks = html
|
List<MapEntry<String, String>> allLinks = html
|
||||||
.querySelectorAll('a')
|
.querySelectorAll('a')
|
||||||
.map(
|
.map(
|
||||||
@@ -132,21 +141,21 @@ Future<List<MapEntry<String, String>>> grabLinksCommon(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
.where((element) => element.key.isNotEmpty)
|
.where((element) => element.key.isNotEmpty)
|
||||||
.map((e) => MapEntry(ensureAbsoluteUrl(e.key, res.request!.url), e.value))
|
.map((e) => MapEntry(ensureAbsoluteUrl(e.key, reqUrl), e.value))
|
||||||
.toList();
|
.toList();
|
||||||
if (allLinks.isEmpty) {
|
if (allLinks.isEmpty) {
|
||||||
allLinks = getLinksInLines(res.body);
|
allLinks = getLinksInLines(rawBody);
|
||||||
}
|
}
|
||||||
if (allLinks.isEmpty) {
|
if (allLinks.isEmpty) {
|
||||||
// Getting desperate
|
// Getting desperate
|
||||||
try {
|
try {
|
||||||
var jsonStrings = collectAllStringsFromJSONObject(jsonDecode(res.body));
|
var jsonStrings = collectAllStringsFromJSONObject(jsonDecode(rawBody));
|
||||||
allLinks = getLinksInLines(jsonStrings.join('\n'));
|
allLinks = getLinksInLines(jsonStrings.join('\n'));
|
||||||
if (allLinks.isEmpty) {
|
if (allLinks.isEmpty) {
|
||||||
allLinks = getLinksInLines(
|
allLinks = getLinksInLines(
|
||||||
jsonStrings
|
jsonStrings
|
||||||
.map((l) {
|
.map((l) {
|
||||||
return ensureAbsoluteUrl(l, res.request!.url);
|
return ensureAbsoluteUrl(l, reqUrl);
|
||||||
})
|
})
|
||||||
.join('\n'),
|
.join('\n'),
|
||||||
);
|
);
|
||||||
@@ -368,7 +377,7 @@ class HTML extends AppSource {
|
|||||||
.where((l) => l['customLinkFilterRegex'].isNotEmpty == true)
|
.where((l) => l['customLinkFilterRegex'].isNotEmpty == true)
|
||||||
.toList();
|
.toList();
|
||||||
for (int i = 0; i < (additionalSettings['intermediateLink'].length); i++) {
|
for (int i = 0; i < (additionalSettings['intermediateLink'].length); i++) {
|
||||||
var intLinks = await grabLinksCommon(
|
var intLinks = await grabLinksCommonFromRes(
|
||||||
await sourceRequest(currentUrl, additionalSettings),
|
await sourceRequest(currentUrl, additionalSettings),
|
||||||
additionalSettings['intermediateLink'][i],
|
additionalSettings['intermediateLink'][i],
|
||||||
);
|
);
|
||||||
@@ -392,7 +401,7 @@ class HTML extends AppSource {
|
|||||||
.join('\n')
|
.join('\n')
|
||||||
.split('\n')
|
.split('\n')
|
||||||
.join('\\n');
|
.join('\\n');
|
||||||
links = await grabLinksCommon(res, additionalSettings);
|
links = await grabLinksCommonFromRes(res, additionalSettings);
|
||||||
links = filterApks(
|
links = filterApks(
|
||||||
links,
|
links,
|
||||||
additionalSettings['apkFilterRegEx'],
|
additionalSettings['apkFilterRegEx'],
|
||||||
|
@@ -5,6 +5,7 @@ import 'package:easy_localization/easy_localization.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:obtainium/providers/logs_provider.dart';
|
import 'package:obtainium/providers/logs_provider.dart';
|
||||||
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class ObtainiumError {
|
class ObtainiumError {
|
||||||
@@ -158,6 +159,7 @@ void showError(dynamic e, BuildContext context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String list2FriendlyString(List<String> list) {
|
String list2FriendlyString(List<String> list) {
|
||||||
|
var isUsingEnglish = isEnglish();
|
||||||
return list.length == 2
|
return list.length == 2
|
||||||
? '${list[0]} ${tr('and')} ${list[1]}'
|
? '${list[0]} ${tr('and')} ${list[1]}'
|
||||||
: list
|
: list
|
||||||
@@ -169,7 +171,7 @@ String list2FriendlyString(List<String> list) {
|
|||||||
(e.key == list.length - 1
|
(e.key == list.length - 1
|
||||||
? ''
|
? ''
|
||||||
: e.key == list.length - 2
|
: e.key == list.length - 2
|
||||||
? ' and '
|
? '${isUsingEnglish ? ',' : ''} and '
|
||||||
: ', '),
|
: ', '),
|
||||||
)
|
)
|
||||||
.join('');
|
.join('');
|
||||||
|
@@ -185,7 +185,6 @@ class _ObtainiumState extends State<Obtainium> {
|
|||||||
initPlatformState();
|
initPlatformState();
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
requestNonOptionalPermissions();
|
requestNonOptionalPermissions();
|
||||||
initForegroundService();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,28 +200,32 @@ class _ObtainiumState extends State<Obtainium> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void initForegroundService() {
|
void initForegroundService() {
|
||||||
FlutterForegroundTask.init(
|
// ignore: invalid_use_of_visible_for_testing_member
|
||||||
androidNotificationOptions: AndroidNotificationOptions(
|
if (!FlutterForegroundTask.isInitialized) {
|
||||||
channelId: 'bg_update',
|
FlutterForegroundTask.init(
|
||||||
channelName: tr('foregroundService'),
|
androidNotificationOptions: AndroidNotificationOptions(
|
||||||
channelDescription: tr('foregroundService'),
|
channelId: 'bg_update',
|
||||||
onlyAlertOnce: true,
|
channelName: tr('foregroundService'),
|
||||||
),
|
channelDescription: tr('foregroundService'),
|
||||||
iosNotificationOptions: const IOSNotificationOptions(
|
onlyAlertOnce: true,
|
||||||
showNotification: false,
|
),
|
||||||
playSound: false,
|
iosNotificationOptions: const IOSNotificationOptions(
|
||||||
),
|
showNotification: false,
|
||||||
foregroundTaskOptions: ForegroundTaskOptions(
|
playSound: false,
|
||||||
eventAction: ForegroundTaskEventAction.repeat(900000),
|
),
|
||||||
autoRunOnBoot: true,
|
foregroundTaskOptions: ForegroundTaskOptions(
|
||||||
autoRunOnMyPackageReplaced: true,
|
eventAction: ForegroundTaskEventAction.repeat(900000),
|
||||||
allowWakeLock: true,
|
autoRunOnBoot: true,
|
||||||
allowWifiLock: true,
|
autoRunOnMyPackageReplaced: true,
|
||||||
),
|
allowWakeLock: true,
|
||||||
);
|
allowWifiLock: true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<ServiceRequestResult?> startForegroundService(bool restart) async {
|
Future<ServiceRequestResult?> startForegroundService(bool restart) async {
|
||||||
|
initForegroundService();
|
||||||
if (await FlutterForegroundTask.isRunningService) {
|
if (await FlutterForegroundTask.isRunningService) {
|
||||||
if (restart) {
|
if (restart) {
|
||||||
return FlutterForegroundTask.restartService();
|
return FlutterForegroundTask.restartService();
|
||||||
|
@@ -232,7 +232,10 @@ class _AppPageState extends State<AppPage> {
|
|||||||
: const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 6),
|
: const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 6),
|
||||||
margin: const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 0),
|
margin: const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 0),
|
||||||
child: Text(
|
child: Text(
|
||||||
tr('downloadX', args: [tr('releaseAsset').toLowerCase()]),
|
tr(
|
||||||
|
'downloadX',
|
||||||
|
args: [lowerCaseIfEnglish(tr('releaseAsset'))],
|
||||||
|
),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: Theme.of(context).textTheme.labelSmall!.copyWith(
|
style: Theme.of(context).textTheme.labelSmall!.copyWith(
|
||||||
decoration: TextDecoration.underline,
|
decoration: TextDecoration.underline,
|
||||||
|
@@ -1037,7 +1037,7 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
var exportJSON = encoder.convert(
|
var exportJSON = encoder.convert(
|
||||||
appsProvider.generateExportJSON(
|
appsProvider.generateExportJSON(
|
||||||
appIds: selectedApps.map((e) => e.id).toList(),
|
appIds: selectedApps.map((e) => e.id).toList(),
|
||||||
overrideExportSettings: false,
|
overrideExportSettings: 0,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
String fn =
|
String fn =
|
||||||
@@ -1072,7 +1072,10 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
child: Text(
|
child: Text(
|
||||||
tr('downloadX', args: [tr('releaseAsset').toLowerCase()]),
|
tr(
|
||||||
|
'downloadX',
|
||||||
|
args: [lowerCaseIfEnglish(tr('releaseAsset'))],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
|
@@ -14,7 +14,6 @@ import 'package:obtainium/pages/import_export.dart';
|
|||||||
import 'package:obtainium/pages/settings.dart';
|
import 'package:obtainium/pages/settings.dart';
|
||||||
import 'package:obtainium/providers/apps_provider.dart';
|
import 'package:obtainium/providers/apps_provider.dart';
|
||||||
import 'package:obtainium/providers/settings_provider.dart';
|
import 'package:obtainium/providers/settings_provider.dart';
|
||||||
import 'package:obtainium/providers/source_provider.dart';
|
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:url_launcher/url_launcher_string.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
@@ -201,14 +200,6 @@ class _HomePageState extends State<HomePage> {
|
|||||||
),
|
),
|
||||||
context,
|
context,
|
||||||
);
|
);
|
||||||
await appsProvider
|
|
||||||
.checkUpdates(specificIds: result.key.map((e) => e.id).toList())
|
|
||||||
.catchError((e) {
|
|
||||||
if (e is Map && e['errors'] is MultiAppMultiError) {
|
|
||||||
showError(e['errors'].toString(), context);
|
|
||||||
}
|
|
||||||
return <App>[];
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw ObtainiumError(tr('unknown'));
|
throw ObtainiumError(tr('unknown'));
|
||||||
|
@@ -396,9 +396,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: TextButton(
|
child: TextButton(
|
||||||
style: outlineButtonStyle,
|
style: outlineButtonStyle,
|
||||||
onPressed:
|
onPressed: importInProgress
|
||||||
appsProvider.apps.isEmpty ||
|
|
||||||
importInProgress
|
|
||||||
? null
|
? null
|
||||||
: () {
|
: () {
|
||||||
runObtainiumExport(pickOnly: true);
|
runObtainiumExport(pickOnly: true);
|
||||||
@@ -414,9 +412,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
child: TextButton(
|
child: TextButton(
|
||||||
style: outlineButtonStyle,
|
style: outlineButtonStyle,
|
||||||
onPressed:
|
onPressed:
|
||||||
appsProvider.apps.isEmpty ||
|
importInProgress || snapshot.data == null
|
||||||
importInProgress ||
|
|
||||||
snapshot.data == null
|
|
||||||
? null
|
? null
|
||||||
: runObtainiumExport,
|
: runObtainiumExport,
|
||||||
child: Text(
|
child: Text(
|
||||||
@@ -459,11 +455,17 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
GeneratedFormSwitch(
|
GeneratedFormDropdown(
|
||||||
'exportSettings',
|
'exportSettings',
|
||||||
|
[
|
||||||
|
MapEntry('0', tr('none')),
|
||||||
|
MapEntry('1', tr('excludeSecrets')),
|
||||||
|
MapEntry('2', tr('all')),
|
||||||
|
],
|
||||||
label: tr('includeSettings'),
|
label: tr('includeSettings'),
|
||||||
defaultValue:
|
defaultValue: settingsProvider
|
||||||
settingsProvider.exportSettings,
|
.exportSettings
|
||||||
|
.toString(),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
@@ -477,7 +479,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
}
|
}
|
||||||
if (value['exportSettings'] != null) {
|
if (value['exportSettings'] != null) {
|
||||||
settingsProvider.exportSettings =
|
settingsProvider.exportSettings =
|
||||||
value['exportSettings'] == true;
|
int.parse(value['exportSettings']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -499,7 +501,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
else
|
else
|
||||||
Column(
|
Column(
|
||||||
children: [
|
children: [
|
||||||
const Divider(height: 32),
|
SizedBox(height: 32),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
@@ -543,7 +545,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
|
|||||||
child: Text(
|
child: Text(
|
||||||
tr(
|
tr(
|
||||||
'searchX',
|
'searchX',
|
||||||
args: [tr('source').toLowerCase()],
|
args: [lowerCaseIfEnglish(tr('source'))],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -710,6 +712,12 @@ class _SelectionModalState extends State<SelectionModal> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void selectAll({bool deselect = false}) {
|
||||||
|
for (var e in entrySelections.keys) {
|
||||||
|
entrySelections[e] = !deselect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
Map<MapEntry<String, List<String>>, bool> filteredEntrySelections = {};
|
Map<MapEntry<String, List<String>>, bool> filteredEntrySelections = {};
|
||||||
@@ -731,6 +739,32 @@ class _SelectionModalState extends State<SelectionModal> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
getSelectAllButton() {
|
||||||
|
if (widget.onlyOneSelectionAllowed) {
|
||||||
|
return SizedBox.shrink();
|
||||||
|
}
|
||||||
|
var noneSelected = entrySelections.values.where((v) => v == true).isEmpty;
|
||||||
|
return noneSelected
|
||||||
|
? TextButton(
|
||||||
|
style: const ButtonStyle(visualDensity: VisualDensity.compact),
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
selectAll();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Text(tr('selectAll')),
|
||||||
|
)
|
||||||
|
: TextButton(
|
||||||
|
style: const ButtonStyle(visualDensity: VisualDensity.compact),
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
selectAll(deselect: true);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Text(tr('deselectX', args: [''])),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
scrollable: true,
|
scrollable: true,
|
||||||
title: Text(widget.title ?? tr('pick')),
|
title: Text(widget.title ?? tr('pick')),
|
||||||
@@ -900,6 +934,7 @@ class _SelectionModalState extends State<SelectionModal> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
|
getSelectAllButton(),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
|
@@ -1025,13 +1025,19 @@ class AppsProvider with ChangeNotifier {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
getHost(String url) {
|
getHost(String url) {
|
||||||
|
if (url == 'placeholder') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
var temp = Uri.parse(url).host.split('.');
|
var temp = Uri.parse(url).host.split('.');
|
||||||
return temp.sublist(temp.length - 2).join('.');
|
return temp.sublist(temp.length - 2).join('.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the picked APK comes from an origin different from the source, get user confirmation (if context provided)
|
// If the picked APK comes from an origin different from the source, get user confirmation (if context provided)
|
||||||
if (appFileUrl != null &&
|
if (appFileUrl != null &&
|
||||||
getHost(appFileUrl.value) != getHost(app.url) &&
|
![
|
||||||
|
getHost(app.url),
|
||||||
|
'placeholder',
|
||||||
|
].contains(getHost(appFileUrl.value)) &&
|
||||||
context != null) {
|
context != null) {
|
||||||
if (!(settingsProvider.hideAPKOriginWarning) &&
|
if (!(settingsProvider.hideAPKOriginWarning) &&
|
||||||
await showDialog(
|
await showDialog(
|
||||||
@@ -1077,7 +1083,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
MapEntry<String, String>? apkUrl;
|
MapEntry<String, String>? apkUrl;
|
||||||
var trackOnly = apps[id]!.app.additionalSettings['trackOnly'] == true;
|
var trackOnly = apps[id]!.app.additionalSettings['trackOnly'] == true;
|
||||||
var refreshBeforeDownload =
|
var refreshBeforeDownload =
|
||||||
apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true;
|
apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true ||
|
||||||
|
apps[id]!.app.apkUrls.first.value == 'placeholder';
|
||||||
if (refreshBeforeDownload) {
|
if (refreshBeforeDownload) {
|
||||||
await checkUpdate(apps[id]!.app.id);
|
await checkUpdate(apps[id]!.app.id);
|
||||||
}
|
}
|
||||||
@@ -1121,6 +1128,7 @@ class AppsProvider with ChangeNotifier {
|
|||||||
obtainiumId,
|
obtainiumId,
|
||||||
strB: obtainiumTempId,
|
strB: obtainiumTempId,
|
||||||
);
|
);
|
||||||
|
appsToInstall = moveStrToEnd(appsToInstall, '$obtainiumId.fdroid');
|
||||||
|
|
||||||
Future<void> installFn(
|
Future<void> installFn(
|
||||||
String id,
|
String id,
|
||||||
@@ -1300,7 +1308,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
MapEntry<String, String>? fileUrl;
|
MapEntry<String, String>? fileUrl;
|
||||||
var refreshBeforeDownload =
|
var refreshBeforeDownload =
|
||||||
apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true;
|
apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true ||
|
||||||
|
apps[id]!.app.apkUrls.first.value == 'placeholder';
|
||||||
if (refreshBeforeDownload) {
|
if (refreshBeforeDownload) {
|
||||||
await checkUpdate(apps[id]!.app.id);
|
await checkUpdate(apps[id]!.app.id);
|
||||||
}
|
}
|
||||||
@@ -1964,7 +1973,7 @@ class AppsProvider with ChangeNotifier {
|
|||||||
|
|
||||||
Map<String, dynamic> generateExportJSON({
|
Map<String, dynamic> generateExportJSON({
|
||||||
List<String>? appIds,
|
List<String>? appIds,
|
||||||
bool? overrideExportSettings,
|
int? overrideExportSettings,
|
||||||
}) {
|
}) {
|
||||||
Map<String, dynamic> finalExport = {};
|
Map<String, dynamic> finalExport = {};
|
||||||
finalExport['apps'] = apps.values
|
finalExport['apps'] = apps.values
|
||||||
@@ -1977,15 +1986,18 @@ class AppsProvider with ChangeNotifier {
|
|||||||
})
|
})
|
||||||
.map((e) => e.app.toJson())
|
.map((e) => e.app.toJson())
|
||||||
.toList();
|
.toList();
|
||||||
bool shouldExportSettings = settingsProvider.exportSettings;
|
int shouldExportSettings = settingsProvider.exportSettings;
|
||||||
if (overrideExportSettings != null) {
|
if (overrideExportSettings != null) {
|
||||||
shouldExportSettings = overrideExportSettings;
|
shouldExportSettings = overrideExportSettings;
|
||||||
}
|
}
|
||||||
if (shouldExportSettings) {
|
if (shouldExportSettings > 0) {
|
||||||
|
var settingsValueKeys = settingsProvider.prefs?.getKeys();
|
||||||
|
if (shouldExportSettings < 2) {
|
||||||
|
settingsValueKeys?.removeWhere((k) => k.endsWith('-creds'));
|
||||||
|
}
|
||||||
finalExport['settings'] = Map<String, Object?>.fromEntries(
|
finalExport['settings'] = Map<String, Object?>.fromEntries(
|
||||||
(settingsProvider.prefs
|
(settingsValueKeys
|
||||||
?.getKeys()
|
?.map((key) => MapEntry(key, settingsProvider.prefs?.get(key)))
|
||||||
.map((key) => MapEntry(key, settingsProvider.prefs?.get(key)))
|
|
||||||
.toList()) ??
|
.toList()) ??
|
||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
@@ -2152,7 +2164,7 @@ class _AppFilePickerState extends State<AppFilePicker> {
|
|||||||
scrollable: true,
|
scrollable: true,
|
||||||
title: Text(
|
title: Text(
|
||||||
widget.pickAnyAsset
|
widget.pickAnyAsset
|
||||||
? tr('selectX', args: [tr('releaseAsset').toLowerCase()])
|
? tr('selectX', args: [lowerCaseIfEnglish(tr('releaseAsset'))])
|
||||||
: tr('pickAnAPK'),
|
: tr('pickAnAPK'),
|
||||||
),
|
),
|
||||||
content: Column(
|
content: Column(
|
||||||
@@ -2511,7 +2523,10 @@ Future<void> bgUpdateCheck(String taskId, Map<String, dynamic>? params) async {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (toInstall.isNotEmpty) {
|
if (toInstall.isNotEmpty) {
|
||||||
var tempObtArr = toInstall.where((element) => element.key == obtainiumId);
|
var tempObtArr = toInstall.where(
|
||||||
|
(element) =>
|
||||||
|
element.key == obtainiumId || element.key == '$obtainiumId.fdroid',
|
||||||
|
);
|
||||||
if (tempObtArr.isNotEmpty) {
|
if (tempObtArr.isNotEmpty) {
|
||||||
// Move obtainium to the end of the list as it must always install last
|
// Move obtainium to the end of the list as it must always install last
|
||||||
var obt = tempObtArr.first;
|
var obt = tempObtArr.first;
|
||||||
|
@@ -453,12 +453,19 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get exportSettings {
|
int get exportSettings {
|
||||||
return prefs?.getBool('exportSettings') ?? false;
|
try {
|
||||||
|
return prefs?.getInt('exportSettings') ??
|
||||||
|
1; // 0 for no, 1 for yes but no secrets, 2 for everything
|
||||||
|
} catch (e) {
|
||||||
|
var val = prefs?.getBool('exportSettings') == true ? 1 : 0;
|
||||||
|
prefs?.setInt('exportSettings', val);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set exportSettings(bool val) {
|
set exportSettings(int val) {
|
||||||
prefs?.setBool('exportSettings', val);
|
prefs?.setInt('exportSettings', val > 2 || val < 0 ? 1 : val);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,6 +16,7 @@ import 'package:obtainium/app_sources/aptoide.dart';
|
|||||||
import 'package:obtainium/app_sources/codeberg.dart';
|
import 'package:obtainium/app_sources/codeberg.dart';
|
||||||
import 'package:obtainium/app_sources/coolapk.dart';
|
import 'package:obtainium/app_sources/coolapk.dart';
|
||||||
import 'package:obtainium/app_sources/directAPKLink.dart';
|
import 'package:obtainium/app_sources/directAPKLink.dart';
|
||||||
|
import 'package:obtainium/app_sources/farsroid.dart';
|
||||||
import 'package:obtainium/app_sources/fdroid.dart';
|
import 'package:obtainium/app_sources/fdroid.dart';
|
||||||
import 'package:obtainium/app_sources/fdroidrepo.dart';
|
import 'package:obtainium/app_sources/fdroidrepo.dart';
|
||||||
import 'package:obtainium/app_sources/github.dart';
|
import 'package:obtainium/app_sources/github.dart';
|
||||||
@@ -63,11 +64,13 @@ class APKDetails {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
List<List<String>> stringMapListTo2DList(List<MapEntry<String, String>> mapList) =>
|
List<List<String>> stringMapListTo2DList(
|
||||||
mapList.map((e) => [e.key, e.value]).toList();
|
List<MapEntry<String, String>> mapList,
|
||||||
|
) => mapList.map((e) => [e.key, e.value]).toList();
|
||||||
|
|
||||||
List<MapEntry<String, String>> assumed2DlistToStringMapList(List<dynamic> arr) =>
|
List<MapEntry<String, String>> assumed2DlistToStringMapList(
|
||||||
arr.map((e) => MapEntry(e[0] as String, e[1] as String)).toList();
|
List<dynamic> arr,
|
||||||
|
) => arr.map((e) => MapEntry(e[0] as String, e[1] as String)).toList();
|
||||||
|
|
||||||
// App JSON schema has changed multiple times over the many versions of Obtainium
|
// App JSON schema has changed multiple times over the many versions of Obtainium
|
||||||
// This function takes an App JSON and modifies it if needed to conform to the latest (current) version
|
// This function takes an App JSON and modifies it if needed to conform to the latest (current) version
|
||||||
@@ -1049,6 +1052,9 @@ List<MapEntry<String, String>> filterApks(
|
|||||||
return apkUrls;
|
return apkUrls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isEnglish() => tr('and') == 'and'; // Quick hack, find a better way
|
||||||
|
String lowerCaseIfEnglish(String str) => isEnglish() ? str.toLowerCase() : str;
|
||||||
|
|
||||||
bool isVersionPseudo(App app) =>
|
bool isVersionPseudo(App app) =>
|
||||||
app.additionalSettings['trackOnly'] == true ||
|
app.additionalSettings['trackOnly'] == true ||
|
||||||
(app.installedVersion != null &&
|
(app.installedVersion != null &&
|
||||||
@@ -1074,6 +1080,7 @@ class SourceProvider {
|
|||||||
Jenkins(),
|
Jenkins(),
|
||||||
APKMirror(),
|
APKMirror(),
|
||||||
RuStore(),
|
RuStore(),
|
||||||
|
Farsroid(),
|
||||||
TelegramApp(),
|
TelegramApp(),
|
||||||
NeutronCode(),
|
NeutronCode(),
|
||||||
DirectAPKLink(),
|
DirectAPKLink(),
|
||||||
|
20
pubspec.lock
20
pubspec.lock
@@ -96,10 +96,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: background_fetch
|
name: background_fetch
|
||||||
sha256: "442e82f508708be89fd0cc7e1dc3b27bc7c6c8c39a47967ccb7ed1c57b9108b5"
|
sha256: e767745c31f71660063985c982497995d0a71755d3f1b0c8e8c96988d64d3003
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.8"
|
version: "1.4.0"
|
||||||
battery_plus:
|
battery_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -288,10 +288,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: file_picker
|
name: file_picker
|
||||||
sha256: ef9908739bdd9c476353d6adff72e88fd00c625f5b959ae23f7567bd5137db0a
|
sha256: "13ba4e627ef24503a465d1d61b32596ce10eb6b8903678d362a528f9939b4aa8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.2.0"
|
version: "10.2.1"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -349,10 +349,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_charset_detector_darwin
|
name: flutter_charset_detector_darwin
|
||||||
sha256: "65d91133ea8ef06a440941b1126702b4735a8bd487430b41760e706a0b6b26d4"
|
sha256: "8cf51c3e16c2fb4ec4e309f16f6046a0ddf1ff57d1b6b696410d077a9ffbfb15"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.1"
|
||||||
flutter_charset_detector_platform_interface:
|
flutter_charset_detector_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -955,10 +955,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: sqflite_common
|
name: sqflite_common
|
||||||
sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b"
|
sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.5"
|
version: "2.5.6"
|
||||||
sqflite_darwin:
|
sqflite_darwin:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1163,10 +1163,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_platform_interface
|
name: webview_flutter_platform_interface
|
||||||
sha256: f0dc2dc3a2b1e3a6abdd6801b9355ebfeb3b8f6cde6b9dc7c9235909c4a1f147
|
sha256: "63d26ee3aca7256a83ccb576a50272edd7cfc80573a4305caa98985feb493ee0"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.13.1"
|
version: "2.14.0"
|
||||||
webview_flutter_wkwebview:
|
webview_flutter_wkwebview:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@@ -16,7 +16,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: 1.2.1+2317
|
version: 1.2.2+2318
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.8.1
|
sdk: ^3.8.1
|
||||||
|
Reference in New Issue
Block a user