mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-25 03:43:46 +02:00 
			
		
		
		
	Compare commits
	
		
			12 Commits
		
	
	
		
			v1.1.55
			...
			f6587ae8da
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | f6587ae8da | ||
|  | 0a30bf6d8e | ||
|  | 8bec3cf053 | ||
|  | 43efc044d7 | ||
|  | 63e71624f9 | ||
|  | 3edaa143e4 | ||
|  | 798bddd17f | ||
|  | 4f27e25a23 | ||
|  | a2a1f48310 | ||
|  | c246548436 | ||
|  | f67cfeb231 | ||
|  | 9758f8b391 | 
							
								
								
									
										2
									
								
								.flutter
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								.flutter
									
									
									
									
									
								
							 Submodule .flutter updated: ea121f8859...b25305a883
									
								
							
							
								
								
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -20,7 +20,7 @@ jobs: | ||||
|       - uses: actions/setup-java@v4 | ||||
|         with: | ||||
|           distribution: 'temurin' # See 'Supported distributions' for available options | ||||
|           java-version: '17' | ||||
|           java-version: '21' | ||||
|  | ||||
|       - name: Flutter Doctor | ||||
|         id: flutter_doctor | ||||
| @@ -44,7 +44,7 @@ jobs: | ||||
|  | ||||
|       - name: Build APKs | ||||
|         run: | | ||||
|           sed -i 's/signingConfig signingConfigs.release//g' android/app/build.gradle | ||||
|           sed -i 's/signingConfig = signingConfigs.getByName("release")//g' android/app/build.gradle.kts | ||||
|           flutter build apk --flavor normal && flutter build apk --split-per-abi --flavor normal | ||||
|           for file in build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done | ||||
|           flutter build apk --flavor fdroid -t lib/main_fdroid.dart && flutter build apk --split-per-abi --flavor fdroid -t lib/main_fdroid.dart | ||||
|   | ||||
| @@ -1,105 +0,0 @@ | ||||
| plugins { | ||||
|     id "com.android.application" | ||||
|     id "kotlin-android" | ||||
|     // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. | ||||
|     id "dev.flutter.flutter-gradle-plugin" | ||||
| } | ||||
|  | ||||
| def localProperties = new Properties() | ||||
| def localPropertiesFile = rootProject.file('local.properties') | ||||
| if (localPropertiesFile.exists()) { | ||||
|     localPropertiesFile.withReader('UTF-8') { reader -> | ||||
|         localProperties.load(reader) | ||||
|     } | ||||
| } | ||||
|  | ||||
| def flutterVersionCode = localProperties.getProperty('flutter.versionCode') | ||||
| if (flutterVersionCode == null) { | ||||
|     flutterVersionCode = '1' | ||||
| } | ||||
|  | ||||
| def flutterVersionName = localProperties.getProperty('flutter.versionName') | ||||
| if (flutterVersionName == null) { | ||||
|     flutterVersionName = '1.0' | ||||
| } | ||||
|  | ||||
| def keystoreProperties = new Properties() | ||||
| def keystorePropertiesFile = rootProject.file('key.properties') | ||||
| if (keystorePropertiesFile.exists()) { | ||||
|     keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) | ||||
| } | ||||
|  | ||||
| android { | ||||
|     namespace = "dev.imranr.obtainium" | ||||
|     compileSdk = flutter.compileSdkVersion | ||||
|     ndkVersion = flutter.ndkVersion | ||||
|  | ||||
|     compileOptions { | ||||
|         sourceCompatibility = JavaVersion.VERSION_1_8 | ||||
|         targetCompatibility = JavaVersion.VERSION_1_8 | ||||
|     } | ||||
|  | ||||
|     kotlinOptions { | ||||
|         jvmTarget = JavaVersion.VERSION_1_8 | ||||
|     } | ||||
|  | ||||
|     defaultConfig { | ||||
|         // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). | ||||
|         applicationId = "dev.imranr.obtainium" | ||||
|         // You can update the following values to match your application needs. | ||||
|         // For more information, see: https://flutter.dev/to/review-gradle-config. | ||||
|         minSdk = 24 | ||||
|         targetSdk = flutter.targetSdkVersion | ||||
|         versionCode = flutter.versionCode | ||||
|         versionName = flutter.versionName | ||||
|     } | ||||
|  | ||||
|     flavorDimensions "flavor" | ||||
|  | ||||
|     productFlavors { | ||||
|         normal { | ||||
|             dimension "flavor" | ||||
|             applicationIdSuffix "" | ||||
|         } | ||||
|         fdroid { | ||||
|             dimension "flavor" | ||||
|             applicationIdSuffix ".fdroid" | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     signingConfigs { | ||||
|         release { | ||||
|             keyAlias keystoreProperties['keyAlias'] | ||||
|             keyPassword keystoreProperties['keyPassword'] | ||||
|             storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null | ||||
|             storePassword keystoreProperties['storePassword'] | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     buildTypes { | ||||
|         release { | ||||
|             signingConfig signingConfigs.release | ||||
|         } | ||||
|         debug { | ||||
|             applicationIdSuffix = ".debug" | ||||
|             versionNameSuffix = "-debug" | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| flutter { | ||||
|     source = "../.." | ||||
| } | ||||
|  | ||||
| ext.abiCodes = ["x86_64": 1, "armeabi-v7a": 2, "arm64-v8a": 3] | ||||
| import com.android.build.OutputFile | ||||
| android.applicationVariants.all { variant -> | ||||
|     variant.outputs.each { output -> | ||||
|         def abiVersionCode = project.ext.abiCodes.get(output.getFilter(OutputFile.ABI)) | ||||
|         if (abiVersionCode != null) { | ||||
|             output.versionCodeOverride = variant.versionCode * 10 + abiVersionCode | ||||
|         } else { | ||||
|             output.versionCodeOverride = variant.versionCode * 10 | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										107
									
								
								android/app/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								android/app/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| import java.io.FileInputStream | ||||
| import java.util.Properties | ||||
| import com.android.build.api.variant.FilterConfiguration.FilterType.* | ||||
|  | ||||
| plugins { | ||||
|     id("com.android.application") | ||||
|     id("kotlin-android") | ||||
|     // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. | ||||
|     id("dev.flutter.flutter-gradle-plugin") | ||||
| } | ||||
|  | ||||
| val localProperties = Properties() | ||||
| val localPropertiesFile = rootProject.file("local.properties") | ||||
| if (localPropertiesFile.exists()) { | ||||
|     localPropertiesFile.reader(Charsets.UTF_8).use { reader -> | ||||
|         localProperties.load(reader) | ||||
|     } | ||||
| } | ||||
|  | ||||
| var flutterVersionCode = localProperties.getProperty("flutter.versionCode") ?: "1" | ||||
| var flutterVersionName = localProperties.getProperty("flutter.versionName") ?: "1.0" | ||||
|  | ||||
| val keystoreProperties = Properties() | ||||
| val keystorePropertiesFile = rootProject.file("key.properties") | ||||
| if (keystorePropertiesFile.exists()) { | ||||
|     keystoreProperties.load(FileInputStream(keystorePropertiesFile)) | ||||
| } | ||||
|  | ||||
| android { | ||||
|     namespace = "dev.imranr.obtainium" | ||||
|     compileSdk = flutter.compileSdkVersion | ||||
|     ndkVersion = "27.0.12077973" // 'flutter.ndkVersion' produces warnings (TODO can/should we switch back?) | ||||
|  | ||||
|     compileOptions { | ||||
|         isCoreLibraryDesugaringEnabled = true | ||||
|         sourceCompatibility = JavaVersion.VERSION_11 | ||||
|         targetCompatibility = JavaVersion.VERSION_11 | ||||
|     } | ||||
|  | ||||
|     kotlinOptions { | ||||
|         jvmTarget = JavaVersion.VERSION_11.toString() | ||||
|     } | ||||
|  | ||||
|     defaultConfig { | ||||
|         applicationId = "dev.imranr.obtainium" | ||||
|         // You can update the following values to match your application needs. | ||||
|         // For more information, see: https://flutter.dev/to/review-gradle-config. | ||||
|         minSdk = 24 | ||||
|         targetSdk = flutter.targetSdkVersion | ||||
|         versionCode = flutterVersionCode.toInt() | ||||
|         versionName = flutterVersionName | ||||
|     } | ||||
|  | ||||
|     flavorDimensions("flavor") | ||||
|  | ||||
|     productFlavors { | ||||
|         create("normal") { | ||||
|             dimension = "flavor" | ||||
|             applicationIdSuffix = "" | ||||
|         } | ||||
|         create("fdroid") { | ||||
|             dimension = "flavor" | ||||
|             applicationIdSuffix = ".fdroid" | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     signingConfigs { | ||||
|         create("release") { | ||||
|             keyAlias = keystoreProperties["keyAlias"].toString() | ||||
|             keyPassword = keystoreProperties["keyPassword"].toString() | ||||
|             storeFile = keystoreProperties["storeFile"]?.let { file(it) } | ||||
|             storePassword = keystoreProperties["storePassword"].toString() | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     buildTypes { | ||||
|         getByName("release") { | ||||
|             signingConfig = signingConfigs.getByName("release") | ||||
|         } | ||||
|         getByName("debug") { | ||||
|             applicationIdSuffix = ".debug" | ||||
|             versionNameSuffix = "-debug" | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) | ||||
|  | ||||
| androidComponents { | ||||
|     onVariants { variant -> | ||||
|         variant.outputs.forEach { output -> | ||||
|             val name = output.filters.find { it.filterType == ABI }?.identifier | ||||
|             val baseAbiCode = abiCodes[name] | ||||
|             if (baseAbiCode != null) { | ||||
|                 output.versionCode.set(baseAbiCode + ((output.versionCode.get() ?: 0) * 10)) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
|     coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") | ||||
| } | ||||
|  | ||||
| flutter { | ||||
|     source = "../.." | ||||
| } | ||||
| @@ -2,4 +2,4 @@ package dev.imranr.obtainium | ||||
|  | ||||
| import io.flutter.embedding.android.FlutterActivity | ||||
|  | ||||
| class MainActivity: FlutterActivity() | ||||
| class MainActivity : FlutterActivity() | ||||
|   | ||||
| @@ -1,22 +0,0 @@ | ||||
| allprojects { | ||||
|     repositories { | ||||
|         google() | ||||
|         mavenCentral() | ||||
|         maven { | ||||
|             // [required] background_fetch | ||||
|             url "${project(':background_fetch').projectDir}/libs" | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| rootProject.buildDir = "../build" | ||||
| subprojects { | ||||
|     project.buildDir = "${rootProject.buildDir}/${project.name}" | ||||
| } | ||||
| subprojects { | ||||
|     project.evaluationDependsOn(":app") | ||||
| } | ||||
|  | ||||
| tasks.register("clean", Delete) { | ||||
|     delete rootProject.buildDir | ||||
| } | ||||
							
								
								
									
										25
									
								
								android/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								android/build.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| allprojects { | ||||
|     repositories { | ||||
|         google() | ||||
|         mavenCentral() | ||||
|         maven { | ||||
|             // [required] background_fetch | ||||
|             url = uri("${project(":background_fetch").projectDir}/libs") | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() | ||||
| rootProject.layout.buildDirectory.value(newBuildDir) | ||||
|  | ||||
| subprojects { | ||||
|     val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) | ||||
|     project.layout.buildDirectory.value(newSubprojectBuildDir) | ||||
| } | ||||
| subprojects { | ||||
|     project.evaluationDependsOn(":app") | ||||
| } | ||||
|  | ||||
| tasks.register<Delete>("clean") { | ||||
|     delete(rootProject.layout.buildDirectory) | ||||
| } | ||||
| @@ -1,3 +1,3 @@ | ||||
| org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError | ||||
| org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError | ||||
| android.useAndroidX=true | ||||
| android.enableJetifier=true | ||||
|   | ||||
| @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip | ||||
|   | ||||
| @@ -1,25 +0,0 @@ | ||||
| pluginManagement { | ||||
|     def flutterSdkPath = { | ||||
|         def properties = new Properties() | ||||
|         file("local.properties").withInputStream { properties.load(it) } | ||||
|         def flutterSdkPath = properties.getProperty("flutter.sdk") | ||||
|         assert flutterSdkPath != null, "flutter.sdk not set in local.properties" | ||||
|         return flutterSdkPath | ||||
|     }() | ||||
|  | ||||
|     includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") | ||||
|  | ||||
|     repositories { | ||||
|         google() | ||||
|         mavenCentral() | ||||
|         gradlePluginPortal() | ||||
|     } | ||||
| } | ||||
|  | ||||
| plugins { | ||||
|     id "dev.flutter.flutter-plugin-loader" version "1.0.0" | ||||
|     id "com.android.application" version "8.1.0" apply false | ||||
|     id "org.jetbrains.kotlin.android" version "2.1.21" apply false | ||||
| } | ||||
|  | ||||
| include ":app" | ||||
							
								
								
									
										25
									
								
								android/settings.gradle.kts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								android/settings.gradle.kts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| pluginManagement { | ||||
|     val flutterSdkPath = run { | ||||
|         val properties = java.util.Properties() | ||||
|         file("local.properties").inputStream().use { properties.load(it) } | ||||
|         val flutterSdkPath = properties.getProperty("flutter.sdk") | ||||
|         require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } | ||||
|         flutterSdkPath | ||||
|     } | ||||
|  | ||||
|     includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") | ||||
|  | ||||
|     repositories { | ||||
|         google() | ||||
|         mavenCentral() | ||||
|         gradlePluginPortal() | ||||
|     } | ||||
| } | ||||
|  | ||||
| plugins { | ||||
|     id("dev.flutter.flutter-plugin-loader") version "1.0.0" | ||||
|     id("com.android.application") version "8.7.3" apply false | ||||
|     id("org.jetbrains.kotlin.android") version "2.1.0" apply false | ||||
| } | ||||
|  | ||||
| include(":app") | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "مرحبًا", | ||||
|     "documentationLinksNote": "تحتوي صفحة Obtainium على GitHub المرتبطة أدناه على روابط لمقاطع فيديو، مقالات، مناقشات وموارد أخرى ستساعدك على فهم كيفية استخدام التطبيق.", | ||||
|     "batteryOptimizationNote": "لاحظ أن التنزيلات في الخلفية قد تعمل بشكل أكثر موثوقية إذا قمت بتعطيل تحسينات بطارية النظام لـ Obtainium.", | ||||
|     "fileDeletionError": "فشل حذف الملف (حاول حذفه يدويًا ثم حاول مرة أخرى): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "إزالة التطبيق؟", | ||||
|         "other": "إزالة التطبيقات؟" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Welcome", | ||||
|     "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", | ||||
|     "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", | ||||
|     "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Želite li ukloniti aplikaciju?", | ||||
|         "other": "Želite li ukloniti aplikacije?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Benvinguda", | ||||
|     "documentationLinksNote": "La pàgina GitHub d'Obtainium enllaçada a sota conté enllaços a vídeos, articles, debats i altres recursos que t'ajudaran a entendre com usar l'aplicació.", | ||||
|     "batteryOptimizationNote": "Tingues present que les descàrregues en segon pla funcionaran millor si inhabilites l'optimització de bateria per a Obtainium.", | ||||
|     "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "¿Suprimeixo l'aplicació?", | ||||
|         "other": "¿Suprimeixo les aplicacions?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Vítejte na", | ||||
|     "documentationLinksNote": "Níže odkazovaná stránka Obtainium GitHub obsahuje odkazy na videa, články, diskuse a další zdroje, které vám pomohou pochopit, jak aplikaci používat.", | ||||
|     "batteryOptimizationNote": "Všimněte si, že stahování na pozadí může fungovat spolehlivěji, pokud vypnete optimalizaci baterie operačního systému pro Obtainium.", | ||||
|     "fileDeletionError": "Soubor se nepodařilo odstranit (zkuste jej odstranit ručně a pak to zkuste znovu): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Odstranit Apku?", | ||||
|         "other": "Odstranit Apky?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Velkommen", | ||||
|     "documentationLinksNote": "Obtainiums GitHub-side, som der linkes til nedenfor, indeholder links til videoer, artikler, diskussioner og andre ressourcer, som kan hjælpe dig med at forstå, hvordan du bruger appen.", | ||||
|     "batteryOptimizationNote": "Bemærk, at baggrundsdownloads kan fungere mere pålideligt, hvis du deaktiverer OS-batterioptimering for Obtainium.", | ||||
|     "fileDeletionError": "Kunne ikke slette filen (prøv at slette den manuelt og prøv igen): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Fjern app?", | ||||
|         "other": "Fjern apps?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Willkommen", | ||||
|     "documentationLinksNote": "Die unten verlinkte GitHub-Seite von Obtainium enthält Links zu Videos, Artikeln, Diskussionen und anderen Ressourcen, die Ihnen helfen werden, die Verwendung der App zu verstehen.", | ||||
|     "batteryOptimizationNote": "Beachten Sie, dass Downloads im Hintergrund möglicherweise zuverlässiger funktionieren, wenn Sie die Batterieoptimierung des Betriebssystems für Obtainium deaktivieren.", | ||||
|     "fileDeletionError": "Die Datei konnte nicht gelöscht werden (versuchen Sie, sie manuell zu löschen und versuchen Sie es dann erneut): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "App entfernen?", | ||||
|         "other": "Apps entfernen?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Welcome", | ||||
|     "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", | ||||
|     "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", | ||||
|     "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Forigi la aplikaĵon?", | ||||
|         "other": "Forigi la aplikaĵojn?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Welcome", | ||||
|     "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", | ||||
|     "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", | ||||
|     "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Remove app?", | ||||
|         "other": "Remove apps?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "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.", | ||||
|     "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): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "¿Eliminar aplicación?", | ||||
|         "other": "¿Eliminar aplicaciones?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Welcome", | ||||
|     "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", | ||||
|     "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", | ||||
|     "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "برنامه حذف شود؟", | ||||
|         "other": "برنامه ها حذف شوند؟" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Bienvenue", | ||||
|     "documentationLinksNote": "La page GitHub d'Obtainium, dont le lien figure ci-dessous, contient des liens vers des vidéos, des articles, des discussions et d'autres ressources qui vous aideront à comprendre comment utiliser l'application.", | ||||
|     "batteryOptimizationNote": "Notez que les téléchargements en arrière-plan peuvent fonctionner de manière plus fiable si vous désactivez les optimisations de la batterie du système d'exploitation pour Obtainium.", | ||||
|     "fileDeletionError": "Échec de la suppression du fichier (essayez de le supprimer manuellement puis réessayez) : \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Supprimer l'application ?", | ||||
|         "other": "Supprimer les applications ?" | ||||
|   | ||||
| @@ -318,7 +318,7 @@ | ||||
|     "crowdsourcedConfigsShort": "Alkalmazáslista", | ||||
|     "allowInsecure": "Nem biztonságos HTTP-kérések engedélyezése", | ||||
|     "stayOneVersionBehind": "Maradjon egy verzióval a legújabb mögött", | ||||
|     "useFirstApkOfVersion": "Több APK közül az első automatikus kiválasztása", | ||||
|     "useFirstApkOfVersion": "A legelső APK automatikus kiválasztása, ha több APK is található", | ||||
|     "refreshBeforeDownload": "Az alkalmazás adatainak frissítése a letöltés előtt", | ||||
|     "tencentAppStore": "Tencent Appstore", | ||||
|     "coolApk": "CoolApk", | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Üdvözöljük!", | ||||
|     "documentationLinksNote": "Az alábbi hivatkozás az Obtainium GitHub oldalára vezet, amely további videók, cikkek, beszélgetések és egyéb források hivatkozásait tartalmazza, amelyek segítenek megérteni az alkalmazás használatát.", | ||||
|     "batteryOptimizationNote": "Megjegyzés: A háttérfrissítések megbízhatóbban működhetnek, ha kikapcsolja a rendszer akkumulátor-optimalizálását az Obtainium számára.", | ||||
|     "fileDeletionError": "Nem sikerült törölni a fájlt (próbálja meg kézzel törölni, majd próbálja meg újra): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Eltávolítja az alkalmazást?", | ||||
|         "other": "Eltávolítja az alkalmazásokat?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Selamat datang.", | ||||
|     "documentationLinksNote": "Halaman GitHub Obtainium yang ditautkan di bawah ini berisi tautan ke video, artikel, diskusi, dan sumber daya lain yang akan membantu Anda memahami cara menggunakan aplikasi.", | ||||
|     "batteryOptimizationNote": "Perhatikan bahwa unduhan latar belakang dapat bekerja lebih andal jika Anda menonaktifkan optimasi baterai OS untuk Obtainium.", | ||||
|     "fileDeletionError": "Gagal menghapus file (coba hapus secara manual, lalu coba lagi): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Hapus aplikasi?", | ||||
|         "other": "Hapus aplikasi?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Benvenuti", | ||||
|     "documentationLinksNote": "La pagina GitHub di Obtainium collegata qui sotto contiene collegamenti a video, articoli, discussioni e altre risorse che vi aiuteranno a capire come utilizzare l'applicazione.", | ||||
|     "batteryOptimizationNote": "Si noti che i download in background potrebbero funzionare in modo più affidabile se si disabilita l'ottimizzazione della batteria del sistema operativo per Obtainium.", | ||||
|     "fileDeletionError": "Errore nell'eliminazione del file (provare a cancellarlo manualmente e poi riprovare): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Rimuovere l'app?", | ||||
|         "other": "Rimuovere le app?" | ||||
|   | ||||
| @@ -321,7 +321,7 @@ | ||||
|     "useFirstApkOfVersion": "複数のAPKから最初のAPKを自動選択する", | ||||
|     "refreshBeforeDownload": "ダウンロード前にアプリの詳細を更新する", | ||||
|     "tencentAppStore": "Tencent App Store", | ||||
|     "coolApk": "CoolApk", | ||||
|     "coolApk": "クールApk", | ||||
|     "vivoAppStore": "vivo App Store (CN)", | ||||
|     "name": "名称", | ||||
|     "smartname": "名前(スマート)", | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "ようこそ", | ||||
|     "documentationLinksNote": "以下のリンクにあるObtainium GitHubページには、ビデオ、記事、ディスカッション、その他のリソースへのリンクがあり、アプリの使い方を理解するのに役立ちます。", | ||||
|     "batteryOptimizationNote": "ObtainiumのOSバッテリー最適化を無効にすると、バックグラウンドダウンロードがより確実に動作するようになります。", | ||||
|     "fileDeletionError": "ファイルの削除に失敗しました(手動で削除してから再試行してください):\"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "アプリを削除しますか?", | ||||
|         "other": "アプリを削除しますか?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "환영", | ||||
|     "documentationLinksNote": "아래에 링크된 Obtainium 깃허브 페이지에는 앱 사용 방법을 이해하는 데 도움이 되는 동영상, 기사, 토론 및 기타 리소스에 대한 링크가 포함되어 있습니다.", | ||||
|     "batteryOptimizationNote": "Obtainium의 OS 배터리 최적화를 비활성화하면 백그라운드 다운로드가 더 안정적으로 작동할 수 있습니다.", | ||||
|     "fileDeletionError": "파일을 삭제하지 못했습니다(수동으로 삭제한 후 다시 시도하세요): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "앱을 제거하시겠습니까?", | ||||
|         "other": "앱을 제거하시겠습니까?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Welkom", | ||||
|     "documentationLinksNote": "De GitHub pagina van Obtainium waarnaar hieronder wordt gelinkt bevat links naar video's, artikelen, discussies en andere bronnen die je zullen helpen begrijpen hoe je de app kunt gebruiken.", | ||||
|     "batteryOptimizationNote": "Merk op dat downloads op de achtergrond mogelijk betrouwbaarder werken als je de batterijoptimalisatie van het besturingssysteem voor Obtainium uitschakelt.", | ||||
|     "fileDeletionError": "Bestand is niet verwijderd (probeer het handmatig te verwijderen en probeer het opnieuw): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "App verwijderen?", | ||||
|         "other": "Apps verwijderen?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Witamy", | ||||
|     "documentationLinksNote": "Strona Obtainium GitHub, do której link znajduje się poniżej, zawiera linki do filmów, artykułów, dyskusji i innych zasobów, które pomogą ci zrozumieć, jak korzystać z aplikacji.", | ||||
|     "batteryOptimizationNote": "Należy pamiętać, że pobieranie w tle może działać bardziej niezawodnie po wyłączeniu optymalizacji baterii systemu operacyjnego dla Obtainium.", | ||||
|     "fileDeletionError": "Nie udało się usunąć pliku (spróbuj usunąć go ręcznie, a następnie spróbuj ponownie): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Usunąć aplikację?", | ||||
|         "few": "Usunąć aplikacje?", | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Boas vindas", | ||||
|     "documentationLinksNote": "A página do Obtainium no GitHub visível abaixo contém links de vídeos, artigos, discussões, e outros recursos que podem te ajudar ao usar o app.", | ||||
|     "batteryOptimizationNote": "Observe que os downloads em segundo plano podem funcionar de forma mais confiável se você desativar as otimizações de bateria do sistema operacional para o Obtainium.", | ||||
|     "fileDeletionError": "Falha ao excluir o arquivo (tente excluí-lo manualmente e tente novamente): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Remover app?", | ||||
|         "other": "Remover apps?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Bem-vindo", | ||||
|     "documentationLinksNote": "A página do Obtainium no GitHub com a ligação abaixo contém ligações para vídeos, artigos, discussões e outros recursos que o ajudarão a compreender como utilizar a aplicação.", | ||||
|     "batteryOptimizationNote": "Note que os downloads em segundo plano podem funcionar de forma mais fiável se desativar as optimizações da bateria do SO para o Obtainium.", | ||||
|     "fileDeletionError": "Falha ao eliminar o ficheiro (tente eliminá-lo manualmente e depois tente novamente): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Remover aplicativo?", | ||||
|         "other": "Remover aplicativos?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Добро пожаловать", | ||||
|     "documentationLinksNote": "На странице Obtainium GitHub, ссылка на которую приведена ниже, содержатся ссылки на видео, статьи, обсуждения и другие ресурсы, которые помогут вам понять, как пользоваться приложением.", | ||||
|     "batteryOptimizationNote": "Обратите внимание, что фоновая загрузка может работать более надежно, если отключить оптимизацию батареи ОС для Obtainium.", | ||||
|     "fileDeletionError": "Не удалось удалить файл (попробуйте удалить его вручную, а затем повторите попытку): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Удалить приложение?", | ||||
|         "other": "Удалить приложения?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Välkommen", | ||||
|     "documentationLinksNote": "Obtainium GitHub-sidan som länkas nedan innehåller länkar till videor, artiklar, diskussioner och andra resurser som hjälper dig att förstå hur du använder appen.", | ||||
|     "batteryOptimizationNote": "Observera att nedladdningar i bakgrunden kan fungera mer tillförlitligt om du inaktiverar OS-batterioptimeringar för Obtainium.", | ||||
|     "fileDeletionError": "Misslyckades med att radera filen (försök radera den manuellt och försök sedan igen): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Ta Bort App?", | ||||
|         "other": "Ta Bort Appar?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Hoş geldiniz", | ||||
|     "documentationLinksNote": "Aşağıda bağlantısı verilen Obtainium GitHub sayfası, uygulamayı nasıl kullanacağınızı anlamanıza yardımcı olacak videolara, makalelere, tartışmalara ve diğer kaynaklara bağlantılar içerir.", | ||||
|     "batteryOptimizationNote": "Obtainium için işletim sistemi pil optimizasyonlarını devre dışı bırakırsanız arka planda indirmelerin daha güvenilir şekilde çalışabileceğini unutmayın.", | ||||
|     "fileDeletionError": "Dosya silinemedi (elle silmeyi deneyin ve sonra tekrar deneyin): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Uygulamayı Kaldır?", | ||||
|         "other": "Uygulamaları Kaldır?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Ласкаво просимо.", | ||||
|     "documentationLinksNote": "Сторінка Obtainium на GitHub, посилання на яку наведено нижче, містить посилання на відео, статті, дискусії та інші ресурси, які допоможуть вам зрозуміти, як користуватися додатком.", | ||||
|     "batteryOptimizationNote": "Зауважте, що фонові завантаження можуть працювати надійніше, якщо ви вимкнете оптимізацію батареї ОС для Obtainium.", | ||||
|     "fileDeletionError": "Не вдалося видалити файл (спробуйте видалити його вручну, а потім спробуйте ще раз): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Видалити застосунок?", | ||||
|         "other": "Видалити застосунки?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "Welcome", | ||||
|     "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", | ||||
|     "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", | ||||
|     "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "Gỡ ứng dụng?", | ||||
|         "other": "Gỡ ứng dụng?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "歡迎", | ||||
|     "documentationLinksNote": "下方連結的 Obtainium GitHub 頁面包含影片、文章、討論及其他資源,能幫助你瞭解如何使用這款應用程式。", | ||||
|     "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", | ||||
|     "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "移除應用程式?", | ||||
|         "other": "移除應用程式?" | ||||
|   | ||||
| @@ -329,6 +329,7 @@ | ||||
|     "welcome": "欢迎光临", | ||||
|     "documentationLinksNote": "下面链接的 Obtainium GitHub 页面包含视频、文章、讨论和其他资源的链接,可帮助您了解如何使用该应用程序。", | ||||
|     "batteryOptimizationNote": "请注意,如果为 Obtainium 禁用操作系统电池优化功能,后台下载可能会更稳定。", | ||||
|     "fileDeletionError": "删除文件失败(尝试手动删除,然后再试一次):\"{}\"", | ||||
|     "removeAppQuestion": { | ||||
|         "one": "是否删除应用?", | ||||
|         "other": "是否删除应用?" | ||||
|   | ||||
							
								
								
									
										24
									
								
								build.sh
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								build.sh
									
									
									
									
									
								
							| @@ -2,15 +2,35 @@ | ||||
| # Convenience script | ||||
|  | ||||
| CURR_DIR="$(pwd)" | ||||
| trap "cd "$CURR_DIR"" EXIT | ||||
| SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" | ||||
| trap "cd \"$CURR_DIR\"" EXIT | ||||
| cd "$SCRIPT_DIR" | ||||
|  | ||||
| if [ -z "$1" ]; then | ||||
|     git fetch && git merge origin/main && git push # Typically run after a PR to main, so bring dev up to date | ||||
| fi | ||||
|  | ||||
| # Update local Flutter | ||||
| git submodule update --remote | ||||
| cd .flutter | ||||
| git fetch | ||||
| git checkout "$(flutter --version | head -2 | tail -1 | awk '{print $4}')" # Ensure included Flutter submodule version equals my environment | ||||
| git checkout stable | ||||
| git pull | ||||
| FLUTTER_GIT_URL="https://github.com/flutter/flutter/" ./bin/flutter upgrade | ||||
| cd .. | ||||
|  | ||||
| # Keep global Flutter, if any, in sync | ||||
| if [ -f ~/flutter/bin/flutter ]; then | ||||
|     cd ~/flutter | ||||
|     ./bin/flutter channel stable | ||||
|     ./bin/flutter upgrade | ||||
|     cd "$SCRIPT_DIR" | ||||
| fi | ||||
|  | ||||
| if [ -z "$(which flutter)" ]; then | ||||
|     export PATH="$PATH:$SCRIPT_DIR/.flutter/bin" | ||||
| fi | ||||
|  | ||||
| rm ./build/app/outputs/flutter-apk/* 2>/dev/null                                       # Get rid of older builds if any | ||||
| flutter build apk --flavor normal && flutter build apk --split-per-abi --flavor normal # Build (both split and combined APKs) | ||||
| for file in ./build/app/outputs/flutter-apk/app-*normal*.apk*; do mv "$file" "${file//-normal/}"; done | ||||
|   | ||||
| @@ -51,7 +51,7 @@ RUN \ | ||||
|     mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \ | ||||
|     rm -v /tmp/tools.zip && \ | ||||
|     mkdir -p /root/.android/ && touch /root/.android/repositories.cfg &&\ | ||||
|     apt-get install -y --no-install-recommends openjdk-17-jdk openjdk-17-jre &&\ | ||||
|     apt-get install -y --no-install-recommends openjdk-21-jdk openjdk-21-jre &&\ | ||||
|     yes | sdkmanager --licenses &&\ | ||||
|     sdkmanager --update | ||||
|  | ||||
|   | ||||
| @@ -100,9 +100,7 @@ class _AppPageState extends State<AppPage> { | ||||
|     bool isVersionDetectionStandard = | ||||
|         app?.app.additionalSettings['versionDetection'] == true; | ||||
|  | ||||
|     bool installedVersionIsEstimate = trackOnly || | ||||
|         (app?.app.installedVersion != null && | ||||
|             app?.app.additionalSettings['versionDetection'] != true); | ||||
|     bool installedVersionIsEstimate = app?.app != null ? isVersionPseudo(app!.app) : false; | ||||
|  | ||||
|     if (app != null && !_wasWebViewOpened) { | ||||
|       _wasWebViewOpened = true; | ||||
|   | ||||
| @@ -447,7 +447,7 @@ class AppsPageState extends State<AppsPage> { | ||||
|     } | ||||
|  | ||||
|     getVersionText(int appIndex) { | ||||
|       return '${listedApps[appIndex].app.installedVersion ?? tr('notInstalled')}${listedApps[appIndex].app.additionalSettings['trackOnly'] == true ? ' ${tr('pseudoVersion')}' : ''}'; | ||||
|       return listedApps[appIndex].app.installedVersion ?? tr('notInstalled'); | ||||
|     } | ||||
|  | ||||
|     getChangesButtonString(int appIndex, bool hasChangeLogFn) { | ||||
| @@ -503,7 +503,10 @@ class AppsPageState extends State<AppsPage> { | ||||
|                                     MediaQuery.of(context).size.width / 4), | ||||
|                             child: Text(getVersionText(index), | ||||
|                                 overflow: TextOverflow.ellipsis, | ||||
|                                 textAlign: TextAlign.end)), | ||||
|                                 textAlign: TextAlign.end, | ||||
|                                 style: isVersionPseudo(listedApps[index].app) | ||||
|                                     ? TextStyle(fontStyle: FontStyle.italic) | ||||
|                                     : null)), | ||||
|                       ]), | ||||
|                       Row( | ||||
|                         mainAxisSize: MainAxisSize.min, | ||||
|   | ||||
| @@ -70,7 +70,6 @@ class DownloadedXApkDir { | ||||
| } | ||||
|  | ||||
| List<String> generateStandardVersionRegExStrings() { | ||||
|   // TODO: Look into RegEx for non-Latin characters / non-Arabic numerals | ||||
|   var basics = [ | ||||
|     '[0-9]+', | ||||
|     '[0-9]+\\.[0-9]+', | ||||
| @@ -78,7 +77,7 @@ List<String> generateStandardVersionRegExStrings() { | ||||
|     '[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+' | ||||
|   ]; | ||||
|   var preSuffixes = ['-', '\\+']; | ||||
|   var suffixes = ['alpha', 'beta', 'ose']; | ||||
|   var suffixes = ['alpha', 'beta', 'ose', '[0-9]+']; | ||||
|   var finals = ['\\+[0-9]+', '[0-9]+']; | ||||
|   List<String> results = []; | ||||
|   for (var b in basics) { | ||||
| @@ -235,6 +234,14 @@ Future<String?> checkETagHeader(String url, | ||||
|       .toString(); | ||||
| } | ||||
|  | ||||
| deleteFile(File file) { | ||||
|   try { | ||||
|     file.deleteSync(recursive: true); | ||||
|   } on PathAccessException catch (e) { | ||||
|     throw ObtainiumError(tr('fileDeletionError', args: [e.path ?? tr('unknown')])); | ||||
|   } | ||||
| } | ||||
|  | ||||
| Future<File> downloadFile(String url, String fileName, bool fileNameHasExt, | ||||
|     Function? onProgress, String destDir, | ||||
|     {bool useExisting = true, | ||||
| @@ -349,7 +356,7 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt, | ||||
|     reqHeaders.addAll({'range': 'bytes=$rangeStart-${fullContentLength - 1}'}); | ||||
|     sink = tempDownloadedFile.openWrite(mode: FileMode.writeOnlyAppend); | ||||
|   } else if (tempDownloadedFile.existsSync()) { | ||||
|     tempDownloadedFile.deleteSync(recursive: true); | ||||
|     deleteFile(tempDownloadedFile); | ||||
|   } | ||||
|   var responseWithClient = | ||||
|       await sourceRequestStreamResponse('GET', url, reqHeaders, {}); | ||||
| @@ -405,7 +412,7 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt, | ||||
|     onProgress(progress); | ||||
|   } | ||||
|   if (response.statusCode < 200 || response.statusCode > 299) { | ||||
|     tempDownloadedFile.deleteSync(recursive: true); | ||||
|     deleteFile(tempDownloadedFile); | ||||
|     throw response.reasonPhrase; | ||||
|   } | ||||
|   if (tempDownloadedFile.existsSync()) { | ||||
| @@ -798,9 +805,9 @@ class AppsProvider with ChangeNotifier { | ||||
|         await pm.getPackageArchiveInfo(archiveFilePath: file.file.path); | ||||
|     if (newInfo == null) { | ||||
|       try { | ||||
|         file.file.deleteSync(recursive: true); | ||||
|         deleteFile(file.file); | ||||
|         for (var a in additionalAPKs) { | ||||
|           a.file.deleteSync(recursive: true); | ||||
|           deleteFile(a.file); | ||||
|         } | ||||
|       } catch (e) { | ||||
|         // | ||||
| @@ -840,7 +847,7 @@ class AppsProvider with ChangeNotifier { | ||||
|     bool installed = false; | ||||
|     if (code != null && code != 0 && code != 3) { | ||||
|       try { | ||||
|         file.file.deleteSync(recursive: true); | ||||
|         deleteFile(file.file); | ||||
|       } catch (e) { | ||||
|         // | ||||
|       } finally { | ||||
| @@ -1336,7 +1343,11 @@ class AppsProvider with ChangeNotifier { | ||||
|     var templateVersionFormats = | ||||
|         findStandardFormatsForVersion(templateVersion, true); | ||||
|     var comparisonVersionFormats = | ||||
|         findStandardFormatsForVersion(comparisonVersion, false); | ||||
|         findStandardFormatsForVersion(comparisonVersion, true); | ||||
|     if (comparisonVersionFormats.isEmpty) { | ||||
|       comparisonVersionFormats = | ||||
|           findStandardFormatsForVersion(comparisonVersion, false); | ||||
|     } | ||||
|     var commonStandardFormats = | ||||
|         templateVersionFormats.intersection(comparisonVersionFormats); | ||||
|     if (commonStandardFormats.isEmpty) { | ||||
| @@ -1508,7 +1519,7 @@ class AppsProvider with ChangeNotifier { | ||||
|     await Future.wait(appIds.map((appId) async { | ||||
|       File file = File('${(await getAppsDir()).path}/$appId.json'); | ||||
|       if (file.existsSync()) { | ||||
|         file.deleteSync(recursive: true); | ||||
|         deleteFile(file); | ||||
|       } | ||||
|       apkFiles | ||||
|           .where( | ||||
|   | ||||
| @@ -470,7 +470,7 @@ class SettingsProvider with ChangeNotifier { | ||||
|   } | ||||
|  | ||||
|   List<String> get searchDeselected { | ||||
|     return prefs?.getStringList('searchDeselected') ?? []; | ||||
|     return prefs?.getStringList('searchDeselected') ?? SourceProvider().sources.map((s) => s.name).toList(); | ||||
|   } | ||||
|  | ||||
|   set searchDeselected(List<String> list) { | ||||
|   | ||||
| @@ -940,6 +940,11 @@ List<MapEntry<String, String>> filterApks( | ||||
|   return apkUrls; | ||||
| } | ||||
|  | ||||
| isVersionPseudo(App app) => | ||||
|   app.additionalSettings['trackOnly'] == true || | ||||
|       (app.installedVersion != null && | ||||
|           app.additionalSettings['versionDetection'] != true); | ||||
|  | ||||
| class SourceProvider { | ||||
|   // Add more source classes here so they are available via the service | ||||
|   List<AppSource> get sources => [ | ||||
|   | ||||
							
								
								
									
										104
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -76,14 +76,6 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.0.4" | ||||
|   archive: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: archive | ||||
|       sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.0.7" | ||||
|   args: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -96,10 +88,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: async | ||||
|       sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 | ||||
|       sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.12.0" | ||||
|     version: "2.13.0" | ||||
|   background_fetch: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @@ -148,22 +140,6 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.4.0" | ||||
|   checked_yaml: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: checked_yaml | ||||
|       sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.0.3" | ||||
|   cli_util: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: cli_util | ||||
|       sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.4.2" | ||||
|   clock: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -288,10 +264,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: fake_async | ||||
|       sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" | ||||
|       sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.3.2" | ||||
|     version: "1.3.3" | ||||
|   ffi: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -449,22 +425,14 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.0.0" | ||||
|   flutter_launcher_icons: | ||||
|     dependency: "direct dev" | ||||
|     description: | ||||
|       name: flutter_launcher_icons | ||||
|       sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.14.3" | ||||
|   flutter_lints: | ||||
|     dependency: "direct dev" | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: flutter_lints | ||||
|       sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" | ||||
|       sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "5.0.0" | ||||
|     version: "6.0.0" | ||||
|   flutter_local_notifications: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @@ -511,7 +479,7 @@ packages: | ||||
|     source: hosted | ||||
|     version: "2.0.28" | ||||
|   flutter_test: | ||||
|     dependency: "direct dev" | ||||
|     dependency: transitive | ||||
|     description: flutter | ||||
|     source: sdk | ||||
|     version: "0.0.0" | ||||
| @@ -584,38 +552,22 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.1.2" | ||||
|   image: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: image | ||||
|       sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.5.4" | ||||
|   intl: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: intl | ||||
|       sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf | ||||
|       sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.19.0" | ||||
|   json_annotation: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: json_annotation | ||||
|       sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.9.0" | ||||
|     version: "0.20.2" | ||||
|   leak_tracker: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: leak_tracker | ||||
|       sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec | ||||
|       sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "10.0.8" | ||||
|     version: "10.0.9" | ||||
|   leak_tracker_flutter_testing: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -636,10 +588,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: lints | ||||
|       sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 | ||||
|       sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "5.1.1" | ||||
|     version: "6.0.0" | ||||
|   markdown: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @@ -856,14 +808,6 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.10.2+1" | ||||
|   posix: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: posix | ||||
|       sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "6.0.2" | ||||
|   provider: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @@ -949,7 +893,7 @@ packages: | ||||
|     description: | ||||
|       path: "." | ||||
|       ref: master | ||||
|       resolved-ref: "8784c39b909324df8913dd30fa416b8a50d55f49" | ||||
|       resolved-ref: "89cdb5434a7ac7510f6bcdb60e1d51a27ee2f40b" | ||||
|       url: "https://github.com/AlexBacich/shared-storage" | ||||
|     source: git | ||||
|     version: "0.7.0" | ||||
| @@ -1179,10 +1123,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: vm_service | ||||
|       sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" | ||||
|       sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "14.3.1" | ||||
|     version: "15.0.0" | ||||
|   web: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -1195,10 +1139,10 @@ packages: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: webview_flutter | ||||
|       sha256: "62d763c27ce7f6cef04b3bec01c85a28d60149bffd155884aa4b8fd4941ea2e4" | ||||
|       sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.12.0" | ||||
|     version: "4.13.0" | ||||
|   webview_flutter_android: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -1255,14 +1199,6 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "6.3.0" | ||||
|   yaml: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: yaml | ||||
|       sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "3.1.3" | ||||
| sdks: | ||||
|   dart: ">=3.7.2 <4.0.0" | ||||
|   dart: ">=3.8.1 <4.0.0" | ||||
|   flutter: ">=3.27.0" | ||||
|   | ||||
							
								
								
									
										63
									
								
								pubspec.yaml
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								pubspec.yaml
									
									
									
									
									
								
							| @@ -16,10 +16,10 @@ 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.55+2312 | ||||
| version: 1.1.56+2313 | ||||
|  | ||||
| environment: | ||||
|   sdk: ^3.6.0 | ||||
|   sdk: ^3.8.1 | ||||
|  | ||||
| # Dependencies specify other packages that your package needs in order to work. | ||||
| # To automatically upgrade your package dependencies to the latest versions | ||||
| @@ -33,22 +33,22 @@ dependencies: | ||||
|  | ||||
|   # The following adds the Cupertino Icons font to your application. | ||||
|   # Use with the CupertinoIcons class for iOS style icons. | ||||
|   cupertino_icons: ^1.0.5 | ||||
|   path_provider: ^2.0.11 | ||||
|   cupertino_icons: ^1.0.8 | ||||
|   path_provider: ^2.1.5 | ||||
|   flutter_fgbg: ^0.7.1 | ||||
|   flutter_local_notifications: ^18.0.0 | ||||
|   provider: ^6.0.3 | ||||
|   http: ^1.0.0 | ||||
|   webview_flutter: ^4.0.0 | ||||
|   dynamic_color: ^1.5.4 | ||||
|   html: ^0.15.0 | ||||
|   shared_preferences: ^2.0.15 | ||||
|   url_launcher: ^6.1.5 | ||||
|   flutter_local_notifications: ^18.0.1 | ||||
|   provider: ^6.1.5 | ||||
|   http: ^1.4.0 | ||||
|   webview_flutter: ^4.13.0 | ||||
|   dynamic_color: ^1.7.0 | ||||
|   html: ^0.15.6 | ||||
|   shared_preferences: ^2.5.3 | ||||
|   url_launcher: ^6.3.1 | ||||
|   permission_handler: ^12.0.0+1 | ||||
|   fluttertoast: ^8.0.9 | ||||
|   device_info_plus: ^11.0.0 | ||||
|   file_picker: ^10.0.0 | ||||
|   animations: ^2.0.4 | ||||
|   fluttertoast: ^8.2.12 | ||||
|   device_info_plus: ^11.4.0 | ||||
|   file_picker: ^10.1.9 | ||||
|   animations: ^2.0.11 | ||||
|   android_package_installer: # TODO: See if PR will be accepted (dev may not be active), else remove this comment | ||||
|     git: | ||||
|       url: https://github.com/ImranR98/android_package_installer | ||||
| @@ -58,23 +58,23 @@ dependencies: | ||||
|       url: https://github.com/ImranR98/android_package_manager | ||||
|       ref: master | ||||
|   share_plus: ^11.0.0 | ||||
|   sqflite: ^2.2.0+3 | ||||
|   easy_localization: ^3.0.1 | ||||
|   android_intent_plus: ^5.0.1 | ||||
|   flutter_markdown: ^0.7.1 | ||||
|   flutter_archive: ^6.0.0 | ||||
|   sqflite: ^2.4.2 | ||||
|   easy_localization: ^3.0.7+1 | ||||
|   android_intent_plus: ^5.3.0 | ||||
|   flutter_markdown: ^0.7.7+1 | ||||
|   flutter_archive: ^6.0.3 | ||||
|   hsluv: ^1.1.3 | ||||
|   connectivity_plus: ^6.0.1 | ||||
|   connectivity_plus: ^6.1.4 | ||||
|   shared_storage: # TODO: Is this maintained? | ||||
|     git: | ||||
|       url: https://github.com/AlexBacich/shared-storage | ||||
|       ref: master | ||||
|   crypto: ^3.0.3 | ||||
|   crypto: ^3.0.6 | ||||
|   bcrypt: ^1.1.3 | ||||
|   app_links: ^6.0.1 | ||||
|   background_fetch: ^1.2.1 | ||||
|   app_links: ^6.4.0 | ||||
|   background_fetch: ^1.3.8 | ||||
|   equations: ^5.0.2 | ||||
|   flex_color_picker: ^3.4.1 | ||||
|   flex_color_picker: ^3.7.1 | ||||
|   android_system_font: | ||||
|     git: | ||||
|       url: https://github.com/re7gog/android_system_font | ||||
| @@ -83,22 +83,17 @@ dependencies: | ||||
|     git: | ||||
|       url: https://github.com/wilver06w/shizuku_apk_installer | ||||
|       ref: master | ||||
|  | ||||
|   markdown: any | ||||
|   markdown: ^7.3.0 | ||||
|   flutter_typeahead: ^5.2.0 | ||||
|   battery_plus: ^6.1.0 | ||||
|   battery_plus: ^6.2.1 | ||||
|   flutter_charset_detector: ^5.0.0 | ||||
| dev_dependencies: | ||||
|   flutter_test: | ||||
|     sdk: flutter | ||||
|   flutter_launcher_icons: ^0.14.1 | ||||
|  | ||||
|   # The "flutter_lints" package below contains a set of recommended lints to | ||||
|   # encourage good coding practices. The lint set provided by the package is | ||||
|   # activated in the `analysis_options.yaml` file located at the root of your | ||||
|   # package. See that file for information about deactivating specific lint | ||||
|   # rules and activating additional ones. | ||||
|   flutter_lints: ^5.0.0 | ||||
|   flutter_lints: ^6.0.0 | ||||
|  | ||||
| flutter_launcher_icons: | ||||
|   android: "ic_launcher" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user