mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 05:23:28 +01:00 
			
		
		
		
	Compare commits
	
		
			40 Commits
		
	
	
		
			v0.14.16-b
			...
			v0.14.21-b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 9f19e4dc83 | ||
|  | c9cb865c9c | ||
|  | b8a7dd984d | ||
|  | 3ede46c445 | ||
|  | 87c4af94d3 | ||
|  | 7e85ccaf28 | ||
|  | db3a262410 | ||
|  | 70162da491 | ||
|  | f3632a4033 | ||
|  | 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 | 
| @@ -255,6 +255,11 @@ | ||||
|    "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." | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -255,6 +255,11 @@ | ||||
|     "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?" | ||||
|   | ||||
| @@ -258,6 +258,11 @@ | ||||
|     "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?" | ||||
|   | ||||
| @@ -255,6 +255,11 @@ | ||||
|     "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?" | ||||
|   | ||||
| @@ -255,6 +255,11 @@ | ||||
|     "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": "برنامه ها حذف شوند؟" | ||||
|   | ||||
| @@ -255,6 +255,11 @@ | ||||
|     "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 ?" | ||||
|   | ||||
| @@ -254,6 +254,12 @@ | ||||
|     "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?" | ||||
|   | ||||
| @@ -255,6 +255,11 @@ | ||||
|     "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?" | ||||
|   | ||||
| @@ -258,6 +258,11 @@ | ||||
|     "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": "アプリを削除しますか?" | ||||
|   | ||||
| @@ -34,10 +34,10 @@ | ||||
|     "githubStarredRepos": "Repozytoria GitHub oznaczone gwiazdką", | ||||
|     "uname": "Nazwa użytkownika", | ||||
|     "wrongArgNum": "Nieprawidłowa liczba podanych argumentów", | ||||
|     "xIsTrackOnly": "{} jest tylko obserwowana", | ||||
|     "xIsTrackOnly": "{} jest tylko obserwowane", | ||||
|     "source": "Źródło", | ||||
|     "app": "Aplikacja", | ||||
|     "appsFromSourceAreTrackOnly": "Aplikacje z tego źródła są „Obserwowane”.", | ||||
|     "appsFromSourceAreTrackOnly": "Aplikacje z tego źródła są „tylko obserwowane”.", | ||||
|     "youPickedTrackOnly": "Wybrano opcję „Tylko obserwuj”.", | ||||
|     "trackOnlyAppDescription": "Aplikacja będzie obserwowana pod kątem aktualizacji, ale Obtainium nie będzie w stanie jej pobrać ani zainstalować.", | ||||
|     "cancelled": "Anulowano", | ||||
| @@ -52,7 +52,7 @@ | ||||
|     "additionalOptsFor": "Dodatkowe opcje dla {}", | ||||
|     "supportedSources": "Obsługiwane źródła", | ||||
|     "trackOnlyInBrackets": "(tylko obserwowane)", | ||||
|     "searchableInBrackets": "(Wyszukiwalne)", | ||||
|     "searchableInBrackets": "(wyszukiwalne)", | ||||
|     "appsString": "Aplikacje", | ||||
|     "noApps": "Brak aplikacji", | ||||
|     "noAppsForFilter": "Brak aplikacji dla filtra", | ||||
| @@ -70,7 +70,7 @@ | ||||
|     "removeSelectedApps": "Usuń wybrane aplikacje", | ||||
|     "updateX": "Zaktualizuj {}", | ||||
|     "installX": "Zainstaluj {}", | ||||
|     "markXTrackOnlyAsUpdated": "Oznacz {}\n(Tylko obserwowana)\njako zaktualizowaną", | ||||
|     "markXTrackOnlyAsUpdated": "Oznacz {}\n(tylko obserwowana)\njako zaktualizowaną", | ||||
|     "changeX": "Zmień {}", | ||||
|     "installUpdateApps": "Instaluj/aktualizuj aplikacje", | ||||
|     "installUpdateSelectedApps": "Zainstaluj/zaktualizuj wybrane aplikacje", | ||||
| @@ -261,6 +261,11 @@ | ||||
|     "autoExportOnChanges": "Automatyczny eksport po wprowadzeniu zmian", | ||||
|     "filterVersionsByRegEx": "Filtruj wersje według wyrażenia regularnego", | ||||
|     "trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK", | ||||
|     "dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API", | ||||
|     "reverseSort": "Odwrotne sortowanie", | ||||
|     "debugMenu": "Menu debugowania", | ||||
|     "bgTaskStarted": "Uruchomiono zadanie w tle - sprawdź logi.", | ||||
|     "runBgCheckNow": "Wymuś sprawdzenie aktualizacji w tle", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Usunąć aplikację?", | ||||
|         "few": "Usunąć aplikacje?", | ||||
|   | ||||
| @@ -128,7 +128,7 @@ | ||||
|     "pinUpdates": "Fixar atualizações no topo da visão de Apps", | ||||
|     "updates": "Atualizações", | ||||
|     "sourceSpecific": "Específico a fonte", | ||||
|     "appSource": "Fonte de Apps", | ||||
|     "appSource": "Fonte do App", | ||||
|     "noLogs": "Sem Logs", | ||||
|     "appLogs": "Logs do App", | ||||
|     "close": "Fechar", | ||||
| @@ -250,14 +250,19 @@ | ||||
|     "intermediateLinkNotFound": "Link intermediário não encontrado", | ||||
|     "exemptFromBackgroundUpdates": "Isento de atualizações em segundo plano (se ativadas)", | ||||
|     "bgUpdatesOnWiFiOnly": "Desative atualizações em segundo plano quando não estiver em 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", | ||||
|     "filterVersionsByRegEx": "Filter Versions by Regular Expression", | ||||
|     "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", | ||||
|     "autoSelectHighestVersionCode": "Auto-selecionar o maior codigo de versão", | ||||
|     "versionExtractionRegEx": "RegEx para Extração de Versão", | ||||
|     "matchGroupToUse": "Grupo de Seleção para Usar", | ||||
|     "highlightTouchTargets": "Destaque areas de toque menos óbvias", | ||||
|     "pickExportDir": "Escolher Diretorio de Exportação", | ||||
|     "autoExportOnChanges": "Auto-exportar em mudanças", | ||||
|     "filterVersionsByRegEx": "Filtrar Versões por Expressão Regular", | ||||
|     "trySelectingSuggestedVersionCode": "Tente selecionar a versão sugerida", | ||||
|     "dontSortReleasesList": "Reter a ordem de lançamento da API", | ||||
|     "reverseSort": "Ordenação reversa", | ||||
|     "debugMenu": "Menu Debug", | ||||
|     "bgTaskStarted": "Tarefa em segundo plano iniciada - verifique os logs.", | ||||
|     "runBgCheckNow": "Execute a verificação de atualização em segundo plano agora", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Remover App?", | ||||
|         "other": "Remover Apps?" | ||||
| @@ -236,25 +236,33 @@ | ||||
|     "addInfoInSettings": "Добавьте эту информацию в Настройки.", | ||||
|     "githubSourceNote": "Лимит запросов GitHub можно обойти, используя ключ API.", | ||||
|     "gitlabSourceNote": "Извлечение APK из GitLab может не работать без ключа API.", | ||||
|     "sortByFileNamesNotLinks": "Sort by file names instead of full links", | ||||
|     "filterReleaseNotesByRegEx": "Filter Release Notes by Regular Expression", | ||||
|     "customLinkFilterRegex": "Custom APK Link Filter by Regular Expression (Default '.apk$')", | ||||
|     "appsPossiblyUpdated": "App Updates Attempted", | ||||
|     "appsPossiblyUpdatedNotifDescription": "Notifies the user that updates to one or more Apps were potentially applied in the background", | ||||
|     "xWasPossiblyUpdatedToY": "{} may have been updated to {}.", | ||||
|     "backgroundUpdateReqsExplanation": "Background updates may not be possible for all apps.", | ||||
|     "backgroundUpdateLimitsExplanation": "The success of a background install can only be determined when Obtainium is opened.", | ||||
|     "verifyLatestTag": "Verify the 'latest' tag", | ||||
|     "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", | ||||
|     "filterVersionsByRegEx": "Filter Versions by Regular Expression", | ||||
|     "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", | ||||
|     "sortByFileNamesNotLinks": "Сортировать по именам файлов, а не по полным ссылкам", | ||||
|     "filterReleaseNotesByRegEx": "Фильтровать примечания к выпуску по регулярному выражению", | ||||
|     "customLinkFilterRegex": "Пользовательский фильтр ссылок APK по регулярному выражению (по умолчанию '.apk$')", | ||||
|     "appsPossiblyUpdated": "Попытки обновления приложений", | ||||
|     "appsPossiblyUpdatedNotifDescription": "Уведомляет пользователя о возможных обновлениях одного или нескольких приложений в фоновом режиме", | ||||
|     "xWasPossiblyUpdatedToY": "{} возможно был обновлен до {}.", | ||||
|     "enableBackgroundUpdates": "Включить обновления в фоне", | ||||
|     "backgroundUpdateReqsExplanation": "Фоновые обновления могут быть невозможны для всех приложений.", | ||||
|     "backgroundUpdateLimitsExplanation": "Успех фоновой установки можно определить только после открытия Obtainium.", | ||||
|     "verifyLatestTag": "Проверьте тег 'последний'", | ||||
|     "intermediateLinkRegex": "Фильтр ссылок 'промежуточного' типа для приоритетного посещения", | ||||
|     "intermediateLinkNotFound": "Промежуточная ссылка не найдена", | ||||
|     "exemptFromBackgroundUpdates": "Исключить из фоновых обновлений (если включено)", | ||||
|     "bgUpdatesOnWiFiOnly": "Отключить фоновые обновления, если нет соединения с Wi-Fi", | ||||
|     "autoSelectHighestVersionCode": "Автоматически выбирать APK с наивысшим кодом версии", | ||||
|     "versionExtractionRegEx": "Регулярное выражение для извлечения версии", | ||||
|     "matchGroupToUse": "Выберите группу для использования", | ||||
|     "highlightTouchTargets": "Выделить менее очевидные элементы управления касанием", | ||||
|     "pickExportDir": "Выбрать каталог для экспорта", | ||||
|     "autoExportOnChanges": "Автоэкспорт при изменениях", | ||||
|     "filterVersionsByRegEx": "Фильтровать версии по регулярному выражению", | ||||
|     "trySelectingSuggestedVersionCode": "Попробуйте выбрать предложенный код версии APK", | ||||
|     "dontSortReleasesList": "Сохранить порядок выпусков от API", | ||||
|     "reverseSort": "Обратная сортировка", | ||||
|     "debugMenu": "Меню Отладки", | ||||
|     "bgTaskStarted": "Фоновая задача начата - проверьте журналы.", | ||||
|     "runBgCheckNow": "Запустить проверку фонового обновления сейчас", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Удалить приложение?", | ||||
|         "other": "Удалить приложения?" | ||||
| @@ -300,11 +308,11 @@ | ||||
|         "other": "У {} и ещё {} приложений есть обновления." | ||||
|     }, | ||||
|     "xAndNMoreUpdatesInstalled": { | ||||
|         "one": "{} и еще 1 приложение были обновлены.", | ||||
|         "other": "{} и еще {} приложений были обновлены." | ||||
|         "one": "{} и ещё 1 приложение были обновлены.", | ||||
|         "other": "{} и ещё {} приложений были обновлены." | ||||
|     }, | ||||
|     "xAndNMoreUpdatesPossiblyInstalled": { | ||||
|         "one": "{} and 1 more app may have been updated.", | ||||
|         "other": "{} and {} more apps may have been updated." | ||||
|         "one": "{} и ещё 1 приложение могли быть обновлены.", | ||||
|         "other": "{} и ещё {} приложений могли быть обновлены." | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -51,9 +51,9 @@ | ||||
|     "percentProgress": "进度:{}%", | ||||
|     "pleaseWait": "请稍候", | ||||
|     "updateAvailable": "更新可用", | ||||
|     "estimateInBracketsShort": "(推测)", | ||||
|     "estimateInBracketsShort": "(推测)", | ||||
|     "notInstalled": "未安装", | ||||
|     "estimateInBrackets": "(推测)", | ||||
|     "estimateInBrackets": "(推测)", | ||||
|     "selectAll": "全选", | ||||
|     "deselectN": "取消选择 {}", | ||||
|     "xWillBeRemovedButRemainInstalled": "{} 将从 Obtainium 中删除,但仍安装在您的设备中。", | ||||
| @@ -246,16 +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", | ||||
|     "filterVersionsByRegEx": "Filter Versions by Regular Expression", | ||||
|     "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", | ||||
|     "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); | ||||
|   | ||||
| @@ -25,7 +25,7 @@ class FDroid extends AppSource { | ||||
|       ], | ||||
|       [ | ||||
|         GeneratedFormSwitch('trySelectingSuggestedVersionCode', | ||||
|             label: tr('trySelectingSuggestedVersionCode'), defaultValue: true) | ||||
|             label: tr('trySelectingSuggestedVersionCode')) | ||||
|       ], | ||||
|       [ | ||||
|         GeneratedFormSwitch('autoSelectHighestVersionCode', | ||||
| @@ -57,8 +57,63 @@ class FDroid extends AppSource { | ||||
|     return Uri.parse(standardUrl).pathSegments.last; | ||||
|   } | ||||
|  | ||||
|   APKDetails getAPKUrlsFromFDroidPackagesAPIResponse( | ||||
|       Response res, String apkUrlPrefix, String standardUrl, | ||||
|   @override | ||||
|   Future<APKDetails> getLatestAPKDetails( | ||||
|     String standardUrl, | ||||
|     Map<String, dynamic> additionalSettings, | ||||
|   ) async { | ||||
|     String? appId = await tryInferringAppId(standardUrl); | ||||
|     String host = Uri.parse(standardUrl).host; | ||||
|     return getAPKUrlsFromFDroidPackagesAPIResponse( | ||||
|         await sourceRequest('https://$host/api/v1/packages/$appId'), | ||||
|         'https://$host/repo/$appId', | ||||
|         standardUrl, | ||||
|         name, | ||||
|         autoSelectHighestVersionCode: | ||||
|             additionalSettings['autoSelectHighestVersionCode'] == true, | ||||
|         trySelectingSuggestedVersionCode: | ||||
|             additionalSettings['trySelectingSuggestedVersionCode'] == true, | ||||
|         filterVersionsByRegEx: | ||||
|             (additionalSettings['filterVersionsByRegEx'] as String?) | ||||
|                         ?.isNotEmpty == | ||||
|                     true | ||||
|                 ? additionalSettings['filterVersionsByRegEx'] | ||||
|                 : null); | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<Map<String, List<String>>> search(String query, | ||||
|       {Map<String, dynamic> querySettings = const {}}) async { | ||||
|     Response res = await sourceRequest( | ||||
|         'https://search.$host/?q=${Uri.encodeQueryComponent(query)}'); | ||||
|     if (res.statusCode == 200) { | ||||
|       Map<String, List<String>> urlsWithDescriptions = {}; | ||||
|       parse(res.body).querySelectorAll('.package-header').forEach((e) { | ||||
|         String? url = e.attributes['href']; | ||||
|         if (url != null) { | ||||
|           try { | ||||
|             standardizeUrl(url); | ||||
|           } catch (e) { | ||||
|             url = null; | ||||
|           } | ||||
|         } | ||||
|         if (url != null) { | ||||
|           urlsWithDescriptions[url] = [ | ||||
|             e.querySelector('.package-name')?.text.trim() ?? '', | ||||
|             e.querySelector('.package-summary')?.text.trim() ?? | ||||
|                 tr('noDescription') | ||||
|           ]; | ||||
|         } | ||||
|       }); | ||||
|       return urlsWithDescriptions; | ||||
|     } else { | ||||
|       throw getObtainiumHttpError(res); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| APKDetails getAPKUrlsFromFDroidPackagesAPIResponse( | ||||
|     Response res, String apkUrlPrefix, String standardUrl, String sourceName, | ||||
|     {bool autoSelectHighestVersionCode = false, | ||||
|     bool trySelectingSuggestedVersionCode = false, | ||||
|     String? filterVersionsByRegEx}) { | ||||
| @@ -126,62 +181,8 @@ class FDroid extends AppSource { | ||||
|         .map((e) => '${apkUrlPrefix}_${e['versionCode']}.apk') | ||||
|         .toList(); | ||||
|     return APKDetails(version, getApkUrlsFromUrls(apkUrls), | ||||
|           AppNames(name, Uri.parse(standardUrl).pathSegments.last)); | ||||
|         AppNames(sourceName, Uri.parse(standardUrl).pathSegments.last)); | ||||
|   } else { | ||||
|     throw getObtainiumHttpError(res); | ||||
|   } | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<APKDetails> getLatestAPKDetails( | ||||
|     String standardUrl, | ||||
|     Map<String, dynamic> additionalSettings, | ||||
|   ) async { | ||||
|     String? appId = await tryInferringAppId(standardUrl); | ||||
|     String host = Uri.parse(standardUrl).host; | ||||
|     return getAPKUrlsFromFDroidPackagesAPIResponse( | ||||
|         await sourceRequest('https://$host/api/v1/packages/$appId'), | ||||
|         'https://$host/repo/$appId', | ||||
|         standardUrl, | ||||
|         autoSelectHighestVersionCode: | ||||
|             additionalSettings['autoSelectHighestVersionCode'] == true, | ||||
|         trySelectingSuggestedVersionCode: | ||||
|             additionalSettings['trySelectingSuggestedVersionCode'] == true, | ||||
|         filterVersionsByRegEx: | ||||
|             (additionalSettings['filterVersionsByRegEx'] as String?) | ||||
|                         ?.isNotEmpty == | ||||
|                     true | ||||
|                 ? additionalSettings['filterVersionsByRegEx'] | ||||
|                 : null); | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<Map<String, List<String>>> search(String query, | ||||
|       {Map<String, dynamic> querySettings = const {}}) async { | ||||
|     Response res = await sourceRequest( | ||||
|         'https://search.$host/?q=${Uri.encodeQueryComponent(query)}'); | ||||
|     if (res.statusCode == 200) { | ||||
|       Map<String, List<String>> urlsWithDescriptions = {}; | ||||
|       parse(res.body).querySelectorAll('.package-header').forEach((e) { | ||||
|         String? url = e.attributes['href']; | ||||
|         if (url != null) { | ||||
|           try { | ||||
|             standardizeUrl(url); | ||||
|           } catch (e) { | ||||
|             url = null; | ||||
|           } | ||||
|         } | ||||
|         if (url != null) { | ||||
|           urlsWithDescriptions[url] = [ | ||||
|             e.querySelector('.package-name')?.text.trim() ?? '', | ||||
|             e.querySelector('.package-summary')?.text.trim() ?? | ||||
|                 tr('noDescription') | ||||
|           ]; | ||||
|         } | ||||
|       }); | ||||
|       return urlsWithDescriptions; | ||||
|     } 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,6 +268,9 @@ class GitHub extends AppSource { | ||||
|           rel?['published_at'] != null | ||||
|               ? DateTime.parse(rel['published_at']) | ||||
|               : null; | ||||
|       if (dontSortReleasesList) { | ||||
|         releases = releases.reversed.toList(); | ||||
|       } else { | ||||
|         releases.sort((a, b) { | ||||
|           // See #478 and #534 | ||||
|           if (a == b) { | ||||
| @@ -292,6 +297,7 @@ class GitHub extends AppSource { | ||||
|             } | ||||
|           } | ||||
|         }); | ||||
|       } | ||||
|       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,11 +40,12 @@ 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, | ||||
|         trySelectingSuggestedVersionCode: | ||||
|   | ||||
| @@ -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.16'; | ||||
| const String currentVersion = '0.14.21'; | ||||
| 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'; | ||||
|   | ||||
| @@ -102,11 +102,12 @@ class _ImportExportPageState extends State<ImportExportPage> { | ||||
|       }); | ||||
|     } | ||||
|  | ||||
|     runObtainiumExport() async { | ||||
|     runObtainiumExport({bool pickOnly = false}) async { | ||||
|       HapticFeedback.selectionClick(); | ||||
|       appsProvider | ||||
|           .exportApps( | ||||
|               pickOnly: (await settingsProvider.getExportDir()) == null, | ||||
|               pickOnly: | ||||
|                   pickOnly || (await settingsProvider.getExportDir()) == null, | ||||
|               sp: settingsProvider) | ||||
|           .then((String? result) { | ||||
|         if (result != null) { | ||||
| @@ -320,21 +321,38 @@ class _ImportExportPageState extends State<ImportExportPage> { | ||||
|                                     onPressed: appsProvider.apps.isEmpty || | ||||
|                                             importInProgress | ||||
|                                         ? null | ||||
|                                         : runObtainiumExport, | ||||
|                                     child: Text(tr(snapshot.data != null | ||||
|                                         ? 'obtainiumExport' | ||||
|                                         : 'pickExportDir')), | ||||
|                                         : () { | ||||
|                                             runObtainiumExport(pickOnly: true); | ||||
|                                           }, | ||||
|                                     child: Text(tr('pickExportDir')), | ||||
|                                   )), | ||||
|                                   const SizedBox( | ||||
|                                     width: 16, | ||||
|                                   ), | ||||
|                                   Expanded( | ||||
|                                       child: TextButton( | ||||
|                                     style: outlineButtonStyle, | ||||
|                                     onPressed: appsProvider.apps.isEmpty || | ||||
|                                             importInProgress || | ||||
|                                             snapshot.data == null | ||||
|                                         ? null | ||||
|                                         : runObtainiumExport, | ||||
|                                     child: Text(tr('obtainiumExport')), | ||||
|                                   )), | ||||
|                                 ], | ||||
|                               ), | ||||
|                               const SizedBox( | ||||
|                                 height: 8, | ||||
|                               ), | ||||
|                               Row( | ||||
|                                 children: [ | ||||
|                                   Expanded( | ||||
|                                       child: TextButton( | ||||
|                                           style: outlineButtonStyle, | ||||
|                                           onPressed: importInProgress | ||||
|                                               ? null | ||||
|                                               : runObtainiumImport, | ||||
|                                           child: Text(tr('obtainiumImport')))) | ||||
|                                           child: Text(tr('obtainiumImport')))), | ||||
|                                 ], | ||||
|                               ), | ||||
|                               if (snapshot.data != null) | ||||
|   | ||||
| @@ -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'))) | ||||
|                         ], | ||||
|                       ), | ||||
|                   ]), | ||||
|   | ||||
| @@ -1119,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')) | ||||
| @@ -1128,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) { | ||||
|   | ||||
							
								
								
									
										24
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -46,10 +46,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: archive | ||||
|       sha256: e0902a06f0e00414e4e3438a084580161279f137aeb862274710f29ec10cf01e | ||||
|       sha256: d4dc11707abb32ef756ab95678c0d6df54003d98277f7c9aeda14c48e7a38c2f | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "3.3.9" | ||||
|     version: "3.4.3" | ||||
|   args: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -386,10 +386,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: image | ||||
|       sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf | ||||
|       sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.0.17" | ||||
|     version: "4.1.3" | ||||
|   intl: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -546,10 +546,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: permission_handler_android | ||||
|       sha256: f23cfe9af0d49c6b9fd8a8b09f7b3301ca7e346204939b5afef4404d36d2608f | ||||
|       sha256: ace7d15a3d1a4a0b91c041d01e5405df221edb9de9116525efc773c74e6fc790 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "11.0.1" | ||||
|     version: "11.0.5" | ||||
|   permission_handler_apple: | ||||
|     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: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "5.0.7" | ||||
|     version: "5.0.9" | ||||
|   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.16+208 # When changing this, update the tag in main() accordingly | ||||
| version: 0.14.21+213 # When changing this, update the tag in main() accordingly | ||||
|  | ||||
| environment: | ||||
|   sdk: '>=3.0.0 <4.0.0' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user