mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-13 21:36:42 +02:00
Compare commits
18 Commits
v0.13.5-be
...
v0.13.8-be
Author | SHA1 | Date | |
---|---|---|---|
e0c4ec5028 | |||
7fcba6c911 | |||
0186c00d97 | |||
9294540b5d | |||
0b16c28224 | |||
83028d405a | |||
c4262c3eaa | |||
f0e1831d30 | |||
9efd0dd46e | |||
eb26c0be0b | |||
1ff1c6ca33 | |||
6169915e63 | |||
a0d466a074 | |||
6f9ef6d51e | |||
feb4c2eabc | |||
c2cf39125d | |||
833ece1ef5 | |||
fee23cadfa |
@ -233,6 +233,7 @@
|
|||||||
"about": "Über",
|
"about": "Über",
|
||||||
"requiresCredentialsInSettings": "Benötigt zusätzliche Anmeldedaten (in den Einstellungen)",
|
"requiresCredentialsInSettings": "Benötigt zusätzliche Anmeldedaten (in den Einstellungen)",
|
||||||
"checkOnStart": "Überprüfe einmalig beim Start",
|
"checkOnStart": "Überprüfe einmalig beim Start",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
@ -233,6 +233,7 @@
|
|||||||
"about": "About",
|
"about": "About",
|
||||||
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
||||||
"checkOnStart": "Check Once on Start",
|
"checkOnStart": "Check Once on Start",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remove App?",
|
"one": "Remove App?",
|
||||||
"other": "Remove Apps?"
|
"other": "Remove Apps?"
|
||||||
|
@ -233,6 +233,7 @@
|
|||||||
"about": "About",
|
"about": "About",
|
||||||
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
||||||
"checkOnStart": "Check Once on Start",
|
"checkOnStart": "Check Once on Start",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "¿Eliminar Aplicación?",
|
"one": "¿Eliminar Aplicación?",
|
||||||
"other": "¿Eliminar Aplicaciones?"
|
"other": "¿Eliminar Aplicaciones?"
|
||||||
|
@ -233,6 +233,7 @@
|
|||||||
"about": "About",
|
"about": "About",
|
||||||
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
||||||
"checkOnStart": "Check Once on Start",
|
"checkOnStart": "Check Once on Start",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "برنامه حذف شود؟",
|
"one": "برنامه حذف شود؟",
|
||||||
"other": "برنامه ها حذف شوند؟"
|
"other": "برنامه ها حذف شوند؟"
|
||||||
|
@ -233,6 +233,7 @@
|
|||||||
"about": "About",
|
"about": "About",
|
||||||
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
||||||
"checkOnStart": "Check Once on Start",
|
"checkOnStart": "Check Once on Start",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
|
@ -227,11 +227,12 @@
|
|||||||
"dontShowAgain": "Ne mutassa ezt újra",
|
"dontShowAgain": "Ne mutassa ezt újra",
|
||||||
"dontShowTrackOnlyWarnings": "Ne jelenítsen meg 'Csak nyomon követés' figyelmeztetést",
|
"dontShowTrackOnlyWarnings": "Ne jelenítsen meg 'Csak nyomon követés' figyelmeztetést",
|
||||||
"dontShowAPKOriginWarnings": "Ne jelenítsen meg az APK eredetére vonatkozó figyelmeztetéseket",
|
"dontShowAPKOriginWarnings": "Ne jelenítsen meg az APK eredetére vonatkozó figyelmeztetéseket",
|
||||||
"moveNonInstalledAppsToBottom": "Move Non-Installed Apps to Bottom of Apps View",
|
"moveNonInstalledAppsToBottom": "Helyezze át a nem telepített appokat az App nézet aljára",
|
||||||
"gitlabPATLabel": "GitLab Personal Access Token (Enables Search)",
|
"gitlabPATLabel": "GitLab Personal Access Token (Engedélyezi a Keresést)",
|
||||||
"about": "About",
|
"about": "Rólunk",
|
||||||
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
"requiresCredentialsInSettings": "Ehhez további hitelesítő adatokra van szükség (a Beállításokban)",
|
||||||
"checkOnStart": "Check Once on Start",
|
"checkOnStart": "Egyszer az indításkor",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"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?"
|
||||||
|
@ -233,6 +233,7 @@
|
|||||||
"about": "About",
|
"about": "About",
|
||||||
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
"requiresCredentialsInSettings": "This needs additional credentials (in Settings)",
|
||||||
"checkOnStart": "Check Once on Start",
|
"checkOnStart": "Check Once on Start",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Rimuovere l'App?",
|
"one": "Rimuovere l'App?",
|
||||||
"other": "Rimuovere le App?"
|
"other": "Rimuovere le App?"
|
||||||
|
@ -233,6 +233,7 @@
|
|||||||
"about": "概要",
|
"about": "概要",
|
||||||
"requiresCredentialsInSettings": "これには追加の認証が必要です (設定にて)",
|
"requiresCredentialsInSettings": "これには追加の認証が必要です (設定にて)",
|
||||||
"checkOnStart": "Check Once on Start",
|
"checkOnStart": "Check Once on Start",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
|
285
assets/translations/pl.json
Normal file
285
assets/translations/pl.json
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
{
|
||||||
|
"noDescription": "Brak opisu",
|
||||||
|
"no": "Nie",
|
||||||
|
"okay": "Okej",
|
||||||
|
"appId": "ID aplikacji",
|
||||||
|
"bgUpdateGotErrorRetryInMinutes": {
|
||||||
|
"one": "Sprawdzanie aktualizacji w tle napotkało {}, zaplanuje ponowne sprawdzenie za {} min.",
|
||||||
|
"other": "Sprawdzanie aktualizacji w tle napotkało {}, zaplanuje ponowne sprawdzenie za {} min."
|
||||||
|
},
|
||||||
|
"invalidURLForSource": "Nieprawidłowy adres URL aplikacji {}",
|
||||||
|
"noReleaseFound": "Nie można znaleźć odpowiedniego wydania",
|
||||||
|
"noVersionFound": "Nie można określić wersji wydania",
|
||||||
|
"urlMatchesNoSource": "Adres URL nie pasuje do znanego źródła",
|
||||||
|
"cantInstallOlderVersion": "Nie można zainstalować starszej wersji aplikacji",
|
||||||
|
"appIdMismatch": "Pobrany identyfikator pakietu nie pasuje do istniejącego identyfikatora aplikacji",
|
||||||
|
"functionNotImplemented": "Ta klasa nie zaimplementowała tej funkcji",
|
||||||
|
"placeholder": "Placeholder",
|
||||||
|
"someErrors": "Wystąpiły pewne błędy",
|
||||||
|
"unexpectedError": "Nieoczekiwany błąd",
|
||||||
|
"ok": "Okej",
|
||||||
|
"and": "i",
|
||||||
|
"startedBgUpdateTask": "Rozpoczęto zadanie sprawdzania aktualizacji w tle",
|
||||||
|
"bgUpdateIgnoreAfterIs": "Parametr ignoreAfter aktualizacji w tle to {}",
|
||||||
|
"startedActualBGUpdateCheck": "Rozpoczęto sprawdzanie aktualizacji w tle",
|
||||||
|
"bgUpdateTaskFinished": "Zakończono zadanie sprawdzania aktualizacji w tle",
|
||||||
|
"firstRun": "Jest to pierwsze uruchomienie Obtainium",
|
||||||
|
"settingUpdateCheckIntervalTo": "Ustawianie interwału aktualizacji na {}",
|
||||||
|
"githubPATLabel": "Osobisty Token Dostępu GitHub (zwiększa limit zapytań)",
|
||||||
|
"githubPATHint": "Wymagany format OTD: użytkownik:token",
|
||||||
|
"githubPATFormat": "użytkownik:token",
|
||||||
|
"includePrereleases": "Uwzględnij wersje wstępne",
|
||||||
|
"fallbackToOlderReleases": "Powracaj do starszych wersji",
|
||||||
|
"filterReleaseTitlesByRegEx": "Filtruj tytuły wydań wg. wyrażeń regularnych",
|
||||||
|
"invalidRegEx": "Nieprawidłowe wyrażenie regularne",
|
||||||
|
"cancel": "Anuluj",
|
||||||
|
"continue": "Kontynuuj",
|
||||||
|
"requiredInBrackets": "(Wymagane)",
|
||||||
|
"dropdownNoOptsError": "BŁĄD: LISTA ROZWIJANA MUSI MIEĆ CO NAJMNIEJ JEDNĄ OPCJĘ",
|
||||||
|
"colour": "Kolor",
|
||||||
|
"githubStarredRepos": "Repozytoria GitHub oznaczone gwiazdką",
|
||||||
|
"uname": "Nazwa użytkownika",
|
||||||
|
"wrongArgNum": "Nieprawidłowa liczba podanych argumentów",
|
||||||
|
"xIsTrackOnly": "{} jest tylko obserwowana",
|
||||||
|
"source": "Źródło",
|
||||||
|
"app": "Aplikacja",
|
||||||
|
"appsFromSourceAreTrackOnly": "Aplikacje z tego źródła są „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",
|
||||||
|
"appAlreadyAdded": "Aplikacja już została dodana",
|
||||||
|
"alreadyUpToDateQuestion": "Aplikacja jest już aktualna?",
|
||||||
|
"addApp": "Dodaj apkę",
|
||||||
|
"appSourceURL": "Adres URL źródła aplikacji",
|
||||||
|
"error": "Błąd",
|
||||||
|
"add": "Dodaj",
|
||||||
|
"searchSomeSourcesLabel": "Szukaj (tylko niektóre źródła)",
|
||||||
|
"search": "Szukaj",
|
||||||
|
"additionalOptsFor": "Dodatkowe opcje dla {}",
|
||||||
|
"supportedSourcesBelow": "Obsługiwane źródła:",
|
||||||
|
"trackOnlyInBrackets": "(tylko obserwowane)",
|
||||||
|
"searchableInBrackets": "(Wyszukiwalne)",
|
||||||
|
"appsString": "Aplikacje",
|
||||||
|
"noApps": "Brak aplikacji",
|
||||||
|
"noAppsForFilter": "Brak aplikacji dla filtra",
|
||||||
|
"byX": "Autorstwa {}",
|
||||||
|
"percentProgress": "Postęp: {}%",
|
||||||
|
"pleaseWait": "Proszę czekać",
|
||||||
|
"updateAvailable": "Dostępna aktualizacja",
|
||||||
|
"estimateInBracketsShort": "(Szac.)",
|
||||||
|
"notInstalled": "Nie zainstalowano",
|
||||||
|
"estimateInBrackets": "(Szacunkowo)",
|
||||||
|
"selectAll": "Zaznacz wszystkie",
|
||||||
|
"deselectN": "Odznacz {}",
|
||||||
|
"xWillBeRemovedButRemainInstalled": "{} zostanie usunięty z Obtainium, ale pozostanie zainstalowany na urządzeniu.",
|
||||||
|
"removeSelectedAppsQuestion": "Usunąć wybrane aplikacje?",
|
||||||
|
"removeSelectedApps": "Usuń wybrane aplikacje",
|
||||||
|
"updateX": "Zaktualizuj {}",
|
||||||
|
"installX": "Zainstaluj {}",
|
||||||
|
"markXTrackOnlyAsUpdated": "Oznacz {}\n(Tylko obserwowana)\njako zaktualizowaną",
|
||||||
|
"changeX": "Zmień {}",
|
||||||
|
"installUpdateApps": "Instaluj/aktualizuj aplikacje",
|
||||||
|
"installUpdateSelectedApps": "Zainstaluj/zaktualizuj wybrane aplikacje",
|
||||||
|
"markXSelectedAppsAsUpdated": "Oznaczyć {} wybranych aplikacji jako zaktualizowane?",
|
||||||
|
"yes": "Tak",
|
||||||
|
"markSelectedAppsUpdated": "Oznacz wybrane aplikacje jako zaktualizowane",
|
||||||
|
"pinToTop": "Przypnij",
|
||||||
|
"unpinFromTop": "Odepnij",
|
||||||
|
"resetInstallStatusForSelectedAppsQuestion": "Zresetować status instalacji dla wybranych aplikacji?",
|
||||||
|
"installStatusOfXWillBeResetExplanation": "Stan instalacji wybranych aplikacji zostanie zresetowany.\n\nMoże być to pomocne, gdy wersja aplikacji wyświetlana w Obtainium jest nieprawidłowa z powodu nieudanych aktualizacji lub innych problemów.",
|
||||||
|
"shareSelectedAppURLs": "Udostępnij wybrane adresy URL aplikacji",
|
||||||
|
"resetInstallStatus": "Zresetuj stan instalacji",
|
||||||
|
"more": "Więcej",
|
||||||
|
"removeOutdatedFilter": "Usuń filtr nieaktualnych aplikacji",
|
||||||
|
"showOutdatedOnly": "Pokaż tylko nieaktualne aplikacje",
|
||||||
|
"filter": "FIltr",
|
||||||
|
"filterActive": "Filtruj *",
|
||||||
|
"filterApps": "Filtruj aplikacje",
|
||||||
|
"appName": "Nazwa aplikacji",
|
||||||
|
"author": "Autor",
|
||||||
|
"upToDateApps": "Aktualne aplikacje",
|
||||||
|
"nonInstalledApps": "Niezainstalowane aplikacje",
|
||||||
|
"importExport": "Import/Eksport",
|
||||||
|
"settings": "Ustawienia",
|
||||||
|
"exportedTo": "Wyeksportowano do {}",
|
||||||
|
"obtainiumExport": "Eksportuj Obtainium",
|
||||||
|
"invalidInput": "Nieprawidłowe wprowadzenie",
|
||||||
|
"importedX": "Zaimportowano {}",
|
||||||
|
"obtainiumImport": "Import Obtainium",
|
||||||
|
"importFromURLList": "Importuj z listy adresów URL",
|
||||||
|
"searchQuery": "Wyszukiwane zapytanie",
|
||||||
|
"appURLList": "Lista adresów URL aplikacji",
|
||||||
|
"line": "Linia",
|
||||||
|
"searchX": "Przeszukaj {}",
|
||||||
|
"noResults": "Nie znaleziono wyników",
|
||||||
|
"importX": "Importuj {}",
|
||||||
|
"importedAppsIdDisclaimer": "Zaimportowane aplikacje mogą być wyświetlane jako „Niezainstalowane”.\nAby to naprawić, zainstaluj je ponownie za pomocą Obtainium.\nNie powinno to mieć wpływu na dane aplikacji.\n\nDotyczy tylko adresów URL i metod importu innych aplikacji.",
|
||||||
|
"importErrors": "Błędy importowania",
|
||||||
|
"importedXOfYApps": "Zaimportowano {} z {} aplikacji.",
|
||||||
|
"followingURLsHadErrors": "Następujące adresy URL zawierały błędy:",
|
||||||
|
"selectURL": "Wybierz adres URL",
|
||||||
|
"selectURLs": "Wybierz adresy URL",
|
||||||
|
"pick": "Wybierz",
|
||||||
|
"theme": "Motyw",
|
||||||
|
"dark": "Ciemny",
|
||||||
|
"light": "Jasny",
|
||||||
|
"followSystem": "Zgodny z systemem",
|
||||||
|
"obtainium": "Obtainium",
|
||||||
|
"materialYou": "Material You",
|
||||||
|
"useBlackTheme": "Użyj czarnego motywu",
|
||||||
|
"appSortBy": "Sortuj aplikacje według",
|
||||||
|
"authorName": "Autor/Nazwa",
|
||||||
|
"nameAuthor": "Nazwa/Autor",
|
||||||
|
"asAdded": "Dodania",
|
||||||
|
"appSortOrder": "Kolejność sortowania aplikacji",
|
||||||
|
"ascending": "Rosnąco",
|
||||||
|
"descending": "Malejąco",
|
||||||
|
"bgUpdateCheckInterval": "Częstotliwość sprawdzania aktualizacji w tle",
|
||||||
|
"neverManualOnly": "Nigdy - tylko ręcznie",
|
||||||
|
"appearance": "Wygląd",
|
||||||
|
"showWebInAppView": "Pokaż stronę źródłową w widoku aplikacji",
|
||||||
|
"pinUpdates": "Przypnij aktualizacje na górze widoku aplikacji",
|
||||||
|
"updates": "Aktualizacje",
|
||||||
|
"sourceSpecific": "Zależnie od źródła",
|
||||||
|
"appSource": "Źródło aplikacji",
|
||||||
|
"noLogs": "Brak logów",
|
||||||
|
"appLogs": "Logi aplikacji",
|
||||||
|
"close": "Zamknij",
|
||||||
|
"share": "Udostępnij",
|
||||||
|
"appNotFound": "Nie znaleziono aplikacji",
|
||||||
|
"obtainiumExportHyphenatedLowercase": "obtainium-eksport",
|
||||||
|
"pickAnAPK": "Wybierz plik APK",
|
||||||
|
"appHasMoreThanOnePackage": "{} ma więcej niż jeden pakiet:",
|
||||||
|
"deviceSupportsXArch": "Urządzenie obsługuje architekturę procesora {}.",
|
||||||
|
"deviceSupportsFollowingArchs": "Urządzenie obsługuje następujące architektury procesora:",
|
||||||
|
"warning": "Uwaga",
|
||||||
|
"sourceIsXButPackageFromYPrompt": "Źródłem aplikacji jest '{}', ale pakiet wydania pochodzi z '{}'. Kontynuować?",
|
||||||
|
"updatesAvailable": "Dostępne aktualizacje",
|
||||||
|
"updatesAvailableNotifDescription": "Powiadamia użytkownika o dostępności aktualizacji dla jednej lub więcej aplikacji obserwowanych przez Obtainium",
|
||||||
|
"noNewUpdates": "Brak nowych aktualizacji.",
|
||||||
|
"xHasAnUpdate": "{} ma aktualizację.",
|
||||||
|
"appsUpdated": "Zaktualizowane aplikacje",
|
||||||
|
"appsUpdatedNotifDescription": "Powiadamia użytkownika, gdy jedna lub więcej aplikacji zostało zaktualizowanych w tle",
|
||||||
|
"xWasUpdatedToY": "{} zaktualizowano do {}.",
|
||||||
|
"errorCheckingUpdates": "Sprawdzanie błędów aktualizacji",
|
||||||
|
"errorCheckingUpdatesNotifDescription": "Powiadomienie wyświetlane, gdy sprawdzanie aktualizacji w tle nie powiedzie się",
|
||||||
|
"appsRemoved": "Usunięte aplikacje",
|
||||||
|
"appsRemovedNotifDescription": "Powiadamia użytkownika, gdy jedna lub więcej aplikacji zostało usuniętych z powodu błędów wczytywania",
|
||||||
|
"xWasRemovedDueToErrorY": "Usunięto {} z powodu błędu: {}",
|
||||||
|
"completeAppInstallation": "Ukończenie instalacji aplikacji",
|
||||||
|
"obtainiumMustBeOpenToInstallApps": "Aby zainstalować aplikacje, Obtainium musi być otwarte",
|
||||||
|
"completeAppInstallationNotifDescription": "Prosi użytkownika o powrót do Obtainium w celu dokończenia instalacji aplikacji",
|
||||||
|
"checkingForUpdates": "Sprawdzanie aktualizacji",
|
||||||
|
"checkingForUpdatesNotifDescription": "Tymczasowe powiadomienie pojawiające się podczas sprawdzania aktualizacji",
|
||||||
|
"pleaseAllowInstallPerm": "Pozwól Obtainium instalować aplikacje",
|
||||||
|
"trackOnly": "Tylko obserwuj",
|
||||||
|
"errorWithHttpStatusCode": "Błąd {}",
|
||||||
|
"versionCorrectionDisabled": "Korekta wersji wyłączona (wtyczka wydaje się nie działać)",
|
||||||
|
"unknown": "Nieznane",
|
||||||
|
"none": "Brak",
|
||||||
|
"never": "Nigdy",
|
||||||
|
"latestVersionX": "Najnowsza wersja: {}",
|
||||||
|
"installedVersionX": "Zainstalowana wersja: {}",
|
||||||
|
"lastUpdateCheckX": "Ostatnio sprawdzono: {}",
|
||||||
|
"remove": "Usuń",
|
||||||
|
"yesMarkUpdated": "Tak, oznacz jako zaktualizowane",
|
||||||
|
"fdroid": "Oficjalny F-Droid",
|
||||||
|
"appIdOrName": "ID aplikacji lub nazwa",
|
||||||
|
"appWithIdOrNameNotFound": "Nie znaleziono aplikacji o tym identyfikatorze lub nazwie",
|
||||||
|
"reposHaveMultipleApps": "Repozytoria mogą zawierać wiele aplikacji",
|
||||||
|
"fdroidThirdPartyRepo": "Zewnętrzne repo F-Droid",
|
||||||
|
"steam": "Steam",
|
||||||
|
"steamMobile": "Mobilny Steam",
|
||||||
|
"steamChat": "Steam Chat",
|
||||||
|
"install": "Instaluj",
|
||||||
|
"markInstalled": "Oznacz jako zainstalowane",
|
||||||
|
"update": "Zaktualizuj",
|
||||||
|
"markUpdated": "Oznacz jako zaktualizowane",
|
||||||
|
"additionalOptions": "Dodatkowe opcje",
|
||||||
|
"disableVersionDetection": "Wyłącz wykrywanie wersji",
|
||||||
|
"noVersionDetectionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie.",
|
||||||
|
"downloadingX": "Pobieranie {}",
|
||||||
|
"downloadNotifDescription": "Powiadamia użytkownika o postępach w pobieraniu aplikacji",
|
||||||
|
"noAPKFound": "Nie znaleziono pakietu APK",
|
||||||
|
"noVersionDetection": "Bez wykrywania wersji",
|
||||||
|
"categorize": "Kategoryzuj",
|
||||||
|
"categories": "Kategorie",
|
||||||
|
"category": "Kategoria",
|
||||||
|
"noCategory": "Bez kategorii",
|
||||||
|
"noCategories": "Brak kategorii",
|
||||||
|
"deleteCategoriesQuestion": "Usunąć kategorie?",
|
||||||
|
"categoryDeleteWarning": "Wszystkie aplikacje w usuniętych kategoriach zostaną ustawione jako nieskategoryzowane.",
|
||||||
|
"addCategory": "Dodaj kategorię",
|
||||||
|
"label": "Etykieta",
|
||||||
|
"language": "Język",
|
||||||
|
"copiedToClipboard": "Skopiowano do schowka",
|
||||||
|
"storagePermissionDenied": "Odmówiono zezwolenia dostępu do pamięci",
|
||||||
|
"selectedCategorizeWarning": "Spowoduje to zastąpienie wszystkich istniejących ustawień kategorii dla wybranych aplikacji.",
|
||||||
|
"filterAPKsByRegEx": "Filtruj pliki APK według wyrażeń regularnych",
|
||||||
|
"removeFromObtainium": "Usuń z Obtainium",
|
||||||
|
"uninstallFromDevice": "Odinstaluj z urządzenia",
|
||||||
|
"onlyWorksWithNonVersionDetectApps": "Działa tylko w przypadku aplikacji z wyłączonym wykrywaniem wersji.",
|
||||||
|
"releaseDateAsVersion": "Użyj daty wydania jako wersji",
|
||||||
|
"releaseDateAsVersionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie, ale dostępna jest data wydania.",
|
||||||
|
"changes": "Zmiany",
|
||||||
|
"releaseDate": "Data wydania",
|
||||||
|
"importFromURLsInFile": "Importuj z adresów URL w pliku (typu OPML)",
|
||||||
|
"versionDetection": "Wykrywanie wersji",
|
||||||
|
"standardVersionDetection": "Standardowe wykrywanie wersji",
|
||||||
|
"groupByCategory": "Grupuj według kategorii",
|
||||||
|
"autoApkFilterByArch": "Spróbuj filtrować pliki APK według architektury procesora, jeśli to możliwe",
|
||||||
|
"overrideSource": "Nadpisz źródło",
|
||||||
|
"dontShowAgain": "Nie pokazuj tego ponownie",
|
||||||
|
"dontShowTrackOnlyWarnings": "Nie wyświetlaj ostrzeżeń „Tylko obserwowana”",
|
||||||
|
"dontShowAPKOriginWarnings": "Nie pokazuj ostrzeżeń o pochodzeniu APK",
|
||||||
|
"moveNonInstalledAppsToBottom": "Przenieś niezainstalowane aplikacje na dół widoku aplikacji",
|
||||||
|
"gitlabPATLabel": "Osobisty Token Dostępu GitLab (umożliwia wyszukiwanie)",
|
||||||
|
"about": "Więcej informacji",
|
||||||
|
"requiresCredentialsInSettings": "Wymaga to dodatkowych poświadczeń (w Ustawieniach)",
|
||||||
|
"checkOnStart": "Sprawdź raz przy starcie",
|
||||||
|
"tryInferAppIdFromCode": "Spróbuj wywnioskować identyfikator aplikacji z kodu źródłowego",
|
||||||
|
"removeAppQuestion": {
|
||||||
|
"one": "Usunąć aplikację?",
|
||||||
|
"other": "Usunąć aplikacje?"
|
||||||
|
},
|
||||||
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
|
"one": "Zbyt wiele żądań (ograniczona częstotliwość) - spróbuj ponownie za {} min.",
|
||||||
|
"other": "Zbyt wiele żądań (ograniczona częstotliwość) - spróbuj ponownie za {} min."
|
||||||
|
},
|
||||||
|
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
|
||||||
|
"one": "Podczas sprawdzania aktualizacji w tle znaleziono {} aktualizację - w razie potrzeby użytkownik zostanie o tym powiadomiony",
|
||||||
|
"other": "Podczas sprawdzania aktualizacji w tle znaleziono {} akt. - w razie potrzeby użytkownik zostanie o tym powiadomiony"
|
||||||
|
},
|
||||||
|
"apps": {
|
||||||
|
"one": "{} aplik.",
|
||||||
|
"other": "{} aplik."
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"one": "{} adres URL",
|
||||||
|
"other": "{} adr. URL"
|
||||||
|
},
|
||||||
|
"minute": {
|
||||||
|
"one": "{} min.",
|
||||||
|
"other": "{} min."
|
||||||
|
},
|
||||||
|
"hour": {
|
||||||
|
"one": "{} godz.",
|
||||||
|
"other": "{} godz."
|
||||||
|
},
|
||||||
|
"day": {
|
||||||
|
"one": "{} dzień",
|
||||||
|
"other": "{} dni"
|
||||||
|
},
|
||||||
|
"clearedNLogsBeforeXAfterY": {
|
||||||
|
"one": "Wyczyszczono {n} log (przed = {before}, po = {after})",
|
||||||
|
"other": "Wyczyszczono logi: {n} (przed = {before}, po = {after})"
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesAvailable": {
|
||||||
|
"one": "{} i jeszcze 1 aplikacja mają aktualizacje.",
|
||||||
|
"other": "{} i {} aplik. otrzymało aktualizacje."
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesInstalled": {
|
||||||
|
"one": "Zaktualizowano {} i jeszcze 1 aplikację.",
|
||||||
|
"other": "Zaktualizowano {} i {} aplik."
|
||||||
|
}
|
||||||
|
}
|
@ -233,6 +233,7 @@
|
|||||||
"about": "相关文档",
|
"about": "相关文档",
|
||||||
"requiresCredentialsInSettings": "此功能需要额外的凭据(在“设置”中添加)",
|
"requiresCredentialsInSettings": "此功能需要额外的凭据(在“设置”中添加)",
|
||||||
"checkOnStart": "启动时进行一次检查",
|
"checkOnStart": "启动时进行一次检查",
|
||||||
|
"tryInferAppIdFromCode": "Try inferring App ID from source code",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "是否删除应用?",
|
"one": "是否删除应用?",
|
||||||
"other": "是否删除应用?"
|
"other": "是否删除应用?"
|
||||||
|
@ -19,8 +19,8 @@ class APKCombo extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String? tryInferringAppId(String standardUrl,
|
Future<String?> tryInferringAppId(String standardUrl,
|
||||||
{Map<String, dynamic> additionalSettings = const {}}) {
|
{Map<String, dynamic> additionalSettings = const {}}) async {
|
||||||
return Uri.parse(standardUrl).pathSegments.last;
|
return Uri.parse(standardUrl).pathSegments.last;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ class APKCombo extends AppSource {
|
|||||||
String standardUrl,
|
String standardUrl,
|
||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
) async {
|
) async {
|
||||||
String appId = tryInferringAppId(standardUrl)!;
|
String appId = (await tryInferringAppId(standardUrl))!;
|
||||||
var preres = await sourceRequest(standardUrl);
|
var preres = await sourceRequest(standardUrl);
|
||||||
if (preres.statusCode != 200) {
|
if (preres.statusCode != 200) {
|
||||||
throw getObtainiumHttpError(preres);
|
throw getObtainiumHttpError(preres);
|
||||||
|
@ -24,8 +24,8 @@ class APKPure extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String? tryInferringAppId(String standardUrl,
|
Future<String?> tryInferringAppId(String standardUrl,
|
||||||
{Map<String, dynamic> additionalSettings = const {}}) {
|
{Map<String, dynamic> additionalSettings = const {}}) async {
|
||||||
return Uri.parse(standardUrl).pathSegments.last;
|
return Uri.parse(standardUrl).pathSegments.last;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ class APKPure extends AppSource {
|
|||||||
String standardUrl,
|
String standardUrl,
|
||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
) async {
|
) async {
|
||||||
String appId = tryInferringAppId(standardUrl)!;
|
String appId = (await tryInferringAppId(standardUrl))!;
|
||||||
String host = Uri.parse(standardUrl).host;
|
String host = Uri.parse(standardUrl).host;
|
||||||
var res = await sourceRequest('$standardUrl/download');
|
var res = await sourceRequest('$standardUrl/download');
|
||||||
if (res.statusCode == 200) {
|
if (res.statusCode == 200) {
|
||||||
|
@ -31,8 +31,8 @@ class FDroid extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String? tryInferringAppId(String standardUrl,
|
Future<String?> tryInferringAppId(String standardUrl,
|
||||||
{Map<String, dynamic> additionalSettings = const {}}) {
|
{Map<String, dynamic> additionalSettings = const {}}) async {
|
||||||
return Uri.parse(standardUrl).pathSegments.last;
|
return Uri.parse(standardUrl).pathSegments.last;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ class FDroid extends AppSource {
|
|||||||
String standardUrl,
|
String standardUrl,
|
||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
) async {
|
) async {
|
||||||
String? appId = tryInferringAppId(standardUrl);
|
String? appId = await tryInferringAppId(standardUrl);
|
||||||
String host = Uri.parse(standardUrl).host;
|
String host = Uri.parse(standardUrl).host;
|
||||||
return getAPKUrlsFromFDroidPackagesAPIResponse(
|
return getAPKUrlsFromFDroidPackagesAPIResponse(
|
||||||
await sourceRequest('https://$host/api/v1/packages/$appId'),
|
await sourceRequest('https://$host/api/v1/packages/$appId'),
|
||||||
|
@ -6,6 +6,7 @@ import 'package:obtainium/app_sources/html.dart';
|
|||||||
import 'package:obtainium/components/generated_form.dart';
|
import 'package:obtainium/components/generated_form.dart';
|
||||||
import 'package:obtainium/custom_errors.dart';
|
import 'package:obtainium/custom_errors.dart';
|
||||||
import 'package:obtainium/providers/apps_provider.dart';
|
import 'package:obtainium/providers/apps_provider.dart';
|
||||||
|
import 'package:obtainium/providers/logs_provider.dart';
|
||||||
import 'package:obtainium/providers/settings_provider.dart';
|
import 'package:obtainium/providers/settings_provider.dart';
|
||||||
import 'package:obtainium/providers/source_provider.dart';
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
import 'package:url_launcher/url_launcher_string.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
@ -13,6 +14,7 @@ import 'package:url_launcher/url_launcher_string.dart';
|
|||||||
class GitHub extends AppSource {
|
class GitHub extends AppSource {
|
||||||
GitHub() {
|
GitHub() {
|
||||||
host = 'github.com';
|
host = 'github.com';
|
||||||
|
appIdInferIsOptional = true;
|
||||||
|
|
||||||
additionalSourceSpecificSettingFormItems = [
|
additionalSourceSpecificSettingFormItems = [
|
||||||
GeneratedFormTextField('github-creds',
|
GeneratedFormTextField('github-creds',
|
||||||
@ -79,6 +81,52 @@ class GitHub extends AppSource {
|
|||||||
canSearch = true;
|
canSearch = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String?> tryInferringAppId(String standardUrl,
|
||||||
|
{Map<String, dynamic> additionalSettings = const {}}) async {
|
||||||
|
const possibleBuildGradleLocations = [
|
||||||
|
'/app/build.gradle',
|
||||||
|
'android/app/build.gradle',
|
||||||
|
'src/app/build.gradle'
|
||||||
|
];
|
||||||
|
for (var path in possibleBuildGradleLocations) {
|
||||||
|
try {
|
||||||
|
var res = await sourceRequest(
|
||||||
|
'${await convertStandardUrlToAPIUrl(standardUrl)}/contents/$path');
|
||||||
|
if (res.statusCode == 200) {
|
||||||
|
try {
|
||||||
|
var body = jsonDecode(res.body);
|
||||||
|
var trimmedLines = utf8
|
||||||
|
.decode(base64
|
||||||
|
.decode(body['content'].toString().split('\n').join('')))
|
||||||
|
.split('\n')
|
||||||
|
.map((e) => e.trim());
|
||||||
|
var appId = trimmedLines
|
||||||
|
.where((l) => l.startsWith('applicationId "'))
|
||||||
|
.first
|
||||||
|
.split('"')[1];
|
||||||
|
if (appId.startsWith('\${') && appId.endsWith('}')) {
|
||||||
|
appId = trimmedLines
|
||||||
|
.where((l) => l.startsWith(
|
||||||
|
'def ${appId.substring(2, appId.length - 1)}'))
|
||||||
|
.first
|
||||||
|
.split('"')[1];
|
||||||
|
}
|
||||||
|
if (appId.isNotEmpty) {
|
||||||
|
return appId;
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
LogsProvider().add(
|
||||||
|
'Error parsing build.gradle from ${res.request!.url.toString()}: ${err.toString()}');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
// Ignore - ID will be extracted from the APK
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url) {
|
||||||
RegExp standardUrlRegEx = RegExp('^https?://$host/[^/]+/[^/]+');
|
RegExp standardUrlRegEx = RegExp('^https?://$host/[^/]+/[^/]+');
|
||||||
@ -97,6 +145,12 @@ class GitHub extends AppSource {
|
|||||||
return creds != null && creds.isNotEmpty ? '$creds@' : '';
|
return creds != null && creds.isNotEmpty ? '$creds@' : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<String> getAPIHost() async =>
|
||||||
|
'https://${await getCredentialPrefixIfAny()}api.$host';
|
||||||
|
|
||||||
|
Future<String> convertStandardUrlToAPIUrl(String standardUrl) async =>
|
||||||
|
'${await getAPIHost()}/repos${standardUrl.substring('https://$host'.length)}';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String? changeLogPageFromStandardUrl(String standardUrl) =>
|
String? changeLogPageFromStandardUrl(String standardUrl) =>
|
||||||
'$standardUrl/releases';
|
'$standardUrl/releases';
|
||||||
@ -239,7 +293,7 @@ class GitHub extends AppSource {
|
|||||||
) async {
|
) async {
|
||||||
return await getLatestAPKDetailsCommon2(standardUrl, additionalSettings,
|
return await getLatestAPKDetailsCommon2(standardUrl, additionalSettings,
|
||||||
(bool useTagUrl) async {
|
(bool useTagUrl) async {
|
||||||
return 'https://${await getCredentialPrefixIfAny()}api.$host/repos${standardUrl.substring('https://$host'.length)}/${useTagUrl ? 'tags' : 'releases'}?per_page=100';
|
return '${await convertStandardUrlToAPIUrl(standardUrl)}/${useTagUrl ? 'tags' : 'releases'}?per_page=100';
|
||||||
}, (Response res) {
|
}, (Response res) {
|
||||||
rateLimitErrorCheck(res);
|
rateLimitErrorCheck(res);
|
||||||
});
|
});
|
||||||
@ -281,7 +335,7 @@ class GitHub extends AppSource {
|
|||||||
Future<Map<String, List<String>>> search(String query) async {
|
Future<Map<String, List<String>>> search(String query) async {
|
||||||
return searchCommon(
|
return searchCommon(
|
||||||
query,
|
query,
|
||||||
'https://${await getCredentialPrefixIfAny()}api.$host/search/repositories?q=${Uri.encodeQueryComponent(query)}&per_page=100',
|
'${await getAPIHost()}/search/repositories?q=${Uri.encodeQueryComponent(query)}&per_page=100',
|
||||||
'items', onHttpErrorCode: (Response res) {
|
'items', onHttpErrorCode: (Response res) {
|
||||||
rateLimitErrorCheck(res);
|
rateLimitErrorCheck(res);
|
||||||
});
|
});
|
||||||
|
@ -18,8 +18,8 @@ class IzzyOnDroid extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String? tryInferringAppId(String standardUrl,
|
Future<String?> tryInferringAppId(String standardUrl,
|
||||||
{Map<String, dynamic> additionalSettings = const {}}) {
|
{Map<String, dynamic> additionalSettings = const {}}) async {
|
||||||
return FDroid().tryInferringAppId(standardUrl);
|
return FDroid().tryInferringAppId(standardUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ class IzzyOnDroid extends AppSource {
|
|||||||
String standardUrl,
|
String standardUrl,
|
||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
) async {
|
) async {
|
||||||
String? appId = tryInferringAppId(standardUrl);
|
String? appId = await tryInferringAppId(standardUrl);
|
||||||
return FDroid().getAPKUrlsFromFDroidPackagesAPIResponse(
|
return FDroid().getAPKUrlsFromFDroidPackagesAPIResponse(
|
||||||
await sourceRequest(
|
await sourceRequest(
|
||||||
'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'),
|
'https://apt.izzysoft.de/fdroid/api/v1/packages/$appId'),
|
||||||
|
@ -21,7 +21,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.13.5';
|
const String currentVersion = '0.13.8';
|
||||||
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
|
||||||
|
|
||||||
@ -37,6 +37,7 @@ List<MapEntry<Locale, String>> supportedLocales = const [
|
|||||||
MapEntry(Locale('fa'), 'فارسی'),
|
MapEntry(Locale('fa'), 'فارسی'),
|
||||||
MapEntry(Locale('fr'), 'Français'),
|
MapEntry(Locale('fr'), 'Français'),
|
||||||
MapEntry(Locale('es'), 'Español'),
|
MapEntry(Locale('es'), 'Español'),
|
||||||
|
MapEntry(Locale('pl'), 'Polski'),
|
||||||
];
|
];
|
||||||
const fallbackLocale = Locale('en');
|
const fallbackLocale = Locale('en');
|
||||||
const localeDir = 'assets/translations';
|
const localeDir = 'assets/translations';
|
||||||
|
@ -33,6 +33,7 @@ class _AddAppPageState extends State<AddAppPage> {
|
|||||||
AppSource? pickedSource;
|
AppSource? pickedSource;
|
||||||
Map<String, dynamic> additionalSettings = {};
|
Map<String, dynamic> additionalSettings = {};
|
||||||
bool additionalSettingsValid = true;
|
bool additionalSettingsValid = true;
|
||||||
|
bool inferAppIdIfOptional = true;
|
||||||
List<String> pickedCategories = [];
|
List<String> pickedCategories = [];
|
||||||
int searchnum = 0;
|
int searchnum = 0;
|
||||||
SourceProvider sourceProvider = SourceProvider();
|
SourceProvider sourceProvider = SourceProvider();
|
||||||
@ -78,6 +79,7 @@ class _AddAppPageState extends State<AddAppPage> {
|
|||||||
additionalSettingsValid = source != null
|
additionalSettingsValid = source != null
|
||||||
? !sourceProvider.ifRequiredAppSpecificSettingsExist(source)
|
? !sourceProvider.ifRequiredAppSpecificSettingsExist(source)
|
||||||
: true;
|
: true;
|
||||||
|
inferAppIdIfOptional = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -147,7 +149,8 @@ class _AddAppPageState extends State<AddAppPage> {
|
|||||||
app = await sourceProvider.getApp(
|
app = await sourceProvider.getApp(
|
||||||
pickedSource!, userInput, additionalSettings,
|
pickedSource!, userInput, additionalSettings,
|
||||||
trackOnlyOverride: trackOnly,
|
trackOnlyOverride: trackOnly,
|
||||||
overrideSource: pickedSourceOverride);
|
overrideSource: pickedSourceOverride,
|
||||||
|
inferAppIdIfOptional: inferAppIdIfOptional);
|
||||||
// Only download the APK here if you need to for the package ID
|
// Only download the APK here if you need to for the package ID
|
||||||
if (sourceProvider.isTempId(app) &&
|
if (sourceProvider.isTempId(app) &&
|
||||||
app.additionalSettings['trackOnly'] != true) {
|
app.additionalSettings['trackOnly'] != true) {
|
||||||
@ -428,6 +431,23 @@ class _AddAppPageState extends State<AddAppPage> {
|
|||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
if (pickedSource != null && pickedSource!.appIdInferIsOptional)
|
||||||
|
GeneratedForm(
|
||||||
|
key: const Key('inferAppIdIfOptional'),
|
||||||
|
items: [
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch('inferAppIdIfOptional',
|
||||||
|
label: tr('tryInferAppIdFromCode'),
|
||||||
|
defaultValue: inferAppIdIfOptional)
|
||||||
|
]
|
||||||
|
],
|
||||||
|
onValueChanges: (values, valid, isBuilding) {
|
||||||
|
if (!isBuilding) {
|
||||||
|
setState(() {
|
||||||
|
inferAppIdIfOptional = values['inferAppIdIfOptional'];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -159,6 +159,9 @@ class AppsProvider with ChangeNotifier {
|
|||||||
if (ext.endsWith('"') || ext.endsWith("other")) {
|
if (ext.endsWith('"') || ext.endsWith("other")) {
|
||||||
ext = ext.substring(0, ext.length - 1);
|
ext = ext.substring(0, ext.length - 1);
|
||||||
}
|
}
|
||||||
|
if (url.toLowerCase().endsWith('.apk') && ext != 'apk') {
|
||||||
|
ext = 'apk';
|
||||||
|
}
|
||||||
File downloadedFile = File('$destDir/$fileNameNoExt.$ext');
|
File downloadedFile = File('$destDir/$fileNameNoExt.$ext');
|
||||||
if (!(downloadedFile.existsSync() && useExisting)) {
|
if (!(downloadedFile.existsSync() && useExisting)) {
|
||||||
File tempDownloadedFile = File('${downloadedFile.path}.part');
|
File tempDownloadedFile = File('${downloadedFile.path}.part');
|
||||||
|
@ -317,6 +317,7 @@ abstract class AppSource {
|
|||||||
late String name;
|
late String name;
|
||||||
bool enforceTrackOnly = false;
|
bool enforceTrackOnly = false;
|
||||||
bool changeLogIfAnyIsMarkDown = true;
|
bool changeLogIfAnyIsMarkDown = true;
|
||||||
|
bool appIdInferIsOptional = false;
|
||||||
|
|
||||||
AppSource() {
|
AppSource() {
|
||||||
name = runtimeType.toString();
|
name = runtimeType.toString();
|
||||||
@ -434,8 +435,8 @@ abstract class AppSource {
|
|||||||
throw NotImplementedError();
|
throw NotImplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
String? tryInferringAppId(String standardUrl,
|
Future<String?> tryInferringAppId(String standardUrl,
|
||||||
{Map<String, dynamic> additionalSettings = const {}}) {
|
{Map<String, dynamic> additionalSettings = const {}}) async {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -552,7 +553,8 @@ class SourceProvider {
|
|||||||
AppSource source, String url, Map<String, dynamic> additionalSettings,
|
AppSource source, String url, Map<String, dynamic> additionalSettings,
|
||||||
{App? currentApp,
|
{App? currentApp,
|
||||||
bool trackOnlyOverride = false,
|
bool trackOnlyOverride = false,
|
||||||
String? overrideSource}) async {
|
String? overrideSource,
|
||||||
|
bool inferAppIdIfOptional = false}) async {
|
||||||
if (trackOnlyOverride || source.enforceTrackOnly) {
|
if (trackOnlyOverride || source.enforceTrackOnly) {
|
||||||
additionalSettings['trackOnly'] = true;
|
additionalSettings['trackOnly'] = true;
|
||||||
}
|
}
|
||||||
@ -592,8 +594,11 @@ class SourceProvider {
|
|||||||
: apk.names.name[0].toUpperCase() + apk.names.name.substring(1);
|
: apk.names.name[0].toUpperCase() + apk.names.name.substring(1);
|
||||||
return App(
|
return App(
|
||||||
currentApp?.id ??
|
currentApp?.id ??
|
||||||
source.tryInferringAppId(standardUrl,
|
((!source.appIdInferIsOptional ||
|
||||||
additionalSettings: additionalSettings) ??
|
(source.appIdInferIsOptional && inferAppIdIfOptional))
|
||||||
|
? await source.tryInferringAppId(standardUrl,
|
||||||
|
additionalSettings: additionalSettings)
|
||||||
|
: null) ??
|
||||||
generateTempID(standardUrl, additionalSettings),
|
generateTempID(standardUrl, additionalSettings),
|
||||||
standardUrl,
|
standardUrl,
|
||||||
apk.names.author[0].toUpperCase() + apk.names.author.substring(1),
|
apk.names.author[0].toUpperCase() + apk.names.author.substring(1),
|
||||||
|
60
pubspec.lock
60
pubspec.lock
@ -134,10 +134,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: csslib
|
name: csslib
|
||||||
sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745
|
sha256: "831883fb353c8bdc1d71979e5b342c7d88acfbc643113c14ae51e2442ea0f20f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.17.2"
|
version: "0.17.3"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -158,10 +158,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: device_info_plus
|
name: device_info_plus
|
||||||
sha256: "499c61743e13909c13374a8c209075385858c614b9c0f2487b5f9995eeaf7369"
|
sha256: "2c35b6d1682b028e42d07b3aee4b98fa62996c10bc12cb651ec856a80d6a761b"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.0.1"
|
version: "9.0.2"
|
||||||
device_info_plus_platform_interface:
|
device_info_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -222,10 +222,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: file_picker
|
name: file_picker
|
||||||
sha256: c7a8e25ca60e7f331b153b0cb3d405828f18d3e72a6fa1d9440c86556fffc877
|
sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.3.0"
|
version: "5.3.1"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -259,10 +259,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_local_notifications
|
name: flutter_local_notifications
|
||||||
sha256: "12f8abacca8bf29c042ec50c554f967da4c6f88ec99fc215e0325e5b43a25188"
|
sha256: "812791d43ccfc1b443a0d39fa02a206fc228c597e28ff9337e09e3ca8d370391"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.1.0"
|
version: "14.1.1"
|
||||||
flutter_local_notifications_linux:
|
flutter_local_notifications_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -288,10 +288,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
sha256: "7b25c10de1fea883f3c4f9b8389506b54053cd00807beab69fd65c8653a2711f"
|
sha256: dc6d5258653f6857135b32896ccda7f7af0c54dcec832495ad6835154c6c77c0
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.14"
|
version: "0.6.15"
|
||||||
flutter_plugin_android_lifecycle:
|
flutter_plugin_android_lifecycle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -314,10 +314,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: fluttertoast
|
name: fluttertoast
|
||||||
sha256: "2f9c4d3f4836421f7067a28f8939814597b27614e021da9d63e5d3fb6e212d25"
|
sha256: "474f7d506230897a3cd28c965ec21c5328ae5605fc9c400cd330e9e9d6ac175c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.2.1"
|
version: "8.2.2"
|
||||||
html:
|
html:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -386,10 +386,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: lints
|
name: lints
|
||||||
sha256: "6b0206b0bf4f04961fc5438198ccb3a885685cd67d4d4a32cc20ad7f8adbe015"
|
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.1"
|
||||||
markdown:
|
markdown:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -490,10 +490,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_linux
|
name: path_provider_linux
|
||||||
sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1"
|
sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.10"
|
version: "2.1.11"
|
||||||
path_provider_platform_interface:
|
path_provider_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -602,10 +602,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: share_plus
|
name: share_plus
|
||||||
sha256: "44fc0bc2d35a8fafa1b564e1c6888bdc4fbb2d0197e4a4c21bac0e66123be9cd"
|
sha256: ed3fcea4f789ed95913328e629c0c53e69e80e08b6c24542f1b3576046c614e8
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.0.1"
|
version: "7.0.2"
|
||||||
share_plus_platform_interface:
|
share_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -775,10 +775,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: "1a5848f598acc5b7d8f7c18b8cb834ab667e59a13edc3c93e9d09cf38cc6bc87"
|
sha256: eed4e6a1164aa9794409325c3b707ff424d4d1c2a785e7db67f8bbda00e36e51
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.34"
|
version: "6.0.35"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -815,10 +815,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_web
|
name: url_launcher_web
|
||||||
sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa"
|
sha256: "6bb1e5d7fe53daf02a8fee85352432a40b1f868a81880e99ec7440113d5cfcab"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.16"
|
version: "2.0.17"
|
||||||
url_launcher_windows:
|
url_launcher_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -847,34 +847,34 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: webview_flutter
|
name: webview_flutter
|
||||||
sha256: "1a37bdbaaf5fbe09ad8579ab09ecfd473284ce482f900b5aea27cf834386a567"
|
sha256: "5604dac1178680a34fbe4a08c7b69ec42cca6601dc300009ec9ff69bef284cc2"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.0"
|
version: "4.2.1"
|
||||||
webview_flutter_android:
|
webview_flutter_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: "1acea8def62592123e2fbbca164ed8681a98a890bdcbb88f916d5b4a22687759"
|
sha256: "57a22c86065375c1598b57224f92d6008141be0c877c64100de8bfb6f71083d8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.7.0"
|
version: "3.7.1"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_platform_interface
|
name: webview_flutter_platform_interface
|
||||||
sha256: "78715dc442b7849dbde74e92bb67de1cecf5addf95531c5fb474e72f5fe9a507"
|
sha256: "656e2aeaef318900fffd21468b6ddc7958c7092a642f0e7220bac328b70d4a81"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.0"
|
version: "2.3.1"
|
||||||
webview_flutter_wkwebview:
|
webview_flutter_wkwebview:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_wkwebview
|
name: webview_flutter_wkwebview
|
||||||
sha256: "4646bb68297803bdbb96d46853e8fcb560d6cb5e04153fa64581535767875dfe"
|
sha256: "6bbc6ade302b842999b27cbaa7171241c273deea8a9c73f92ceb3d811c767de2"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.4.3"
|
version: "3.4.4"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 0.13.5+169 # When changing this, update the tag in main() accordingly
|
version: 0.13.8+172 # When changing this, update the tag in main() accordingly
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.18.2 <3.0.0'
|
sdk: '>=2.18.2 <3.0.0'
|
||||||
|
Reference in New Issue
Block a user