mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-11-04 07:13:28 +01:00 
			
		
		
		
	Compare commits
	
		
			61 Commits
		
	
	
		
			v0.14.13-b
			...
			v0.14.20-b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					2f4e176116 | ||
| 
						 | 
					3ea8dc598c | ||
| 
						 | 
					3f63dc0180 | ||
| 
						 | 
					1f6701b183 | ||
| 
						 | 
					3a170fbf90 | ||
| 
						 | 
					b57e523a07 | ||
| 
						 | 
					8c4509f255 | ||
| 
						 | 
					3878c287be | ||
| 
						 | 
					7789e3f3a7 | ||
| 
						 | 
					94ac744f41 | ||
| 
						 | 
					a83211f260 | ||
| 
						 | 
					4f733affc5 | ||
| 
						 | 
					ffb2a982bc | ||
| 
						 | 
					9658a65661 | ||
| 
						 | 
					68d4083708 | ||
| 
						 | 
					af5377d2eb | ||
| 
						 | 
					6ac8ad543c | ||
| 
						 | 
					c10a63e76e | ||
| 
						 | 
					b423a2af52 | ||
| 
						 | 
					9b70289345 | ||
| 
						 | 
					2a94c1f33a | ||
| 
						 | 
					ea205c1acb | ||
| 
						 | 
					6e1767730b | ||
| 
						 | 
					3fc1ab37d7 | ||
| 
						 | 
					c4a3f7333d | ||
| 
						 | 
					fb820e01b1 | ||
| 
						 | 
					504aca5287 | ||
| 
						 | 
					ae7d5546ae | ||
| 
						 | 
					8bcb10b281 | ||
| 
						 | 
					845eaab73e | ||
| 
						 | 
					298ff190ec | ||
| 
						 | 
					734a548bc3 | ||
| 
						 | 
					591973d97f | ||
| 
						 | 
					a2f57ecd66 | ||
| 
						 | 
					13dcfb479d | ||
| 
						 | 
					3328d80130 | ||
| 
						 | 
					f9df3ac0e2 | ||
| 
						 | 
					61d66e80d8 | ||
| 
						 | 
					93e0360116 | ||
| 
						 | 
					2cec5f7934 | ||
| 
						 | 
					8d4a09b007 | ||
| 
						 | 
					6d8d2fa99d | ||
| 
						 | 
					59ecd55530 | ||
| 
						 | 
					77fcc89e37 | ||
| 
						 | 
					7d63da4d9c | ||
| 
						 | 
					8eea0bae99 | ||
| 
						 | 
					f5dcd8f776 | ||
| 
						 | 
					e1f2baeeda | ||
| 
						 | 
					84d8ff8b0b | ||
| 
						 | 
					9862c22fdb | ||
| 
						 | 
					8c82f53dd2 | ||
| 
						 | 
					5cf4c21ce3 | ||
| 
						 | 
					4951f62d4a | ||
| 
						 | 
					4c0c4b7010 | ||
| 
						 | 
					96051e614c | ||
| 
						 | 
					a2e494b2ba | ||
| 
						 | 
					2d5a9bec84 | ||
| 
						 | 
					7d9571cfdd | ||
| 
						 | 
					acc6a780fa | ||
| 
						 | 
					0e36d42a06 | ||
| 
						 | 
					5cfddd807a | 
