mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-14 13:46:43 +02: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",
|
"highlightTouchTargets": "Highlight less obvious touch targets",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Pick Export Directory",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Želite li ukloniti aplikaciju?",
|
"one": "Želite li ukloniti aplikaciju?",
|
||||||
"other": "Želite li ukloniti aplikacije?"
|
"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",
|
"xIsTrackOnly": "{} ist nur zur Nachverfolgung",
|
||||||
"source": "Quelle",
|
"source": "Quelle",
|
||||||
"app": "App",
|
"app": "App",
|
||||||
"appsFromSourceAreTrackOnly": "Apps aus dieser Quelle sind 'Nur Nachverfolgen'.",
|
"appsFromSourceAreTrackOnly": "Apps aus dieser Quelle sind nur zum Nachverfolgen.",
|
||||||
"youPickedTrackOnly": "Sie haben die Option 'Nur Nachverfolgen' gewählt.",
|
"youPickedTrackOnly": "Sie haben die Option „Nur Nachverfolgen“ gewählt.",
|
||||||
"trackOnlyAppDescription": "Die App wird auf Updates überwacht, aber Obtainium wird sie nicht herunterladen oder installieren.",
|
"trackOnlyAppDescription": "Die App wird auf Updates überwacht, aber Obtainium wird sie nicht herunterladen oder installieren.",
|
||||||
"cancelled": "Abgebrochen",
|
"cancelled": "Abgebrochen",
|
||||||
"appAlreadyAdded": "App bereits hinzugefügt",
|
"appAlreadyAdded": "App bereits hinzugefügt",
|
||||||
@ -38,7 +38,7 @@
|
|||||||
"appSourceURL": "Quell-URL der App",
|
"appSourceURL": "Quell-URL der App",
|
||||||
"error": "Fehler",
|
"error": "Fehler",
|
||||||
"add": "Hinzufügen",
|
"add": "Hinzufügen",
|
||||||
"searchSomeSourcesLabel": "Suche (nur bestimmte Quellen)",
|
"searchSomeSourcesLabel": "Suche (nur für bestimmte Quellen)",
|
||||||
"search": "Suchen",
|
"search": "Suchen",
|
||||||
"additionalOptsFor": "Zusatzoptionen für {}",
|
"additionalOptsFor": "Zusatzoptionen für {}",
|
||||||
"supportedSources": "Unterstützte Quellen",
|
"supportedSources": "Unterstützte Quellen",
|
||||||
@ -70,7 +70,7 @@
|
|||||||
"yes": "Ja",
|
"yes": "Ja",
|
||||||
"markSelectedAppsUpdated": "Markiere ausgewählte Apps als aktuell",
|
"markSelectedAppsUpdated": "Markiere ausgewählte Apps als aktuell",
|
||||||
"pinToTop": "Oben anheften",
|
"pinToTop": "Oben anheften",
|
||||||
"unpinFromTop": "'Oben anheften' aufheben",
|
"unpinFromTop": "„Oben anheften“ aufheben",
|
||||||
"resetInstallStatusForSelectedAppsQuestion": "Installationsstatus für ausgewählte Apps zurücksetzen?",
|
"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.",
|
"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",
|
"shareSelectedAppURLs": "Ausgewählte App-URLs teilen",
|
||||||
@ -175,7 +175,7 @@
|
|||||||
"appId": "App ID",
|
"appId": "App ID",
|
||||||
"appWithIdOrNameNotFound": "Es wurde keine App mit dieser ID oder diesem Namen gefunden",
|
"appWithIdOrNameNotFound": "Es wurde keine App mit dieser ID oder diesem Namen gefunden",
|
||||||
"reposHaveMultipleApps": "Repos können mehrere Apps enthalten",
|
"reposHaveMultipleApps": "Repos können mehrere Apps enthalten",
|
||||||
"fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
|
"fdroidThirdPartyRepo": "F-Droid Drittparteienrepo",
|
||||||
"steam": "Steam",
|
"steam": "Steam",
|
||||||
"steamMobile": "Steam Mobile",
|
"steamMobile": "Steam Mobile",
|
||||||
"steamChat": "Steam Chat",
|
"steamChat": "Steam Chat",
|
||||||
@ -244,15 +244,22 @@
|
|||||||
"xWasPossiblyUpdatedToY": "{} wurde möglicherweise aktualisiert auf {}.",
|
"xWasPossiblyUpdatedToY": "{} wurde möglicherweise aktualisiert auf {}.",
|
||||||
"backgroundUpdateReqsExplanation": "Die Hintergrundaktualisierung ist möglicherweise nicht für alle Apps möglich.",
|
"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.",
|
"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)",
|
"exemptFromBackgroundUpdates": "Ausschluss von Hintergrundaktualisierungen (falls aktiviert)",
|
||||||
"bgUpdatesOnWiFiOnly": "Hintergrundaktualisierungen deaktivieren, wenn kein WLAN vorhanden ist",
|
"bgUpdatesOnWiFiOnly": "Hintergrundaktualisierungen deaktivieren, wenn kein WLAN vorhanden ist",
|
||||||
"autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
|
"autoSelectHighestVersionCode": "Automatisch höchste APK-Code-Version auswählen",
|
||||||
"versionExtractionRegEx": "Version Extraction RegEx",
|
"versionExtractionRegEx": "Versions-Extraktion RegEx",
|
||||||
"matchGroupToUse": "Match Group to Use",
|
"matchGroupToUse": "Zu verwendende Gruppe abgleichen",
|
||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Weniger offensichtliche Ziele hervorheben",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Export-Verzeichnis wählen",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
@ -256,6 +256,13 @@
|
|||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Highlight less obvious touch targets",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Pick Export Directory",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Remove App?",
|
"one": "Remove App?",
|
||||||
"other": "Remove Apps?"
|
"other": "Remove Apps?"
|
||||||
|
@ -253,6 +253,13 @@
|
|||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Highlight less obvious touch targets",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Pick Export Directory",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "¿Eliminar Aplicación?",
|
"one": "¿Eliminar Aplicación?",
|
||||||
"other": "¿Eliminar Aplicaciones?"
|
"other": "¿Eliminar Aplicaciones?"
|
||||||
|
@ -253,6 +253,13 @@
|
|||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Highlight less obvious touch targets",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Pick Export Directory",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "برنامه حذف شود؟",
|
"one": "برنامه حذف شود؟",
|
||||||
"other": "برنامه ها حذف شوند؟"
|
"other": "برنامه ها حذف شوند؟"
|
||||||
|
@ -253,6 +253,13 @@
|
|||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Highlight less obvious touch targets",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Pick Export Directory",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
|
@ -246,12 +246,20 @@
|
|||||||
"verifyLatestTag": "Ellenőrizze a „legújabb” címkét",
|
"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)",
|
"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",
|
"bgUpdatesOnWiFiOnly": "Tiltsa le a háttérben frissítéseket, ha nincs Wi-Fi-n",
|
||||||
"autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
|
"autoSelectHighestVersionCode": "A legmagasabb verziószámú APK auto. kiválasztása",
|
||||||
"versionExtractionRegEx": "Version Extraction RegEx",
|
"versionExtractionRegEx": "Verzió kibontása reguláris kifejezéssel",
|
||||||
"matchGroupToUse": "Match Group to Use",
|
"matchGroupToUse": "Párosítsa a csoportot a használathoz",
|
||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Emelje ki a kevésbé nyilvánvaló érintési célokat",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Válassza az Exportálási könyvtárat",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Eltávolítja az alkalmazást?",
|
"one": "Eltávolítja az alkalmazást?",
|
||||||
"other": "Eltávolítja az alkalmazást?"
|
"other": "Eltávolítja az alkalmazást?"
|
||||||
|
@ -253,6 +253,13 @@
|
|||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Highlight less obvious touch targets",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Pick Export Directory",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Rimuovere l'app?",
|
"one": "Rimuovere l'app?",
|
||||||
"other": "Rimuovere le app?"
|
"other": "Rimuovere le app?"
|
||||||
|
@ -144,7 +144,7 @@
|
|||||||
"updatesAvailable": "アップデートが利用可能",
|
"updatesAvailable": "アップデートが利用可能",
|
||||||
"updatesAvailableNotifDescription": "Obtainiumが追跡している1つまたは複数のアプリのアップデートが利用可能であることをユーザーに通知する",
|
"updatesAvailableNotifDescription": "Obtainiumが追跡している1つまたは複数のアプリのアップデートが利用可能であることをユーザーに通知する",
|
||||||
"noNewUpdates": "新しいアップデートはありません",
|
"noNewUpdates": "新しいアップデートはありません",
|
||||||
"xHasAnUpdate": "{} のアップデートが利用可能です",
|
"xHasAnUpdate": "{} のアップデートが利用可能です。",
|
||||||
"appsUpdated": "アプリをアップデートしました",
|
"appsUpdated": "アプリをアップデートしました",
|
||||||
"appsUpdatedNotifDescription": "1つまたは複数のAppのアップデートがバックグラウンドで適用されたことをユーザーに通知する",
|
"appsUpdatedNotifDescription": "1つまたは複数のAppのアップデートがバックグラウンドで適用されたことをユーザーに通知する",
|
||||||
"xWasUpdatedToY": "{} が {} にアップデートされました",
|
"xWasUpdatedToY": "{} が {} にアップデートされました",
|
||||||
@ -241,19 +241,28 @@
|
|||||||
"customLinkFilterRegex": "正規表現によるカスタムリンクフィルター (デフォルト '.apk$')",
|
"customLinkFilterRegex": "正規表現によるカスタムリンクフィルター (デフォルト '.apk$')",
|
||||||
"appsPossiblyUpdated": "アプリのアップデートを試行",
|
"appsPossiblyUpdated": "アプリのアップデートを試行",
|
||||||
"appsPossiblyUpdatedNotifDescription": "1つまたは複数のアプリのアップデートがバックグラウンドで適用された可能性があることをユーザーに通知する",
|
"appsPossiblyUpdatedNotifDescription": "1つまたは複数のアプリのアップデートがバックグラウンドで適用された可能性があることをユーザーに通知する",
|
||||||
"xWasPossiblyUpdatedToY": "{} が {} にアップデートされた可能性があります",
|
"xWasPossiblyUpdatedToY": "{} が {} にアップデートされた可能性があります。",
|
||||||
"enableBackgroundUpdates": "バックグラウンドアップデートを有効化する",
|
"enableBackgroundUpdates": "バックグラウンドアップデートを有効化する",
|
||||||
"backgroundUpdateReqsExplanation": "バックグラウンドアップデートは、すべてのアプリで可能とは限りません。",
|
"backgroundUpdateReqsExplanation": "バックグラウンドアップデートは、すべてのアプリで可能とは限りません。",
|
||||||
"backgroundUpdateLimitsExplanation": "バックグラウンドアップデートが成功したかどうかは、Obtainiumを起動したときにしか判断できません。",
|
"backgroundUpdateLimitsExplanation": "バックグラウンドアップデートが成功したかどうかは、Obtainiumを起動したときにしか判断できません。",
|
||||||
"verifyLatestTag": "'latest'タグを確認する",
|
"verifyLatestTag": "'latest'タグを確認する",
|
||||||
|
"intermediateLinkRegex": "最初にアクセスする「中間」リンクをフィルタリングする",
|
||||||
|
"intermediateLinkNotFound": "中間リンクが見つかりませんでした",
|
||||||
"exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)",
|
"exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)",
|
||||||
"bgUpdatesOnWiFiOnly": "WiFiを使用していない場合,バックグラウンドアップデートを無効にする",
|
"bgUpdatesOnWiFiOnly": "WiFiを使用していない場合,バックグラウンドアップデートを無効にする",
|
||||||
"autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
|
"autoSelectHighestVersionCode": "最も高いバージョンコードのAPKを自動で選択する",
|
||||||
"versionExtractionRegEx": "Version Extraction RegEx",
|
"versionExtractionRegEx": "バージョン抽出の正規表現",
|
||||||
"matchGroupToUse": "Match Group to Use",
|
"matchGroupToUse": "使用するマッチしたグループ",
|
||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "目立たないタップ可能な対象をハイライトする",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "エクスポートディレクトリを選択",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
@ -295,15 +304,15 @@
|
|||||||
"other": "{n} 個のログをクリアしました (前 = {before}, 後 = {after})"
|
"other": "{n} 個のログをクリアしました (前 = {before}, 後 = {after})"
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesAvailable": {
|
"xAndNMoreUpdatesAvailable": {
|
||||||
"one": "{} とさらに {} 個のアプリのアップデートが利用可能です",
|
"one": "{} とさらに {} 個のアプリのアップデートが利用可能です。",
|
||||||
"other": "{} とさらに {} 個のアプリのアップデートが利用可能です"
|
"other": "{} とさらに {} 個のアプリのアップデートが利用可能です。"
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesInstalled": {
|
"xAndNMoreUpdatesInstalled": {
|
||||||
"one": "{} とさらに {} 個のアプリがアップデートされました",
|
"one": "{} とさらに {} 個のアプリがアップデートされました。",
|
||||||
"other": "{} とさらに {} 個のアプリがアップデートされました"
|
"other": "{} とさらに {} 個のアプリがアップデートされました。"
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesPossiblyInstalled": {
|
"xAndNMoreUpdatesPossiblyInstalled": {
|
||||||
"one": "{} とさらに 1 個のアプリがアップデートされた可能性があります",
|
"one": "{} とさらに 1 個のアプリがアップデートされた可能性があります。",
|
||||||
"other": "{} とさらに {} 個のアプリがアップデートされた可能性があります"
|
"other": "{} とさらに {} 個のアプリがアップデートされた可能性があります。"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,12 +253,19 @@
|
|||||||
"verifyLatestTag": "Zweryfikuj najnowszy tag",
|
"verifyLatestTag": "Zweryfikuj najnowszy tag",
|
||||||
"exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)",
|
"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",
|
"bgUpdatesOnWiFiOnly": "Wyłącz aktualizacje w tle, gdy nie ma połączenia z Wi-Fi",
|
||||||
"autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
|
"autoSelectHighestVersionCode": "Automatycznie wybierz najwyższy kod wersji APK",
|
||||||
"versionExtractionRegEx": "Version Extraction RegEx",
|
"versionExtractionRegEx": "Wyrażenie regularne wyodrębniające wersję",
|
||||||
"matchGroupToUse": "Match Group to Use",
|
"matchGroupToUse": "Dopasuj grupę do użycia",
|
||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Wyróżnij mniej oczywiste elementy dotykowe",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Wybierz katalog eksportu",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Usunąć aplikację?",
|
"one": "Usunąć aplikację?",
|
||||||
"few": "Usunąć aplikacje?",
|
"few": "Usunąć aplikacje?",
|
||||||
|
@ -256,6 +256,13 @@
|
|||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Highlight less obvious touch targets",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Pick Export Directory",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Remover App?",
|
"one": "Remover App?",
|
||||||
"other": "Remover Apps?"
|
"other": "Remover Apps?"
|
@ -253,6 +253,13 @@
|
|||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"highlightTouchTargets": "Highlight less obvious touch targets",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"pickExportDir": "Pick Export Directory",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Удалить приложение?",
|
"one": "Удалить приложение?",
|
||||||
"other": "Удалить приложения?"
|
"other": "Удалить приложения?"
|
||||||
|
@ -51,9 +51,9 @@
|
|||||||
"percentProgress": "进度:{}%",
|
"percentProgress": "进度:{}%",
|
||||||
"pleaseWait": "请稍候",
|
"pleaseWait": "请稍候",
|
||||||
"updateAvailable": "更新可用",
|
"updateAvailable": "更新可用",
|
||||||
"estimateInBracketsShort": "(推测)",
|
"estimateInBracketsShort": "(推测)",
|
||||||
"notInstalled": "未安装",
|
"notInstalled": "未安装",
|
||||||
"estimateInBrackets": "(推测)",
|
"estimateInBrackets": "(推测)",
|
||||||
"selectAll": "全选",
|
"selectAll": "全选",
|
||||||
"deselectN": "取消选择 {}",
|
"deselectN": "取消选择 {}",
|
||||||
"xWillBeRemovedButRemainInstalled": "{} 将从 Obtainium 中删除,但仍安装在您的设备中。",
|
"xWillBeRemovedButRemainInstalled": "{} 将从 Obtainium 中删除,但仍安装在您的设备中。",
|
||||||
@ -246,14 +246,23 @@
|
|||||||
"backgroundUpdateReqsExplanation": "后台更新未必适用于所有的应用。",
|
"backgroundUpdateReqsExplanation": "后台更新未必适用于所有的应用。",
|
||||||
"backgroundUpdateLimitsExplanation": "只有在启动 Obtainium 时才能确认安装是否成功。",
|
"backgroundUpdateLimitsExplanation": "只有在启动 Obtainium 时才能确认安装是否成功。",
|
||||||
"verifyLatestTag": "验证“Latest”标签",
|
"verifyLatestTag": "验证“Latest”标签",
|
||||||
"exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)",
|
"intermediateLinkRegex": "首先访问“中间”链接的过滤器",
|
||||||
"bgUpdatesOnWiFiOnly": "Disable background updates when not on WiFi",
|
"intermediateLinkNotFound": "中间链接未找到",
|
||||||
"autoSelectHighestVersionCode": "Auto-select highest versionCode APK",
|
"exemptFromBackgroundUpdates": "禁用后台更新(如果全局设置启用)",
|
||||||
"versionExtractionRegEx": "Version Extraction RegEx",
|
"bgUpdatesOnWiFiOnly": "不在连接 WiFi 时禁用后台更新",
|
||||||
"matchGroupToUse": "Match Group to Use",
|
"autoSelectHighestVersionCode": "自动选择最高版本号 APK",
|
||||||
"highlightTouchTargets": "Highlight less obvious touch targets",
|
"versionExtractionRegEx": "版本提取正则表达式",
|
||||||
"pickExportDir": "Pick Export Directory",
|
"matchGroupToUse": "匹配要使用的组",
|
||||||
"autoExportOnChanges": "Auto-export on changes",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "是否删除应用?",
|
"one": "是否删除应用?",
|
||||||
"other": "是否删除应用?"
|
"other": "是否删除应用?"
|
||||||
|
@ -21,16 +21,19 @@ parseDateTimeMMMddCommayyyy(String? dateString) {
|
|||||||
class APKPure extends AppSource {
|
class APKPure extends AppSource {
|
||||||
APKPure() {
|
APKPure() {
|
||||||
host = 'apkpure.com';
|
host = 'apkpure.com';
|
||||||
|
allowSubDomains = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url) {
|
||||||
RegExp standardUrlRegExB = RegExp('^https?://m.$host/+[^/]+/+[^/]+');
|
RegExp standardUrlRegExB =
|
||||||
|
RegExp('^https?://m.$host/+[^/]+/+[^/]+(/+[^/]+)?');
|
||||||
RegExpMatch? match = standardUrlRegExB.firstMatch(url.toLowerCase());
|
RegExpMatch? match = standardUrlRegExB.firstMatch(url.toLowerCase());
|
||||||
if (match != null) {
|
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());
|
match = standardUrlRegExA.firstMatch(url.toLowerCase());
|
||||||
if (match == null) {
|
if (match == null) {
|
||||||
throw InvalidURLError(name);
|
throw InvalidURLError(name);
|
||||||
|
@ -13,10 +13,24 @@ class FDroid extends AppSource {
|
|||||||
name = tr('fdroid');
|
name = tr('fdroid');
|
||||||
canSearch = true;
|
canSearch = true;
|
||||||
additionalSourceAppSpecificSettingFormItems = [
|
additionalSourceAppSpecificSettingFormItems = [
|
||||||
|
[
|
||||||
|
GeneratedFormTextField('filterVersionsByRegEx',
|
||||||
|
label: tr('filterVersionsByRegEx'),
|
||||||
|
required: false,
|
||||||
|
additionalValidators: [
|
||||||
|
(value) {
|
||||||
|
return regExValidator(value);
|
||||||
|
}
|
||||||
|
])
|
||||||
|
],
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch('trySelectingSuggestedVersionCode',
|
||||||
|
label: tr('trySelectingSuggestedVersionCode'))
|
||||||
|
],
|
||||||
[
|
[
|
||||||
GeneratedFormSwitch('autoSelectHighestVersionCode',
|
GeneratedFormSwitch('autoSelectHighestVersionCode',
|
||||||
label: tr('autoSelectHighestVersionCode'))
|
label: tr('autoSelectHighestVersionCode'))
|
||||||
]
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,33 +57,6 @@ class FDroid extends AppSource {
|
|||||||
return Uri.parse(standardUrl).pathSegments.last;
|
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
|
@override
|
||||||
Future<APKDetails> getLatestAPKDetails(
|
Future<APKDetails> getLatestAPKDetails(
|
||||||
String standardUrl,
|
String standardUrl,
|
||||||
@ -81,8 +68,17 @@ class FDroid extends AppSource {
|
|||||||
await sourceRequest('https://$host/api/v1/packages/$appId'),
|
await sourceRequest('https://$host/api/v1/packages/$appId'),
|
||||||
'https://$host/repo/$appId',
|
'https://$host/repo/$appId',
|
||||||
standardUrl,
|
standardUrl,
|
||||||
|
name,
|
||||||
autoSelectHighestVersionCode:
|
autoSelectHighestVersionCode:
|
||||||
additionalSettings['autoSelectHighestVersionCode'] == true);
|
additionalSettings['autoSelectHighestVersionCode'] == true,
|
||||||
|
trySelectingSuggestedVersionCode:
|
||||||
|
additionalSettings['trySelectingSuggestedVersionCode'] == true,
|
||||||
|
filterVersionsByRegEx:
|
||||||
|
(additionalSettings['filterVersionsByRegEx'] as String?)
|
||||||
|
?.isNotEmpty ==
|
||||||
|
true
|
||||||
|
? additionalSettings['filterVersionsByRegEx']
|
||||||
|
: null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@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'),
|
label: tr('githubPATLabel'),
|
||||||
password: true,
|
password: true,
|
||||||
required: false,
|
required: false,
|
||||||
hint: tr('githubPATFormat'),
|
|
||||||
belowWidgets: [
|
belowWidgets: [
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 4,
|
height: 4,
|
||||||
@ -73,9 +72,10 @@ class GitHub extends AppSource {
|
|||||||
}
|
}
|
||||||
])
|
])
|
||||||
],
|
],
|
||||||
|
[GeneratedFormSwitch('verifyLatestTag', label: tr('verifyLatestTag'))],
|
||||||
[
|
[
|
||||||
GeneratedFormSwitch('verifyLatestTag',
|
GeneratedFormSwitch('dontSortReleasesList',
|
||||||
label: tr('verifyLatestTag'), defaultValue: false)
|
label: tr('dontSortReleasesList'))
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -231,6 +231,8 @@ class GitHub extends AppSource {
|
|||||||
? additionalSettings['filterReleaseNotesByRegEx']
|
? additionalSettings['filterReleaseNotesByRegEx']
|
||||||
: null;
|
: null;
|
||||||
bool verifyLatestTag = additionalSettings['verifyLatestTag'] == true;
|
bool verifyLatestTag = additionalSettings['verifyLatestTag'] == true;
|
||||||
|
bool dontSortReleasesList =
|
||||||
|
additionalSettings['dontSortReleasesList'] == true;
|
||||||
String? latestTag;
|
String? latestTag;
|
||||||
if (verifyLatestTag) {
|
if (verifyLatestTag) {
|
||||||
var temp = requestUrl.split('?');
|
var temp = requestUrl.split('?');
|
||||||
@ -266,32 +268,36 @@ class GitHub extends AppSource {
|
|||||||
rel?['published_at'] != null
|
rel?['published_at'] != null
|
||||||
? DateTime.parse(rel['published_at'])
|
? DateTime.parse(rel['published_at'])
|
||||||
: null;
|
: null;
|
||||||
releases.sort((a, b) {
|
if (dontSortReleasesList) {
|
||||||
// See #478 and #534
|
releases = releases.reversed.toList();
|
||||||
if (a == b) {
|
} else {
|
||||||
return 0;
|
releases.sort((a, b) {
|
||||||
} else if (a == null) {
|
// See #478 and #534
|
||||||
return -1;
|
if (a == b) {
|
||||||
} else if (b == null) {
|
return 0;
|
||||||
return 1;
|
} else if (a == null) {
|
||||||
} else {
|
return -1;
|
||||||
var nameA = a['tag_name'] ?? a['name'];
|
} else if (b == null) {
|
||||||
var nameB = b['tag_name'] ?? b['name'];
|
return 1;
|
||||||
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 {
|
} else {
|
||||||
return (getReleaseDateFromRelease(a) ?? DateTime(1))
|
var nameA = a['tag_name'] ?? a['name'];
|
||||||
.compareTo(getReleaseDateFromRelease(b) ?? DateTime(0));
|
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 &&
|
if (latestTag != null &&
|
||||||
releases.isNotEmpty &&
|
releases.isNotEmpty &&
|
||||||
latestTag !=
|
latestTag !=
|
||||||
|
@ -93,6 +93,7 @@ class HTML extends AppSource {
|
|||||||
GeneratedFormSwitch('sortByFileNamesNotLinks',
|
GeneratedFormSwitch('sortByFileNamesNotLinks',
|
||||||
label: tr('sortByFileNamesNotLinks'))
|
label: tr('sortByFileNamesNotLinks'))
|
||||||
],
|
],
|
||||||
|
[GeneratedFormSwitch('reverseSort', label: tr('reverseSort'))],
|
||||||
[
|
[
|
||||||
GeneratedFormTextField('customLinkFilterRegex',
|
GeneratedFormTextField('customLinkFilterRegex',
|
||||||
label: tr('customLinkFilterRegex'),
|
label: tr('customLinkFilterRegex'),
|
||||||
@ -107,7 +108,7 @@ class HTML extends AppSource {
|
|||||||
[
|
[
|
||||||
GeneratedFormTextField('intermediateLinkRegex',
|
GeneratedFormTextField('intermediateLinkRegex',
|
||||||
label: tr('intermediateLinkRegex'),
|
label: tr('intermediateLinkRegex'),
|
||||||
hint: '([0-9]+\.)*[0-9]+/\$',
|
hint: '([0-9]+.)*[0-9]+/\$',
|
||||||
required: false,
|
required: false,
|
||||||
additionalValidators: [(value) => regExValidator(value)])
|
additionalValidators: [(value) => regExValidator(value)])
|
||||||
],
|
],
|
||||||
@ -123,6 +124,9 @@ class HTML extends AppSource {
|
|||||||
textInputType: const TextInputType.numberWithOptions(),
|
textInputType: const TextInputType.numberWithOptions(),
|
||||||
additionalValidators: [
|
additionalValidators: [
|
||||||
(value) {
|
(value) {
|
||||||
|
if (value?.isEmpty == true) {
|
||||||
|
value = null;
|
||||||
|
}
|
||||||
value ??= '1';
|
value ??= '1';
|
||||||
return intValidator(value);
|
return intValidator(value);
|
||||||
}
|
}
|
||||||
@ -192,6 +196,9 @@ class HTML extends AppSource {
|
|||||||
? compareAlphaNumeric(a.split('/').where((e) => e.isNotEmpty).last,
|
? compareAlphaNumeric(a.split('/').where((e) => e.isNotEmpty).last,
|
||||||
b.split('/').where((e) => e.isNotEmpty).last)
|
b.split('/').where((e) => e.isNotEmpty).last)
|
||||||
: compareAlphaNumeric(a, b));
|
: compareAlphaNumeric(a, b));
|
||||||
|
if (additionalSettings['reverseSort'] == true) {
|
||||||
|
links = links.reversed.toList();
|
||||||
|
}
|
||||||
if ((additionalSettings['apkFilterRegEx'] as String?)?.isNotEmpty ==
|
if ((additionalSettings['apkFilterRegEx'] as String?)?.isNotEmpty ==
|
||||||
true) {
|
true) {
|
||||||
var reg = RegExp(additionalSettings['apkFilterRegEx']);
|
var reg = RegExp(additionalSettings['apkFilterRegEx']);
|
||||||
|
@ -6,16 +6,22 @@ class IzzyOnDroid extends AppSource {
|
|||||||
late FDroid fd;
|
late FDroid fd;
|
||||||
|
|
||||||
IzzyOnDroid() {
|
IzzyOnDroid() {
|
||||||
host = 'android.izzysoft.de';
|
host = 'izzysoft.de';
|
||||||
fd = FDroid();
|
fd = FDroid();
|
||||||
additionalSourceAppSpecificSettingFormItems =
|
additionalSourceAppSpecificSettingFormItems =
|
||||||
fd.additionalSourceAppSpecificSettingFormItems;
|
fd.additionalSourceAppSpecificSettingFormItems;
|
||||||
|
allowSubDomains = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url) {
|
||||||
RegExp standardUrlRegEx = RegExp('^https?://$host/repo/apk/[^/]+');
|
RegExp standardUrlRegExA = RegExp('^https?://android.$host/repo/apk/[^/]+');
|
||||||
RegExpMatch? match = standardUrlRegEx.firstMatch(url.toLowerCase());
|
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) {
|
if (match == null) {
|
||||||
throw InvalidURLError(name);
|
throw InvalidURLError(name);
|
||||||
}
|
}
|
||||||
@ -34,12 +40,16 @@ class IzzyOnDroid extends AppSource {
|
|||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
) async {
|
) async {
|
||||||
String? appId = await tryInferringAppId(standardUrl);
|
String? appId = await tryInferringAppId(standardUrl);
|
||||||
return fd.getAPKUrlsFromFDroidPackagesAPIResponse(
|
return getAPKUrlsFromFDroidPackagesAPIResponse(
|
||||||
await sourceRequest(
|
await sourceRequest(
|
||||||
'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'),
|
'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'),
|
||||||
'https://android.izzysoft.de/frepo/$appId',
|
'https://android.izzysoft.de/frepo/$appId',
|
||||||
standardUrl,
|
standardUrl,
|
||||||
|
name,
|
||||||
autoSelectHighestVersionCode:
|
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
|
// ignore: implementation_imports
|
||||||
import 'package:easy_localization/src/localization.dart';
|
import 'package:easy_localization/src/localization.dart';
|
||||||
|
|
||||||
const String currentVersion = '0.14.13';
|
const String currentVersion = '0.14.20';
|
||||||
const String currentReleaseTag =
|
const String currentReleaseTag =
|
||||||
'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES
|
'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ const int bgUpdateCheckAlarmId = 666;
|
|||||||
|
|
||||||
List<MapEntry<Locale, String>> supportedLocales = const [
|
List<MapEntry<Locale, String>> supportedLocales = const [
|
||||||
MapEntry(Locale('en'), 'English'),
|
MapEntry(Locale('en'), 'English'),
|
||||||
MapEntry(Locale('zh'), '汉语'),
|
MapEntry(Locale('zh'), '简体中文'),
|
||||||
MapEntry(Locale('it'), 'Italiano'),
|
MapEntry(Locale('it'), 'Italiano'),
|
||||||
MapEntry(Locale('ja'), '日本語'),
|
MapEntry(Locale('ja'), '日本語'),
|
||||||
MapEntry(Locale('hu'), 'Magyar'),
|
MapEntry(Locale('hu'), 'Magyar'),
|
||||||
@ -38,7 +38,8 @@ List<MapEntry<Locale, String>> supportedLocales = const [
|
|||||||
MapEntry(Locale('pl'), 'Polski'),
|
MapEntry(Locale('pl'), 'Polski'),
|
||||||
MapEntry(Locale('ru'), 'Русский язык'),
|
MapEntry(Locale('ru'), 'Русский язык'),
|
||||||
MapEntry(Locale('bs'), 'Bosanski'),
|
MapEntry(Locale('bs'), 'Bosanski'),
|
||||||
// MapEntry(Locale('br'), 'Brasileiro'),
|
MapEntry(Locale('pt'), 'Brasileiro'),
|
||||||
|
MapEntry(Locale('cs'), 'Česky'),
|
||||||
];
|
];
|
||||||
const fallbackLocale = Locale('en');
|
const fallbackLocale = Locale('en');
|
||||||
const localeDir = 'assets/translations';
|
const localeDir = 'assets/translations';
|
||||||
|
@ -148,7 +148,7 @@ class _AddAppPageState extends State<AddAppPage> {
|
|||||||
userPickedTrackOnly))) {
|
userPickedTrackOnly))) {
|
||||||
var trackOnly = pickedSource!.enforceTrackOnly || userPickedTrackOnly;
|
var trackOnly = pickedSource!.enforceTrackOnly || userPickedTrackOnly;
|
||||||
app = await sourceProvider.getApp(
|
app = await sourceProvider.getApp(
|
||||||
pickedSource!, userInput, additionalSettings,
|
pickedSource!, userInput.trim(), additionalSettings,
|
||||||
trackOnlyOverride: trackOnly,
|
trackOnlyOverride: trackOnly,
|
||||||
overrideSource: pickedSourceOverride,
|
overrideSource: pickedSourceOverride,
|
||||||
inferAppIdIfOptional: inferAppIdIfOptional);
|
inferAppIdIfOptional: inferAppIdIfOptional);
|
||||||
|
@ -152,7 +152,7 @@ class _AppPageState extends State<AppPage> {
|
|||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 125),
|
const SizedBox(height: 20),
|
||||||
app?.icon != null
|
app?.icon != null
|
||||||
? Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
? Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||||
Image.memory(
|
Image.memory(
|
||||||
@ -463,9 +463,18 @@ class _AppPageState extends State<AppPage> {
|
|||||||
: null))
|
: null))
|
||||||
],
|
],
|
||||||
));
|
));
|
||||||
|
|
||||||
|
appScreenAppBar() => AppBar(
|
||||||
|
leading: IconButton(
|
||||||
|
icon: const Icon(Icons.arrow_back),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: settingsProvider.showAppWebpage ? AppBar() : null,
|
appBar: settingsProvider.showAppWebpage ? AppBar() : appScreenAppBar(),
|
||||||
backgroundColor: Theme.of(context).colorScheme.surface,
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||||
body: RefreshIndicator(
|
body: RefreshIndicator(
|
||||||
child: settingsProvider.showAppWebpage
|
child: settingsProvider.showAppWebpage
|
||||||
|
@ -558,7 +558,7 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
const Flexible(child: Text('Debug Menu')),
|
Flexible(child: Text(tr('debugMenu'))),
|
||||||
Switch(
|
Switch(
|
||||||
value: settingsProvider.showDebugOpts,
|
value: settingsProvider.showDebugOpts,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
@ -577,12 +577,9 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
const Duration(seconds: 0),
|
const Duration(seconds: 0),
|
||||||
bgUpdateCheckAlarmId + 200,
|
bgUpdateCheckAlarmId + 200,
|
||||||
bgUpdateCheck);
|
bgUpdateCheck);
|
||||||
showError(
|
showError(tr('bgTaskStarted'), context);
|
||||||
'Background task started - check logs.',
|
|
||||||
context);
|
|
||||||
},
|
},
|
||||||
child:
|
child: Text(tr('runBgCheckNow')))
|
||||||
const Text('Run Background Update Check Now'))
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
|
@ -430,7 +430,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
zipFile: File(filePath), destinationDir: Directory(destinationPath));
|
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
|
// 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
|
// 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
|
// If 0 APKs installed, throw the first install error encountered
|
||||||
@ -443,7 +444,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
if (file.path.toLowerCase().endsWith('.apk')) {
|
if (file.path.toLowerCase().endsWith('.apk')) {
|
||||||
try {
|
try {
|
||||||
somethingInstalled = somethingInstalled ||
|
somethingInstalled = somethingInstalled ||
|
||||||
await installApk(DownloadedApk(dir.appId, file));
|
await installApk(DownloadedApk(dir.appId, file),
|
||||||
|
needsBGWorkaround: needsBGWorkaround);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logs.add(
|
logs.add(
|
||||||
'Could not install APK from XAPK \'${file.path}\': ${e.toString()}');
|
'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 =
|
var newInfo =
|
||||||
await pm.getPackageArchiveInfo(archiveFilePath: file.file.path);
|
await pm.getPackageArchiveInfo(archiveFilePath: file.file.path);
|
||||||
PackageInfo? appInfo = await getInstalledInfo(apps[file.appId]!.app.id);
|
PackageInfo? appInfo = await getInstalledInfo(apps[file.appId]!.app.id);
|
||||||
@ -472,6 +475,17 @@ class AppsProvider with ChangeNotifier {
|
|||||||
!(await canDowngradeApps())) {
|
!(await canDowngradeApps())) {
|
||||||
throw DowngradeError();
|
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 =
|
int? code =
|
||||||
await AndroidPackageInstaller.installApk(apkFilePath: file.file.path);
|
await AndroidPackageInstaller.installApk(apkFilePath: file.file.path);
|
||||||
bool installed = false;
|
bool installed = false;
|
||||||
@ -641,15 +655,13 @@ class AppsProvider with ChangeNotifier {
|
|||||||
try {
|
try {
|
||||||
if (downloadedFile != null) {
|
if (downloadedFile != null) {
|
||||||
if (willBeSilent && context == null) {
|
if (willBeSilent && context == null) {
|
||||||
// Would await forever - workaround - TODO
|
installApk(downloadedFile, needsBGWorkaround: true);
|
||||||
installApk(downloadedFile);
|
|
||||||
} else {
|
} else {
|
||||||
await installApk(downloadedFile);
|
await installApk(downloadedFile);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (willBeSilent && context == null) {
|
if (willBeSilent && context == null) {
|
||||||
// Would await forever - workaround - TODO
|
installXApkDir(downloadedDir!, needsBGWorkaround: true);
|
||||||
installXApkDir(downloadedDir!);
|
|
||||||
} else {
|
} else {
|
||||||
await installXApkDir(downloadedDir!);
|
await installXApkDir(downloadedDir!);
|
||||||
}
|
}
|
||||||
@ -1107,7 +1119,6 @@ class AppsProvider with ChangeNotifier {
|
|||||||
logs.add('Skipping auto-export as dir is not set.');
|
logs.add('Skipping auto-export as dir is not set.');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
logs.add('Started auto-export.');
|
|
||||||
var files = await saf
|
var files = await saf
|
||||||
.listFiles(exportDir, columns: [saf.DocumentFileColumn.id])
|
.listFiles(exportDir, columns: [saf.DocumentFileColumn.id])
|
||||||
.where((f) => f.uri.pathSegments.last.endsWith('-auto.json'))
|
.where((f) => f.uri.pathSegments.last.endsWith('-auto.json'))
|
||||||
@ -1116,7 +1127,6 @@ class AppsProvider with ChangeNotifier {
|
|||||||
for (var f in files) {
|
for (var f in files) {
|
||||||
saf.delete(f.uri);
|
saf.delete(f.uri);
|
||||||
}
|
}
|
||||||
logs.add('Previous auto-export deleted.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (exportDir == null || pickOnly) {
|
if (exportDir == null || pickOnly) {
|
||||||
@ -1132,7 +1142,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
displayName:
|
displayName:
|
||||||
'${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json',
|
'${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json',
|
||||||
mimeType: 'application/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) {
|
if (result == null) {
|
||||||
throw ObtainiumError(tr('unexpectedError'));
|
throw ObtainiumError(tr('unexpectedError'));
|
||||||
}
|
}
|
||||||
|
40
pubspec.lock
40
pubspec.lock
@ -46,10 +46,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: archive
|
name: archive
|
||||||
sha256: "49b1fad315e57ab0bbc15bcbb874e83116a1d78f77ebd500a4af6c9407d6b28e"
|
sha256: "20071638cbe4e5964a427cfa0e86dce55d060bc7d82d56f3554095d7239a8765"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.8"
|
version: "3.4.2"
|
||||||
args:
|
args:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -198,10 +198,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: dynamic_color
|
name: dynamic_color
|
||||||
sha256: de4798a7069121aee12d5895315680258415de9b00e717723a1bd73d58f0126d
|
sha256: "96bff3df72e3d428bda2b874c7a521e8c86f592cae626ea594922fcc8d166e0c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.6.6"
|
version: "1.6.7"
|
||||||
easy_localization:
|
easy_localization:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -320,10 +320,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
sha256: d4a1cb250c4e059586af0235f32e02882860a508e189b61f2b31b8810c1e1330
|
sha256: a10979814c5f4ddbe2b6143fba25d927599e21e3ba65b3862995960606fae78f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.17+2"
|
version: "0.6.17+3"
|
||||||
flutter_plugin_android_lifecycle:
|
flutter_plugin_android_lifecycle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -386,10 +386,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: image
|
name: image
|
||||||
sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf
|
sha256: "6e703d5e2f8c63fb31a77753915c1ec8baebde8088844e0d29f71b8f0b108888"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.17"
|
version: "4.1.0"
|
||||||
intl:
|
intl:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -538,18 +538,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: permission_handler
|
name: permission_handler
|
||||||
sha256: bc56bfe9d3f44c3c612d8d393bd9b174eb796d706759f9b495ac254e4294baa5
|
sha256: ad65ba9af42a3d067203641de3fd9f547ded1410bad3b84400c2b4899faede70
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.4.5"
|
version: "11.0.0"
|
||||||
permission_handler_android:
|
permission_handler_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_android
|
name: permission_handler_android
|
||||||
sha256: "59c6322171c29df93a22d150ad95f3aa19ed86542eaec409ab2691b8f35f9a47"
|
sha256: f23cfe9af0d49c6b9fd8a8b09f7b3301ca7e346204939b5afef4404d36d2608f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.3.6"
|
version: "11.0.1"
|
||||||
permission_handler_apple:
|
permission_handler_apple:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -887,10 +887,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: "9427774649fd3c8b7ff53523051395d13aed2ca355822b822e6493d79f5fc05a"
|
sha256: ddc167c6676f57c8b367d19fcbee267d6dc6adf81bd6c3cb87981d30746e0a6d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.10.0"
|
version: "3.10.1"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -903,26 +903,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_wkwebview
|
name: webview_flutter_wkwebview
|
||||||
sha256: d2f7241849582da80b79acb03bb936422412ce5c0c79fb5f6a1de5421a5aecc4
|
sha256: "485af05f2c5f83c7f78c20e236b170ad02df7153b299ae9917345be43871d29f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.7.4"
|
version: "3.8.0"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: "9e82a402b7f3d518fb9c02d0e9ae45952df31b9bf34d77baf19da2de03fc2aaa"
|
sha256: c97defd418eef4ec88c0d1652cdce84b9f7b63dd7198e266d06ac1710d527067
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.7"
|
version: "5.0.8"
|
||||||
win32_registry:
|
win32_registry:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32_registry
|
name: win32_registry
|
||||||
sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9
|
sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.2"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 0.14.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:
|
environment:
|
||||||
sdk: '>=3.0.0 <4.0.0'
|
sdk: '>=3.0.0 <4.0.0'
|
||||||
@ -46,7 +46,7 @@ dependencies:
|
|||||||
html: ^0.15.0
|
html: ^0.15.0
|
||||||
shared_preferences: ^2.0.15
|
shared_preferences: ^2.0.15
|
||||||
url_launcher: ^6.1.5
|
url_launcher: ^6.1.5
|
||||||
permission_handler: ^10.0.0
|
permission_handler: ^11.0.0
|
||||||
fluttertoast: ^8.0.9
|
fluttertoast: ^8.0.9
|
||||||
device_info_plus: ^9.0.0
|
device_info_plus: ^9.0.0
|
||||||
file_picker: ^5.2.10
|
file_picker: ^5.2.10
|
||||||
|
Reference in New Issue
Block a user