Compare commits

...

33 Commits

Author SHA1 Message Date
Imran
a56069e881 Merge pull request #2537 from ImranR98/dev
Fix versionCode issue (#2505) + Flutter upgrades
2025-09-12 15:16:01 -04:00
Imran Remtulla
a34e45363b Fix versionCode issue (#2505) + Flutter upgrades 2025-09-12 15:13:20 -04:00
Imran
e1a89f5f67 Merge pull request #2531 from ar-lex/feature/3rd-party-fdroid-per-app-author
Add per-application author parsing for third-party F-Droid repos (#2527)
2025-09-12 14:44:10 -04:00
Imran
f7f6e0cde7 Merge pull request #2532 from ar-lex/feature/3rd-party-fdroid-changelog
Support changelog field for third-party F-Droid repos (#2528)
2025-09-12 14:44:04 -04:00
Alexey Arutyunov
5a58522bf6 Support changelog field for third-party F-Droid repos (#2528) 2025-09-12 20:39:23 +02:00
Alexey Arutyunov
9347af2090 Add per-application author parsing for third-party F-Droid repos (#2527) 2025-09-12 20:33:49 +02:00
Imran
b294e57367 Merge pull request #2530 from ar-lex/feature/3rd-party-fdroid-suggested-version
Implement suggested version code for third-party F-Droid repos (#2524)
2025-09-12 14:23:30 -04:00
Imran
4234e16432 Merge pull request #2533 from solokot/main
Translation: update ru.json
2025-09-12 14:21:10 -04:00
Imran
a64f2e1af7 Merge pull request #2522 from bluefly000/japanese-translation
Update ja.json
2025-09-12 14:20:50 -04:00
solokot
926462407c Translation: update ru.json
Fix machine translation
2025-09-12 09:57:50 +03:00
Alexey Arutyunov
1b499700fd Implement suggested version code for third-party F-Droid repos (#2524)
Enable it by default for both official and third-party F-Droid sources.

Reuse trySelectingSuggestedVersionCode label from official F-Droid repository source.
2025-09-11 23:34:28 +02:00
bluefly000
930a4b411e Update ja.json 2025-09-06 18:54:11 +09:00
Imran
b9931e00e7 Merge pull request #2508 from summoner001/main
Translation: Update hu.json
2025-08-31 21:38:05 -04:00
summoner
2337e04ee1 Translation: Update hu.json
Translate new string.
Fix sentence.
2025-08-31 12:40:02 +02:00
Imran
2fc8dafc9e Merge pull request #2503 from ImranR98/dev
- Added LiteAPKs as a source (#1799)
- Remove unnecessary permission (#2467)
2025-08-31 00:49:01 -04:00
Imran Remtulla
0603c6a1d3 Translation updates 2025-08-31 00:47:15 -04:00
Imran Remtulla
555284d2cb Update Flutter + packages, increment version 2025-08-31 00:08:08 -04:00
Imran
357e2b8a89 Merge pull request #2497 from UlyssesZh/match-links-outside-a-tags
feat: add option to match links outside <a> tags even if links in <a> tags are found
2025-08-31 00:00:20 -04:00
Imran Remtulla
5b147b82e0 Added LiteAPKs as a source (#1799) 2025-08-30 23:59:21 -04:00
Ulysses Zhan
87ef762eec feat: add option to match links outside <a> tags even if links in <a> tags are found 2025-08-27 00:59:48 -07:00
Imran Remtulla
9ac963557e Merge remote-tracking branch 'origin/main' into dev 2025-08-20 19:52:57 -04:00
Imran
7e270e036f Merge pull request #2460 from CertainBot/main
Update es.json
2025-08-20 19:52:38 -04:00
Imran
cef7535913 Merge pull request #2479 from DwainZwerg/main
Update full_description.txt
2025-08-20 19:52:28 -04:00
Imran Remtulla
bad76a1ee7 Remove unnecessary permission (#2467) 2025-08-20 18:57:53 -04:00
DwainZwerg
099865ab94 Update full_description.txt
Update supported Stores; better sorting
2025-08-18 15:12:58 +02:00
CertainBot
33dfc9e723 Update es.json
Several changes and updates.

Varios cambos y actualizaciones.
2025-08-13 09:56:39 +00:00
CertainBot
ba4cbfad0e Update es.json
Another error corrected

Otro error corregido
2025-08-08 01:09:23 +00:00
CertainBot
ed0b6c0710 Update es.json
Corrected a single error.

Corregido un error.
2025-08-08 00:41:29 +00:00
Imran
e8f9159571 Merge pull request #2455 from ImranR98/dev
Fix "Bad state" bug on mark as updated/installed (#2453)
2025-08-06 18:39:36 -04:00
Imran Remtulla
d8cd17c858 Increment version 2025-08-06 18:38:50 -04:00
Imran
01f423a741 Merge pull request #2447 from ar-lex/bugfix/rustore-charset
RuStore: fix charset detection (#2304)
2025-08-06 18:38:25 -04:00
Imran Remtulla
77e764e76a Fix "Bad state" but on mark as updated/installed (#2453) 2025-08-06 18:37:11 -04:00
Alexey Arutyunov
9524148de7 RuStore: fix charset detection (#2304)
Decode whole response body in bytes and fallback to UTF-8 instead
of auto-decoding individual fields.
2025-08-03 01:45:55 +02:00
42 changed files with 317 additions and 154 deletions

View File

@@ -1,6 +1,7 @@
import java.io.FileInputStream import java.io.FileInputStream
import java.util.Properties import java.util.Properties
import com.android.build.api.variant.FilterConfiguration.FilterType.* import com.android.build.api.variant.FilterConfiguration.FilterType.*
import com.android.build.gradle.internal.api.ApkVariantOutputImpl
plugins { plugins {
id("com.android.application") id("com.android.application")
@@ -86,18 +87,17 @@ android {
val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3)
androidComponents { android.applicationVariants.configureEach {
onVariants { variant -> val variant = this
variant.outputs.forEach { output -> variant.outputs.forEach { output ->
val name = output.filters.find { it.filterType == ABI }?.identifier val abiVersionCode = abiCodes[output.filters.find { it.filterType == "ABI" }?.identifier]
val baseAbiCode = abiCodes[name] ?: 0 if (abiVersionCode != null) {
if (baseAbiCode != null) { (output as ApkVariantOutputImpl).versionCodeOverride = variant.versionCode * 10 + abiVersionCode
output.versionCode.set(baseAbiCode + ((output.versionCode.get() ?: 0) * 10))
}
} }
} }
} }
dependencies { dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
} }

View File

@@ -74,7 +74,6 @@
<uses-permission android:name="android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION" /> <uses-permission android:name="android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" /> <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission android:name="android.permission.ENFORCE_UPDATE_OWNERSHIP"/> <uses-permission android:name="android.permission.ENFORCE_UPDATE_OWNERSHIP"/>
<uses-permission <uses-permission

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "التحقق من علامة 'الأحدث'", "verifyLatestTag": "التحقق من علامة 'الأحدث'",
"intermediateLinkRegex": "تصفية للوصول إلى رابط 'وسيط'", "intermediateLinkRegex": "تصفية للوصول إلى رابط 'وسيط'",
"filterByLinkText": "تصفية الروابط حسب نص الرابط", "filterByLinkText": "تصفية الروابط حسب نص الرابط",
"matchLinksOutsideATags": "تطابق الروابط خارج علامات <a>",
"intermediateLinkNotFound": "لم يتم العثور على رابط وسيط", "intermediateLinkNotFound": "لم يتم العثور على رابط وسيط",
"intermediateLink": "رابط وسيط", "intermediateLink": "رابط وسيط",
"exemptFromBackgroundUpdates": "إعفاء من التحديثات في الخلفية (إذا تم تمكينها)", "exemptFromBackgroundUpdates": "إعفاء من التحديثات في الخلفية (إذا تم تمكينها)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Provjerite 'posljednu' ('latest') oznaku", "verifyLatestTag": "Provjerite 'posljednu' ('latest') oznaku",
"intermediateLinkRegex": "Filter za 'srednju' vezu za posjetu", "intermediateLinkRegex": "Filter za 'srednju' vezu za posjetu",
"filterByLinkText": "Filtriraj linkove prema tekstu linka", "filterByLinkText": "Filtriraj linkove prema tekstu linka",
"matchLinksOutsideATags": "Match links outside <a> tags",
"intermediateLinkNotFound": "Intermediate veza nije nađena", "intermediateLinkNotFound": "Intermediate veza nije nađena",
"intermediateLink": "Intermediate veza", "intermediateLink": "Intermediate veza",
"exemptFromBackgroundUpdates": "Izuzmi iz ažuriranja u pozadini (ako su uključeni)", "exemptFromBackgroundUpdates": "Izuzmi iz ažuriranja u pozadini (ako su uključeni)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Comprova l'etiqueta 'Latest' (última versió)", "verifyLatestTag": "Comprova l'etiqueta 'Latest' (última versió)",
"intermediateLinkRegex": "Filtra per un enllaç 'intermediari' per anar-hi", "intermediateLinkRegex": "Filtra per un enllaç 'intermediari' per anar-hi",
"filterByLinkText": "Filtra els enllaços pel text de l'enllaç", "filterByLinkText": "Filtra els enllaços pel text de l'enllaç",
"matchLinksOutsideATags": "Match links outside <a> tags",
"intermediateLinkNotFound": "No s'ha trobat l'enllaç intermediari", "intermediateLinkNotFound": "No s'ha trobat l'enllaç intermediari",
"intermediateLink": "Enllaç intermediari", "intermediateLink": "Enllaç intermediari",
"exemptFromBackgroundUpdates": "Exempta d'actualitzacions en segon pla (si han estat habilitades)", "exemptFromBackgroundUpdates": "Exempta d'actualitzacions en segon pla (si han estat habilitades)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Ověřit značku „latest“", "verifyLatestTag": "Ověřit značku „latest“",
"intermediateLinkRegex": "Filtr pro návštěvu „prostředního“ odkazu", "intermediateLinkRegex": "Filtr pro návštěvu „prostředního“ odkazu",
"filterByLinkText": "Filtrovat odkazy podle textu odkazu", "filterByLinkText": "Filtrovat odkazy podle textu odkazu",
"matchLinksOutsideATags": "Shoda odkazů mimo značky <a>",
"intermediateLinkNotFound": "Připojený odkaz nenalezen", "intermediateLinkNotFound": "Připojený odkaz nenalezen",
"intermediateLink": "Připojený odkaz", "intermediateLink": "Připojený odkaz",
"exemptFromBackgroundUpdates": "Vyloučit z aktualizací na pozadí (je-li povoleno)", "exemptFromBackgroundUpdates": "Vyloučit z aktualizací na pozadí (je-li povoleno)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Verificer 'seneste'-tagget", "verifyLatestTag": "Verificer 'seneste'-tagget",
"intermediateLinkRegex": "Filtrer efter et 'mellemliggende' link at besøge", "intermediateLinkRegex": "Filtrer efter et 'mellemliggende' link at besøge",
"filterByLinkText": "Filtrer links efter linktekst", "filterByLinkText": "Filtrer links efter linktekst",
"matchLinksOutsideATags": "Match links uden for <a>-tags",
"intermediateLinkNotFound": "Mellemliggende link ikke fundet", "intermediateLinkNotFound": "Mellemliggende link ikke fundet",
"intermediateLink": "Mellemliggende link", "intermediateLink": "Mellemliggende link",
"exemptFromBackgroundUpdates": "Undtag fra baggrundsopdateringer (hvis aktiveret)", "exemptFromBackgroundUpdates": "Undtag fra baggrundsopdateringer (hvis aktiveret)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "„Latest“-Tag überprüfen", "verifyLatestTag": "„Latest“-Tag überprüfen",
"intermediateLinkRegex": "Filter für einen „Zwischen“-Link, der zuerst besucht werden soll", "intermediateLinkRegex": "Filter für einen „Zwischen“-Link, der zuerst besucht werden soll",
"filterByLinkText": "Links durch Linktext filtern", "filterByLinkText": "Links durch Linktext filtern",
"matchLinksOutsideATags": "Links außerhalb von <a>-Tags anpassen",
"intermediateLinkNotFound": "„Zwischen“-Link nicht gefunden", "intermediateLinkNotFound": "„Zwischen“-Link nicht gefunden",
"intermediateLink": "„Zwischen“-Link", "intermediateLink": "„Zwischen“-Link",
"exemptFromBackgroundUpdates": "Von Hintergrundaktualisierungen (falls aktiviert) ausschließen", "exemptFromBackgroundUpdates": "Von Hintergrundaktualisierungen (falls aktiviert) ausschließen",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Inspekti la etikedon 'latest'", "verifyLatestTag": "Inspekti la etikedon 'latest'",
"intermediateLinkRegex": "Filtri por 'pera' vizitota ligilo", "intermediateLinkRegex": "Filtri por 'pera' vizitota ligilo",
"filterByLinkText": "Filtri ligilojn laŭ ligiloteksto", "filterByLinkText": "Filtri ligilojn laŭ ligiloteksto",
"matchLinksOutsideATags": "Match links outside <a> tags",
"intermediateLinkNotFound": "Netrovebla pera ligilo", "intermediateLinkNotFound": "Netrovebla pera ligilo",
"intermediateLink": "Pera ligilo", "intermediateLink": "Pera ligilo",
"exemptFromBackgroundUpdates": "Escepti el la fonaj ĝisdatigoj (se aktiva)", "exemptFromBackgroundUpdates": "Escepti el la fonaj ĝisdatigoj (se aktiva)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Verify the 'latest' tag", "verifyLatestTag": "Verify the 'latest' tag",
"intermediateLinkRegex": "Filter for an 'intermediate' link to visit", "intermediateLinkRegex": "Filter for an 'intermediate' link to visit",
"filterByLinkText": "Filter links by link text", "filterByLinkText": "Filter links by link text",
"matchLinksOutsideATags": "Match links outside <a> tags",
"intermediateLinkNotFound": "Intermediate link not found", "intermediateLinkNotFound": "Intermediate link not found",
"intermediateLink": "Intermediate link", "intermediateLink": "Intermediate link",
"exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)",

View File

@@ -38,7 +38,7 @@
"appAlreadyAdded": "Aplicación añadida anteriormente", "appAlreadyAdded": "Aplicación añadida anteriormente",
"alreadyUpToDateQuestion": "¿Aplicación actualizada previamente?", "alreadyUpToDateQuestion": "¿Aplicación actualizada previamente?",
"addApp": "Añadir aplicación", "addApp": "Añadir aplicación",
"appSourceURL": "URL de origen de la aplicación", "appSourceURL": "URL origen de la aplicación",
"error": "Error", "error": "Error",
"add": "Añadir", "add": "Añadir",
"searchSomeSourcesLabel": "Buscar (solo algunas fuentes)", "searchSomeSourcesLabel": "Buscar (solo algunas fuentes)",
@@ -70,25 +70,25 @@
"markXSelectedAppsAsUpdated": "¿Marcar {} aplicaciones seleccionadas como actualizadas?", "markXSelectedAppsAsUpdated": "¿Marcar {} aplicaciones seleccionadas como actualizadas?",
"no": "No", "no": "No",
"yes": "Sí", "yes": "Sí",
"markSelectedAppsUpdated": "Marcar aplicaciones seleccionadas como actualizadas", "markSelectedAppsUpdated": "Marcar actualizadas las apps seleccionadas",
"pinToTop": "Anclar al principio", "pinToTop": "Anclar al principio",
"unpinFromTop": "Desanclar del principio", "unpinFromTop": "Desanclar del principio",
"resetInstallStatusForSelectedAppsQuestion": "¿Restuarar estado de instalación para las aplicaciones seleccionadas?", "resetInstallStatusForSelectedAppsQuestion": "¿Restuarar estado de instalación para las aplicaciones seleccionadas?",
"installStatusOfXWillBeResetExplanation": "Se restaurará el estado de instalación de las aplicaciones seleccionadas.\n\nEsto puede ser de útil cuando la versión de la aplicación mostrada en Obtainium es incorrecta por actualizaciones fallidas u otros motivos.", "installStatusOfXWillBeResetExplanation": "Se restaurará el estado de instalación de las aplicaciones seleccionadas.\n\nEsto puede ser de útil cuando la versión de la aplicación mostrada en Obtainium es incorrecta por actualizaciones fallidas u otros motivos.",
"customLinkMessage": "Estos enlaces funcionan en dispositivos con Obtainium instalado", "customLinkMessage": "Estos enlaces funcionan en dispositivos con Obtainium instalado",
"shareAppConfigLinks": "Compartir la configuración de la aplicación como enlace HTML", "shareAppConfigLinks": "Compartir configuración de la app como enlace HTML",
"shareSelectedAppURLs": "Compartir URL de las aplicaciones seleccionadas", "shareSelectedAppURLs": "Compartir URL de las apps seleccionadas",
"resetInstallStatus": "Restaurar estado de instalación", "resetInstallStatus": "Restaurar estado de instalación",
"more": "Más", "more": "Más",
"removeOutdatedFilter": "Eliminar filtro de aplicaciones desactualizado", "removeOutdatedFilter": "Eliminar filtro de aplicaciones desactualizado",
"showOutdatedOnly": "Mostrar solo aplicaciones desactualizadas", "showOutdatedOnly": "Mostrar solo aplicaciones desactualizadas",
"filter": "Filtrar", "filter": "Filtrar",
"filterApps": "Filtrar actualizaciones", "filterApps": "Filtrar apps",
"appName": "Nombre de la aplicación", "appName": "Nombre de app",
"author": "Autor", "author": "Autor",
"upToDateApps": "Aplicaciones actualizadas", "upToDateApps": "Aplicaciones actualizadas",
"nonInstalledApps": "Aplicaciones no instaladas", "nonInstalledApps": "Apps no instaladas",
"importExport": "Importar/exportar", "importExport": "Importar/Exportar",
"settings": "Ajustes", "settings": "Ajustes",
"exportedTo": "Exportado a {}", "exportedTo": "Exportado a {}",
"obtainiumExport": "Exportar Obtainium", "obtainiumExport": "Exportar Obtainium",
@@ -115,11 +115,11 @@
"followSystem": "Seguir al sistema", "followSystem": "Seguir al sistema",
"followSystemThemeExplanation": "Seguir el tema del sistema sólo es posible utilizando aplicaciones de terceros", "followSystemThemeExplanation": "Seguir el tema del sistema sólo es posible utilizando aplicaciones de terceros",
"useBlackTheme": "Negro puro en tema oscuro", "useBlackTheme": "Negro puro en tema oscuro",
"appSortBy": "Ordenar aplicaciones por", "appSortBy": "Ordenar apps por",
"authorName": "Autor/nombre", "authorName": "Autor/Nombre",
"nameAuthor": "Nombre/Autor", "nameAuthor": "Nombre/Autor",
"asAdded": "Según se Añadieron", "asAdded": "Según se añadieron",
"appSortOrder": "Orden de Clasificación", "appSortOrder": "Orden",
"ascending": "Ascendente", "ascending": "Ascendente",
"descending": "Descendente", "descending": "Descendente",
"bgUpdateCheckInterval": "Comprobar actualizaciones en segundo plano", "bgUpdateCheckInterval": "Comprobar actualizaciones en segundo plano",
@@ -146,7 +146,7 @@
"updatesAvailableNotifDescription": "Notifica al usuario de que hay actualizaciones para una o más aplicaciones monitoreadas por Obtainium", "updatesAvailableNotifDescription": "Notifica al usuario de que hay actualizaciones para una o más aplicaciones monitoreadas por Obtainium",
"noNewUpdates": "No hay nuevas actualizaciones.", "noNewUpdates": "No hay nuevas actualizaciones.",
"xHasAnUpdate": "{} tiene una actualización.", "xHasAnUpdate": "{} tiene una actualización.",
"appsUpdated": "Aplicaciones actualizadas", "appsUpdated": "Apps actualizadas",
"appsNotUpdated": "Error al actualizar las aplicaciones", "appsNotUpdated": "Error al actualizar las aplicaciones",
"appsUpdatedNotifDescription": "Notifica al usuario de que una o más aplicaciones han sido actualizadas en segundo plano", "appsUpdatedNotifDescription": "Notifica al usuario de que una o más aplicaciones han sido actualizadas en segundo plano",
"xWasUpdatedToY": "{} ha sido actualizada a {}.", "xWasUpdatedToY": "{} ha sido actualizada a {}.",
@@ -174,12 +174,12 @@
"lastUpdateCheckX": "Última comprobación: {}", "lastUpdateCheckX": "Última comprobación: {}",
"remove": "Eliminar", "remove": "Eliminar",
"yesMarkUpdated": "Sí, marcar como actualizada", "yesMarkUpdated": "Sí, marcar como actualizada",
"fdroid": "Repositorio oficial F-Droid", "fdroid": "F-Droid oficial",
"appIdOrName": "ID o Nombre de la Aplicación", "appIdOrName": "ID o Nombre de la Aplicación",
"appId": "ID de la Aplicación", "appId": "ID de la app",
"appWithIdOrNameNotFound": "No se han encontrado aplicaciones con ese ID o nombre", "appWithIdOrNameNotFound": "No se han encontrado aplicaciones con ese ID o nombre",
"reposHaveMultipleApps": "Los repositorios pueden contener varias aplicaciones", "reposHaveMultipleApps": "Los repositorios pueden contener varias aplicaciones",
"fdroidThirdPartyRepo": "Repositorio de terceros F-Droid", "fdroidThirdPartyRepo": "F-Droid terceros",
"install": "Instalar", "install": "Instalar",
"markInstalled": "Marcar como instalada", "markInstalled": "Marcar como instalada",
"update": "Actualizar", "update": "Actualizar",
@@ -211,13 +211,13 @@
"removeFromObtainium": "Eliminar de Obtainium", "removeFromObtainium": "Eliminar de Obtainium",
"uninstallFromDevice": "Desinstalar del dispositivo", "uninstallFromDevice": "Desinstalar del dispositivo",
"onlyWorksWithNonVersionDetectApps": "Solo funciona para aplicaciones con la detección de versiones desactivada.", "onlyWorksWithNonVersionDetectApps": "Solo funciona para aplicaciones con la detección de versiones desactivada.",
"releaseDateAsVersion": "Por fecha de publicación", "releaseDateAsVersion": "Usar fecha de publicación como cadena de versión",
"releaseTitleAsVersion": "Utilizar el título de la versión como cadena de versión", "releaseTitleAsVersion": "Usar título de lanzamiento como cadena de versión",
"releaseDateAsVersionExplanation": "Esta opción solo se debería usar con aplicaciones en las que la detección de versiones no funciona pero hay disponible una fecha de publicación.", "releaseDateAsVersionExplanation": "Esta opción solo se debería usar con aplicaciones en las que la detección de versiones no funciona pero hay disponible una fecha de publicación.",
"changes": "Cambios", "changes": "Cambios",
"releaseDate": "Fecha de publicación", "releaseDate": "Fecha de publicación",
"importFromURLsInFile": "Importar URLs desde archivo (como OPML)", "importFromURLsInFile": "Importar URLs desde archivo (como OPML)",
"versionDetectionExplanation": "Conciliar la cadena de versión con la versión detectada desde el sistema operativo", "versionDetectionExplanation": "Conciliar cadena de versión con versión detectada por el sistema operativo",
"versionDetection": "Detección de versiones", "versionDetection": "Detección de versiones",
"standardVersionDetection": "Por versión", "standardVersionDetection": "Por versión",
"groupByCategory": "Agrupar por categorías", "groupByCategory": "Agrupar por categorías",
@@ -229,7 +229,7 @@
"dontShowAPKOriginWarnings": "No mostrar avisos sobre las fuentes de las APKs", "dontShowAPKOriginWarnings": "No mostrar avisos sobre las fuentes de las APKs",
"moveNonInstalledAppsToBottom": "Mover apps no instaladas al final", "moveNonInstalledAppsToBottom": "Mover apps no instaladas al final",
"gitlabPATLabel": "Token de acceso personal a GitLab", "gitlabPATLabel": "Token de acceso personal a GitLab",
"about": "Acerca", "about": "Acerca de",
"requiresCredentialsInSettings": "{}: Esto requiere credenciales adicionales (en ajustes)", "requiresCredentialsInSettings": "{}: Esto requiere credenciales adicionales (en ajustes)",
"checkOnStart": "Comprobar actualizaciones al inicio", "checkOnStart": "Comprobar actualizaciones al inicio",
"tryInferAppIdFromCode": "Intentar deducir el ID de la app por el código fuente", "tryInferAppIdFromCode": "Intentar deducir el ID de la app por el código fuente",
@@ -251,22 +251,23 @@
"enableBackgroundUpdates": "Habilitar actualizaciones en segundo plano", "enableBackgroundUpdates": "Habilitar actualizaciones en segundo plano",
"backgroundUpdateReqsExplanation": "Las actualizaciones en segundo plano pueden no estar disponibles para todas las aplicaciones.", "backgroundUpdateReqsExplanation": "Las actualizaciones en segundo plano pueden no estar disponibles para todas las aplicaciones.",
"backgroundUpdateLimitsExplanation": "El éxito de las instalaciones en segundo plano solo se puede comprobar con Obtainium abierto.", "backgroundUpdateLimitsExplanation": "El éxito de las instalaciones en segundo plano solo se puede comprobar con Obtainium abierto.",
"verifyLatestTag": "Comprobar la etiqueta 'Latest'", "verifyLatestTag": "Comprobar etiqueta 'Latest'",
"intermediateLinkRegex": "Filtrar por enlace 'intermedio' para visitar primero", "intermediateLinkRegex": "Filtrar por enlace 'intermedio' para visitar primero",
"filterByLinkText": "Filtrar enlaces por texto del enlace", "filterByLinkText": "Filtrar enlaces por texto del enlace",
"matchLinksOutsideATags": "Enlaces coincidentes fuera de las etiquetas <a>",
"intermediateLinkNotFound": "Enlace intermedio no encontrado", "intermediateLinkNotFound": "Enlace intermedio no encontrado",
"intermediateLink": "Enlace intermedio", "intermediateLink": "Enlace intermedio",
"exemptFromBackgroundUpdates": "Exenta de actualizciones en segundo plano (si están habilitadas)", "exemptFromBackgroundUpdates": "No actualizar en segundo plano (si está habilitado)",
"bgUpdatesOnWiFiOnly": "Deshabilitar las actualizaciones en segundo plano sin Wi-Fi", "bgUpdatesOnWiFiOnly": "Deshabilitar las actualizaciones en segundo plano sin Wi-Fi",
"bgUpdatesWhileChargingOnly": "Desactiva las actualizaciones en segundo plano cuando no estés cargando", "bgUpdatesWhileChargingOnly": "Desactiva las actualizaciones en segundo plano cuando no estés cargando",
"autoSelectHighestVersionCode": "Auto selección del paquete APK con versión más reciente", "autoSelectHighestVersionCode": "Auto selección del paquete APK con versión más reciente",
"versionExtractionRegEx": "Versión de extracción RegEx", "versionExtractionRegEx": "Versión de extracción RegEx",
"trimVersionString": "Recortar cadena de versión con RegEx", "trimVersionString": "Recortar cadena de versión con RegEx",
"matchGroupToUseForX": "Grupo de coincidencia a utilizar para \"{}\"", "matchGroupToUseForX": "Grupo de coincidencia a usar para \"{}\"",
"matchGroupToUse": "Grupo a usar para versión de extracción RegEx", "matchGroupToUse": "Grupo a usar para versión de extracción RegEx",
"highlightTouchTargets": "Resaltar objetivos menos obvios", "highlightTouchTargets": "Resaltar objetivos menos obvios",
"pickExportDir": "Directorio para exportar", "pickExportDir": "Directorio para exportar",
"autoExportOnChanges": "Auto exportar cuando haya cambios", "autoExportOnChanges": "Auto exportar si hay cambios",
"includeSettings": "Incluir ajustes", "includeSettings": "Incluir ajustes",
"filterVersionsByRegEx": "Filtrar por versiones", "filterVersionsByRegEx": "Filtrar por versiones",
"trySelectingSuggestedVersionCode": "Pruebe seleccionando la versión del paquete APK sugerida", "trySelectingSuggestedVersionCode": "Pruebe seleccionando la versión del paquete APK sugerida",
@@ -296,11 +297,11 @@
"shizukuBinderNotFound": "Shizuku no funciona", "shizukuBinderNotFound": "Shizuku no funciona",
"shizukuOld": "Versión antigua de Shizuku (<11) - actualícela", "shizukuOld": "Versión antigua de Shizuku (<11) - actualícela",
"shizukuOldAndroidWithADB": "Shizuku corriendo en Android < 8.1 con ADB - actualiza Android o usa Sui en su lugar", "shizukuOldAndroidWithADB": "Shizuku corriendo en Android < 8.1 con ADB - actualiza Android o usa Sui en su lugar",
"shizukuPretendToBeGooglePlay": "Establecer Google Play como fuente de instalación (si se usa Shizuku)", "shizukuPretendToBeGooglePlay": "Usar Google Play como fuente de instalación (si se usa Shizuku)",
"useSystemFont": "Usar fuente del sistema", "useSystemFont": "Usar fuente del sistema",
"useVersionCodeAsOSVersion": "Usar la versión de la aplicación como versión detectada por el sistema operativo", "useVersionCodeAsOSVersion": "Usar versión de la app como versión detectada por el sistema operativo",
"requestHeader": "Encabezado de solicitud", "requestHeader": "Encabezado de solicitud",
"useLatestAssetDateAsReleaseDate": "Usar la última carga del recurso como fecha de lanzamiento", "useLatestAssetDateAsReleaseDate": "Usar última subida del recurso como fecha de lanzamiento",
"defaultPseudoVersioningMethod": "Método de pseudoversionado predeterminado", "defaultPseudoVersioningMethod": "Método de pseudoversionado predeterminado",
"partialAPKHash": "Hash de APK parcial", "partialAPKHash": "Hash de APK parcial",
"APKLinkHash": "Hash de enlace APK", "APKLinkHash": "Hash de enlace APK",
@@ -312,27 +313,27 @@
"note": "Nota", "note": "Nota",
"selfHostedNote": "El desplegable «{}» puede usarse para acceder a instancias autoalojadas/personalizadas de cualquier fuente.", "selfHostedNote": "El desplegable «{}» puede usarse para acceder a instancias autoalojadas/personalizadas de cualquier fuente.",
"badDownload": "No se ha podido analizar el APK (incompatible o descarga parcial)", "badDownload": "No se ha podido analizar el APK (incompatible o descarga parcial)",
"beforeNewInstallsShareToAppVerifier": "Compartir aplicaciones nuevas con AppVerifier (si está instalado)", "beforeNewInstallsShareToAppVerifier": "Compartir apps nuevas con AppVerifier (si está instalado)",
"appVerifierInstructionToast": "Compartir con AppVerifier y vuelver aquí cuando esté listo.", "appVerifierInstructionToast": "Comparta con AppVerifier y vuelva aquí cuando esté listo.",
"wiki": "Ayuda/Wiki", "wiki": "Ayuda/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use bajo su responsabilidad)", "crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use bajo su responsabilidad)",
"crowdsourcedConfigsShort": "Configuración de aplicaciones por crowdsourcing", "crowdsourcedConfigsShort": "Configuración de aplicaciones por crowdsourcing",
"allowInsecure": "Permitir peticiones HTTP inseguras", "allowInsecure": "Permitir peticiones HTTP inseguras",
"stayOneVersionBehind": "Mantenerse una versión por detrás de la última", "stayOneVersionBehind": "Mantenerse una versión por detrás de la última",
"useFirstApkOfVersion": "Auto-selección del primero de múltiples APKs", "useFirstApkOfVersion": "Auto-selección del primero de múltiples APKs",
"refreshBeforeDownload": "Actualiza los datos de la aplicación antes de descargarla", "refreshBeforeDownload": "Actualizar datos de la app antes de descargarla",
"tencentAppStore": "Tencent App Store", "tencentAppStore": "Tencent App Store",
"coolApk": "CoolApk", "coolApk": "CoolApk",
"vivoAppStore": "vivo App Store (CN)", "vivoAppStore": "vivo App Store (CN)",
"name": "Nombre", "name": "Nombre",
"smartname": "Nombre (Smart)", "smartname": "Nombre (Smart)",
"sortMethod": "Método de clasificación", "sortMethod": "Clasificación por",
"welcome": "Bienvenido", "welcome": "Bienvenido",
"documentationLinksNote": "La página GitHub de Obtainium enlazada a continuación contiene enlaces a vídeos, artículos, debates y otros recursos que te ayudarán a entender cómo utilizar la aplicación.", "documentationLinksNote": "La página GitHub de Obtainium enlazada a continuación contiene enlaces a vídeos, artículos, debates y otros recursos que te ayudarán a entender cómo utilizar la aplicación.",
"batteryOptimizationNote": "Ten en cuenta que las descargas en segundo plano pueden funcionar de forma más fiable si desactivas las optimizaciones de batería del sistema operativo para Obtainium.", "batteryOptimizationNote": "Ten en cuenta que las descargas en segundo plano pueden funcionar de forma más fiable si desactivas las optimizaciones de batería del sistema operativo para Obtainium.",
"fileDeletionError": "No se ha podido eliminar el archivo (intente eliminarlo manualmente y vuelva a intentarlo): \"{}\"", "fileDeletionError": "No se ha podido eliminar el archivo (intente eliminarlo manualmente y vuelva a intentarlo): \"{}\"",
"foregroundService": "Obtainium servicio en primer plano", "foregroundService": "Servicio Obtainium en primer plano",
"foregroundServiceExplanation": "Utilizar un servicio en primer plano para comprobar las actualizaciones (más fiable, consume más energía).", "foregroundServiceExplanation": "Usar un servicio en primer plano para comprobar las actualizaciones (más fiable, consume más energía).",
"fgServiceNotice": "Esta notificación es necesaria para la comprobación de actualizaciones en segundo plano (puede ocultarse en la configuración del sistema operativo).", "fgServiceNotice": "Esta notificación es necesaria para la comprobación de actualizaciones en segundo plano (puede ocultarse en la configuración del sistema operativo).",
"excludeSecrets": "Excluir secretos", "excludeSecrets": "Excluir secretos",
"removeAppQuestion": { "removeAppQuestion": {
@@ -352,8 +353,8 @@
"other": "La comprobación de actualizaciones en segundo plano ha encontrado {} actualizaciones; se le notificará si es necesario" "other": "La comprobación de actualizaciones en segundo plano ha encontrado {} actualizaciones; se le notificará si es necesario"
}, },
"apps": { "apps": {
"one": "{} Aplicación", "one": "{} La aplicación",
"other": "{} Aplicaciones" "other": "{} Las aplicaciones"
}, },
"url": { "url": {
"one": "{} URL", "one": "{} URL",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "برچسب \"آخرین\" را تأیید کنید", "verifyLatestTag": "برچسب \"آخرین\" را تأیید کنید",
"intermediateLinkRegex": "برای بازدید از پیوند «میانگین» فیلتر کنید", "intermediateLinkRegex": "برای بازدید از پیوند «میانگین» فیلتر کنید",
"filterByLinkText": "لینک ها را بر اساس متن پیوند فیلتر کنید", "filterByLinkText": "لینک ها را بر اساس متن پیوند فیلتر کنید",
"matchLinksOutsideATags": "Match links outside <a> tags",
"intermediateLinkNotFound": "لینک میانی پیدا نشد", "intermediateLinkNotFound": "لینک میانی پیدا نشد",
"intermediateLink": "پیوند میانی", "intermediateLink": "پیوند میانی",
"exemptFromBackgroundUpdates": "معاف از به‌روزرسانی‌های پس‌زمینه (در صورت فعال بودن)", "exemptFromBackgroundUpdates": "معاف از به‌روزرسانی‌های پس‌زمینه (در صورت فعال بودن)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Vérifier la balise 'latest'", "verifyLatestTag": "Vérifier la balise 'latest'",
"intermediateLinkRegex": "Filtrer un lien 'intermédiaire' à visiter", "intermediateLinkRegex": "Filtrer un lien 'intermédiaire' à visiter",
"filterByLinkText": "Filtrer les liens par texte du lien", "filterByLinkText": "Filtrer les liens par texte du lien",
"matchLinksOutsideATags": "Liens en dehors des balises <a>",
"intermediateLinkNotFound": "Lien intermédiaire introuvable", "intermediateLinkNotFound": "Lien intermédiaire introuvable",
"intermediateLink": "Lien intermédiaire", "intermediateLink": "Lien intermédiaire",
"exemptFromBackgroundUpdates": "Exclure des mises à jour en arrière-plan (si activées)", "exemptFromBackgroundUpdates": "Exclure des mises à jour en arrière-plan (si activées)",

View File

@@ -254,7 +254,8 @@
"verifyLatestTag": "Ellenőrizze a „legújabb” címkét", "verifyLatestTag": "Ellenőrizze a „legújabb” címkét",
"intermediateLinkRegex": "Szűrő egy „köztes” hivatkozás felkereséséhez", "intermediateLinkRegex": "Szűrő egy „köztes” hivatkozás felkereséséhez",
"filterByLinkText": "Hivatkozások szűrése hivatkozásszöveg alapján", "filterByLinkText": "Hivatkozások szűrése hivatkozásszöveg alapján",
"intermediateLinkNotFound": "Köztes hivatkozás nem található", "matchLinksOutsideATags": "Hivatkozások keresése az <a> címkéken kívül is",
"intermediateLinkNotFound": "Nem található köztes hivatkozás",
"intermediateLink": "Köztes hivatkozás", "intermediateLink": "Köztes hivatkozás",
"exemptFromBackgroundUpdates": "Mentes a háttérben történő frissítések alól (ha engedélyezett)", "exemptFromBackgroundUpdates": "Mentes a háttérben történő frissítések alól (ha engedélyezett)",
"bgUpdatesOnWiFiOnly": "Háttérfrissítések letiltása, amikor az eszköz nem csatlakozik a Wi-Fi-hez", "bgUpdatesOnWiFiOnly": "Háttérfrissítések letiltása, amikor az eszköz nem csatlakozik a Wi-Fi-hez",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Verifikasi label 'terbaru'", "verifyLatestTag": "Verifikasi label 'terbaru'",
"intermediateLinkRegex": "Filter tautan 'perantara' untuk dikunjungi", "intermediateLinkRegex": "Filter tautan 'perantara' untuk dikunjungi",
"filterByLinkText": "Filter tautan berdasarkan teks tautan", "filterByLinkText": "Filter tautan berdasarkan teks tautan",
"matchLinksOutsideATags": "Mencocokkan tautan di luar tag <a>",
"intermediateLinkNotFound": "Tautan perantara tidak ditemukan", "intermediateLinkNotFound": "Tautan perantara tidak ditemukan",
"intermediateLink": "Tautan perantara", "intermediateLink": "Tautan perantara",
"exemptFromBackgroundUpdates": "Dikecualikan dari pembaruan latar belakang (jika diaktifkan)", "exemptFromBackgroundUpdates": "Dikecualikan dari pembaruan latar belakang (jika diaktifkan)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Verifica l'etichetta 'Latest'", "verifyLatestTag": "Verifica l'etichetta 'Latest'",
"intermediateLinkRegex": "Filtro per un collegamento 'intermedio' da visitare", "intermediateLinkRegex": "Filtro per un collegamento 'intermedio' da visitare",
"filterByLinkText": "Filtra i collegamenti in base al testo del collegamento", "filterByLinkText": "Filtra i collegamenti in base al testo del collegamento",
"matchLinksOutsideATags": "Corrispondenza dei collegamenti al di fuori dei tag <a>",
"intermediateLinkNotFound": "Link intermedio non trovato", "intermediateLinkNotFound": "Link intermedio non trovato",
"intermediateLink": "Collegamento intermedio", "intermediateLink": "Collegamento intermedio",
"exemptFromBackgroundUpdates": "Esente da aggiornamenti in secondo piano (se attivo)", "exemptFromBackgroundUpdates": "Esente da aggiornamenti in secondo piano (se attivo)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "'latest'タグを確認する", "verifyLatestTag": "'latest'タグを確認する",
"intermediateLinkRegex": "訪問する「中間」リンクのフィルター", "intermediateLinkRegex": "訪問する「中間」リンクのフィルター",
"filterByLinkText": "テキストでリンクをフィルタリングする", "filterByLinkText": "テキストでリンクをフィルタリングする",
"matchLinksOutsideATags": "<a>タグの外にあるリンクに一致させる",
"intermediateLinkNotFound": "中間リンクが見つかりませんでした", "intermediateLinkNotFound": "中間リンクが見つかりませんでした",
"intermediateLink": "中間リンク", "intermediateLink": "中間リンク",
"exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)", "exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)",
@@ -334,7 +335,7 @@
"foregroundService": "Obtainium フォアグラウンドサービス", "foregroundService": "Obtainium フォアグラウンドサービス",
"foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)", "foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)",
"fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要ですOSの設定で非表示にできます。", "fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要ですOSの設定で非表示にできます。",
"excludeSecrets": "秘密を除く", "excludeSecrets": "シークレットを除く",
"removeAppQuestion": { "removeAppQuestion": {
"one": "アプリを削除しますか?", "one": "アプリを削除しますか?",
"other": "アプリを削除しますか?" "other": "アプリを削除しますか?"

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "'최신' 태그 확인", "verifyLatestTag": "'최신' 태그 확인",
"intermediateLinkRegex": "'중간' 링크 방문 필터", "intermediateLinkRegex": "'중간' 링크 방문 필터",
"filterByLinkText": "링크 텍스트로 링크 필터링", "filterByLinkText": "링크 텍스트로 링크 필터링",
"matchLinksOutsideATags": "<> 태그 외부의 링크 일치",
"intermediateLinkNotFound": "중간 링크를 찾을 수 없습니다", "intermediateLinkNotFound": "중간 링크를 찾을 수 없습니다",
"intermediateLink": "중간 링크", "intermediateLink": "중간 링크",
"exemptFromBackgroundUpdates": "백그라운드 업데이트에서 제외 (활성화된 경우)", "exemptFromBackgroundUpdates": "백그라운드 업데이트에서 제외 (활성화된 경우)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "'ഏറ്റവും പുതിയ' ടാഗ് പരിശോധിക്കുക", "verifyLatestTag": "'ഏറ്റവും പുതിയ' ടാഗ് പരിശോധിക്കുക",
"intermediateLinkRegex": "സന്ദർശിക്കാൻ ഒരു 'ഇന്റർമീഡിയറ്റ്' ലിങ്കിനായി ഫിൽട്ടർ ചെയ്യുക", "intermediateLinkRegex": "സന്ദർശിക്കാൻ ഒരു 'ഇന്റർമീഡിയറ്റ്' ലിങ്കിനായി ഫിൽട്ടർ ചെയ്യുക",
"filterByLinkText": "ലിങ്ക് ടെക്സ്റ്റ് ഉപയോഗിച്ച് ലിങ്കുകൾ ഫിൽട്ടർ ചെയ്യുക", "filterByLinkText": "ലിങ്ക് ടെക്സ്റ്റ് ഉപയോഗിച്ച് ലിങ്കുകൾ ഫിൽട്ടർ ചെയ്യുക",
"matchLinksOutsideATags": "Match links outside <a> tags",
"intermediateLinkNotFound": "ഇന്റർമീഡിയറ്റ് ലിങ്ക് കണ്ടെത്തിയില്ല", "intermediateLinkNotFound": "ഇന്റർമീഡിയറ്റ് ലിങ്ക് കണ്ടെത്തിയില്ല",
"intermediateLink": "ഇന്റർമീഡിയറ്റ് ലിങ്ക്", "intermediateLink": "ഇന്റർമീഡിയറ്റ് ലിങ്ക്",
"exemptFromBackgroundUpdates": "ബാക്ക്ഗ്രൗണ്ട് അപ്‌ഡേറ്റുകളിൽ നിന്ന് ഒഴിവാക്കുക (പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ)", "exemptFromBackgroundUpdates": "ബാക്ക്ഗ്രൗണ്ട് അപ്‌ഡേറ്റുകളിൽ നിന്ന് ഒഴിവാക്കുക (പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Het label 'Laatste' verifiëren", "verifyLatestTag": "Het label 'Laatste' verifiëren",
"intermediateLinkRegex": "Filteren op een 'Intermediaire' link om te bezoeken", "intermediateLinkRegex": "Filteren op een 'Intermediaire' link om te bezoeken",
"filterByLinkText": "Links filteren op linktekst", "filterByLinkText": "Links filteren op linktekst",
"matchLinksOutsideATags": "Koppelingen buiten <a>-tags matchen",
"intermediateLinkNotFound": "Intermediaire link niet gevonden", "intermediateLinkNotFound": "Intermediaire link niet gevonden",
"intermediateLink": "Intermediaire link", "intermediateLink": "Intermediaire link",
"exemptFromBackgroundUpdates": "Vrijgesteld van achtergrond-updates (indien ingeschakeld)", "exemptFromBackgroundUpdates": "Vrijgesteld van achtergrond-updates (indien ingeschakeld)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Zweryfikuj najnowszy tag", "verifyLatestTag": "Zweryfikuj najnowszy tag",
"intermediateLinkRegex": "Filtr linków \"pośrednich\" do odwiedzenia w pierwszej kolejności", "intermediateLinkRegex": "Filtr linków \"pośrednich\" do odwiedzenia w pierwszej kolejności",
"filterByLinkText": "Filtruj linki według tekstu linku", "filterByLinkText": "Filtruj linki według tekstu linku",
"matchLinksOutsideATags": "Dopasowywanie linków poza znacznikami <a>",
"intermediateLinkNotFound": "Nie znaleziono linku pośredniego", "intermediateLinkNotFound": "Nie znaleziono linku pośredniego",
"intermediateLink": "Link pośredni", "intermediateLink": "Link pośredni",
"exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)", "exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Verificar a tag 'mais recente'", "verifyLatestTag": "Verificar a tag 'mais recente'",
"intermediateLinkRegex": "Filtrar por um link 'intermediário' para visitar", "intermediateLinkRegex": "Filtrar por um link 'intermediário' para visitar",
"filterByLinkText": "Filtrar links por texto do link", "filterByLinkText": "Filtrar links por texto do link",
"matchLinksOutsideATags": "Corresponder links fora das tags <a>",
"intermediateLinkNotFound": "Link intermediário não encontrado", "intermediateLinkNotFound": "Link intermediário não encontrado",
"intermediateLink": "Link intermediário", "intermediateLink": "Link intermediário",
"exemptFromBackgroundUpdates": "Isento de atualizações em segundo plano (caso ativadas)", "exemptFromBackgroundUpdates": "Isento de atualizações em segundo plano (caso ativadas)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Verifique a 'última' etiqueta", "verifyLatestTag": "Verifique a 'última' etiqueta",
"intermediateLinkRegex": "Filtrar um link 'intermediário' para visitar", "intermediateLinkRegex": "Filtrar um link 'intermediário' para visitar",
"filterByLinkText": "Filtrar links pelo texto do link", "filterByLinkText": "Filtrar links pelo texto do link",
"matchLinksOutsideATags": "Corresponder ligações fora das etiquetas <a>",
"intermediateLinkNotFound": "Link intermediário não encontrado", "intermediateLinkNotFound": "Link intermediário não encontrado",
"intermediateLink": "Link intermediário", "intermediateLink": "Link intermediário",
"exemptFromBackgroundUpdates": "Isento de atualizações em segundo-plano (se ativadas)", "exemptFromBackgroundUpdates": "Isento de atualizações em segundo-plano (se ativadas)",

View File

@@ -253,7 +253,8 @@
"backgroundUpdateLimitsExplanation": "Успешность фоновой установки можно определить только после открытия Obtainium", "backgroundUpdateLimitsExplanation": "Успешность фоновой установки можно определить только после открытия Obtainium",
"verifyLatestTag": "Проверять метку «latest»", "verifyLatestTag": "Проверять метку «latest»",
"intermediateLinkRegex": "Фильтр для «промежуточной» ссылки для посещения", "intermediateLinkRegex": "Фильтр для «промежуточной» ссылки для посещения",
"filterByLinkText": "Фильтрация ссылок по тексту ссылки", "filterByLinkText": "Фильтровать ссылки по тексту ссылки",
"matchLinksOutsideATags": "Сопоставлять ссылки вне тегов <a>",
"intermediateLinkNotFound": "Промежуточная ссылка не найдена", "intermediateLinkNotFound": "Промежуточная ссылка не найдена",
"intermediateLink": "Промежуточная ссылка", "intermediateLink": "Промежуточная ссылка",
"exemptFromBackgroundUpdates": "Исключить из фоновых обновлений (если включено)", "exemptFromBackgroundUpdates": "Исключить из фоновых обновлений (если включено)",

View File

@@ -21,6 +21,7 @@ const neverAutoTranslate = {
obtainiumImport: ['nl'], obtainiumImport: ['nl'],
appLogs: ['nl'], appLogs: ['nl'],
apks: ['vi'], apks: ['vi'],
minute: ['fr'],
tencentAppStore: ['*'] tencentAppStore: ['*']
} }

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Verifiera 'senaste'-taggen", "verifyLatestTag": "Verifiera 'senaste'-taggen",
"intermediateLinkRegex": "Filtrera för en \"mellanliggande\" länk att besöka", "intermediateLinkRegex": "Filtrera för en \"mellanliggande\" länk att besöka",
"filterByLinkText": "Filtrera länkar efter länktext", "filterByLinkText": "Filtrera länkar efter länktext",
"matchLinksOutsideATags": "Matcha länkar utanför <a>-taggar",
"intermediateLinkNotFound": "Mellanlänk hittades inte", "intermediateLinkNotFound": "Mellanlänk hittades inte",
"intermediateLink": "Mellanlänk", "intermediateLink": "Mellanlänk",
"exemptFromBackgroundUpdates": "Undta från bakgrundsuppdateringar (om aktiverad)", "exemptFromBackgroundUpdates": "Undta från bakgrundsuppdateringar (om aktiverad)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "'latest' etiketini doğrula", "verifyLatestTag": "'latest' etiketini doğrula",
"intermediateLinkRegex": "Ziyaret Edilecek 'Orta Düzey' Bağlantıyı Filtrele", "intermediateLinkRegex": "Ziyaret Edilecek 'Orta Düzey' Bağlantıyı Filtrele",
"filterByLinkText": "Bağlantıları bağlantı metnine göre filtrele", "filterByLinkText": "Bağlantıları bağlantı metnine göre filtrele",
"matchLinksOutsideATags": "<a> etiketleri dışındaki bağlantıları eşleştirin",
"intermediateLinkNotFound": "Ara bağlantı bulunamadı", "intermediateLinkNotFound": "Ara bağlantı bulunamadı",
"intermediateLink": "Ara bağlantı", "intermediateLink": "Ara bağlantı",
"exemptFromBackgroundUpdates": "Arka plan güncellemelerinden muaf tut (etkinse)", "exemptFromBackgroundUpdates": "Arka plan güncellemelerinden muaf tut (etkinse)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Перевірити тег 'latest'", "verifyLatestTag": "Перевірити тег 'latest'",
"intermediateLinkRegex": "Фільтр для 'Проміжного' Посилання для Відвідування", "intermediateLinkRegex": "Фільтр для 'Проміжного' Посилання для Відвідування",
"filterByLinkText": "Фільтрувати посилання за текстом посилання", "filterByLinkText": "Фільтрувати посилання за текстом посилання",
"matchLinksOutsideATags": "Зіставлення посилань поза тегами <a>",
"intermediateLinkNotFound": "Проміжне посилання не знайдено", "intermediateLinkNotFound": "Проміжне посилання не знайдено",
"intermediateLink": "Проміжне посилання", "intermediateLink": "Проміжне посилання",
"exemptFromBackgroundUpdates": "Виключено з фонових оновлень (якщо ввімкнено)", "exemptFromBackgroundUpdates": "Виключено з фонових оновлень (якщо ввімкнено)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "Xác minh thẻ 'mới nhất'", "verifyLatestTag": "Xác minh thẻ 'mới nhất'",
"intermediateLinkRegex": "Lọc tìm liên kết 'Trung cấp' để truy cập", "intermediateLinkRegex": "Lọc tìm liên kết 'Trung cấp' để truy cập",
"filterByLinkText": "Lọc liên kết theo văn bản liên kết", "filterByLinkText": "Lọc liên kết theo văn bản liên kết",
"matchLinksOutsideATags": "Khớp các liên kết bên ngoài thẻ <a>",
"intermediateLinkNotFound": "Không tìm thấy liên kết trung gian", "intermediateLinkNotFound": "Không tìm thấy liên kết trung gian",
"intermediateLink": "Liên kết trung gian", "intermediateLink": "Liên kết trung gian",
"exemptFromBackgroundUpdates": "Miễn cập nhật nền (nếu được bật)", "exemptFromBackgroundUpdates": "Miễn cập nhật nền (nếu được bật)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "驗證「最新」標籤", "verifyLatestTag": "驗證「最新」標籤",
"intermediateLinkRegex": "過濾要存取的「中間」連結", "intermediateLinkRegex": "過濾要存取的「中間」連結",
"filterByLinkText": "按連結文字過濾連結", "filterByLinkText": "按連結文字過濾連結",
"matchLinksOutsideATags": "匹配 <a> 標籤外的連結",
"intermediateLinkNotFound": "沒有找到中間連結", "intermediateLinkNotFound": "沒有找到中間連結",
"intermediateLink": "中間連結", "intermediateLink": "中間連結",
"exemptFromBackgroundUpdates": "免除背景更新(若已啟用)", "exemptFromBackgroundUpdates": "免除背景更新(若已啟用)",

View File

@@ -254,6 +254,7 @@
"verifyLatestTag": "验证“Latest”标签", "verifyLatestTag": "验证“Latest”标签",
"intermediateLinkRegex": "筛选中转链接的正则表达式", "intermediateLinkRegex": "筛选中转链接的正则表达式",
"filterByLinkText": "根据链接文本进行筛选", "filterByLinkText": "根据链接文本进行筛选",
"matchLinksOutsideATags": "匹配 <a> 标签外的链接",
"intermediateLinkNotFound": "未找到中转链接", "intermediateLinkNotFound": "未找到中转链接",
"intermediateLink": "中转链接", "intermediateLink": "中转链接",
"exemptFromBackgroundUpdates": "禁用后台更新(仅此应用生效,即使已启用全局后台更新)", "exemptFromBackgroundUpdates": "禁用后台更新(仅此应用生效,即使已启用全局后台更新)",

View File

@@ -4,45 +4,55 @@
<b>Derzeit unterstützte App-Quellen:</b> <b>Derzeit unterstützte App-Quellen:</b>
</p> </p>
<ul> <ul>
<li> <li>Open Source Allgemein:
<p>Open Source Allgemein:</p>
<ul> <ul>
<li>GitHub</li>
<li>GitLab</li>
<li>Forgejo (Codeberg)</li>
<li>F-Droid</li> <li>F-Droid</li>
<li>Third Party F-Droid Repos</li> <li>Third Party F-Droid Repos</li>
<li>Forgejo (Codeberg)</li>
<li>GitHub</li>
<li>GitLab</li>
<li>IzzyOnDroid</li> <li>IzzyOnDroid</li>
<li>SourceHut</li> <li>SourceHut</li>
</ul> </ul>
</li> </li>
<li> <li>Andere Allgemein:
<p>Andere Allgemein:</p>
<ul> <ul>
<li>APKPure</li> <li>alternative Stores</li>
<li>Aptoide</li> <ul>
<li>Uptodown</li> <li>CoolApk</li>
<li>APKMirror (Track-Only)</li> <li>Tencent App Store</li>
<li>Huawei AppGallery</li> <li>RuStore</li>
<li>Tencent App Store</li> </ul>
<li>CoolApk</li> <li>OEM-Stores</li>
<li>vivo App Store (China)</li> <ul>
<li>Huawei AppGallery</li>
<li>vivo App Store (China)</li>
</ul>
<li>Mods</li>
<ul>
<li>Farsroid</li>
</ul>
<li>Reupload-Stores</li>
<ul>
<li>APKMirror (nur Updatebenachrchtigungen; kein APK-Download möglich)</li>
<li>APKPure</li>
<li>Aptoide</li>
<li>Uptodown</li>
</ul>
<li>Jenkins Jobs</li> <li>Jenkins Jobs</li>
<li>RuStore</li>
</ul> </ul>
</li> </li>
<li> <li>Andere - App-Spezifisch:
<p>Andere - App-Spezifisch:</p>
<ul> <ul>
<li>Telegram App</li> <li>Telegram App</li>
<li>Neutron Code</li> <li>Neutron Code</li>
</ul> </ul>
</li> </li>
<li><p>„HTML“ (Fallback): Jede andere URL, die eine HTML-Seite mit Links zu APK-Dateien zurückgibt.</p></li> <li>„HTML“ (Fallback): Jede andere URL, die eine HTML-Seite mit Links zu APK-Dateien zurückgibt.</li>
</ul> </ul>
<p> <p>
<b>Einschränkungen:</b> <b>Einschränkungen:</b>
</p> </p>
<p> <p>
Bei einigen Quellen werden die Daten mit Hilfe von Web Scraping gesammelt und können aufgrund von Änderungen am Design der Website leicht beschädigt werden. In solchen Fällen sind zuverlässigere Methoden nicht verfügbar. Bei einigen Quellen werden die Daten mithilfe von Web Scraping gesammelt und können aufgrund von Änderungen am Design der Website leicht beschädigt werden. In solchen Fällen sind zuverlässigere Methoden nicht verfügbar.
</p> </p>

View File

@@ -32,6 +32,7 @@ class FDroid extends AppSource {
GeneratedFormSwitch( GeneratedFormSwitch(
'trySelectingSuggestedVersionCode', 'trySelectingSuggestedVersionCode',
label: tr('trySelectingSuggestedVersionCode'), label: tr('trySelectingSuggestedVersionCode'),
defaultValue: true,
), ),
], ],
[ [

View File

@@ -29,6 +29,13 @@ class FDroidRepo extends AppSource {
defaultValue: false, defaultValue: false,
), ),
], ],
[
GeneratedFormSwitch(
'trySelectingSuggestedVersionCode',
label: tr('trySelectingSuggestedVersionCode'),
defaultValue: true,
),
],
]; ];
} }
@@ -170,6 +177,7 @@ class FDroidRepo extends AppSource {
} }
standardUrl = removeQueryParamsFromUrl(standardUrl); standardUrl = removeQueryParamsFromUrl(standardUrl);
bool pickHighestVersionCode = additionalSettings['pickHighestVersionCode']; bool pickHighestVersionCode = additionalSettings['pickHighestVersionCode'];
bool trySelectingSuggestedVersionCode = additionalSettings['trySelectingSuggestedVersionCode'];
if (appIdOrName == null) { if (appIdOrName == null) {
throw NoReleasesError(); throw NoReleasesError();
} }
@@ -207,38 +215,58 @@ class FDroidRepo extends AppSource {
foundApps[0].querySelector('name')?.innerHtml ?? appId; foundApps[0].querySelector('name')?.innerHtml ?? appId;
var appName = foundApps[0].querySelector('name')?.innerHtml ?? appId; var appName = foundApps[0].querySelector('name')?.innerHtml ?? appId;
var releases = foundApps[0].querySelectorAll('package'); var releases = foundApps[0].querySelectorAll('package');
if (releases.isEmpty) {
throw NoReleasesError();
}
String? changeLog = foundApps[0].querySelector('changelog')?.innerHtml;
String? latestVersion = releases[0].querySelector('version')?.innerHtml; String? latestVersion = releases[0].querySelector('version')?.innerHtml;
String? added = releases[0].querySelector('added')?.innerHtml;
DateTime? releaseDate = added != null ? DateTime.parse(added) : null;
if (latestVersion == null) { if (latestVersion == null) {
throw NoVersionError(); throw NoVersionError();
} }
var latestVersionReleases = releases String? marketvercodeStr = foundApps[0].querySelector('marketvercode')?.innerHtml;
.where( int? marketvercode = int.tryParse(marketvercodeStr ?? '');
(element) => List selectedReleases = [];
element.querySelector('version')?.innerHtml == latestVersion && if (trySelectingSuggestedVersionCode && marketvercode != null) {
element.querySelector('apkname') != null, selectedReleases = releases.where((e) =>
) int.tryParse(e.querySelector('versioncode')?.innerHtml ?? '') == marketvercode &&
.toList(); e.querySelector('apkname') != null
if (latestVersionReleases.length > 1 && pickHighestVersionCode) { ).toList();
latestVersionReleases.sort((e1, e2) {
return int.parse(
e2.querySelector('versioncode')!.innerHtml,
).compareTo(int.parse(e1.querySelector('versioncode')!.innerHtml));
});
latestVersionReleases = [latestVersionReleases[0]];
} }
List<String> apkUrls = latestVersionReleases String? appAuthorName = foundApps[0].querySelector('author')?.innerHtml;
if (appAuthorName != null) {
authorName = appAuthorName;
}
if (selectedReleases.isEmpty) {
selectedReleases = releases.where((e) =>
e.querySelector('version')?.innerHtml == latestVersion &&
e.querySelector('apkname') != null
).toList();
if (selectedReleases.length > 1 && pickHighestVersionCode) {
selectedReleases.sort((e1, e2) {
return int.parse(e2.querySelector('versioncode')!.innerHtml)
.compareTo(int.parse(e1.querySelector('versioncode')!.innerHtml));
});
selectedReleases = [selectedReleases[0]];
}
}
String? selectedVersion = selectedReleases[0].querySelector('version')?.innerHtml;
if (selectedVersion == null) {
throw NoVersionError();
}
String? added = selectedReleases[0].querySelector('added')?.innerHtml;
DateTime? releaseDate = added != null ? DateTime.parse(added) : null;
List<String> apkUrls = selectedReleases
.map( .map(
(e) => (e) =>
'${res.request!.url.toString().split('/').reversed.toList().sublist(1).reversed.join('/')}/${e.querySelector('apkname')!.innerHtml}', '${res.request!.url.toString().split('/').reversed.toList().sublist(1).reversed.join('/')}/${e.querySelector('apkname')!.innerHtml}',
) )
.toList(); .toList();
return APKDetails( return APKDetails(
latestVersion, selectedVersion,
getApkUrlsFromUrls(apkUrls), getApkUrlsFromUrls(apkUrls),
AppNames(authorName, appName), AppNames(authorName, appName),
releaseDate: releaseDate, releaseDate: releaseDate,
changeLog: changeLog,
); );
} else { } else {
throw getObtainiumHttpError(res); throw getObtainiumHttpError(res);

View File

@@ -129,6 +129,8 @@ Future<List<MapEntry<String, String>>> grabLinksCommon(
Uri reqUrl, Uri reqUrl,
Map<String, dynamic> additionalSettings, Map<String, dynamic> additionalSettings,
) async { ) async {
bool matchLinksOutsideATags =
additionalSettings['matchLinksOutsideATags'] == true;
var html = parse(rawBody); var html = parse(rawBody);
List<MapEntry<String, String>> allLinks = html List<MapEntry<String, String>> allLinks = html
.querySelectorAll('a') .querySelectorAll('a')
@@ -143,7 +145,7 @@ Future<List<MapEntry<String, String>>> grabLinksCommon(
.where((element) => element.key.isNotEmpty) .where((element) => element.key.isNotEmpty)
.map((e) => MapEntry(ensureAbsoluteUrl(e.key, reqUrl), e.value)) .map((e) => MapEntry(ensureAbsoluteUrl(e.key, reqUrl), e.value))
.toList(); .toList();
if (allLinks.isEmpty) { if (allLinks.isEmpty || matchLinksOutsideATags) {
allLinks = getLinksInLines(rawBody); allLinks = getLinksInLines(rawBody);
} }
if (allLinks.isEmpty) { if (allLinks.isEmpty) {
@@ -247,6 +249,12 @@ class HTML extends AppSource {
]; ];
var commonFormItems = [ var commonFormItems = [
[GeneratedFormSwitch('filterByLinkText', label: tr('filterByLinkText'))], [GeneratedFormSwitch('filterByLinkText', label: tr('filterByLinkText'))],
[
GeneratedFormSwitch(
'matchLinksOutsideATags',
label: tr('matchLinksOutsideATags')
),
],
[GeneratedFormSwitch('skipSort', label: tr('skipSort'))], [GeneratedFormSwitch('skipSort', label: tr('skipSort'))],
[GeneratedFormSwitch('reverseSort', label: tr('takeFirstLink'))], [GeneratedFormSwitch('reverseSort', label: tr('takeFirstLink'))],
[ [

View File

@@ -0,0 +1,87 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/providers/source_provider.dart';
class LiteAPKs extends AppSource {
LiteAPKs() {
hosts = ['liteapks.com'];
name = 'LiteAPKs';
}
@override
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/+[^/]+',
caseSensitive: false,
);
RegExpMatch? match = standardUrlRegEx.firstMatch(url);
if (match == null) {
throw InvalidURLError(name);
}
return match.group(0)!;
}
@override
Future<APKDetails> getLatestAPKDetails(
String standardUrl,
Map<String, dynamic> additionalSettings,
) async {
var standardUri = Uri.parse(standardUrl);
var slug = standardUri.path
.split('.')
.reversed
.toList()
.sublist(1)
.reversed
.join('.');
Response res1 = await sourceRequest(
'${standardUri.origin}/wp-json/wp/v2/posts?slug=$slug',
additionalSettings,
);
if (res1.statusCode != 200) {
throw getObtainiumHttpError(res1);
}
var liteAppId = jsonDecode(res1.body)[0]['id'];
if (liteAppId == null) {
throw NoReleasesError();
}
Response res2 = await sourceRequest(
'${standardUri.origin}/wp-json/v2/posts/$liteAppId',
additionalSettings,
);
if (res2.statusCode != 200) {
throw getObtainiumHttpError(res2);
}
var json = jsonDecode(res2.body);
var appName = json['data']?['title'] as String?;
var author = json['data']?['publisher'] as String?;
var version = json['data']?['versions']?[0]?['version'] as String?;
if (version == null) {
throw NoVersionError();
}
var apkUrls =
((json['data']?['versions']?[0]?['version_downloads'] as List<dynamic>?)
?.map((l) => l['version_download_link']) ??
[])
.map(
(l) => MapEntry<String, String>(
Uri.decodeComponent(Uri.parse(l).pathSegments.last),
l,
),
)
.toList();
return APKDetails(
version,
apkUrls,
AppNames(
author ?? Uri.parse(standardUrl).host,
appName ?? standardUrl.split('/').last,
),
);
}
}

View File

@@ -36,13 +36,15 @@ class RuStore extends AppSource {
return Uri.parse(standardUrl).pathSegments.last; return Uri.parse(standardUrl).pathSegments.last;
} }
Future<String> decodeString(String str) async { Future<dynamic> decodeJsonBody(Uint8List bytes) async {
try { try {
return (await CharsetDetector.autoDecode( return jsonDecode((await CharsetDetector.autoDecode(bytes)).string);
Uint8List.fromList(str.codeUnits),
)).string;
} catch (e) { } catch (e) {
return str; try {
return jsonDecode(utf8.decode(bytes));
} catch (_) {
rethrow;
}
} }
} }
@@ -59,7 +61,7 @@ class RuStore extends AppSource {
if (res0.statusCode != 200) { if (res0.statusCode != 200) {
throw getObtainiumHttpError(res0); throw getObtainiumHttpError(res0);
} }
var appDetails = jsonDecode(res0.body)['body']; var appDetails = (await decodeJsonBody(res0.bodyBytes))['body'];
if (appDetails['appId'] == null) { if (appDetails['appId'] == null) {
throw NoReleasesError(); throw NoReleasesError();
} }
@@ -83,15 +85,11 @@ class RuStore extends AppSource {
followRedirects: false, followRedirects: false,
postBody: {"appId": appDetails['appId'], "firstInstall": true}, postBody: {"appId": appDetails['appId'], "firstInstall": true},
); );
var downloadDetails = jsonDecode(res1.body)['body']; var downloadDetails = (await decodeJsonBody(res1.bodyBytes))['body'];
if (res1.statusCode != 200 || downloadDetails['apkUrl'] == null) { if (res1.statusCode != 200 || downloadDetails['apkUrl'] == null) {
throw NoAPKError(); throw NoAPKError();
} }
appName = await decodeString(appName);
author = await decodeString(author);
changeLog = changeLog != null ? await decodeString(changeLog) : null;
return APKDetails( return APKDetails(
version, version,
getApkUrlsFromUrls([ getApkUrlsFromUrls([

View File

@@ -1084,7 +1084,8 @@ class AppsProvider with ChangeNotifier {
var trackOnly = apps[id]!.app.additionalSettings['trackOnly'] == true; var trackOnly = apps[id]!.app.additionalSettings['trackOnly'] == true;
var refreshBeforeDownload = var refreshBeforeDownload =
apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true || apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true ||
apps[id]!.app.apkUrls.first.value == 'placeholder'; apps[id]!.app.apkUrls.isNotEmpty &&
apps[id]!.app.apkUrls.first.value == 'placeholder';
if (refreshBeforeDownload) { if (refreshBeforeDownload) {
await checkUpdate(apps[id]!.app.id); await checkUpdate(apps[id]!.app.id);
} }

View File

@@ -25,6 +25,7 @@ import 'package:obtainium/app_sources/huaweiappgallery.dart';
import 'package:obtainium/app_sources/izzyondroid.dart'; import 'package:obtainium/app_sources/izzyondroid.dart';
import 'package:obtainium/app_sources/html.dart'; import 'package:obtainium/app_sources/html.dart';
import 'package:obtainium/app_sources/jenkins.dart'; import 'package:obtainium/app_sources/jenkins.dart';
import 'package:obtainium/app_sources/liteapks.dart';
import 'package:obtainium/app_sources/neutroncode.dart'; import 'package:obtainium/app_sources/neutroncode.dart';
import 'package:obtainium/app_sources/rustore.dart'; import 'package:obtainium/app_sources/rustore.dart';
import 'package:obtainium/app_sources/sourceforge.dart'; import 'package:obtainium/app_sources/sourceforge.dart';
@@ -1076,6 +1077,7 @@ class SourceProvider {
HuaweiAppGallery(), HuaweiAppGallery(),
Tencent(), Tencent(),
CoolApk(), CoolApk(),
LiteAPKs(),
VivoAppStore(), VivoAppStore(),
Jenkins(), Jenkins(),
APKMirror(), APKMirror(),

View File

@@ -5,10 +5,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: android_intent_plus name: android_intent_plus
sha256: dfc1fd3a577205ae8f11e990fb4ece8c90cceabbee56fcf48e463ecf0bd6aae3 sha256: "2329378af63f49b985cb2e110ac784d08374f1e2b1984be77ba9325b1c8cce11"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.3.0" version: "5.3.1"
android_package_installer: android_package_installer:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -48,10 +48,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: app_links name: app_links
sha256: "85ed8fc1d25a76475914fff28cc994653bd900bc2c26e4b57a49e097febb54ba" sha256: "5f88447519add627fe1cbcab4fd1da3d4fed15b9baf29f28b22535c95ecee3e8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.4.0" version: "6.4.1"
app_links_linux: app_links_linux:
dependency: transitive dependency: transitive
description: description:
@@ -104,10 +104,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: battery_plus name: battery_plus
sha256: fb794c34cee2e4ea31005fb17ff15e1d904951ec7f15eedead741021870ee834 sha256: "03d5a6bb36db9d2b977c548f6b0262d5a84c4d5a4cfee2edac4a91d57011b365"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.2" version: "6.2.3"
battery_plus_platform_interface: battery_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -160,10 +160,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: connectivity_plus name: connectivity_plus
sha256: "051849e2bd7c7b3bc5844ea0d096609ddc3a859890ec3a9ac4a65a2620cc1f99" sha256: b5e72753cf63becce2c61fd04dfe0f1c430cc5278b53a1342dc5ad839eab29ec
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.4" version: "6.1.5"
connectivity_plus_platform_interface: connectivity_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -232,10 +232,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: dynamic_color name: dynamic_color
sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d sha256: "43a5a6679649a7731ab860334a5812f2067c2d9ce6452cf069c5e0c25336c17c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.7.0" version: "1.8.1"
easy_localization: easy_localization:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -288,10 +288,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: file_picker name: file_picker
sha256: "13ba4e627ef24503a465d1d61b32596ce10eb6b8903678d362a528f9939b4aa8" sha256: f2d9f173c2c14635cc0e9b14c143c49ef30b4934e8d1d274d6206fcb0086a06f
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.2.1" version: "10.3.3"
fixnum: fixnum:
dependency: transitive dependency: transitive
description: description:
@@ -482,10 +482,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.28" version: "2.0.30"
flutter_test: flutter_test:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -548,10 +548,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: http name: http
sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.5.0"
http_parser: http_parser:
dependency: transitive dependency: transitive
description: description:
@@ -572,26 +572,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.9" version: "11.0.2"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.9" version: "3.0.10"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_testing name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "3.0.2"
lints: lints:
dependency: transitive dependency: transitive
description: description:
@@ -676,18 +676,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider_android name: path_provider_android
sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.17" version: "2.2.18"
path_provider_foundation: path_provider_foundation:
dependency: transitive dependency: transitive
description: description:
name: path_provider_foundation name: path_provider_foundation
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.1" version: "2.4.2"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
@@ -820,26 +820,26 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: provider name: provider
sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.5" version: "6.1.5+1"
share_plus: share_plus:
dependency: "direct main" dependency: "direct main"
description: description:
name: share_plus name: share_plus
sha256: b2961506569e28948d75ec346c28775bb111986bb69dc6a20754a457e3d97fa0 sha256: d7dc0630a923883c6328ca31b89aa682bacbf2f8304162d29f7c6aaff03a27a1
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "11.0.0" version: "11.1.0"
share_plus_platform_interface: share_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: share_plus_platform_interface name: share_plus_platform_interface
sha256: "1032d392bc5d2095a77447a805aa3f804d2ae6a4d5eef5e6ebb3bd94c1bc19ef" sha256: "88023e53a13429bd65d8e85e11a9b484f49d4c190abbd96c7932b74d6927cc9a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.0.0" version: "6.1.0"
shared_preferences: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -852,10 +852,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_android name: shared_preferences_android
sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" sha256: a2608114b1ffdcbc9c120eb71a0e207c71da56202852d4aab8a5e30a82269e74
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.10" version: "2.4.12"
shared_preferences_foundation: shared_preferences_foundation:
dependency: transitive dependency: transitive
description: description:
@@ -947,10 +947,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: sqflite_android name: sqflite_android
sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b" sha256: ecd684501ebc2ae9a83536e8b15731642b9570dc8623e0073d227d0ee2bfea88
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.1" version: "2.4.2+2"
sqflite_common: sqflite_common:
dependency: transitive dependency: transitive
description: description:
@@ -1019,10 +1019,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.4" version: "0.7.6"
timezone: timezone:
dependency: transitive dependency: transitive
description: description:
@@ -1059,18 +1059,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_android name: url_launcher_android
sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" sha256: "07cffecb7d68cbc6437cd803d5f11a86fe06736735c3dfe46ff73bcb0f958eed"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.16" version: "6.3.21"
url_launcher_ios: url_launcher_ios:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_ios name: url_launcher_ios
sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.3" version: "6.3.4"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
@@ -1083,10 +1083,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_macos name: url_launcher_macos
sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.2.2" version: "3.2.3"
url_launcher_platform_interface: url_launcher_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -1123,18 +1123,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vector_math name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.2.0"
vm_service: vm_service:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "15.0.0" version: "15.0.2"
web: web:
dependency: transitive dependency: transitive
description: description:
@@ -1155,10 +1155,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_android name: webview_flutter_android
sha256: "9573ad97890d199ac3ab32399aa33a5412163b37feb573eb5b0a76b35e9ffe41" sha256: "3c4eb4fcc252b40c2b5ce7be20d0481428b70f3ff589b0a8b8aaeb64c6bed701"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.8.2" version: "4.10.2"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -1171,10 +1171,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_wkwebview name: webview_flutter_wkwebview
sha256: "71523b9048cf510cfa1fd4e0a3fa5e476a66e0884d5df51d59d5023dba237107" sha256: fb46db8216131a3e55bcf44040ca808423539bc6732e7ed34fb6d8044e3d512f
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.22.1" version: "3.23.0"
win32: win32:
dependency: transitive dependency: transitive
description: description:
@@ -1208,5 +1208,5 @@ packages:
source: hosted source: hosted
version: "6.3.0" version: "6.3.0"
sdks: sdks:
dart: ">=3.8.1 <4.0.0" dart: ">=3.9.0 <4.0.0"
flutter: ">=3.29.0" flutter: ">=3.35.0"

View File

@@ -16,7 +16,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: 1.2.2+2318 version: 1.2.4+2320
environment: environment:
sdk: ^3.8.1 sdk: ^3.8.1