@@ -253,6 +253,13 @@
 | 
			
		||||
   "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
   "pickExportDir": "Pick Export Directory",
 | 
			
		||||
   "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
   "filterVersionsByRegEx": "Filter Versions by Regular Expression",
 | 
			
		||||
   "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
 | 
			
		||||
   "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
   "reverseSort": "Reverse sorting",
 | 
			
		||||
   "debugMenu": "Debug Menu",
 | 
			
		||||
   "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
   "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
     "removeAppQuestion": {
 | 
			
		||||
      "one": "Želite li ukloniti aplikaciju?",
 | 
			
		||||
      "other": "Želite li ukloniti aplikacije?"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										319
									
								
								assets/translations/cs.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										319
									
								
								assets/translations/cs.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,319 @@
 | 
			
		||||
{
 | 
			
		||||
    "invalidURLForSource": "Žádná platná {} adresa URL aplikace",
 | 
			
		||||
    "noReleaseFound": "Nebyla nalezena odpovídající verze",
 | 
			
		||||
    "noVersionFound": "Nelze určit verzi vydání",
 | 
			
		||||
    "urlMatchesNoSource": "URL neodpovídá žádnému známému zdroji",
 | 
			
		||||
    "cantInstallOlderVersion": "Nelze nainstalovat starší verzi aplikace",
 | 
			
		||||
    "appIdMismatch": "ID staženého balíčku neodpovídá ID existující aplikace",
 | 
			
		||||
    "functionNotImplemented": "Tato třída nemá implementovánu tuto funkci",
 | 
			
		||||
    "placeholder": "Zástupce",
 | 
			
		||||
    "someErrors": "Vyskytly se nějaké chyby",
 | 
			
		||||
    "unexpectedError": "Neočekávaná chyba",
 | 
			
		||||
    "ok": "Okay",
 | 
			
		||||
    "and": "a",
 | 
			
		||||
    "githubPATLabel": "GitHub Personal Access Token (Raises Rate Limit)",
 | 
			
		||||
    "includePrereleases": "includepreleases",
 | 
			
		||||
    "fallbackToOlderReleases": "Fallback to older releases",
 | 
			
		||||
    "filterReleaseTitlesByRegEx": "Názvy vydání podle regulárního výrazu\filtr",
 | 
			
		||||
    "invalidRegEx": "Neplatný regulární výraz",
 | 
			
		||||
    "noDescription": "Žádný popis",
 | 
			
		||||
    "cancel": "Zrušit",
 | 
			
		||||
    "continue": "Pokračovat",
 | 
			
		||||
    "requiredInBracets": "(Required)",
 | 
			
		||||
    "dropdownNoOptsError": "ERROR: DROPDOWN MUSÍ MÍT AŽ JEDNU MOŽNOST",
 | 
			
		||||
    "color": "barva",
 | 
			
		||||
    "githubStarredRepos": "GitHub Starred Repos",
 | 
			
		||||
    "uname": "username",
 | 
			
		||||
    "wrongArgNum": "Špatný počet předložených argumentů",
 | 
			
		||||
    "xIsTrackOnly":"{} je určeno pouze pro sledování",
 | 
			
		||||
    "source": "zdroj",
 | 
			
		||||
    "app": "App",
 | 
			
		||||
    "appsFromSourceAreTrackOnly": "Aplikace z tohoto zdroje jsou 'Jen sledovány'.",
 | 
			
		||||
    "youPickedTrackOnly": "Vybrali jste možnost 'Jen sledovat'.",
 | 
			
		||||
    "trackOnlyAppDescription": "Aplikace je sledována kvůli aktualizacím, ale Obtainium ji nebude stahovat ani instalovat.",
 | 
			
		||||
    "cancelled": "Zrušeno",
 | 
			
		||||
    "appAlreadyAdded": "Aplikace již přidána",
 | 
			
		||||
    "alreadyUpToDateQuestion": "App already up to date?",
 | 
			
		||||
    "addApp": "Přidat aplikaci",
 | 
			
		||||
    "appSourceURL": "zdrojová adresa URL aplikace",
 | 
			
		||||
    "error": "Chyba",
 | 
			
		||||
    "add": "Přidat",
 | 
			
		||||
    "searchSomeSourcesLabel": "Vyhledávání (pouze konkrétní zdroje)",
 | 
			
		||||
    "search": "Hledat",
 | 
			
		||||
    "additionalOptsFor": "Další možnosti pro {}",
 | 
			
		||||
    "supportedSources": "Podporované zdroje",
 | 
			
		||||
    "trackOnlyInBrackets": "(Pouze stopy)",
 | 
			
		||||
    "searchableInBrackets": "(s možností vyhledávání)",
 | 
			
		||||
    "appsString": "Apky",
 | 
			
		||||
    "noApps": "Žádné aplikace",
 | 
			
		||||
    "noAppsForFilter": "žádné aplikace pro vybraný filtr",
 | 
			
		||||
    "byX": "By {}",
 | 
			
		||||
    "percentProgress": "Pokrok: {}%",
 | 
			
		||||
    "pleaseWait": "Počkejte prosím",
 | 
			
		||||
    "updateAvailable": "Aktualizace je k dispozici",
 | 
			
		||||
    "estimateInBracketsShort": "(approx.)",
 | 
			
		||||
    "notInstalled": "Není nainstalováno",
 | 
			
		||||
    "estimateInBrackets": "(přibližně)",
 | 
			
		||||
    "selectAll": "Vybrat Vše",
 | 
			
		||||
    "deselectN": "{} deselected",
 | 
			
		||||
    "xWillBeRemovedButRemainInstalled":"{} bude odstraněn z Obtainium, ale zůstane nainstalován v zařízení.",
 | 
			
		||||
    "removeSelectedAppsQuestion": "Odebrat vybrané aplikace?",
 | 
			
		||||
    "removeSelectedApps": "Odebrat vybrané aplikace",
 | 
			
		||||
    "updateX": "Aktualizovat {}",
 | 
			
		||||
    "installX": "Instalovat {}",
 | 
			
		||||
    "markXTrackOnlyAsUpdated": "Označit {}\n(Track-Only)\njako aktualizované",
 | 
			
		||||
    "changeX": "Změnit {}",
 | 
			
		||||
    "installUpdateApps": "Instalovat/aktualizovat aplikace",
 | 
			
		||||
    "installUpdateSelectedApps": "Instalovat/aktualizovat vybrané aplikace",
 | 
			
		||||
    "markXSelectedAppsAsUpdated": "označit {} vybrané aplikace jako aktuální?",
 | 
			
		||||
    "no": "Ne",
 | 
			
		||||
    "yes": "ano",
 | 
			
		||||
    "markSelectedAppsUpdated": "označit vybrané aplikace jako aktuální",
 | 
			
		||||
    "pinToTop": "Připnout nahoru",
 | 
			
		||||
    "unpinFromTop": "'Unpin Top'",
 | 
			
		||||
    "resetInstallStatusForSelectedAppsQuestion": "Obnovit stav instalace vybraných aplikací?",
 | 
			
		||||
    "installStatusOfXWillBeResetExplanation": "Stav instalace vybraných aplikací bude resetován. To může být užitečné, pokud je verze aplikace zobrazená v Obtainium nesprávná z důvodu neúspěšných aktualizací nebo jiných problémů.",
 | 
			
		||||
    "shareSelectedAppURLs": "Sdílet adresy URL vybraných aplikací",
 | 
			
		||||
    "resetInstallStatus": "Obnovení stavu instalace",
 | 
			
		||||
    "more": "more",
 | 
			
		||||
    "removeOutdatedFilter": "Odstranit filtr aplikace 'Not Current'",
 | 
			
		||||
    "showOutdatedOnly": "Zobrazit pouze aplikace, které nejsou aktuální",
 | 
			
		||||
    "filter": "Filtr",
 | 
			
		||||
    "filterActive": "Filtr *",
 | 
			
		||||
    "filterApps": "Filtrovat aplikace",
 | 
			
		||||
    "appName": "název aplikace",
 | 
			
		||||
    "author": "Autor",
 | 
			
		||||
    "upToDateApps": "Apps with current version",
 | 
			
		||||
    "nonInstalledApps": "Apps not installed",
 | 
			
		||||
    "importExport": "Import/Export",
 | 
			
		||||
    "settings": "Nastavení",
 | 
			
		||||
    "exportedTo": "Exportováno do {}",
 | 
			
		||||
    "obtainiumExport": "Obtainium Export",
 | 
			
		||||
    "invalidInput": "Neplatný vstup",
 | 
			
		||||
    "importedX": "Importováno {}",
 | 
			
		||||
    "obtainiumImport": "Obtainium Import",
 | 
			
		||||
    "importFromURLList": "Import ze seznamu URL",
 | 
			
		||||
    "searchQuery": "Search Query",
 | 
			
		||||
    "appURLList": "App URL List",
 | 
			
		||||
    "line": "line",
 | 
			
		||||
    "searchX": "Search {}",
 | 
			
		||||
    "noResults": "Nebyly nalezeny žádné výsledky",
 | 
			
		||||
    "importX": "Import {}",
 | 
			
		||||
    "importedAppsIdDisclaimer": "Importované aplikace mohou být nesprávně zobrazeny jako \"Neinstalované\". Chcete-li to opravit, nainstalujte je znovu prostřednictvím Obtainium. To nemá vliv na data aplikací. Ovlivňuje pouze metody importu URL a třetích stran.",
 | 
			
		||||
    "importErrors": "Import Errors",
 | 
			
		||||
    "importedXOfYApps":"{}importováno {}aplikací.",
 | 
			
		||||
    "followingURLsHadErrors": "U následujících adres URL došlo k chybám:",
 | 
			
		||||
    "okay": "Okay",
 | 
			
		||||
    "selectURL": "Select URL",
 | 
			
		||||
    "selectURLs": "Select URLs",
 | 
			
		||||
    "pick": "Vybrat",
 | 
			
		||||
    "theme": "Téma",
 | 
			
		||||
    "dark": "Tmavé",
 | 
			
		||||
    "light": "Světlé",
 | 
			
		||||
    "followSystem": "Follow System",
 | 
			
		||||
    "obtainium": "Obtainium",
 | 
			
		||||
    "materialYou": "Material You",
 | 
			
		||||
    "useBlackTheme": "Použít čistě černé tmavé téma",
 | 
			
		||||
    "appSortBy": "Seřadit aplikaci podle",
 | 
			
		||||
    "authorName": "autor/jméno",
 | 
			
		||||
    "nameAuthor": "jméno/autor",
 | 
			
		||||
    "asAdded": "AsAdded",
 | 
			
		||||
    "appSortOrder": "Sort App By",
 | 
			
		||||
    "ascending": "Vzestupně",
 | 
			
		||||
    "descending": "Sestupně",
 | 
			
		||||
    "bgUpdateCheckInterval": "Background Update Check Interval",
 | 
			
		||||
    "neverManualOnly": "Nikdy - pouze ručně",
 | 
			
		||||
    "appearance": "Vzhled",
 | 
			
		||||
    "showWebInAppView": "Zobrazit zdrojové webové stránky v zobrazení aplikace",
 | 
			
		||||
    "pinUpdates": "Připnout aplikace s aktualizacemi nahoře",
 | 
			
		||||
    "updates": "Updates",
 | 
			
		||||
    "sourceSpecific": "source specific",
 | 
			
		||||
    "appSource": "zdroj aplikace",
 | 
			
		||||
    "noLogs": "Žádné protokoly",
 | 
			
		||||
    "appLogs": "App Logs",
 | 
			
		||||
    "close": "Zavřít",
 | 
			
		||||
    "share": "Sdílet",
 | 
			
		||||
    "appNotFound": "App not found",
 | 
			
		||||
    "obtainiumExportHyphenatedLowercase": "obtainium-export",
 | 
			
		||||
    "pickAnAPK": "Vybrat APK",
 | 
			
		||||
    "appHasMoreThanOnePackage":"{} má více než jeden balíček:",
 | 
			
		||||
    "deviceSupportsXArch": "Vaše zařízení podporuje architekturu CPU {}.",
 | 
			
		||||
    "deviceSupportsFollowingArchs": "Vaše zařízení podporuje následující architektury CPU:",
 | 
			
		||||
    "warning": "Varování",
 | 
			
		||||
    "sourceIsXButPackageFromYPrompt": "The app source is '{}' but the release package is from '{}'. Pokračovat?",
 | 
			
		||||
    "updatesAvailable": "dostupné aktualizace",
 | 
			
		||||
    "updatesAvailableNotifDescription": "Upozorňuje uživatele, že jsou k dispozici aktualizace pro jednu nebo více aplikací sledovaných Obtainium",
 | 
			
		||||
    "noNewUpdates": "Žádné nové aktualizace.",
 | 
			
		||||
    "xHasAnUpdate":"{} má aktualizaci.",
 | 
			
		||||
    "appsUpdated": "Aplikace aktualizovány",
 | 
			
		||||
    "appsUpdatedNotifDescription": "Upozorňuje uživatele, že byly provedeny aktualizace jedné nebo více aplikací na pozadí",
 | 
			
		||||
    "xWasUpdatedToY":"{} byl aktualizován na {}",
 | 
			
		||||
    "errorCheckingUpdates": "Chybová kontrola aktualizací",
 | 
			
		||||
    "errorCheckingUpdatesNotifDescription": "Oznámení zobrazené při neúspěšné kontrole aktualizací na pozadí",
 | 
			
		||||
    "appsRemoved": "Odstraněné aplikace",
 | 
			
		||||
    "appsRemovedNotifDescription": "Oznámení uživateli, že jedna nebo více aplikací byly odstraněny z důvodu chyb při načítání",
 | 
			
		||||
    "xWasRemovedDueToErrorY":"{} byla odstraněna z důvodu následující chyby: {}",
 | 
			
		||||
    "completeAppInstallation": "Dokončit instalaci aplikace",
 | 
			
		||||
    "obtainiumMustBeOpenToInstallApps": "Obtainium musí být otevřeno, aby bylo možné instalovat aplikace",
 | 
			
		||||
    "completeAppInstallationNotifDescription": "Vyzvat uživatele k návratu do Obtainium pro dokončení instalace aplikací",
 | 
			
		||||
    "checkingForUpdates": "Zkontrolovat aktualizace",
 | 
			
		||||
    "checkingForUpdatesNotifDescription": "Dočasné oznámení zobrazené při kontrole aktualizací",
 | 
			
		||||
    "pleaseAllowInstallPerm": "Povolte prosím Obtainium instalovat aplikace",
 | 
			
		||||
    "trackOnly": "Jen sledovat",
 | 
			
		||||
    "errorWithHttpStatusCode": "error {}",
 | 
			
		||||
    "versionCorrectionDisabled": "Oprava verze zakázána (zásuvný modul zřejmě nefunguje)",
 | 
			
		||||
    "unknown": "Unknown",
 | 
			
		||||
    "none": "None",
 | 
			
		||||
    "never": "Nikdy",
 | 
			
		||||
    "latestVersionX": "Nejnovější verze: {}",
 | 
			
		||||
    "installedVersionX": "Nainstalovaná verze: {}",
 | 
			
		||||
    "lastUpdateCheckX": "Poslední kontrola aktualizace: {}",
 | 
			
		||||
    "remove": "Odebrat",
 | 
			
		||||
    "yesMarkUpdated": "Ano, označit jako aktualizované",
 | 
			
		||||
    "fdroid": "F-Droid Official",
 | 
			
		||||
    "appIdOrName": "App ID or Name",
 | 
			
		||||
    "appId": "App ID",
 | 
			
		||||
    "appWithIdOrNameNotFound": "Žádná aplikace s tímto ID nebo názvem nebyla nalezena",
 | 
			
		||||
    "reposHaveMultipleApps": "Repozitáře mohou obsahovat více aplikací",
 | 
			
		||||
    "fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
 | 
			
		||||
    "steam": "Steam",
 | 
			
		||||
    "steamMobile": "Steam Mobile",
 | 
			
		||||
    "steamChat": "Steam Chat",
 | 
			
		||||
    "install": "Install",
 | 
			
		||||
    "markInstalled": "Označit jako nainstalovaný",
 | 
			
		||||
    "update": "Aktualizovat",
 | 
			
		||||
    "markUpdated": "Označit jako aktuální",
 | 
			
		||||
    "additionalOptions": "Additional Options",
 | 
			
		||||
    "disableVersionDetection": "Zakázat detekci verze",
 | 
			
		||||
    "noVersionDetectionExplanation": "Tato volba by měla být použita pouze u aplikací, kde detekce verzí nefunguje správně.",
 | 
			
		||||
    "downloadingX": "download {}",
 | 
			
		||||
    "downloadNotifDescription": "Informuje uživatele o průběhu stahování aplikace",
 | 
			
		||||
    "noAPKFound": "Žádná APK nebyla nalezena",
 | 
			
		||||
    "noVersionDetection": "Žádná detekce verze",
 | 
			
		||||
    "categorize": "Kategorizovat",
 | 
			
		||||
    "categories": "Kategorie",
 | 
			
		||||
    "category": "kategorie",
 | 
			
		||||
    "noCategory": "Žádná kategorie",
 | 
			
		||||
    "noCategories": "Žádné kategorie",
 | 
			
		||||
    "deleteCategoriesQuestion": "Smazat kategorie?",
 | 
			
		||||
    "categoryDeleteWarning": "Všechny aplikace v odstraněných kategoriích budou nastaveny na nekategorizované.",
 | 
			
		||||
    "addCategory": "přidat kategorii",
 | 
			
		||||
    "label": "štítek",
 | 
			
		||||
    "language": "Jazyk",
 | 
			
		||||
    "copiedToClipboard": "zkopírováno do schránky",
 | 
			
		||||
    "storagePermissionDenied": "povolení k ukládání odepřeno",
 | 
			
		||||
    "selectedCategorizeWarning": "Toto nahradí všechna stávající nastavení kategorií pro vybrané aplikace.",
 | 
			
		||||
    "filterAPKsByRegEx": "Filtrovat APK podle regulárního výrazu",
 | 
			
		||||
    "removeFromObtainium": "Odebrat z Obtainium",
 | 
			
		||||
    "uninstallFromDevice": "Odinstalovat ze zařízení",
 | 
			
		||||
    "onlyWorksWithNonVersionDetectApps": "Funguje pouze pro aplikace s vypnutou detekcí verze.",
 | 
			
		||||
    "releaseDateAsVersion": "Použít datum vydání jako verzi",
 | 
			
		||||
    "releaseDateAsVersionExplanation": "Tato možnost by měla být použita pouze u aplikací, u kterých detekce verze nefunguje správně, ale je k dispozici datum vydání.",
 | 
			
		||||
    "changes": "Změny",
 | 
			
		||||
    "releaseDate": "datum vydání",
 | 
			
		||||
    "importFromURLsInFile": "Importovat adresy URL ze souboru (např. OPML)",
 | 
			
		||||
    "versionDetection": "detekce verze",
 | 
			
		||||
    "standardVersionDetection": "standardní detekce verze",
 | 
			
		||||
    "groupByCategory": "Seskupit podle kategorie",
 | 
			
		||||
    "autoApkFilterByArch": "Pokud je to možné, pokuste se filtrovat soubory APK podle architektury procesoru",
 | 
			
		||||
    "overrideSource": "Přepsat zdroj",
 | 
			
		||||
    "dontShowAgain": "Nezobrazovat znovu",
 | 
			
		||||
    "dontShowTrackOnlyWarnings": "Nezobrazovat varování pro 'Track Only'",
 | 
			
		||||
    "dontShowAPKOriginWarnings": "Nezobrazovat varování pro původ APK",
 | 
			
		||||
    "moveNonInstalledAppsToBottom": "Přesunout nenainstalované aplikace na konec zobrazení Aplikace",
 | 
			
		||||
    "gitlabPATLabel": "GitLab Personal Access Token\n(Umožňuje vyhledávání a lepší zjišťování APK)",
 | 
			
		||||
    "about": "About",
 | 
			
		||||
    "requiresCredentialsInSettings": "Vyžaduje další pověření (v nastavení)",
 | 
			
		||||
    "checkOnStart": "Zkontrolovat jednou při spuštění",
 | 
			
		||||
    "tryInferAppIdFromCode": "Pokusit se určit ID aplikace ze zdrojového kódu",
 | 
			
		||||
    "removeOnExternalUninstall": "Automaticky odstranit externě odinstalované aplikace",
 | 
			
		||||
    "pickHighestVersionCode": "Automaticky vybrat APK s kódem nejvyšší verze",
 | 
			
		||||
    "checkUpdateOnDetailPage": "Zkontrolovat aktualizace při otevření stránky s podrobnostmi aplikace",
 | 
			
		||||
    "disablePageTransitions": "Zakázat animace pro přechody stránek",
 | 
			
		||||
    "reversePageTransitions": "Obrátit animace pro přechody stránek",
 | 
			
		||||
    "minStarCount": "Minimální počet hvězdiček",
 | 
			
		||||
    "addInfoBelow": "Přidat tuto informaci na konec stránky",
 | 
			
		||||
    "addInfoInSettings": "Přidat tuto informaci do nastavení.",
 | 
			
		||||
    "githubSourceNote": "Omezení rychlosti GitHub lze obejít pomocí klíče API.",
 | 
			
		||||
    "gitlabSourceNote": "Extrakce GitLab APK nemusí fungovat bez klíče API",
 | 
			
		||||
    "sortByFileNamesNotLinks": "Řadit podle názvů souborů místo celých odkazů",
 | 
			
		||||
    "filterReleaseNotesByRegEx": "Filtrovat poznámky k vydání podle regulárního výrazu",
 | 
			
		||||
    "customLinkFilterRegex": "Vlastní filtr odkazů APK podle regulárního výrazu (výchozí '.apk$')",
 | 
			
		||||
    "appsPossiblyUpdated": "Byly provedeny pokusy o aktualizaci aplikací",
 | 
			
		||||
    "appsPossiblyUpdatedNotifDescription": "Upozorňuje uživatele, že na pozadí mohly být provedeny aktualizace jedné nebo více aplikací",
 | 
			
		||||
    "xWasPossiblyUpdatedToY":"{} mohlo být aktualizováno na {}.",
 | 
			
		||||
    "enableBackgroundUpdates": "Povolit aktualizace na pozadí",
 | 
			
		||||
    "backgroundUpdateReqsExplanation": "Aktualizace na pozadí nemusí být možné pro všechny aplikace.",
 | 
			
		||||
    "backgroundUpdateLimitsExplanation": "Úspěšnost instalace na pozadí lze určit pouze v případě, že je otevřen Obtainium.",
 | 
			
		||||
    "verifyLatestTag": "Ověřit značku 'latest'",
 | 
			
		||||
    "intermediateLinkRegex": "Filter for an 'Intermediate' Link to Visit First",
 | 
			
		||||
    "intermediateLinkNotFound": "Intermediate link not found",
 | 
			
		||||
    "exemptFromBackgroundUpdates": "Vyloučit aktualizace na pozadí (pokud jsou povoleny)",
 | 
			
		||||
    "bgUpdatesOnWiFiOnly": "Zakázat aktualizace na pozadí, pokud není přítomna Wi-Fi",
 | 
			
		||||
    "autoSelectHighestVersionCode": "Automatický výběr nejvyššího kódu verze APK",
 | 
			
		||||
    "versionExtractionRegEx": "Version Extraction RegEx",
 | 
			
		||||
    "matchGroupToUse": "Match Group to Use",
 | 
			
		||||
    "highlightTouchTargets": "Zvýraznit méně zjevné cíle dotyku",
 | 
			
		||||
    "pickExportDir": "Vybrat adresář pro export",
 | 
			
		||||
    "autoExportOnChanges": "Automatický export při změnách",
 | 
			
		||||
    "filterVersionsByRegEx": "Filtrovat verze podle regulárního výrazu",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Zkusit vybrat navrhovaný kód verze APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "Odstranit Apku?",
 | 
			
		||||
        "other": "Odstranit Apky?"
 | 
			
		||||
    },
 | 
			
		||||
    "tooManyRequestsTryAgainInMinutes": {
 | 
			
		||||
        "one": "Příliš mnoho požadavků (omezená rychlost) - zkuste to znovu za {} minutu",
 | 
			
		||||
        "other": "Příliš mnoho požadavků (omezená rychlost) - zkuste to znovu za {} minut"
 | 
			
		||||
    },
 | 
			
		||||
    "bgUpdateGotErrorRetryInMinutes": {
 | 
			
		||||
        "one": "Při kontrole aktualizace na pozadí byla zjištěna chyba {}, opakování pokusu bude naplánováno za {} minut",
 | 
			
		||||
        "other": "Během kontroly aktualizace na pozadí byla zjištěna chyba {}, opakování bude naplánováno za {} minut"
 | 
			
		||||
    },
 | 
			
		||||
    "bgCheckFoundUpdatesWillNotifyIfNeeded": {
 | 
			
		||||
        "one": "Při kontrole aktualizací na pozadí nalezena {}aktualizace - v případě potřeby upozorní uživatele",
 | 
			
		||||
        "other": "Kontrola aktualizací na pozadí našla {} aktualizací - v případě potřeby upozorní uživatele"
 | 
			
		||||
    },
 | 
			
		||||
    "apps": {
 | 
			
		||||
        "one":"{} App",
 | 
			
		||||
        "other":"{} apps"
 | 
			
		||||
    },
 | 
			
		||||
    "url": {
 | 
			
		||||
        "jedna": "{} URL",
 | 
			
		||||
        "other": "{} URLs"
 | 
			
		||||
    },
 | 
			
		||||
    "minute": {
 | 
			
		||||
        "one":"{} minute",
 | 
			
		||||
        "other": "{} minutes"
 | 
			
		||||
    },
 | 
			
		||||
    "hour": {
 | 
			
		||||
        "jedna": "{} hodina",
 | 
			
		||||
        "other": "{} hours"
 | 
			
		||||
    },
 | 
			
		||||
    "day": {
 | 
			
		||||
        "jedna": "{} den",
 | 
			
		||||
        "other": "{} dny"
 | 
			
		||||
    },
 | 
			
		||||
    "clearedNLogsBeforeXAfterY": {
 | 
			
		||||
        "one":"{n} log vymazán (před = {před}, po = {po})",
 | 
			
		||||
        "other": "{n} logů vymazáno (před = {před}, po = {po})"
 | 
			
		||||
    },
 | 
			
		||||
    "xAndNMoreUpdatesAvailable": {
 | 
			
		||||
        "one":"{} a 1 další aplikace mají aktualizace.",
 | 
			
		||||
        "other":"{} a {} další aplikace mají aktualizace."
 | 
			
		||||
    },
 | 
			
		||||
    "xAndNMoreUpdatesInstalled": {
 | 
			
		||||
        "one":"{} a {} další aplikace mají aktualizace.",
 | 
			
		||||
        "další":"{} a {} další aplikace byly aktualizovány."
 | 
			
		||||
    },
 | 
			
		||||
    "xAndNMoreUpdatesPossiblyInstalled": {
 | 
			
		||||
        "one":"{} a {} další aplikace byly možná aktualizovány",
 | 
			
		||||
        "other":"{} a {} další aplikace mohly být aktualizovány."
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -28,8 +28,8 @@
 | 
			
		||||
    "xIsTrackOnly": "{} ist nur zur Nachverfolgung",
 | 
			
		||||
    "source": "Quelle",
 | 
			
		||||
    "app": "App",
 | 
			
		||||
    "appsFromSourceAreTrackOnly": "Apps aus dieser Quelle sind 'Nur Nachverfolgen'.",
 | 
			
		||||
    "youPickedTrackOnly": "Sie haben die Option 'Nur Nachverfolgen' gewählt.",
 | 
			
		||||
    "appsFromSourceAreTrackOnly": "Apps aus dieser Quelle sind nur zum Nachverfolgen.",
 | 
			
		||||
    "youPickedTrackOnly": "Sie haben die Option „Nur Nachverfolgen“ gewählt.",
 | 
			
		||||
    "trackOnlyAppDescription": "Die App wird auf Updates überwacht, aber Obtainium wird sie nicht herunterladen oder installieren.",
 | 
			
		||||
    "cancelled": "Abgebrochen",
 | 
			
		||||
    "appAlreadyAdded": "App bereits hinzugefügt",
 | 
			
		||||
@@ -38,7 +38,7 @@
 | 
			
		||||
    "appSourceURL": "Quell-URL der App",
 | 
			
		||||
    "error": "Fehler",
 | 
			
		||||
    "add": "Hinzufügen",
 | 
			
		||||
    "searchSomeSourcesLabel": "Suche (nur bestimmte Quellen)",
 | 
			
		||||
    "searchSomeSourcesLabel": "Suche (nur für bestimmte Quellen)",
 | 
			
		||||
    "search": "Suchen",
 | 
			
		||||
    "additionalOptsFor": "Zusatzoptionen für {}",
 | 
			
		||||
    "supportedSources": "Unterstützte Quellen",
 | 
			
		||||
@@ -70,7 +70,7 @@
 | 
			
		||||
    "yes": "Ja",
 | 
			
		||||
    "markSelectedAppsUpdated": "Markiere ausgewählte Apps als aktuell",
 | 
			
		||||
    "pinToTop": "Oben anheften",
 | 
			
		||||
    "unpinFromTop": "'Oben anheften' aufheben",
 | 
			
		||||
    "unpinFromTop": "„Oben anheften“ aufheben",
 | 
			
		||||
    "resetInstallStatusForSelectedAppsQuestion": "Installationsstatus für ausgewählte Apps zurücksetzen?",
 | 
			
		||||
    "installStatusOfXWillBeResetExplanation": "Der Installationsstatus der ausgewählten Apps wird zurückgesetzt. Dies kann hilfreich sein, wenn die in Obtainium angezeigte App-Version aufgrund fehlgeschlagener Aktualisierungen oder anderer Probleme falsch ist.",
 | 
			
		||||
    "shareSelectedAppURLs": "Ausgewählte App-URLs teilen",
 | 
			
		||||
@@ -175,7 +175,7 @@
 | 
			
		||||
    "appId": "App ID",
 | 
			
		||||
    "appWithIdOrNameNotFound": "Es wurde keine App mit dieser ID oder diesem Namen gefunden",
 | 
			
		||||
    "reposHaveMultipleApps": "Repos können mehrere Apps enthalten",
 | 
			
		||||
    "fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
 | 
			
		||||
    "fdroidThirdPartyRepo": "F-Droid Drittparteienrepo",
 | 
			
		||||
    "steam": "Steam",
 | 
			
		||||
    "steamMobile": "Steam Mobile",
 | 
			
		||||
    "steamChat": "Steam Chat",
 | 
			
		||||
@@ -244,15 +244,22 @@
 | 
			
		||||
    "xWasPossiblyUpdatedToY": "{} wurde möglicherweise aktualisiert auf {}.",
 | 
			
		||||
    "backgroundUpdateReqsExplanation": "Die Hintergrundaktualisierung ist möglicherweise nicht für alle Apps möglich.",
 | 
			
		||||
    "backgroundUpdateLimitsExplanation": "Der Erfolg einer Hintergrundinstallation kann nur festgestellt werden, wenn Obtainium geöffnet wird.",
 | 
			
		||||
    "verifyLatestTag": "Überprüfe das 'latest' Tag",
 | 
			
		||||
    "verifyLatestTag": "Überprüfe das „latest“ Tag",
 | 
			
		||||
    "exemptFromBackgroundUpdates": "Ausschluss von Hintergrundaktualisierungen (falls aktiviert)",
 | 
			
		||||
    "bgUpdatesOnWiFiOnly": "Hintergrundaktualisierungen deaktivieren, wenn kein WLAN vorhanden ist",
 | 
			
		||||
    "autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
 | 
			
		||||
    "versionExtractionRegEx": "Version Extraction RegEx",
 | 
			
		||||
    "matchGroupToUse": "Match Group to Use",
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "autoSelectHighestVersionCode": "Automatisch höchste APK-Code-Version auswählen",
 | 
			
		||||
    "versionExtractionRegEx": "Versions-Extraktion RegEx",
 | 
			
		||||
    "matchGroupToUse": "Zu verwendende Gruppe abgleichen",
 | 
			
		||||
    "highlightTouchTargets": "Weniger offensichtliche Ziele hervorheben",
 | 
			
		||||
    "pickExportDir": "Export-Verzeichnis wählen",
 | 
			
		||||
    "autoExportOnChanges": "Automatischer Export bei Änderung",
 | 
			
		||||
    "filterVersionsByRegEx": "Versionen nach regulären Ausdrücken filtern",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Versuchen, die vorgeschlagene APK-Code-Version auszuwählen",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "App entfernen?",
 | 
			
		||||
        "other": "Apps entfernen?"
 | 
			
		||||
 
 | 
			
		||||
@@ -256,6 +256,13 @@
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "filterVersionsByRegEx": "Filter Versions by Regular Expression",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "Remove App?",
 | 
			
		||||
        "other": "Remove Apps?"
 | 
			
		||||
 
 | 
			
		||||
@@ -253,6 +253,13 @@
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "filterVersionsByRegEx": "Filter Versions by Regular Expression",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "¿Eliminar Aplicación?",
 | 
			
		||||
        "other": "¿Eliminar Aplicaciones?"
 | 
			
		||||
 
 | 
			
		||||
@@ -253,6 +253,13 @@
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "filterVersionsByRegEx": "Filter Versions by Regular Expression",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "برنامه حذف شود؟",
 | 
			
		||||
        "other": "برنامه ها حذف شوند؟"
 | 
			
		||||
 
 | 
			
		||||
@@ -253,6 +253,13 @@
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "filterVersionsByRegEx": "Filter Versions by Regular Expression",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "Supprimer l'application ?",
 | 
			
		||||
        "other": "Supprimer les applications ?"
 | 
			
		||||
 
 | 
			
		||||
@@ -246,12 +246,20 @@
 | 
			
		||||
    "verifyLatestTag": "Ellenőrizze a „legújabb” címkét",
 | 
			
		||||
    "exemptFromBackgroundUpdates": "Mentes a háttérben történő frissítések alól (ha engedélyezett)",
 | 
			
		||||
    "bgUpdatesOnWiFiOnly": "Tiltsa le a háttérben frissítéseket, ha nincs Wi-Fi-n",
 | 
			
		||||
    "autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
 | 
			
		||||
    "versionExtractionRegEx": "Version Extraction RegEx",
 | 
			
		||||
    "matchGroupToUse": "Match Group to Use",
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "autoSelectHighestVersionCode": "A legmagasabb verziószámú APK auto. kiválasztása",
 | 
			
		||||
    "versionExtractionRegEx": "Verzió kibontása reguláris kifejezéssel",
 | 
			
		||||
    "matchGroupToUse": "Párosítsa a csoportot a használathoz",
 | 
			
		||||
    "highlightTouchTargets": "Emelje ki a kevésbé nyilvánvaló érintési célokat",
 | 
			
		||||
    "pickExportDir": "Válassza az Exportálási könyvtárat",
 | 
			
		||||
    "autoExportOnChanges": "Auto-exportálás a változások után",
 | 
			
		||||
    "filterVersionsByRegEx": "Verziók szűrése reguláris kifejezéssel",
 | 
			
		||||
    "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",
 | 
			
		||||
    "reverseSort": "Fordított rendezés",
 | 
			
		||||
    "debugMenu": "Hibakereső menü",
 | 
			
		||||
    "bgTaskStarted": "A háttérfeladat elindult – ellenőrizze a naplókat.",
 | 
			
		||||
    "enableBackgroundUpdates": "Frissítések a háttérben",
 | 
			
		||||
    "runBgCheckNow": "Futtassa a Háttérben frissítés ellenőrzését most",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "Eltávolítja az alkalmazást?",
 | 
			
		||||
        "other": "Eltávolítja az alkalmazást?"
 | 
			
		||||
 
 | 
			
		||||
@@ -253,6 +253,13 @@
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "filterVersionsByRegEx": "Filter Versions by Regular Expression",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "Rimuovere l'app?",
 | 
			
		||||
        "other": "Rimuovere le app?"
 | 
			
		||||
 
 | 
			
		||||
@@ -144,7 +144,7 @@
 | 
			
		||||
    "updatesAvailable": "アップデートが利用可能",
 | 
			
		||||
    "updatesAvailableNotifDescription": "Obtainiumが追跡している1つまたは複数のアプリのアップデートが利用可能であることをユーザーに通知する",
 | 
			
		||||
    "noNewUpdates": "新しいアップデートはありません",
 | 
			
		||||
    "xHasAnUpdate": "{} のアップデートが利用可能です",
 | 
			
		||||
    "xHasAnUpdate": "{} のアップデートが利用可能です。",
 | 
			
		||||
    "appsUpdated": "アプリをアップデートしました",
 | 
			
		||||
    "appsUpdatedNotifDescription": "1つまたは複数のAppのアップデートがバックグラウンドで適用されたことをユーザーに通知する",
 | 
			
		||||
    "xWasUpdatedToY": "{} が {} にアップデートされました",
 | 
			
		||||
@@ -241,19 +241,28 @@
 | 
			
		||||
    "customLinkFilterRegex": "正規表現によるカスタムリンクフィルター (デフォルト '.apk$')",
 | 
			
		||||
    "appsPossiblyUpdated": "アプリのアップデートを試行",
 | 
			
		||||
    "appsPossiblyUpdatedNotifDescription": "1つまたは複数のアプリのアップデートがバックグラウンドで適用された可能性があることをユーザーに通知する",
 | 
			
		||||
    "xWasPossiblyUpdatedToY": "{} が {} にアップデートされた可能性があります",
 | 
			
		||||
    "xWasPossiblyUpdatedToY": "{} が {} にアップデートされた可能性があります。",
 | 
			
		||||
    "enableBackgroundUpdates": "バックグラウンドアップデートを有効化する",
 | 
			
		||||
    "backgroundUpdateReqsExplanation": "バックグラウンドアップデートは、すべてのアプリで可能とは限りません。",
 | 
			
		||||
    "backgroundUpdateLimitsExplanation": "バックグラウンドアップデートが成功したかどうかは、Obtainiumを起動したときにしか判断できません。",
 | 
			
		||||
    "verifyLatestTag": "'latest'タグを確認する",
 | 
			
		||||
    "intermediateLinkRegex": "最初にアクセスする「中間」リンクをフィルタリングする",
 | 
			
		||||
    "intermediateLinkNotFound": "中間リンクが見つかりませんでした",
 | 
			
		||||
    "exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)",
 | 
			
		||||
    "bgUpdatesOnWiFiOnly": "WiFiを使用していない場合,バックグラウンドアップデートを無効にする",
 | 
			
		||||
    "autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
 | 
			
		||||
    "versionExtractionRegEx": "Version Extraction RegEx",
 | 
			
		||||
    "matchGroupToUse": "Match Group to Use",
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "autoSelectHighestVersionCode": "最も高いバージョンコードのAPKを自動で選択する",
 | 
			
		||||
    "versionExtractionRegEx": "バージョン抽出の正規表現",
 | 
			
		||||
    "matchGroupToUse": "使用するマッチしたグループ",
 | 
			
		||||
    "highlightTouchTargets": "目立たないタップ可能な対象をハイライトする",
 | 
			
		||||
    "pickExportDir": "エクスポートディレクトリを選択",
 | 
			
		||||
    "autoExportOnChanges": "変更があった際に自動でエクスポートする",
 | 
			
		||||
    "filterVersionsByRegEx": "正規表現でバージョンをフィルタリングする",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "提案されたバージョンコードのAPKを選択する",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "アプリを削除しますか?",
 | 
			
		||||
        "other": "アプリを削除しますか?"
 | 
			
		||||
@@ -295,15 +304,15 @@
 | 
			
		||||
        "other": "{n} 個のログをクリアしました (前 = {before}, 後 = {after})"
 | 
			
		||||
    },
 | 
			
		||||
    "xAndNMoreUpdatesAvailable": {
 | 
			
		||||
        "one": "{} とさらに {} 個のアプリのアップデートが利用可能です",
 | 
			
		||||
        "other": "{} とさらに {} 個のアプリのアップデートが利用可能です"
 | 
			
		||||
        "one": "{} とさらに {} 個のアプリのアップデートが利用可能です。",
 | 
			
		||||
        "other": "{} とさらに {} 個のアプリのアップデートが利用可能です。"
 | 
			
		||||
    },
 | 
			
		||||
    "xAndNMoreUpdatesInstalled": {
 | 
			
		||||
        "one": "{} とさらに {} 個のアプリがアップデートされました",
 | 
			
		||||
        "other": "{} とさらに {} 個のアプリがアップデートされました"
 | 
			
		||||
        "one": "{} とさらに {} 個のアプリがアップデートされました。",
 | 
			
		||||
        "other": "{} とさらに {} 個のアプリがアップデートされました。"
 | 
			
		||||
    },
 | 
			
		||||
    "xAndNMoreUpdatesPossiblyInstalled": {
 | 
			
		||||
        "one": "{} とさらに 1 個のアプリがアップデートされた可能性があります",
 | 
			
		||||
        "other": "{} とさらに {} 個のアプリがアップデートされた可能性があります"
 | 
			
		||||
        "one": "{} とさらに 1 個のアプリがアップデートされた可能性があります。",
 | 
			
		||||
        "other": "{} とさらに {} 個のアプリがアップデートされた可能性があります。"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -253,12 +253,19 @@
 | 
			
		||||
    "verifyLatestTag": "Zweryfikuj najnowszy tag",
 | 
			
		||||
    "exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)",
 | 
			
		||||
    "bgUpdatesOnWiFiOnly": "Wyłącz aktualizacje w tle, gdy nie ma połączenia z Wi-Fi",
 | 
			
		||||
    "autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
 | 
			
		||||
    "versionExtractionRegEx": "Version Extraction RegEx",
 | 
			
		||||
    "matchGroupToUse": "Match Group to Use",
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "autoSelectHighestVersionCode": "Automatycznie wybierz najwyższy kod wersji APK",
 | 
			
		||||
    "versionExtractionRegEx": "Wyrażenie regularne wyodrębniające wersję",
 | 
			
		||||
    "matchGroupToUse": "Dopasuj grupę do użycia",
 | 
			
		||||
    "highlightTouchTargets": "Wyróżnij mniej oczywiste elementy dotykowe",
 | 
			
		||||
    "pickExportDir": "Wybierz katalog eksportu",
 | 
			
		||||
    "autoExportOnChanges": "Automatyczny eksport po wprowadzeniu zmian",
 | 
			
		||||
    "filterVersionsByRegEx": "Filtruj wersje według wyrażenia regularnego",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "Usunąć aplikację?",
 | 
			
		||||
        "few": "Usunąć aplikacje?",
 | 
			
		||||
 
 | 
			
		||||
@@ -256,6 +256,13 @@
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "filterVersionsByRegEx": "Filter Versions by Regular Expression",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "Remover App?",
 | 
			
		||||
        "other": "Remover Apps?"
 | 
			
		||||
@@ -253,6 +253,13 @@
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "filterVersionsByRegEx": "Filter Versions by Regular Expression",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "Удалить приложение?",
 | 
			
		||||
        "other": "Удалить приложения?"
 | 
			
		||||
 
 | 
			
		||||
@@ -51,9 +51,9 @@
 | 
			
		||||
    "percentProgress": "进度:{}%",
 | 
			
		||||
    "pleaseWait": "请稍候",
 | 
			
		||||
    "updateAvailable": "更新可用",
 | 
			
		||||
    "estimateInBracketsShort": "(推测)",
 | 
			
		||||
    "estimateInBracketsShort": "(推测)",
 | 
			
		||||
    "notInstalled": "未安装",
 | 
			
		||||
    "estimateInBrackets": "(推测)",
 | 
			
		||||
    "estimateInBrackets": "(推测)",
 | 
			
		||||
    "selectAll": "全选",
 | 
			
		||||
    "deselectN": "取消选择 {}",
 | 
			
		||||
    "xWillBeRemovedButRemainInstalled": "{} 将从 Obtainium 中删除,但仍安装在您的设备中。",
 | 
			
		||||
@@ -246,14 +246,23 @@
 | 
			
		||||
    "backgroundUpdateReqsExplanation": "后台更新未必适用于所有的应用。",
 | 
			
		||||
    "backgroundUpdateLimitsExplanation": "只有在启动 Obtainium 时才能确认安装是否成功。",
 | 
			
		||||
    "verifyLatestTag": "验证“Latest”标签",
 | 
			
		||||
    "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)",
 | 
			
		||||
    "bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi",
 | 
			
		||||
    "autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
 | 
			
		||||
    "versionExtractionRegEx": "Version Extraction RegEx",
 | 
			
		||||
    "matchGroupToUse": "Match Group to Use",
 | 
			
		||||
    "highlightTouchTargets": "Highlight less obvious touch targets",
 | 
			
		||||
    "pickExportDir": "Pick Export Directory",
 | 
			
		||||
    "autoExportOnChanges": "Auto-export on changes",
 | 
			
		||||
    "intermediateLinkRegex": "首先访问“中间”链接的过滤器",
 | 
			
		||||
    "intermediateLinkNotFound": "中间链接未找到",
 | 
			
		||||
    "exemptFromBackgroundUpdates": "禁用后台更新(如果全局设置启用)",
 | 
			
		||||
    "bgUpdatesOnWiFiOnly": "不在连接 WiFi 时禁用后台更新",
 | 
			
		||||
    "autoSelectHighestVersionCode": "自动选择最高版本号 APK",
 | 
			
		||||
    "versionExtractionRegEx": "版本提取正则表达式",
 | 
			
		||||
    "matchGroupToUse": "匹配要使用的组",
 | 
			
		||||
    "highlightTouchTargets": "突出显示不明显的触摸目标",
 | 
			
		||||
    "pickExportDir": "选择导出目录",
 | 
			
		||||
    "autoExportOnChanges": "修改时自动导出",
 | 
			
		||||
    "filterVersionsByRegEx": "使用正则表达式筛选版本",
 | 
			
		||||
    "trySelectingSuggestedVersionCode": "尝试选择推荐版本 APK",
 | 
			
		||||
    "dontSortReleasesList": "Retain release order from API",
 | 
			
		||||
    "reverseSort": "Reverse sorting",
 | 
			
		||||
    "debugMenu": "Debug Menu",
 | 
			
		||||
    "bgTaskStarted": "Background task started - check logs.",
 | 
			
		||||
    "runBgCheckNow": "Run Background Update Check Now",
 | 
			
		||||
    "removeAppQuestion": {
 | 
			
		||||
        "one": "是否删除应用?",
 | 
			
		||||
        "other": "是否删除应用?"
 | 
			
		||||
 
 | 
			
		||||
@@ -21,16 +21,19 @@ parseDateTimeMMMddCommayyyy(String? dateString) {
 | 
			
		||||
class APKPure extends AppSource {
 | 
			
		||||
  APKPure() {
 | 
			
		||||
    host = 'apkpure.com';
 | 
			
		||||
    allowSubDomains = true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  String sourceSpecificStandardizeURL(String url) {
 | 
			
		||||
    RegExp standardUrlRegExB = RegExp('^https?://m.$host/+[^/]+/+[^/]+');
 | 
			
		||||
    RegExp standardUrlRegExB =
 | 
			
		||||
        RegExp('^https?://m.$host/+[^/]+/+[^/]+(/+[^/]+)?');
 | 
			
		||||
    RegExpMatch? match = standardUrlRegExB.firstMatch(url.toLowerCase());
 | 
			
		||||
    if (match != null) {
 | 
			
		||||
      url = 'https://$host/${Uri.parse(url).path}';
 | 
			
		||||
      url = 'https://$host${Uri.parse(url).path}';
 | 
			
		||||
    }
 | 
			
		||||
    RegExp standardUrlRegExA = RegExp('^https?://$host/+[^/]+/+[^/]+');
 | 
			
		||||
    RegExp standardUrlRegExA =
 | 
			
		||||
        RegExp('^https?://$host/+[^/]+/+[^/]+(/+[^/]+)?');
 | 
			
		||||
    match = standardUrlRegExA.firstMatch(url.toLowerCase());
 | 
			
		||||
    if (match == null) {
 | 
			
		||||
      throw InvalidURLError(name);
 | 
			
		||||
 
 | 
			
		||||
@@ -13,10 +13,24 @@ class FDroid extends AppSource {
 | 
			
		||||
    name = tr('fdroid');
 | 
			
		||||
    canSearch = true;
 | 
			
		||||
    additionalSourceAppSpecificSettingFormItems = [
 | 
			
		||||
      [
 | 
			
		||||
        GeneratedFormTextField('filterVersionsByRegEx',
 | 
			
		||||
            label: tr('filterVersionsByRegEx'),
 | 
			
		||||
            required: false,
 | 
			
		||||
            additionalValidators: [
 | 
			
		||||
              (value) {
 | 
			
		||||
                return regExValidator(value);
 | 
			
		||||
              }
 | 
			
		||||
            ])
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        GeneratedFormSwitch('trySelectingSuggestedVersionCode',
 | 
			
		||||
            label: tr('trySelectingSuggestedVersionCode'))
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        GeneratedFormSwitch('autoSelectHighestVersionCode',
 | 
			
		||||
            label: tr('autoSelectHighestVersionCode'))
 | 
			
		||||
      ]
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -43,33 +57,6 @@ class FDroid extends AppSource {
 | 
			
		||||
    return Uri.parse(standardUrl).pathSegments.last;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  APKDetails getAPKUrlsFromFDroidPackagesAPIResponse(
 | 
			
		||||
      Response res, String apkUrlPrefix, String standardUrl,
 | 
			
		||||
      {bool autoSelectHighestVersionCode = false}) {
 | 
			
		||||
    if (res.statusCode == 200) {
 | 
			
		||||
      List<dynamic> releases = jsonDecode(res.body)['packages'] ?? [];
 | 
			
		||||
      if (releases.isEmpty) {
 | 
			
		||||
        throw NoReleasesError();
 | 
			
		||||
      }
 | 
			
		||||
      String? latestVersion = releases[0]['versionName'];
 | 
			
		||||
      if (latestVersion == null) {
 | 
			
		||||
        throw NoVersionError();
 | 
			
		||||
      }
 | 
			
		||||
      Iterable<dynamic> latestReleases =
 | 
			
		||||
          releases.where((element) => element['versionName'] == latestVersion);
 | 
			
		||||
      if (latestReleases.length > 1 && autoSelectHighestVersionCode) {
 | 
			
		||||
        latestReleases = [latestReleases.first];
 | 
			
		||||
      }
 | 
			
		||||
      List<String> apkUrls = latestReleases
 | 
			
		||||
          .map((e) => '${apkUrlPrefix}_${e['versionCode']}.apk')
 | 
			
		||||
          .toList();
 | 
			
		||||
      return APKDetails(latestVersion, getApkUrlsFromUrls(apkUrls),
 | 
			
		||||
          AppNames(name, Uri.parse(standardUrl).pathSegments.last));
 | 
			
		||||
    } else {
 | 
			
		||||
      throw getObtainiumHttpError(res);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<APKDetails> getLatestAPKDetails(
 | 
			
		||||
    String standardUrl,
 | 
			
		||||
@@ -81,8 +68,17 @@ class FDroid extends AppSource {
 | 
			
		||||
        await sourceRequest('https://$host/api/v1/packages/$appId'),
 | 
			
		||||
        'https://$host/repo/$appId',
 | 
			
		||||
        standardUrl,
 | 
			
		||||
        name,
 | 
			
		||||
        autoSelectHighestVersionCode:
 | 
			
		||||
            additionalSettings['autoSelectHighestVersionCode'] == true);
 | 
			
		||||
            additionalSettings['autoSelectHighestVersionCode'] == true,
 | 
			
		||||
        trySelectingSuggestedVersionCode:
 | 
			
		||||
            additionalSettings['trySelectingSuggestedVersionCode'] == true,
 | 
			
		||||
        filterVersionsByRegEx:
 | 
			
		||||
            (additionalSettings['filterVersionsByRegEx'] as String?)
 | 
			
		||||
                        ?.isNotEmpty ==
 | 
			
		||||
                    true
 | 
			
		||||
                ? additionalSettings['filterVersionsByRegEx']
 | 
			
		||||
                : null);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
@@ -115,3 +111,78 @@ class FDroid extends AppSource {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
APKDetails getAPKUrlsFromFDroidPackagesAPIResponse(
 | 
			
		||||
    Response res, String apkUrlPrefix, String standardUrl, String sourceName,
 | 
			
		||||
    {bool autoSelectHighestVersionCode = false,
 | 
			
		||||
    bool trySelectingSuggestedVersionCode = false,
 | 
			
		||||
    String? filterVersionsByRegEx}) {
 | 
			
		||||
  if (res.statusCode == 200) {
 | 
			
		||||
    var response = jsonDecode(res.body);
 | 
			
		||||
    List<dynamic> releases = response['packages'] ?? [];
 | 
			
		||||
    if (releases.isEmpty) {
 | 
			
		||||
      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'];
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    // Apply the release filter if any
 | 
			
		||||
    if (filterVersionsByRegEx != null) {
 | 
			
		||||
      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),
 | 
			
		||||
        AppNames(sourceName, Uri.parse(standardUrl).pathSegments.last));
 | 
			
		||||
  } else {
 | 
			
		||||
    throw getObtainiumHttpError(res);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@ class GitHub extends AppSource {
 | 
			
		||||
          label: tr('githubPATLabel'),
 | 
			
		||||
          password: true,
 | 
			
		||||
          required: false,
 | 
			
		||||
          hint: tr('githubPATFormat'),
 | 
			
		||||
          belowWidgets: [
 | 
			
		||||
            const SizedBox(
 | 
			
		||||
              height: 4,
 | 
			
		||||
@@ -73,9 +72,10 @@ class GitHub extends AppSource {
 | 
			
		||||
              }
 | 
			
		||||
            ])
 | 
			
		||||
      ],
 | 
			
		||||
      [GeneratedFormSwitch('verifyLatestTag', label: tr('verifyLatestTag'))],
 | 
			
		||||
      [
 | 
			
		||||
        GeneratedFormSwitch('verifyLatestTag',
 | 
			
		||||
            label: tr('verifyLatestTag'), defaultValue: false)
 | 
			
		||||
        GeneratedFormSwitch('dontSortReleasesList',
 | 
			
		||||
            label: tr('dontSortReleasesList'))
 | 
			
		||||
      ]
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
@@ -231,6 +231,8 @@ class GitHub extends AppSource {
 | 
			
		||||
            ? additionalSettings['filterReleaseNotesByRegEx']
 | 
			
		||||
            : null;
 | 
			
		||||
    bool verifyLatestTag = additionalSettings['verifyLatestTag'] == true;
 | 
			
		||||
    bool dontSortReleasesList =
 | 
			
		||||
        additionalSettings['dontSortReleasesList'] == true;
 | 
			
		||||
    String? latestTag;
 | 
			
		||||
    if (verifyLatestTag) {
 | 
			
		||||
      var temp = requestUrl.split('?');
 | 
			
		||||
@@ -266,32 +268,36 @@ class GitHub extends AppSource {
 | 
			
		||||
          rel?['published_at'] != null
 | 
			
		||||
              ? DateTime.parse(rel['published_at'])
 | 
			
		||||
              : null;
 | 
			
		||||
      releases.sort((a, b) {
 | 
			
		||||
        // See #478 and #534
 | 
			
		||||
        if (a == b) {
 | 
			
		||||
          return 0;
 | 
			
		||||
        } else if (a == null) {
 | 
			
		||||
          return -1;
 | 
			
		||||
        } else if (b == null) {
 | 
			
		||||
          return 1;
 | 
			
		||||
        } else {
 | 
			
		||||
          var nameA = a['tag_name'] ?? a['name'];
 | 
			
		||||
          var nameB = b['tag_name'] ?? b['name'];
 | 
			
		||||
          var stdFormats = findStandardFormatsForVersion(nameA, true)
 | 
			
		||||
              .intersection(findStandardFormatsForVersion(nameB, true));
 | 
			
		||||
          if (stdFormats.isNotEmpty) {
 | 
			
		||||
            var reg = RegExp(stdFormats.first);
 | 
			
		||||
            var matchA = reg.firstMatch(nameA);
 | 
			
		||||
            var matchB = reg.firstMatch(nameB);
 | 
			
		||||
            return compareAlphaNumeric(
 | 
			
		||||
                (nameA as String).substring(matchA!.start, matchA.end),
 | 
			
		||||
                (nameB as String).substring(matchB!.start, matchB.end));
 | 
			
		||||
      if (dontSortReleasesList) {
 | 
			
		||||
        releases = releases.reversed.toList();
 | 
			
		||||
      } else {
 | 
			
		||||
        releases.sort((a, b) {
 | 
			
		||||
          // See #478 and #534
 | 
			
		||||
          if (a == b) {
 | 
			
		||||
            return 0;
 | 
			
		||||
          } else if (a == null) {
 | 
			
		||||
            return -1;
 | 
			
		||||
          } else if (b == null) {
 | 
			
		||||
            return 1;
 | 
			
		||||
          } else {
 | 
			
		||||
            return (getReleaseDateFromRelease(a) ?? DateTime(1))
 | 
			
		||||
                .compareTo(getReleaseDateFromRelease(b) ?? DateTime(0));
 | 
			
		||||
            var nameA = a['tag_name'] ?? a['name'];
 | 
			
		||||
            var nameB = b['tag_name'] ?? b['name'];
 | 
			
		||||
            var stdFormats = findStandardFormatsForVersion(nameA, true)
 | 
			
		||||
                .intersection(findStandardFormatsForVersion(nameB, true));
 | 
			
		||||
            if (stdFormats.isNotEmpty) {
 | 
			
		||||
              var reg = RegExp(stdFormats.first);
 | 
			
		||||
              var matchA = reg.firstMatch(nameA);
 | 
			
		||||
              var matchB = reg.firstMatch(nameB);
 | 
			
		||||
              return compareAlphaNumeric(
 | 
			
		||||
                  (nameA as String).substring(matchA!.start, matchA.end),
 | 
			
		||||
                  (nameB as String).substring(matchB!.start, matchB.end));
 | 
			
		||||
            } else {
 | 
			
		||||
              return (getReleaseDateFromRelease(a) ?? DateTime(1))
 | 
			
		||||
                  .compareTo(getReleaseDateFromRelease(b) ?? DateTime(0));
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
      if (latestTag != null &&
 | 
			
		||||
          releases.isNotEmpty &&
 | 
			
		||||
          latestTag !=
 | 
			
		||||
 
 | 
			
		||||
@@ -93,6 +93,7 @@ class HTML extends AppSource {
 | 
			
		||||
        GeneratedFormSwitch('sortByFileNamesNotLinks',
 | 
			
		||||
            label: tr('sortByFileNamesNotLinks'))
 | 
			
		||||
      ],
 | 
			
		||||
      [GeneratedFormSwitch('reverseSort', label: tr('reverseSort'))],
 | 
			
		||||
      [
 | 
			
		||||
        GeneratedFormTextField('customLinkFilterRegex',
 | 
			
		||||
            label: tr('customLinkFilterRegex'),
 | 
			
		||||
@@ -107,7 +108,7 @@ class HTML extends AppSource {
 | 
			
		||||
      [
 | 
			
		||||
        GeneratedFormTextField('intermediateLinkRegex',
 | 
			
		||||
            label: tr('intermediateLinkRegex'),
 | 
			
		||||
            hint: '([0-9]+\.)*[0-9]+/\$',
 | 
			
		||||
            hint: '([0-9]+.)*[0-9]+/\$',
 | 
			
		||||
            required: false,
 | 
			
		||||
            additionalValidators: [(value) => regExValidator(value)])
 | 
			
		||||
      ],
 | 
			
		||||
@@ -123,6 +124,9 @@ class HTML extends AppSource {
 | 
			
		||||
            textInputType: const TextInputType.numberWithOptions(),
 | 
			
		||||
            additionalValidators: [
 | 
			
		||||
              (value) {
 | 
			
		||||
                if (value?.isEmpty == true) {
 | 
			
		||||
                  value = null;
 | 
			
		||||
                }
 | 
			
		||||
                value ??= '1';
 | 
			
		||||
                return intValidator(value);
 | 
			
		||||
              }
 | 
			
		||||
@@ -192,6 +196,9 @@ class HTML extends AppSource {
 | 
			
		||||
          ? compareAlphaNumeric(a.split('/').where((e) => e.isNotEmpty).last,
 | 
			
		||||
              b.split('/').where((e) => e.isNotEmpty).last)
 | 
			
		||||
          : compareAlphaNumeric(a, b));
 | 
			
		||||
      if (additionalSettings['reverseSort'] == true) {
 | 
			
		||||
        links = links.reversed.toList();
 | 
			
		||||
      }
 | 
			
		||||
      if ((additionalSettings['apkFilterRegEx'] as String?)?.isNotEmpty ==
 | 
			
		||||
          true) {
 | 
			
		||||
        var reg = RegExp(additionalSettings['apkFilterRegEx']);
 | 
			
		||||
 
 | 
			
		||||
@@ -6,16 +6,22 @@ class IzzyOnDroid extends AppSource {
 | 
			
		||||
  late FDroid fd;
 | 
			
		||||
 | 
			
		||||
  IzzyOnDroid() {
 | 
			
		||||
    host = 'android.izzysoft.de';
 | 
			
		||||
    host = 'izzysoft.de';
 | 
			
		||||
    fd = FDroid();
 | 
			
		||||
    additionalSourceAppSpecificSettingFormItems =
 | 
			
		||||
        fd.additionalSourceAppSpecificSettingFormItems;
 | 
			
		||||
    allowSubDomains = true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  String sourceSpecificStandardizeURL(String url) {
 | 
			
		||||
    RegExp standardUrlRegEx = RegExp('^https?://$host/repo/apk/[^/]+');
 | 
			
		||||
    RegExpMatch? match = standardUrlRegEx.firstMatch(url.toLowerCase());
 | 
			
		||||
    RegExp standardUrlRegExA = RegExp('^https?://android.$host/repo/apk/[^/]+');
 | 
			
		||||
    RegExpMatch? match = standardUrlRegExA.firstMatch(url.toLowerCase());
 | 
			
		||||
    if (match == null) {
 | 
			
		||||
      RegExp standardUrlRegExB =
 | 
			
		||||
          RegExp('^https?://apt.$host/fdroid/index/apk/[^/]+');
 | 
			
		||||
      match = standardUrlRegExB.firstMatch(url.toLowerCase());
 | 
			
		||||
    }
 | 
			
		||||
    if (match == null) {
 | 
			
		||||
      throw InvalidURLError(name);
 | 
			
		||||
    }
 | 
			
		||||
@@ -34,12 +40,16 @@ class IzzyOnDroid extends AppSource {
 | 
			
		||||
    Map<String, dynamic> additionalSettings,
 | 
			
		||||
  ) async {
 | 
			
		||||
    String? appId = await tryInferringAppId(standardUrl);
 | 
			
		||||
    return fd.getAPKUrlsFromFDroidPackagesAPIResponse(
 | 
			
		||||
    return getAPKUrlsFromFDroidPackagesAPIResponse(
 | 
			
		||||
        await sourceRequest(
 | 
			
		||||
            'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'),
 | 
			
		||||
        'https://android.izzysoft.de/frepo/$appId',
 | 
			
		||||
        standardUrl,
 | 
			
		||||
        name,
 | 
			
		||||
        autoSelectHighestVersionCode:
 | 
			
		||||
            additionalSettings['autoSelectHighestVersionCode'] == true);
 | 
			
		||||
            additionalSettings['autoSelectHighestVersionCode'] == true,
 | 
			
		||||
        trySelectingSuggestedVersionCode:
 | 
			
		||||
            additionalSettings['trySelectingSuggestedVersionCode'] == true,
 | 
			
		||||
        filterVersionsByRegEx: additionalSettings['filterVersionsByRegEx']);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ import 'package:easy_localization/src/easy_localization_controller.dart';
 | 
			
		||||
// ignore: implementation_imports
 | 
			
		||||
import 'package:easy_localization/src/localization.dart';
 | 
			
		||||
 | 
			
		||||
const String currentVersion = '0.14.13';
 | 
			
		||||
const String currentVersion = '0.14.20';
 | 
			
		||||
const String currentReleaseTag =
 | 
			
		||||
    'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES
 | 
			
		||||
 | 
			
		||||
@@ -27,7 +27,7 @@ const int bgUpdateCheckAlarmId = 666;
 | 
			
		||||
 | 
			
		||||
List<MapEntry<Locale, String>> supportedLocales = const [
 | 
			
		||||
  MapEntry(Locale('en'), 'English'),
 | 
			
		||||
  MapEntry(Locale('zh'), '汉语'),
 | 
			
		||||
  MapEntry(Locale('zh'), '简体中文'),
 | 
			
		||||
  MapEntry(Locale('it'), 'Italiano'),
 | 
			
		||||
  MapEntry(Locale('ja'), '日本語'),
 | 
			
		||||
  MapEntry(Locale('hu'), 'Magyar'),
 | 
			
		||||
@@ -38,7 +38,8 @@ List<MapEntry<Locale, String>> supportedLocales = const [
 | 
			
		||||
  MapEntry(Locale('pl'), 'Polski'),
 | 
			
		||||
  MapEntry(Locale('ru'), 'Русский язык'),
 | 
			
		||||
  MapEntry(Locale('bs'), 'Bosanski'),
 | 
			
		||||
  // MapEntry(Locale('br'), 'Brasileiro'),
 | 
			
		||||
  MapEntry(Locale('pt'), 'Brasileiro'),
 | 
			
		||||
  MapEntry(Locale('cs'), 'Česky'),
 | 
			
		||||
];
 | 
			
		||||
const fallbackLocale = Locale('en');
 | 
			
		||||
const localeDir = 'assets/translations';
 | 
			
		||||
 
 | 
			
		||||
@@ -148,7 +148,7 @@ class _AddAppPageState extends State<AddAppPage> {
 | 
			
		||||
                userPickedTrackOnly))) {
 | 
			
		||||
          var trackOnly = pickedSource!.enforceTrackOnly || userPickedTrackOnly;
 | 
			
		||||
          app = await sourceProvider.getApp(
 | 
			
		||||
              pickedSource!, userInput, additionalSettings,
 | 
			
		||||
              pickedSource!, userInput.trim(), additionalSettings,
 | 
			
		||||
              trackOnlyOverride: trackOnly,
 | 
			
		||||
              overrideSource: pickedSourceOverride,
 | 
			
		||||
              inferAppIdIfOptional: inferAppIdIfOptional);
 | 
			
		||||
 
 | 
			
		||||
@@ -152,7 +152,7 @@ class _AppPageState extends State<AppPage> {
 | 
			
		||||
          mainAxisAlignment: MainAxisAlignment.center,
 | 
			
		||||
          crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
			
		||||
          children: [
 | 
			
		||||
            const SizedBox(height: 125),
 | 
			
		||||
            const SizedBox(height: 20),
 | 
			
		||||
            app?.icon != null
 | 
			
		||||
                ? Row(mainAxisAlignment: MainAxisAlignment.center, children: [
 | 
			
		||||
                    Image.memory(
 | 
			
		||||
@@ -463,9 +463,18 @@ class _AppPageState extends State<AppPage> {
 | 
			
		||||
                          : null))
 | 
			
		||||
          ],
 | 
			
		||||
        ));
 | 
			
		||||
    
 | 
			
		||||
    appScreenAppBar() => AppBar(
 | 
			
		||||
      leading: IconButton(
 | 
			
		||||
        icon: const Icon(Icons.arrow_back),
 | 
			
		||||
        onPressed: () {
 | 
			
		||||
          Navigator.pop(context);
 | 
			
		||||
        },
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
        appBar: settingsProvider.showAppWebpage ? AppBar() : null,
 | 
			
		||||
        appBar: settingsProvider.showAppWebpage ? AppBar() : appScreenAppBar(),
 | 
			
		||||
        backgroundColor: Theme.of(context).colorScheme.surface,
 | 
			
		||||
        body: RefreshIndicator(
 | 
			
		||||
            child: settingsProvider.showAppWebpage
 | 
			
		||||
 
 | 
			
		||||
@@ -558,7 +558,7 @@ class _SettingsPageState extends State<SettingsPage> {
 | 
			
		||||
                    Row(
 | 
			
		||||
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | 
			
		||||
                      children: [
 | 
			
		||||
                        const Flexible(child: Text('Debug Menu')),
 | 
			
		||||
                        Flexible(child: Text(tr('debugMenu'))),
 | 
			
		||||
                        Switch(
 | 
			
		||||
                            value: settingsProvider.showDebugOpts,
 | 
			
		||||
                            onChanged: (value) {
 | 
			
		||||
@@ -577,12 +577,9 @@ class _SettingsPageState extends State<SettingsPage> {
 | 
			
		||||
                                    const Duration(seconds: 0),
 | 
			
		||||
                                    bgUpdateCheckAlarmId + 200,
 | 
			
		||||
                                    bgUpdateCheck);
 | 
			
		||||
                                showError(
 | 
			
		||||
                                    'Background task started - check logs.',
 | 
			
		||||
                                    context);
 | 
			
		||||
                                showError(tr('bgTaskStarted'), context);
 | 
			
		||||
                              },
 | 
			
		||||
                              child:
 | 
			
		||||
                                  const Text('Run Background Update Check Now'))
 | 
			
		||||
                              child: Text(tr('runBgCheckNow')))
 | 
			
		||||
                        ],
 | 
			
		||||
                      ),
 | 
			
		||||
                  ]),
 | 
			
		||||
 
 | 
			
		||||
@@ -430,7 +430,8 @@ class AppsProvider with ChangeNotifier {
 | 
			
		||||
        zipFile: File(filePath), destinationDir: Directory(destinationPath));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> installXApkDir(DownloadedXApkDir dir) async {
 | 
			
		||||
  Future<void> installXApkDir(DownloadedXApkDir dir,
 | 
			
		||||
      {bool needsBGWorkaround = false}) async {
 | 
			
		||||
    // We don't know which APKs in an XAPK are supported by the user's device
 | 
			
		||||
    // So we try installing all of them and assume success if at least one installed
 | 
			
		||||
    // If 0 APKs installed, throw the first install error encountered
 | 
			
		||||
@@ -443,7 +444,8 @@ class AppsProvider with ChangeNotifier {
 | 
			
		||||
        if (file.path.toLowerCase().endsWith('.apk')) {
 | 
			
		||||
          try {
 | 
			
		||||
            somethingInstalled = somethingInstalled ||
 | 
			
		||||
                await installApk(DownloadedApk(dir.appId, file));
 | 
			
		||||
                await installApk(DownloadedApk(dir.appId, file),
 | 
			
		||||
                    needsBGWorkaround: needsBGWorkaround);
 | 
			
		||||
          } catch (e) {
 | 
			
		||||
            logs.add(
 | 
			
		||||
                'Could not install APK from XAPK \'${file.path}\': ${e.toString()}');
 | 
			
		||||
@@ -463,7 +465,8 @@ class AppsProvider with ChangeNotifier {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<bool> installApk(DownloadedApk file) async {
 | 
			
		||||
  Future<bool> installApk(DownloadedApk file,
 | 
			
		||||
      {bool needsBGWorkaround = false}) async {
 | 
			
		||||
    var newInfo =
 | 
			
		||||
        await pm.getPackageArchiveInfo(archiveFilePath: file.file.path);
 | 
			
		||||
    PackageInfo? appInfo = await getInstalledInfo(apps[file.appId]!.app.id);
 | 
			
		||||
@@ -472,6 +475,17 @@ class AppsProvider with ChangeNotifier {
 | 
			
		||||
        !(await canDowngradeApps())) {
 | 
			
		||||
      throw DowngradeError();
 | 
			
		||||
    }
 | 
			
		||||
    if (needsBGWorkaround) {
 | 
			
		||||
      // The below 'await' will never return if we are in a background process
 | 
			
		||||
      // To work around this, we should assume the install will be successful
 | 
			
		||||
      // So we update the app's installed version first as we will never get to the later code
 | 
			
		||||
      // We can't conditionally get rid of the 'await' as this causes install fails (BG process times out) - see #896
 | 
			
		||||
      // TODO: When fixed, update this function and the calls to it accordingly
 | 
			
		||||
      apps[file.appId]!.app.installedVersion =
 | 
			
		||||
          apps[file.appId]!.app.latestVersion;
 | 
			
		||||
      await saveApps([apps[file.appId]!.app],
 | 
			
		||||
          attemptToCorrectInstallStatus: false);
 | 
			
		||||
    }
 | 
			
		||||
    int? code =
 | 
			
		||||
        await AndroidPackageInstaller.installApk(apkFilePath: file.file.path);
 | 
			
		||||
    bool installed = false;
 | 
			
		||||
@@ -641,15 +655,13 @@ class AppsProvider with ChangeNotifier {
 | 
			
		||||
        try {
 | 
			
		||||
          if (downloadedFile != null) {
 | 
			
		||||
            if (willBeSilent && context == null) {
 | 
			
		||||
              // Would await forever - workaround - TODO
 | 
			
		||||
              installApk(downloadedFile);
 | 
			
		||||
              installApk(downloadedFile, needsBGWorkaround: true);
 | 
			
		||||
            } else {
 | 
			
		||||
              await installApk(downloadedFile);
 | 
			
		||||
            }
 | 
			
		||||
          } else {
 | 
			
		||||
            if (willBeSilent && context == null) {
 | 
			
		||||
              // Would await forever - workaround - TODO
 | 
			
		||||
              installXApkDir(downloadedDir!);
 | 
			
		||||
              installXApkDir(downloadedDir!, needsBGWorkaround: true);
 | 
			
		||||
            } else {
 | 
			
		||||
              await installXApkDir(downloadedDir!);
 | 
			
		||||
            }
 | 
			
		||||
@@ -1107,7 +1119,6 @@ class AppsProvider with ChangeNotifier {
 | 
			
		||||
        logs.add('Skipping auto-export as dir is not set.');
 | 
			
		||||
        return null;
 | 
			
		||||
      }
 | 
			
		||||
      logs.add('Started auto-export.');
 | 
			
		||||
      var files = await saf
 | 
			
		||||
          .listFiles(exportDir, columns: [saf.DocumentFileColumn.id])
 | 
			
		||||
          .where((f) => f.uri.pathSegments.last.endsWith('-auto.json'))
 | 
			
		||||
@@ -1116,7 +1127,6 @@ class AppsProvider with ChangeNotifier {
 | 
			
		||||
        for (var f in files) {
 | 
			
		||||
          saf.delete(f.uri);
 | 
			
		||||
        }
 | 
			
		||||
        logs.add('Previous auto-export deleted.');
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (exportDir == null || pickOnly) {
 | 
			
		||||
@@ -1132,7 +1142,8 @@ class AppsProvider with ChangeNotifier {
 | 
			
		||||
          displayName:
 | 
			
		||||
              '${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json',
 | 
			
		||||
          mimeType: 'application/json',
 | 
			
		||||
          content: jsonEncode(apps.values.map((e) => e.app.toJson()).toList()));
 | 
			
		||||
          bytes: Uint8List.fromList(utf8.encode(
 | 
			
		||||
              jsonEncode(apps.values.map((e) => e.app.toJson()).toList()))));
 | 
			
		||||
      if (result == null) {
 | 
			
		||||
        throw ObtainiumError(tr('unexpectedError'));
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								pubspec.lock
									
									
									
									
									
								
							@@ -46,10 +46,10 @@ packages:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: archive
 | 
			
		||||
      sha256: "49b1fad315e57ab0bbc15bcbb874e83116a1d78f77ebd500a4af6c9407d6b28e"
 | 
			
		||||
      sha256: "20071638cbe4e5964a427cfa0e86dce55d060bc7d82d56f3554095d7239a8765"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.3.8"
 | 
			
		||||
    version: "3.4.2"
 | 
			
		||||
  args:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -198,10 +198,10 @@ packages:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: dynamic_color
 | 
			
		||||
      sha256: de4798a7069121aee12d5895315680258415de9b00e717723a1bd73d58f0126d
 | 
			
		||||
      sha256: "96bff3df72e3d428bda2b874c7a521e8c86f592cae626ea594922fcc8d166e0c"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.6.6"
 | 
			
		||||
    version: "1.6.7"
 | 
			
		||||
  easy_localization:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
@@ -320,10 +320,10 @@ packages:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: flutter_markdown
 | 
			
		||||
      sha256: d4a1cb250c4e059586af0235f32e02882860a508e189b61f2b31b8810c1e1330
 | 
			
		||||
      sha256: a10979814c5f4ddbe2b6143fba25d927599e21e3ba65b3862995960606fae78f
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.6.17+2"
 | 
			
		||||
    version: "0.6.17+3"
 | 
			
		||||
  flutter_plugin_android_lifecycle:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -386,10 +386,10 @@ packages:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: image
 | 
			
		||||
      sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf
 | 
			
		||||
      sha256: "6e703d5e2f8c63fb31a77753915c1ec8baebde8088844e0d29f71b8f0b108888"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.0.17"
 | 
			
		||||
    version: "4.1.0"
 | 
			
		||||
  intl:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -538,18 +538,18 @@ packages:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: permission_handler
 | 
			
		||||
      sha256: bc56bfe9d3f44c3c612d8d393bd9b174eb796d706759f9b495ac254e4294baa5
 | 
			
		||||
      sha256: ad65ba9af42a3d067203641de3fd9f547ded1410bad3b84400c2b4899faede70
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "10.4.5"
 | 
			
		||||
    version: "11.0.0"
 | 
			
		||||
  permission_handler_android:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: permission_handler_android
 | 
			
		||||
      sha256: "59c6322171c29df93a22d150ad95f3aa19ed86542eaec409ab2691b8f35f9a47"
 | 
			
		||||
      sha256: f23cfe9af0d49c6b9fd8a8b09f7b3301ca7e346204939b5afef4404d36d2608f
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "10.3.6"
 | 
			
		||||
    version: "11.0.1"
 | 
			
		||||
  permission_handler_apple:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -887,10 +887,10 @@ packages:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: webview_flutter_android
 | 
			
		||||
      sha256: "9427774649fd3c8b7ff53523051395d13aed2ca355822b822e6493d79f5fc05a"
 | 
			
		||||
      sha256: ddc167c6676f57c8b367d19fcbee267d6dc6adf81bd6c3cb87981d30746e0a6d
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.10.0"
 | 
			
		||||
    version: "3.10.1"
 | 
			
		||||
  webview_flutter_platform_interface:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
@@ -903,26 +903,26 @@ packages:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: webview_flutter_wkwebview
 | 
			
		||||
      sha256: d2f7241849582da80b79acb03bb936422412ce5c0c79fb5f6a1de5421a5aecc4
 | 
			
		||||
      sha256: "485af05f2c5f83c7f78c20e236b170ad02df7153b299ae9917345be43871d29f"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "3.7.4"
 | 
			
		||||
    version: "3.8.0"
 | 
			
		||||
  win32:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: win32
 | 
			
		||||
      sha256: "9e82a402b7f3d518fb9c02d0e9ae45952df31b9bf34d77baf19da2de03fc2aaa"
 | 
			
		||||
      sha256: c97defd418eef4ec88c0d1652cdce84b9f7b63dd7198e266d06ac1710d527067
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "5.0.7"
 | 
			
		||||
    version: "5.0.8"
 | 
			
		||||
  win32_registry:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: win32_registry
 | 
			
		||||
      sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9
 | 
			
		||||
      sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "1.1.1"
 | 
			
		||||
    version: "1.1.2"
 | 
			
		||||
  xdg_directories:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    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
 | 
			
		||||
# 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.
 | 
			
		||||
version: 0.14.13+205 # When changing this, update the tag in main() accordingly
 | 
			
		||||
version: 0.14.20+212 # When changing this, update the tag in main() accordingly
 | 
			
		||||
 | 
			
		||||
environment:
 | 
			
		||||
  sdk: '>=3.0.0 <4.0.0'
 | 
			
		||||
@@ -46,7 +46,7 @@ dependencies:
 | 
			
		||||
  html: ^0.15.0
 | 
			
		||||
  shared_preferences: ^2.0.15
 | 
			
		||||
  url_launcher: ^6.1.5
 | 
			
		||||
  permission_handler: ^10.0.0
 | 
			
		||||
  permission_handler: ^11.0.0
 | 
			
		||||
  fluttertoast: ^8.0.9
 | 
			
		||||
  device_info_plus: ^9.0.0
 | 
			
		||||
  file_picker: ^5.2.10
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user