From c1476a7d5841680f4a529bd5285c215ca2a420b9 Mon Sep 17 00:00:00 2001 From: gidano Date: Sun, 7 Apr 2024 09:37:28 +0200 Subject: [PATCH 01/13] Update hu.json --- assets/translations/hu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/translations/hu.json b/assets/translations/hu.json index a5dc4bc..0436026 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -185,7 +185,7 @@ "downloadingX": "{} letöltés", "downloadX": "Letöltés {}", "downloadedX": "Letöltés {}", - "releaseAsset": "Release Asset", + "releaseAsset": "Kiadási tartalom", "downloadNotifDescription": "Értesíti a felhasználót az app letöltésének előrehaladásáról", "noAPKFound": "Nem található APK", "noVersionDetection": "Nincs verzió érzékelés", From 6d41ed80115f58ec877cb3e0583ecb2b3795ddb3 Mon Sep 17 00:00:00 2001 From: DwainZwerg <97027379+DwainZwerg@users.noreply.github.com> Date: Mon, 8 Apr 2024 08:44:28 +0200 Subject: [PATCH 02/13] Update de.json Corrected translation --- assets/translations/de.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/translations/de.json b/assets/translations/de.json index 58f6873..6af12aa 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -19,7 +19,7 @@ "noDescription": "Keine Beschreibung", "cancel": "Abbrechen", "continue": "Weiter", - "requiredInBrackets": "(Benötigt)", + "requiredInBrackets": "(wird benötigt)", "dropdownNoOptsError": "FEHLER: DROPDOWN MUSS MINDESTENS EINE OPTION HABEN", "colour": "Farbe", "githubStarredRepos": "GitHub Starred Repos", @@ -183,9 +183,9 @@ "disableVersionDetection": "Versionsermittlung deaktivieren", "noVersionDetectionExplanation": "Diese Option sollte nur für Apps verwendet werden, bei denen die Versionserkennung nicht korrekt funktioniert.", "downloadingX": "Lade {} herunter", - "downloadX": "Herunterladen {}", - "downloadedX": "Heruntergeladen {}", - "releaseAsset": "Asset freigeben", + "downloadX": "{} herunterladen", + "downloadedX": "{} heruntergeladen", + "releaseAsset": "release Asset", "downloadNotifDescription": "Benachrichtigt den Nutzer über den Fortschritt beim Herunterladen einer App", "noAPKFound": "Keine APK gefunden", "noVersionDetection": "Keine Versionserkennung", From ccc0e7696b9260525c3bded269fe0862cb776295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gutyina=20Gerg=C5=91?= Date: Mon, 8 Apr 2024 21:45:19 +0200 Subject: [PATCH 03/13] Fix out of bounds array access in GeneratedForm update --- lib/components/generated_form.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/components/generated_form.dart b/lib/components/generated_form.dart index c8d059a..23eb928 100644 --- a/lib/components/generated_form.dart +++ b/lib/components/generated_form.dart @@ -245,8 +245,8 @@ class _GeneratedFormState extends State { void someValueChanged({bool isBuilding = false, bool forceInvalid = false}) { Map returnValues = values; var valid = true; - for (int r = 0; r < widget.items.length; r++) { - for (int i = 0; i < widget.items[r].length; i++) { + for (int r = 0; r < formInputs.length; r++) { + for (int i = 0; i < formInputs[r].length; i++) { if (formInputs[r][i] is TextFormField) { valid = valid && validateTextField(formInputs[r][i] as TextFormField); } From b042050ea3cb04cdca90f6670461d7eec91662d9 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 13 Apr 2024 03:05:44 -0400 Subject: [PATCH 04/13] Update packages, increment version --- pubspec.lock | 56 ++++++++++++++++++++++++++-------------------------- pubspec.yaml | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 31cfe52..2bea883 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: "direct main" description: name: android_intent_plus - sha256: e92d14009f3f6ebafca6a601958aaebb793559fb03a1961fe3c5596db95af2cb + sha256: "2bfdbee8d65e7c26f88b66f0a91f2863da4d3596d8a658b4162c8de5cf04b074" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "5.0.2" android_package_installer: dependency: "direct main" description: @@ -54,10 +54,10 @@ packages: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: transitive description: @@ -126,10 +126,10 @@ packages: dependency: "direct main" description: name: connectivity_plus - sha256: e9feae83b1849f61bad9f6f33ee00646e3410d54ce0821e02f262f9901dad3c9 + sha256: ebe15d94de9dd7c31dc2ac54e42780acdf3384b1497c69290c9f3c5b0279fc57 url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "6.0.2" connectivity_plus_platform_interface: dependency: transitive description: @@ -190,10 +190,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "50fb435ed30c6d2525cbfaaa0f46851ea6131315f213c0d921b0e407b34e3b84" + sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 url: "https://pub.dev" source: hosted - version: "10.0.1" + version: "10.1.0" device_info_plus_platform_interface: dependency: transitive description: @@ -307,10 +307,10 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: f9a05409385b77b06c18f200a41c7c2711ebf7415669350bb0f8474c07bd40d1 + sha256: a701df4866f9a38bb8e4450a54c143bbeeb0ce2381e7df5a36e1006f3b43bb28 url: "https://pub.dev" source: hosted - version: "17.0.0" + version: "17.0.1" flutter_local_notifications_linux: dependency: transitive description: @@ -344,10 +344,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da + sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.0.19" flutter_test: dependency: "direct dev" description: flutter @@ -538,18 +538,18 @@ packages: dependency: "direct main" description: name: path_provider - sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b + sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.4" path_provider_foundation: dependency: transitive description: @@ -674,10 +674,10 @@ packages: dependency: "direct main" description: name: share_plus - sha256: "05ec043470319bfbabe0adbc90d3a84cbff0426b9d9f3a6e2ad3e131fa5fa629" + sha256: fb5319f3aab4c5dda5ebb92dca978179ba21f8c783ee4380910ef4c1c6824f51 url: "https://pub.dev" source: hosted - version: "8.0.2" + version: "8.0.3" share_plus_platform_interface: dependency: transitive description: @@ -690,18 +690,18 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.2" shared_preferences_foundation: dependency: transitive description: @@ -855,18 +855,18 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e" + sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" url: "https://pub.dev" source: hosted - version: "6.2.5" + version: "6.2.6" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745 + sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.3.1" url_launcher_ios: dependency: transitive description: @@ -919,10 +919,10 @@ packages: dependency: transitive description: name: uuid - sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "4.3.3" + version: "4.4.0" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a3f889e..8e2e1ce 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.1.2+2259 +version: 1.1.3+2260 environment: sdk: '>=3.0.0 <4.0.0' From 4d9f05aa873729d8ce5bff9021b9d5aa32e0a0f2 Mon Sep 17 00:00:00 2001 From: o101010 <23003062+o101010@users.noreply.github.com> Date: Sun, 14 Apr 2024 20:52:51 +0200 Subject: [PATCH 05/13] Corrects french translations Corrects french translations in fr.json. --- assets/translations/fr.json | 110 ++++++++++++++++++------------------ 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 9e60af6..46f7bf3 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -1,7 +1,7 @@ { "invalidURLForSource": "URL d'application {} invalide", - "noReleaseFound": "Impossible de trouver une version appropriée", - "noVersionFound": "Impossible de déterminer la version de la version", + "noReleaseFound": "Impossible de trouver une version adaptée", + "noVersionFound": "Impossible de déterminer la variante de la version", "urlMatchesNoSource": "L'URL ne correspond pas à une source connue", "cantInstallOlderVersion": "Impossible d'installer une ancienne version d'une application", "appIdMismatch": "L'ID de paquet téléchargé ne correspond pas à l'ID de l'application existante", @@ -43,7 +43,7 @@ "additionalOptsFor": "Options supplémentaires pour {}", "supportedSources": "Sources prises en charge ", "trackOnlyInBrackets": "(Suivi uniquement)", - "searchableInBrackets": "(Recherchable)", + "searchableInBrackets": "(Intérrogeable)", "appsString": "Applications", "noApps": "Aucune application", "noAppsForFilter": "Aucune application pour le filtre", @@ -51,7 +51,7 @@ "percentProgress": "Progrès: {}%", "pleaseWait": "Veuillez patienter", "updateAvailable": "Mise à jour disponible", - "notInstalled": "Pas installé", + "notInstalled": "Non installé", "pseudoVersion": "pseudo-version", "selectAll": "Tout sélectionner", "deselectX": "Déselectionner {}", @@ -60,22 +60,22 @@ "removeSelectedApps": "Supprimer les applications sélectionnées", "updateX": "Mise à jour {}", "installX": "Installer {}", - "markXTrackOnlyAsUpdated": "Marquer {}\n(Suivi uniquement)\nas mis à jour", + "markXTrackOnlyAsUpdated": "Marquer {}\n(Suivi uniquement)\n comme mis à jour", "changeX": "Changer {}", "installUpdateApps": "Installer/Mettre à jour les applications", "installUpdateSelectedApps": "Installer/Mettre à jour les applications sélectionnées", - "markXSelectedAppsAsUpdated": "Marquer {} les applications sélectionnées comme mises à jour ?", + "markXSelectedAppsAsUpdated": "Marquer {} les applications sélectionnées comme étant à jour ?", "no": "Non", "yes": "Oui", - "markSelectedAppsUpdated": "Marquer les applications sélectionnées comme mises à jour", + "markSelectedAppsUpdated": "Marquer les applications sélectionnées comme étant à jour", "pinToTop": "Épingler en haut", - "unpinFromTop": "Détacher du haut", - "resetInstallStatusForSelectedAppsQuestion": "Réinitialiser l'état d'installation des applications sélectionnées ?", - "installStatusOfXWillBeResetExplanation": "L'état d'installation de toutes les applications sélectionnées sera réinitialisé.\n\nCela peut aider lorsque la version de l'application affichée dans Obtainium est incorrecte en raison d'échecs de mises à jour ou d'autres problèmes.", - "customLinkMessage": "Ces liens fonctionnent sur les appareils sur lesquels Obtenirium est installé", + "unpinFromTop": "Désépingler du haut", + "resetInstallStatusForSelectedAppsQuestion": "Réinitialiser le statu d'installation des applications sélectionnées ?", + "installStatusOfXWillBeResetExplanation": "Le statu d'installation de toutes les applications sélectionnées sera réinitialisé.\n\nCela peut aider lorsque la version de l'application affichée dans Obtainium est incorrecte en raison d'échecs de mises à jour ou d'autres problèmes.", + "customLinkMessage": "Ces liens fonctionnent sur les appareils sur lesquels Obtainium est installé", "shareAppConfigLinks": "Partager la configuration de l'application sous forme de lien HTML", "shareSelectedAppURLs": "Partager les URL d'application sélectionnées", - "resetInstallStatus": "Réinitialiser le statut d'installation", + "resetInstallStatus": "Réinitialiser le statu d'installation", "more": "Plus", "removeOutdatedFilter": "Supprimer le filtre d'application obsolète", "showOutdatedOnly": "Afficher uniquement les applications obsolètes", @@ -88,12 +88,12 @@ "importExport": "Importer/Exporter", "settings": "Paramètres", "exportedTo": "Exporté vers {}", - "obtainiumExport": "Exportation d'Obtainium", + "obtainiumExport": "Exporter d'Obtainium", "invalidInput": "Entrée invalide", "importedX": "Importé {}", - "obtainiumImport": "Importation d'Obtainium", + "obtainiumImport": "Importer d'Obtainium", "importFromURLList": "Importer à partir de la liste d'URL", - "searchQuery": "Requête de recherche", + "searchQuery": "Requête", "appURLList": "Liste d'URL d'application", "line": "Queue", "searchX": "Rechercher {}", @@ -110,14 +110,14 @@ "dark": "Sombre", "light": "Clair", "followSystem": "Suivre le système", - "useBlackTheme": "Utilisez le thème noir pur et sombre", + "useBlackTheme": "Utilisez le thème noir pur", "appSortBy": "Applications triées par", "authorName": "Auteur/Nom", "nameAuthor": "Nom/Auteur", "asAdded": "Comme ajouté", "appSortOrder": "Ordre de tri des applications", "ascending": "Ascendant", - "descending": "Descendanr", + "descending": "Descendant", "bgUpdateCheckInterval": "Intervalle de vérification des mises à jour en arrière-plan", "neverManualOnly": "Jamais - Manuel uniquement", "appearance": "Apparence", @@ -131,13 +131,13 @@ "close": "Fermer", "share": "Partager", "appNotFound": "Application introuvable", - "obtainiumExportHyphenatedLowercase": "exportation d'obtainium", + "obtainiumExportHyphenatedLowercase": "exportation d'Obtainium", "pickAnAPK": "Choisissez un APK", "appHasMoreThanOnePackage": "{} a plus d'un paquet :", - "deviceSupportsXArch": "Votre appareil prend en charge l'architecture de processeur {}.", + "deviceSupportsXArch": "Votre appareil prend en charge l'architecture CPU {}.", "deviceSupportsFollowingArchs": "Votre appareil prend en charge les architectures CPU suivantes :", "warning": "Avertissement", - "sourceIsXButPackageFromYPrompt": "La source de l'application est '{}' mais le paquet de version provient de '{}'. Continuer?", + "sourceIsXButPackageFromYPrompt": "La source de l'application est '{}' mais la version du paquet provient de '{}'. Continuer?", "updatesAvailable": "Mises à jour disponibles", "updatesAvailableNotifDescription": "Avertit l'utilisateur que des mises à jour sont disponibles pour une ou plusieurs applications suivies par Obtainium", "noNewUpdates": "Aucune nouvelle mise à jour.", @@ -179,7 +179,7 @@ "markInstalled": "Marquer installée", "update": "Mettre à jour", "markUpdated": "Marquer à jour", - "additionalOptions": "Options additionelles", + "additionalOptions": "Options additionnelles", "disableVersionDetection": "Désactiver la détection de version", "noVersionDetectionExplanation": "Cette option ne doit être utilisée que pour les applications où la détection de version ne fonctionne pas correctement.", "downloadingX": "Téléchargement {}", @@ -188,7 +188,7 @@ "releaseAsset": "Actif libéré", "downloadNotifDescription": "Avertit l'utilisateur de la progression du téléchargement d'une application", "noAPKFound": "Aucun APK trouvé", - "noVersionDetection": "Pas de détection de version", + "noVersionDetection": "Aucune de détection de version", "categorize": "Catégoriser", "categories": "Catégories", "category": "Catégorie", @@ -201,13 +201,13 @@ "language": "Langue", "copiedToClipboard": "Copié dans le presse-papier", "storagePermissionDenied": "Autorisation de stockage refusée", - "selectedCategorizeWarning": "Cela remplacera tous les paramètres de catégorie existants pour les applications sélectionnées.", + "selectedCategorizeWarning": "Cela remplacera toutes les catégorie définies pour les applications sélectionnées.", "filterAPKsByRegEx": "Filtrer les APK par expression régulière", "removeFromObtainium": "Supprimer d'Obtainium", "uninstallFromDevice": "Désinstaller de l'appareil", "onlyWorksWithNonVersionDetectApps": "Fonctionne uniquement pour les applications avec la détection de version désactivée.", "releaseDateAsVersion": "Utiliser la date de sortie comme version", - "releaseDateAsVersionExplanation": "Cette option ne doit être utilisée que pour les applications où la détection de version ne fonctionne pas correctement, mais une date de sortie est disponible.", + "releaseDateAsVersionExplanation": "Cette option ne doit être utilisée que pour les applications où la détection de version ne fonctionne pas correctement, mais dont une date de sortie est disponible.", "changes": "Changements", "releaseDate": "Date de sortie", "importFromURLsInFile": "Importer à partir d'URL dans un fichier (comme OPML)", @@ -215,59 +215,59 @@ "versionDetection": "Détection des versions", "standardVersionDetection": "Détection de version standard", "groupByCategory": "Regrouper par catégorie", - "autoApkFilterByArch": "Essayez de filtrer les APK par architecture CPU si possible", + "autoApkFilterByArch": "Si possible, essayez de filtrer les APK par architecture CPU", "overrideSource": "Remplacer la source", - "dontShowAgain": "Ne montre plus ça", - "dontShowTrackOnlyWarnings": "Don't Show the 'Track-Only' Warning", + "dontShowAgain": "Ne plus montrer", + "dontShowTrackOnlyWarnings": "Ne pas afficher l'avertissement 'Track-Only'", "dontShowAPKOriginWarnings": "Ne pas afficher les avertissements sur l'origine de l'APK", "moveNonInstalledAppsToBottom": "Déplacer les applications non installées vers le bas de la vue Applications", "gitlabPATLabel": "Jeton d'accès personnel GitLab", "about": "À propos de", - "requiresCredentialsInSettings": "{}: This needs additional credentials (in Settings)", + "requiresCredentialsInSettings": "{}: Cela nécessite des identifiants supplémentaires (dans Paramètres)", "checkOnStart": "Vérifier les mises à jour au démarrage", "tryInferAppIdFromCode": "Essayez de déduire l'ID de l'application à partir du code source", "removeOnExternalUninstall": "Supprimer automatiquement les applications désinstallées en externe", - "pickHighestVersionCode": "Sélectionner automatiquement le code APK de la version la plus élevée", - "checkUpdateOnDetailPage": "Vérifier les mises à jour lors de l'ouverture d'une page de détails d'application", + "pickHighestVersionCode": "Sélectionner automatiquement le code de version de l'APK la plus élevée", + "checkUpdateOnDetailPage": "Vérifier les mises à jour lors de l'ouverture de la page détaillée d'une application", "disablePageTransitions": "Désactiver les animations de transition de page", - "reversePageTransitions": "Animations de transition de page inversée", + "reversePageTransitions": "Inverser les animations de transition de page", "minStarCount": "Nombre minimum d'étoiles", "addInfoBelow": "Ajoutez ces informations ci-dessous.", "addInfoInSettings": "Ajoutez ces informations dans les paramètres.", - "githubSourceNote": "La limitation du débit GitHub peut être évitée à l'aide d'une clé API.", + "githubSourceNote": "La limite de débit GitHub peut être évitée à l'aide d'une clé API.", "sortByLastLinkSegment": "Trier uniquement sur le dernier segment du lien", "filterReleaseNotesByRegEx": "Filtrer les notes de version par expression régulière", - "customLinkFilterRegex": "Filtre de lien APK personnalisé par expression régulière (par défaut '.apk$')", + "customLinkFilterRegex": "Filtre du lien APK personnalisé par expression régulière (par défaut '.apk$')", "appsPossiblyUpdated": "Tentative de mise à jour de l'application", "appsPossiblyUpdatedNotifDescription": "Avertit l'utilisateur que des mises à jour d'une ou plusieurs applications ont été potentiellement appliquées en arrière-plan", "xWasPossiblyUpdatedToY": "{} a peut-être été mis à jour vers {}.", "enableBackgroundUpdates": "Activer les mises à jour en arrière-plan", "backgroundUpdateReqsExplanation": "Les mises à jour en arrière-plan peuvent ne pas être possibles pour toutes les applications.", - "backgroundUpdateLimitsExplanation": "Le succès d'une installation en arrière-plan ne peut être déterminé qu'à l'ouverture d'Obetium.", - "verifyLatestTag": "Vérifiez la balise 'dernière'", + "backgroundUpdateLimitsExplanation": "Le succès d'une installation en arrière-plan ne peut être déterminé qu'à l'ouverture d'Obtainium.", + "verifyLatestTag": "Vérifiez la balise 'Latest'", "intermediateLinkRegex": " Filtrer un lien \" intermédiaire \" à visiter ", - "filterByLinkText": "Filtrer les liens par texte de lien", + "filterByLinkText": "Filtrer les liens par le texte du lien", "intermediateLinkNotFound": "Lien intermédiaire introuvable", "intermediateLink": "Lien intermédiaire", - "exemptFromBackgroundUpdates": "Exempt des mises à jour en arrière-plan (si activé)", + "exemptFromBackgroundUpdates": "Exempté des mises à jour en arrière-plan (si activé)", "bgUpdatesOnWiFiOnly": "Désactiver les mises à jour en arrière-plan lorsque vous n'êtes pas connecté au WiFi", - "autoSelectHighestVersionCode": "Sélection automatique de la version la plus élevéeCode APK", - "versionExtractionRegEx": "Version Extraction RegEx", - "matchGroupToUse": "Match Group to Use", - "highlightTouchTargets": "Mettez en évidence les cibles tactiles moins évidentes", + "autoSelectHighestVersionCode": "Sélection automatique du code de version de l'APK la plus élevée", + "versionExtractionRegEx": "Expression régulière d'extraction de version", + "matchGroupToUse": "Groupe de correspondance pour l'expression régulière d'extraction de version", + "highlightTouchTargets": "Mettre en évidence les cibles tactiles moins évidentes", "pickExportDir": "Choisir le répertoire d'exportation", - "autoExportOnChanges": "Exportation automatique sur modifications", + "autoExportOnChanges": "Exporter automatiquement après modification", "includeSettings": "Inclure les paramètres", "filterVersionsByRegEx": "Filtrer les versions par expression régulière", - "trySelectingSuggestedVersionCode": "Essayez de sélectionner la version suggéréeCode APK", - "dontSortReleasesList": "Conserver la commande de version de l'API", + "trySelectingSuggestedVersionCode": "Essayez de sélectionner le code de la version APK suggérée", + "dontSortReleasesList": "Conserver l'ordre des version de l'API", "reverseSort": "Tri inversé", "takeFirstLink": "Prendre le premier lien", "skipSort": "Sauter le tri", "debugMenu": "Menu de débogage", "bgTaskStarted": "Tâche en arrière-plan démarrée - vérifier les journaux.", - "runBgCheckNow": "Exécuter la vérification de la mise à jour en arrière-plan maintenant", - "versionExtractWholePage": "Apply Version Extraction Regex to Entire Page", + "runBgCheckNow": "Exécuter maintenant la vérification de la mise à jour en arrière-plan", + "versionExtractWholePage": "Appliquer l'expression régulière d'extraction de version sur l'ensemble de la page", "installing": "Installation", "skipUpdateNotifications": "Ignorer les notifications de mise à jour", "updatesAvailableNotifChannel": "Mises à jour disponibles", @@ -278,19 +278,19 @@ "downloadingXNotifChannel": "Téléchargement {}", "completeAppInstallationNotifChannel": "Installation complète de l'application", "checkingForUpdatesNotifChannel": "Vérification des mises à jour", - "onlyCheckInstalledOrTrackOnlyApps": "Vérifiez uniquement les mises à jour des applications installées et de suivi uniquement", + "onlyCheckInstalledOrTrackOnlyApps": "Vérifiez uniquement les mises à jour des applications installées et 'Track-Only'", "supportFixedAPKURL": "Prise en charge des URL APK fixes", "selectX": "Sélectionner {}", "parallelDownloads": "Autoriser les téléchargements parallèles", "installMethod": "Méthode d'installation", "normal": "Normale", "root": "Racine", - "shizukuBinderNotFound": "Shizuku is not running", - "useSystemFont": "Utiliser la police système", - "systemFontError": "Erreur de chargement de la police système : {}", + "shizukuBinderNotFound": "Service Shizuku compatible non trouvé", + "useSystemFont": "Utiliser la police du système", + "systemFontError": "Erreur de chargement de la police du système : {}", "useVersionCodeAsOSVersion": "Utiliser le code de version de l'application comme version détectée par le système d'exploitation", "requestHeader": "En-tête de demande", - "useLatestAssetDateAsReleaseDate": "Utiliser le dernier téléchargement d'élément comme date de sortie", + "useLatestAssetDateAsReleaseDate": "Utiliser le dernier élément téléversé comme date de sortie", "defaultPseudoVersioningMethod": "Méthode de pseudo-version par défaut", "partialAPKHash": "Hash APK partiel", "APKLinkHash": "Hash de lien APK", @@ -313,12 +313,12 @@ "other": "Trop de demandes (taux limité) - réessayez dans {} minutes" }, "bgUpdateGotErrorRetryInMinutes": { - "one": "La vérification de la mise à jour en arrière-plan a rencontré un {}, planifiera une nouvelle tentative de vérification dans {} minute", - "other": "La vérification de la mise à jour en arrière-plan a rencontré un {}, planifiera une nouvelle tentative de vérification dans {} minutes" + "one": "La vérification de la mise à jour en arrière-plan a rencontré un {}, une nouvelle tentative de vérification sera planifié dans {} minute", + "other": "La vérification de la mise à jour en arrière-plan a rencontré un {}, une nouvelle tentative de vérification sera planifié dans {} minute" }, "bgCheckFoundUpdatesWillNotifyIfNeeded": { - "one": "La vérification des mises à jour en arrière-plan trouvée {} mise à jour - avertira l'utilisateur si nécessaire", - "other": "La vérification des mises à jour en arrière-plan a trouvé {} mises à jour - avertira l'utilisateur si nécessaire" + "one": "La vérification des mises à jour en arrière-plan a trouvée {} mise à jour - l'utilisateur sera notifié si nécessaire", + "other": "La vérification des mises à jour en arrière-plan a trouvé {} mises à jour - l'utilisateur sera notifié si nécessaire" }, "apps": { "one": "{} Application", From c5477767a09b1bd9a3256ef178fa4f6e5eee857f Mon Sep 17 00:00:00 2001 From: Imran <30463115+ImranR98@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:52:08 -0400 Subject: [PATCH 06/13] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9d8e321..6ff7ce9 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,13 @@ Get Android App Updates Directly From the Source. -Obtainium allows you to install and update Apps directly from their releases pages, and receive notifications when new releases are made available. +Obtainium allows you to install and update apps directly from their releases pages, and receive notifications when new releases are made available. -Motivation: [Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed](https://youtu.be/FFz57zNR_M0) - -Read the Wiki: [https://github.com/ImranR98/Obtainium/wiki](https://github.com/ImranR98/Obtainium/wiki) +More info: +- Motivation: [Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed](https://youtu.be/FFz57zNR_M0) +- Help/Wiki: [https://github.com/ImranR98/Obtainium/wiki](https://github.com/ImranR98/Obtainium/wiki) +- App verification tool (recommended, integrates with Obtainium): [AppVerifier](https://github.com/soupslurpr/AppVerifier) +- Crowdsourced app configurations: [apps.obtainium.imranr.dev](https://apps.obtainium.imranr.dev/) Currently supported App sources: - Open Source - General: From 9dff352796b1bc7ea44644f90b3ab487090ee0b6 Mon Sep 17 00:00:00 2001 From: Imran <30463115+ImranR98@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:52:35 -0400 Subject: [PATCH 07/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6ff7ce9..0266645 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ Get Android App Updates Directly From the Source. Obtainium allows you to install and update apps directly from their releases pages, and receive notifications when new releases are made available. More info: -- Motivation: [Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed](https://youtu.be/FFz57zNR_M0) - Help/Wiki: [https://github.com/ImranR98/Obtainium/wiki](https://github.com/ImranR98/Obtainium/wiki) - App verification tool (recommended, integrates with Obtainium): [AppVerifier](https://github.com/soupslurpr/AppVerifier) - Crowdsourced app configurations: [apps.obtainium.imranr.dev](https://apps.obtainium.imranr.dev/) +- Motivation: [Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed](https://youtu.be/FFz57zNR_M0) Currently supported App sources: - Open Source - General: From 85718dc3a37d12ce13f596c950a8fb5c2b484df6 Mon Sep 17 00:00:00 2001 From: Imran <30463115+ImranR98@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:53:55 -0400 Subject: [PATCH 08/13] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0266645..1c43ade 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ Get Android App Updates Directly From the Source. Obtainium allows you to install and update apps directly from their releases pages, and receive notifications when new releases are made available. More info: -- Help/Wiki: [https://github.com/ImranR98/Obtainium/wiki](https://github.com/ImranR98/Obtainium/wiki) -- App verification tool (recommended, integrates with Obtainium): [AppVerifier](https://github.com/soupslurpr/AppVerifier) -- Crowdsourced app configurations: [apps.obtainium.imranr.dev](https://apps.obtainium.imranr.dev/) -- Motivation: [Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed](https://youtu.be/FFz57zNR_M0) +- [Obtainium/wiki](https://github.com/ImranR98/Obtainium/wiki) +- [AppVerifier](https://github.com/soupslurpr/AppVerifier) - App verification tool (recommended, integrates with Obtainium) +- [apps.obtainium.imranr.dev](https://apps.obtainium.imranr.dev/) - Crowdsourced app configurations +- [Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed](https://youtu.be/FFz57zNR_M0) - Original motivation for this app Currently supported App sources: - Open Source - General: From dcc42bdfe544fc6ac81d126fd86f555d6c3a144d Mon Sep 17 00:00:00 2001 From: Yurt Page Date: Tue, 16 Apr 2024 01:09:18 +0300 Subject: [PATCH 09/13] fastlane: i18n ru for app description --- .../metadata/android/ru/full_description.txt | 54 +++++++++++++++++++ .../metadata/android/ru/short_description.txt | 1 + 2 files changed, 55 insertions(+) create mode 100644 fastlane/metadata/android/ru/full_description.txt create mode 100644 fastlane/metadata/android/ru/short_description.txt diff --git a/fastlane/metadata/android/ru/full_description.txt b/fastlane/metadata/android/ru/full_description.txt new file mode 100644 index 0000000..38a337c --- /dev/null +++ b/fastlane/metadata/android/ru/full_description.txt @@ -0,0 +1,54 @@ +

Obtainium позволяет вам устанавливать и обновлять приложения прямо с их объявлений о выпусках и получать уведомления о новых выпусках.

+

Для деталей читайте Вики

+

+ Поддерживаемые источники приложений: +

+
    +
  • +

    Свободное ПО - Общие:

    +
      +
    • GitHub
    • +
    • GitLab
    • +
    • Codeberg
    • +
    • F-Droid
    • +
    • Third Party F-Droid Repos
    • +
    • IzzyOnDroid
    • +
    • SourceForge
    • +
    • SourceHut
    • +
    +
  • +
  • +

    Другие - Общие:

    +
      +
    • APKPure
    • +
    • Aptoide
    • +
    • Uptodowng
    • +
    • APKMirror (Track-Only)
    • +
    • Huawei AppGallery
    • +
    • Jenkins Jobs
    • +
    +
  • +
  • +

    Свободное ПО - Для отдельных приложений:

    +
      +
    • Mullvad
    • +
    • Signal
    • +
    • VLC
    • +
    +
  • +
  • +

    Другие - Для отдельных приложений:

    +
      +
    • WhatsApp
    • +
    • Telegram App
    • +
    • Neutron Code
    • +
    +
  • +
  • "HTML" (Подстраховка): Любой другой URL-адрес, который возвращает HTML-страницу со ссылками на APK-файлы.

  • +
+

+ Ограничения: +

+

+ Для некоторых источников данные собираются с помощью веб-скрапинга и могут легко сломаться из-за изменений в дизайне веб-сайта. В таких случаях более надежные методы могут быть недоступны. +

diff --git a/fastlane/metadata/android/ru/short_description.txt b/fastlane/metadata/android/ru/short_description.txt new file mode 100644 index 0000000..cb303f6 --- /dev/null +++ b/fastlane/metadata/android/ru/short_description.txt @@ -0,0 +1 @@ +Получайте обновления приложений прямо из источника \ No newline at end of file From 6431357b15465fa87e86df36092a1247fab36426 Mon Sep 17 00:00:00 2001 From: Yurt Page Date: Tue, 16 Apr 2024 01:16:08 +0300 Subject: [PATCH 10/13] ru.json: translate apk.other --- assets/translations/ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 0fcad3b..d00c9f0 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -358,6 +358,6 @@ }, "apk": { "one": "{} APK", - "other": "{} APKs" + "other": "{} APKи" } } From 0657f832e18f7b6893940556b1ed463375cb29f7 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Mon, 15 Apr 2024 18:39:21 -0400 Subject: [PATCH 11/13] Don't trust content-length header from sites w/o accept-ranges support (#1542) + bugfixes --- lib/providers/apps_provider.dart | 48 +++++++++++++++----------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 6015434..6620006 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -235,8 +235,9 @@ Future downloadFile( var fullContentLength = response.contentLength; if (useExisting && downloadedFile.existsSync()) { var length = downloadedFile.lengthSync(); - if (fullContentLength == null) { - // Assume full + if (fullContentLength == null || !rangeFeatureEnabled) { + // If there is no content length reported, assume it the existing file is fully downloaded + // Also if the range feature is not supported, don't trust the content length if any (#1542) client.close(); return downloadedFile; } else { @@ -291,14 +292,11 @@ Future downloadFile( return s; }).pipe(sink); await sink.close(); - bool likelyCorruptFile = (progress ?? 0) > 101; progress = null; if (onProgress != null) { onProgress(progress); } - if (response.statusCode < 200 || - response.statusCode > 299 || - likelyCorruptFile) { + if (response.statusCode < 200 || response.statusCode > 299) { tempDownloadedFile.deleteSync(recursive: true); throw response.reasonPhrase ?? tr('unexpectedError'); } @@ -392,30 +390,26 @@ class AppsProvider with ChangeNotifier { }(); } - Future handleAPKIDChange(App app, PackageInfo? newInfo, + Future handleAPKIDChange(App app, PackageInfo newInfo, File downloadedFile, String downloadUrl) async { // If the APK package ID is different from the App ID, it is either new (using a placeholder ID) or the ID has changed // The former case should be handled (give the App its real ID), the latter is a security issue var isTempIdBool = isTempId(app); - if (newInfo != null) { - if (app.id != newInfo.packageName) { - if (apps[app.id] != null && !isTempIdBool && !app.allowIdChange) { - throw IDChangedError(newInfo.packageName!); - } - var idChangeWasAllowed = app.allowIdChange; - app.allowIdChange = false; - var originalAppId = app.id; - app.id = newInfo.packageName!; - downloadedFile = downloadedFile.renameSync( - '${downloadedFile.parent.path}/${app.id}-${downloadUrl.hashCode}.${downloadedFile.path.split('.').last}'); - if (apps[originalAppId] != null) { - await removeApps([originalAppId]); - await saveApps([app], - onlyIfExists: !isTempIdBool && !idChangeWasAllowed); - } + if (app.id != newInfo.packageName) { + if (apps[app.id] != null && !isTempIdBool && !app.allowIdChange) { + throw IDChangedError(newInfo.packageName!); + } + var idChangeWasAllowed = app.allowIdChange; + app.allowIdChange = false; + var originalAppId = app.id; + app.id = newInfo.packageName!; + downloadedFile = downloadedFile.renameSync( + '${downloadedFile.parent.path}/${app.id}-${downloadUrl.hashCode}.${downloadedFile.path.split('.').last}'); + if (apps[originalAppId] != null) { + await removeApps([originalAppId]); + await saveApps([app], + onlyIfExists: !isTempIdBool && !idChangeWasAllowed); } - } else if (isTempIdBool) { - throw ObtainiumError('Could not get ID from APK'); } return downloadedFile; } @@ -479,6 +473,10 @@ class AppsProvider with ChangeNotifier { newInfo = await pm.getPackageArchiveInfo(archiveFilePath: apks.first.path); } + if (newInfo == null) { + downloadedFile.delete(); + throw ObtainiumError('Could not get ID from APK'); + } downloadedFile = await handleAPKIDChange(app, newInfo, downloadedFile, downloadUrl); // Delete older versions of the file if any From 12dda8bfa9523a38dc4d9648aa31631d66356ce8 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Mon, 15 Apr 2024 19:06:24 -0400 Subject: [PATCH 12/13] Allow for spaces in HTML link and version filters (#1537) --- lib/app_sources/html.dart | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index 51f6143..6ebee0a 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -244,16 +244,17 @@ class HTML extends AppSource { true) { var reg = RegExp(additionalSettings['customLinkFilterRegex']); links = allLinks - .where((element) => - reg.hasMatch(filterLinkByText ? element.value : element.key)) + .where((element) => reg.hasMatch( + filterLinkByText ? element.value : Uri.decodeFull(element.key))) .toList(); } else { links = allLinks - .where((element) => - Uri.parse(filterLinkByText ? element.value : element.key) - .path - .toLowerCase() - .endsWith('.apk')) + .where((element) => Uri.parse(filterLinkByText + ? element.value + : Uri.decodeFull(element.key)) + .path + .toLowerCase() + .endsWith('.apk')) .toList(); } if (!skipSort) { @@ -315,7 +316,7 @@ class HTML extends AppSource { additionalSettings['matchGroupToUse'] as String?, additionalSettings['versionExtractWholePage'] == true ? versionExtractionWholePageString - : rel); + : Uri.decodeFull(rel)); version ??= additionalSettings['defaultPseudoVersioningMethod'] == 'APKLinkHash' ? rel.hashCode.toString() From a20b87889b2dbbf49ba9e3a9bc50c165b3487f5e Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Mon, 15 Apr 2024 19:14:39 -0400 Subject: [PATCH 13/13] Update packages, increment version --- pubspec.lock | 20 ++++++++++---------- pubspec.yaml | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 2bea883..349b896 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -275,10 +275,10 @@ packages: dependency: "direct main" description: name: flutter_archive - sha256: "004132780d382df5171589ab793e2efc9c3eef570fe72d78b4ccfbfbe52762ae" + sha256: "5ca235f304c12bf468979235f400f79846d204169d715939e39197106f5fc970" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.0.3" flutter_fgbg: dependency: "direct main" description: @@ -336,10 +336,10 @@ packages: dependency: "direct main" description: name: flutter_markdown - sha256: "31c12de79262b5431c5492e9c89948aa789158435f707d3519a7fdef6af28af7" + sha256: "04c4722cc36ec5af38acc38ece70d22d3c2123c61305d555750a091517bbe504" url: "https://pub.dev" source: hosted - version: "0.6.22+1" + version: "0.6.23" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -362,10 +362,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1 + sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66" url: "https://pub.dev" source: hosted - version: "8.2.4" + version: "8.2.5" gtk: dependency: transitive description: @@ -903,10 +903,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d" + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.1" url_launcher_windows: dependency: transitive description: @@ -991,10 +991,10 @@ packages: dependency: transitive description: name: win32_registry - sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" + sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8e2e1ce..a3f2daf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.1.3+2260 +version: 1.1.4+2261 environment: sdk: '>=3.0.0 <4.0.0'