mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-25 02:19:41 +02:00
Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8c2a97e092 | ||
|
34d571f586 | ||
|
a20b87889b | ||
|
c7319cd958 | ||
|
d61fd800ef | ||
|
12dda8bfa9 | ||
|
0657f832e1 | ||
|
6431357b15 | ||
|
dcc42bdfe5 | ||
|
85718dc3a3 | ||
|
9dff352796 | ||
|
c5477767a0 | ||
|
4d9f05aa87 | ||
|
d1a2831922 | ||
|
b042050ea3 | ||
|
2d43dfe0a7 | ||
|
b1a740223c | ||
|
41c98d97b1 | ||
|
ccc0e7696b | ||
|
6d41ed8011 | ||
|
c1476a7d58 |
10
README.md
10
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:
|
||||
- [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:
|
||||
|
@@ -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",
|
||||
|
@@ -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",
|
||||
|
@@ -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",
|
||||
|
@@ -358,6 +358,6 @@
|
||||
},
|
||||
"apk": {
|
||||
"one": "{} APK",
|
||||
"other": "{} APKs"
|
||||
"other": "{} APKи"
|
||||
}
|
||||
}
|
||||
|
54
fastlane/metadata/android/ru/full_description.txt
Normal file
54
fastlane/metadata/android/ru/full_description.txt
Normal file
@@ -0,0 +1,54 @@
|
||||
<p>Obtainium позволяет вам устанавливать и обновлять приложения прямо с их объявлений о выпусках и получать уведомления о новых выпусках.</p>
|
||||
<p>Для деталей читайте <a href="https://github.com/ImranR98/Obtainium/wiki">Вики</a></p>
|
||||
<p>
|
||||
<b>Поддерживаемые источники приложений:</b>
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Свободное ПО - Общие:</p>
|
||||
<ul>
|
||||
<li>GitHub</li>
|
||||
<li>GitLab</li>
|
||||
<li>Codeberg</li>
|
||||
<li>F-Droid</li>
|
||||
<li>Third Party F-Droid Repos</li>
|
||||
<li>IzzyOnDroid</li>
|
||||
<li>SourceForge</li>
|
||||
<li>SourceHut</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Другие - Общие:</p>
|
||||
<ul>
|
||||
<li>APKPure</li>
|
||||
<li>Aptoide</li>
|
||||
<li>Uptodowng</li>
|
||||
<li>APKMirror (Track-Only)</li>
|
||||
<li>Huawei AppGallery</li>
|
||||
<li>Jenkins Jobs</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Свободное ПО - Для отдельных приложений:</p>
|
||||
<ul>
|
||||
<li>Mullvad</li>
|
||||
<li>Signal</li>
|
||||
<li>VLC</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Другие - Для отдельных приложений:</p>
|
||||
<ul>
|
||||
<li>WhatsApp</li>
|
||||
<li>Telegram App</li>
|
||||
<li>Neutron Code</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>"HTML" (Подстраховка): Любой другой URL-адрес, который возвращает HTML-страницу со ссылками на APK-файлы.</p></li>
|
||||
</ul>
|
||||
<p>
|
||||
<b>Ограничения:</b>
|
||||
</p>
|
||||
<p>
|
||||
Для некоторых источников данные собираются с помощью веб-скрапинга и могут легко сломаться из-за изменений в дизайне веб-сайта. В таких случаях более надежные методы могут быть недоступны.
|
||||
</p>
|
1
fastlane/metadata/android/ru/short_description.txt
Normal file
1
fastlane/metadata/android/ru/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Получайте обновления приложений прямо из источника
|
@@ -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()
|
||||
|
@@ -245,8 +245,8 @@ class _GeneratedFormState extends State<GeneratedForm> {
|
||||
void someValueChanged({bool isBuilding = false, bool forceInvalid = false}) {
|
||||
Map<String, dynamic> 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);
|
||||
}
|
||||
|
@@ -235,8 +235,9 @@ Future<File> 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<File> 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<File> handleAPKIDChange(App app, PackageInfo? newInfo,
|
||||
Future<File> 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
|
||||
|
76
pubspec.lock
76
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:
|
||||
@@ -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:
|
||||
@@ -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:
|
||||
@@ -336,18 +336,18 @@ 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:
|
||||
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
|
||||
@@ -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:
|
||||
@@ -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:
|
||||
@@ -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:
|
||||
@@ -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:
|
||||
@@ -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:
|
||||
|
@@ -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.4+2261
|
||||
|
||||
environment:
|
||||
sdk: '>=3.0.0 <4.0.0'
|
||||
|
Reference in New Issue
Block a user