From ae79a44df908140139feaa827c77600a8d218231 Mon Sep 17 00:00:00 2001 From: Armand <4831c0@proton.me> Date: Fri, 27 Feb 2026 18:32:59 +0100 Subject: [PATCH] firka: make android buildable again --- .gitmodules | 9 - firka/.gitignore | 5 +- firka/android/app/build.gradle.kts | 848 +----------- .../main/kotlin/app/firka/naplo/AppMain.kt | 96 +- firka/android/build.gradle.kts | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- firka/android/settings.gradle.kts | 5 +- .../phone_main_home_test.dart | 42 - .../phone_main_login_test.dart | 24 - firka/integration_test/test_helpers.dart | 42 - .../lib/helpers/api/client/kreta_client.dart | 2 +- .../helpers/db/models/app_settings_model.dart | 2 +- .../db/models/app_settings_model.g.dart | 518 +++---- .../db/models/generic_cache_model.dart | 2 +- .../db/models/generic_cache_model.g.dart | 305 ++-- .../db/models/homework_cache_model.dart | 2 +- .../db/models/homework_cache_model.g.dart | 415 +++--- .../db/models/timetable_cache_model.dart | 2 +- .../db/models/timetable_cache_model.g.dart | 442 +++--- firka/lib/helpers/db/models/token_model.dart | 2 +- .../lib/helpers/db/models/token_model.g.dart | 1226 +++++++++-------- firka/lib/helpers/db/util.dart | 2 +- firka/lib/helpers/settings.dart | 2 +- firka/lib/helpers/watch_sync_helper.dart | 2 +- firka/lib/l10n | 2 +- firka/lib/main.dart | 2 +- .../screens/settings/settings_screen.dart | 2 +- firka/lib/ui/phone/widgets/login_webview.dart | 2 +- firka/pubspec.yaml | 77 +- firka/vendor/fmb_dart/.gitignore | 9 - firka/vendor/fmb_dart/CHANGELOG.md | 3 - firka/vendor/fmb_dart/LICENSE | 661 --------- firka/vendor/fmb_dart/README.md | 30 - firka/vendor/fmb_dart/analysis_options.yaml | 30 - firka/vendor/fmb_dart/lib/fmb_dart.dart | 3 - .../fmb_dart/lib/src/fmb_dart_base.dart | 185 --- firka/vendor/fmb_dart/pubspec.yaml | 15 - firka/vendor/isar | 1 - firka/vendor/isar_flutter_libs | 1 - firka/vendor/isar_generator | 1 - secrets/README.md | 14 +- secrets/README_en.md | 32 +- 42 files changed, 1551 insertions(+), 3520 deletions(-) delete mode 100644 firka/integration_test/phone_main_home_test.dart delete mode 100644 firka/integration_test/phone_main_login_test.dart delete mode 100644 firka/integration_test/test_helpers.dart delete mode 100644 firka/vendor/fmb_dart/.gitignore delete mode 100644 firka/vendor/fmb_dart/CHANGELOG.md delete mode 100644 firka/vendor/fmb_dart/LICENSE delete mode 100644 firka/vendor/fmb_dart/README.md delete mode 100644 firka/vendor/fmb_dart/analysis_options.yaml delete mode 100644 firka/vendor/fmb_dart/lib/fmb_dart.dart delete mode 100644 firka/vendor/fmb_dart/lib/src/fmb_dart_base.dart delete mode 100644 firka/vendor/fmb_dart/pubspec.yaml delete mode 160000 firka/vendor/isar delete mode 160000 firka/vendor/isar_flutter_libs delete mode 160000 firka/vendor/isar_generator diff --git a/.gitmodules b/.gitmodules index e10d69d..c408353 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,3 @@ -[submodule "firka/vendor/isar_generator"] - path = firka/vendor/isar_generator - url = https://git.qwit.cloud/firka/isar_generator -[submodule "firka/vendor/isar"] - path = firka/vendor/isar - url = https://git.qwit.cloud/firka/isar -[submodule "firka/vendor/isar_flutter_libs"] - path = firka/vendor/isar_flutter_libs - url = https://git.qwit.cloud/firka/isar_flutter_libs [submodule "firka/lib/l10n"] path = firka/lib/l10n url = https://github.com/QwIT-Development/firka-localization diff --git a/firka/.gitignore b/firka/.gitignore index 3a0f570..bd59648 100644 --- a/firka/.gitignore +++ b/firka/.gitignore @@ -49,4 +49,7 @@ app.*.map.json /android/app/profile /android/app/release -coverage \ No newline at end of file +coverage + +# Generated files +*.g.dart \ No newline at end of file diff --git a/firka/android/app/build.gradle.kts b/firka/android/app/build.gradle.kts index ea8f62e..7544859 100644 --- a/firka/android/app/build.gradle.kts +++ b/firka/android/app/build.gradle.kts @@ -1,36 +1,18 @@ -import org.apache.commons.io.FileUtils import java.io.FileInputStream -import java.security.MessageDigest import java.util.Properties -import java.util.concurrent.Executors -import java.util.concurrent.Future -import java.util.concurrent.locks.ReentrantReadWriteLock -import java.util.zip.ZipEntry -import java.util.zip.ZipFile -import java.util.zip.ZipOutputStream -import java.util.zip.ZipOutputStream.DEFLATED -import java.util.zip.ZipOutputStream.STORED plugins { id("com.android.application") id("kotlin-android") - id("org.jetbrains.kotlin.plugin.compose") version "2.2.0" + id("org.jetbrains.kotlin.plugin.compose") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id("dev.flutter.flutter-gradle-plugin") } -fun loadProperties(file: File): Properties { - val properties = Properties() - FileInputStream(file).use { inputStream -> - properties.load(inputStream) - } - return properties -} - android { namespace = "app.firka.naplo" compileSdk = flutter.compileSdkVersion - ndkVersion = "27.0.12077973" + ndkVersion = flutter.ndkVersion compileOptions { sourceCompatibility = JavaVersion.VERSION_17 @@ -49,8 +31,8 @@ android { applicationId = "app.firka.naplo" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. - minSdk = 29 - targetSdk = 36 + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName } @@ -59,7 +41,7 @@ android { val propsFile = File(secretsDir, "keystore.properties") if (propsFile.exists()) { - val props = loadProperties(propsFile) + val props = Properties().apply { FileInputStream(propsFile).use { load(it) } } val store = File(secretsDir, props["storeFile"].toString()) signingConfigs { @@ -68,6 +50,10 @@ android { storePassword = props["storePassword"] as String keyPassword = props["keyPassword"] as String keyAlias = props["keyAlias"] as String + // Use APK Signature Scheme v3 (and v4 for streaming verification). See: + // https://source.android.com/docs/security/features/apksigning/v3 + enableV3Signing = true + enableV4Signing = true } } } @@ -89,808 +75,24 @@ android { } } dependencies { - implementation("androidx.wear:wear-ongoing:1.0.0") implementation("androidx.glance:glance-appwidget:1.1.1") } +// Ensure .env exists before Flutter bundles assets (copy from .env.example if missing) +val envFile = file("${project.projectDir}/../../.env") +val envExampleFile = file("${project.projectDir}/../../.env.example") +tasks.register("ensureEnv") { + doLast { + if (!envFile.exists() && envExampleFile.exists()) { + envExampleFile.copyTo(envFile, overwrite = false) + println("Created .env from .env.example for asset bundling.") + } + } +} +tasks.matching { it.name.startsWith("compileFlutterBuild") }.configureEach { + dependsOn("ensureEnv") +} + flutter { source = "../.." -} - -tasks.register("transformAndResignDebugApk") { - group = "build" - description = "Transform and resign APK with debug key" - - dependsOn("assembleDebug") - - doLast { - if (System.getenv("TRANSFORM_APK") != null - && System.getenv("TRANSFORM_APK") == "true") { - transformApks(true) - } - } -} - -tasks.register("transformAndResignReleaseApk") { - group = "build" - description = "Transform and resign APK with release key" - - dependsOn("assembleRelease") - - doLast { - checkReleaseKey() - if (System.getenv("TRANSFORM_APK") != null - && System.getenv("TRANSFORM_APK") == "true") { - transformApks(false) - } - } -} - -tasks.register("transformAndResignReleaseBundle") { - group = "build" - description = "Transform and resign bundle with release key" - - dependsOn("bundleRelease") - - doLast { - if (System.getenv("TRANSFORM_AAB") != null - && System.getenv("TRANSFORM_AAB") == "true") { - transformAppBundle() - } - } -} - -afterEvaluate { - tasks.findByName("assembleDebug")?.finalizedBy("transformAndResignDebugApk") - tasks.findByName("assembleRelease")?.finalizedBy("transformAndResignReleaseApk") - tasks.findByName("bundleRelease")?.finalizedBy("transformAndResignReleaseBundle") -} - -fun checkReleaseKey() { - val secretsDir = File(projectDir.absolutePath, "../../../secrets/") - val propsFile = File(secretsDir, "keystore.properties") - - if (propsFile.exists()) { - val props = loadProperties(propsFile) - val store = File(secretsDir, props["storeFile"].toString()) - - println( - "Signing with:\n" + - "\t- store: ${store.name}\n" + - "\t- key: ${props["keyAlias"]}" - ) - } else { - throw Exception("Release keystore not found!") - } -} - -fun transformApks(debug: Boolean, i : Int = 0) { - try { - _transformApks(debug) - } catch (e: Exception) { - if (i < 5) { - e.printStackTrace() - - println("Retrying: ${i + 1}") - transformApks(debug, i + 1) - } else { - throw e - } - } -} - -fun _transformApks(debug: Boolean) { - println("Starting APK transformation process...") - - val buildDir = project.buildDir - val apkDir = File(buildDir, "outputs/flutter-apk") - val apks = getApks(debug) - var c = 0 - apks - .forEach { c++; transformAndSignApk(apkDir, it.nameWithoutExtension, debug) } - - println("Transformed: $c apks") -} - -fun transformAndSignApk(apkDir: File, name: String, debug: Boolean) { - val originalApk = File(apkDir, "$name.apk") - val transformedApk = File(apkDir, "$name-transformed.apk") - val finalApk = File(apkDir, "$name-resigned.apk") - val finalIdsig = File(apkDir, "$name-resigned.apk.idsig") - - if (!originalApk.exists()) { - throw GradleException("Original APK not found at: ${originalApk.absolutePath}") - } - - if (transformedApk.exists()) transformedApk.delete() - if (finalApk.exists()) finalApk.delete() - - println("Original APK: ${originalApk.absolutePath}") - - try { - println("Transforming APK...") - transformApk(originalApk, transformedApk, if (debug) { "6" } else {"Z"}) - - if (debug) { - println("Signing with debug key...") - signWithDebugKey(transformedApk, finalApk) - } else { - println("Signing with release key...") - signWithReleaseKey(transformedApk, finalApk) - } - - if (finalApk.exists()) { - originalApk.delete() - finalIdsig.delete() - finalApk.renameTo(originalApk) - println("APK successfully transformed") - println("Final APK: ${originalApk.absolutePath}") - } - - transformedApk.delete() - } catch (e: Exception) { - throw GradleException("Failed to transform and resign APK: ${e.message}", e) - } -} - -fun transformApk(input: File, output: File, compressionLevel: String = "Z") { - val tempDir = File(project.buildDir, "tmp/apk-transform") - val cacheDir = File(project.buildDir, "cache") - val optipngCacheDir = File(cacheDir, "optipng") - val assetCompressionDir = File(cacheDir, "assets") - tempDir.deleteRecursively() - tempDir.mkdirs() - if (!optipngCacheDir.exists()) optipngCacheDir.mkdirs() - if (!assetCompressionDir.exists()) assetCompressionDir.mkdirs() - - val brotli = findToolInPath("brotli") - ?: throw Exception("Brotli not found in path") - val optipng = findToolInPath("optipng") - - if (optipng == null || optipng.isEmpty()) { - println("Optipng was not found in PATH, optimizing images will be skipped.") - } - - copy { - from(zipTree(input)) - into(tempDir) - } - - val metaInf = File(tempDir, "META-INF") - val metaInfFiles = metaInf.listFiles() - for (file in metaInfFiles!!) { - if (file.name.endsWith("MF") || file.name.endsWith("SF") - || file.name.endsWith("RSA")) { - file.delete() - } - } - - val arches = File(tempDir, "lib").listFiles() - val compressedLibs = mutableMapOf() - for (arch in arches!!) { - val libFlutter = File(arch, "libflutter.so") - - if (!libFlutter.exists()) continue - - val compressedFlutter = File(arch, "libflutter-br.so") - - compressedLibs["libflutter.so"] = libFlutter.sha256() - - println("Compressing ${arch.name}/libflutter.so with brotli") - exec { - commandLine( - brotli, - "-$compressionLevel", - libFlutter.absolutePath, - "-o", compressedFlutter.absolutePath - ) - } - libFlutter.delete() - - val json = groovy.json.JsonBuilder(compressedLibs) - File(arch, "index.so").writeText(json.toString()) - } - - val topDirL = tempDir.absolutePath.length + 1 - val zos = ZipOutputStream(output.outputStream()) - - val coreCount = Runtime.getRuntime().availableProcessors() - val flutterResources = tempDir.walkTopDown().filter{f -> f.absolutePath.contains("flutter_assets")} - val pngFiles = tempDir.walkTopDown().filter{f -> f.name.endsWith(".png")} - - val assetIndex = mutableMapOf() - val indexReadWriteLock = ReentrantReadWriteLock() - - if (compressionLevel == "Z") { - if (optipng != null) { - val executor = Executors.newFixedThreadPool(coreCount) - val futures = mutableListOf>() - - pngFiles.forEach { pngFile -> - val cacheFile = File(optipngCacheDir, pngFile.sha256()) - - if (cacheFile.exists()) { - cacheFile.copyTo(pngFile, true) - } else { - val future = executor.submit { - exec { - commandLine( - optipng, - "-zm", "9", - "-zw", "32k", - "-o9", - pngFile.absolutePath - ) - } - - pngFile.copyTo(cacheFile, true) - } - - futures.add(future) - } - } - - futures.forEach { it.get() } - executor.shutdown() - } - - val executor = Executors.newFixedThreadPool(coreCount) - val futures = mutableListOf>() - - val blacklist = listOf( - // "AssetManifest.bin", - "AssetManifest.json", - "FontManifest.json", - "isolate_snapshot_data", - "kernel_blob.bin", - "NativeAssetsManifest.json", - "NOTICES.Z", - "vm_snapshot_data", - "fonts", - "shaders" - ) - - flutterResources.forEach { f -> - val relName = f.absolutePath.substring(topDirL).replace("\\", "/") - if (f.isDirectory) return@forEach - - val cacheFileRaw = File(assetCompressionDir, f.sha256()+".r") - val cacheFileGz = File(assetCompressionDir, f.sha256()+".gz") - val cacheFileBr = File(assetCompressionDir, f.sha256()+".br") - - if (cacheFileRaw.exists() || cacheFileGz.exists() || cacheFileBr.exists()) { - if (cacheFileRaw.exists()) { - cacheFileRaw.copyTo(f, true) - - indexReadWriteLock.writeLock().lock() - assetIndex[relName] = "r" - indexReadWriteLock.writeLock().unlock() - } else if (cacheFileGz.exists()) { - cacheFileGz.copyTo(f, true) - - indexReadWriteLock.writeLock().lock() - assetIndex[relName] = "g" - indexReadWriteLock.writeLock().unlock() - } else { - cacheFileBr.copyTo(f, true) - - indexReadWriteLock.writeLock().lock() - assetIndex[relName] = "b" - indexReadWriteLock.writeLock().unlock() - } - } else { - val future = executor.submit { - val brTmp = File(f.absolutePath + ".br.tmp") - val gzTmp = File(f.absolutePath + ".gz.tmp") - - var blacklisted = false - for (f in blacklist) { - if (relName.contains(f)) { - blacklisted = true - - break - } - } - - if (!blacklisted) { - println("$relName: Testing with brotli") - exec { - commandLine( - brotli, - "-$compressionLevel", - f.absolutePath, - "-o", brTmp.absolutePath - ) - } - - println("$relName: Testing with gzip") - ant.invokeMethod( - "gzip", mapOf( - "src" to f.absolutePath, - "destfile" to gzTmp.absolutePath, - ) - ) - - println("$brTmp: ${brTmp.length()}") - println("$gzTmp: ${gzTmp.length()}") - if (f.length() < gzTmp.length() && f.length() < brTmp.length()) { - println("$relName: Raw file wins") - - f.copyTo(cacheFileRaw, true) - - indexReadWriteLock.writeLock().lock() - assetIndex[relName] = "r" - indexReadWriteLock.writeLock().unlock() - } else { - if (brTmp.length() < gzTmp.length()) { - println("$relName: Brotli wins") - - f.delete() - brTmp.copyTo(f, true) - brTmp.copyTo(cacheFileBr, true) - - indexReadWriteLock.writeLock().lock() - assetIndex[relName] = "b" - indexReadWriteLock.writeLock().unlock() - } else { - println("$relName: Gzip wins") - - f.delete() - gzTmp.copyTo(f, true) - gzTmp.copyTo(cacheFileGz, true) - - indexReadWriteLock.writeLock().lock() - assetIndex[relName] = "g" - indexReadWriteLock.writeLock().unlock() - } - } - - brTmp.delete() - gzTmp.delete() - } - } - - futures.add(future) - } - } - - futures.forEach { it.get() } - executor.shutdown() - } - - tempDir.walkTopDown().forEach { f -> - if (f.absolutePath == tempDir.absolutePath) return@forEach - - var relName = f.absolutePath.substring(topDirL).replace("\\", "/") - if (f.isDirectory && !relName.endsWith("/")) relName += "/" - - if (compressionLevel == "Z") { - if (relName == "assets/flutter_assets/assets/firka.i") return@forEach - } - - println(relName) - - val compress = !relName.endsWith(".so") && !relName.endsWith(".arsc") - zos.setMethod(if (compress) { DEFLATED } else { STORED }) - val entry = ZipEntry(relName) - if (!compress) { - entry.size = f.length() - entry.crc = FileUtils.checksumCRC32(f) - } - zos.putNextEntry(entry) - if (f.isFile) { - zos.write(f.readBytes()) - } - zos.closeEntry() - } - if (compressionLevel == "Z") { - zos.setMethod(DEFLATED) - zos.putNextEntry(ZipEntry("assets/flutter_assets/assets/firka.i")) - - val indexUncompressed = File(tempDir, "index.json") - indexReadWriteLock.readLock().lock() - val json = groovy.json.JsonBuilder(assetIndex) - indexReadWriteLock.readLock().unlock() - indexUncompressed.writeText(json.toString()) - - val indexCompressed = File(tempDir, "index.json.br") - - exec { - commandLine( - brotli, - "-$compressionLevel", - indexUncompressed.absolutePath, - "-o", indexCompressed.absolutePath - ) - } - - zos.write(indexCompressed.readBytes()) - indexUncompressed.delete() - indexCompressed.delete() - - zos.closeEntry() - } - zos.close() - - tempDir.deleteRecursively() - println("APK transformed successfully") -} - -fun transformAppBundle() { - val buildDir = project.buildDir - val bundle = File(buildDir, "outputs/bundle/release/app-release.aab") - val bundleTmp = File(buildDir, "outputs/bundle/release/tmp.zip") - - val apks = getApks(false) - val apkCount = apks.count { it.name.startsWith("app-") && it.name.endsWith("-release.apk") } - - if (!bundle.exists()) { - throw Exception("Bundle not found at: $bundle") - } - - if (apkCount < 3) { - throw Exception("Excepected 3 apks per abi but only found $apkCount") - } - - val aabTempDir = File(project.buildDir, "tmp/aab-transform") - aabTempDir.deleteRecursively() - aabTempDir.mkdirs() - - val apksUnzipped = File(project.buildDir, "tmp/apks-unzipped") - apksUnzipped.deleteRecursively() - - val arm32TempDir = File(apksUnzipped, "armeabi-v7a") - arm32TempDir.mkdirs() - val arm64TempDir = File(apksUnzipped, "arm64-v8a") - arm64TempDir.mkdirs() - val x86TempDir = File(apksUnzipped, "x86_64") - x86TempDir.mkdirs() - - copy { - from(zipTree(bundle)) - into(aabTempDir) - } - copy { - from(zipTree(apks.first { it.name.contains("armeabi-v7a") })) - into(arm32TempDir) - } - copy { - from(zipTree(apks.first { it.name.contains("arm64-v8a") })) - into(arm64TempDir) - } - copy { - from(zipTree(apks.first { it.name.contains("x86_64") })) - into(x86TempDir) - } - - val libs = File(aabTempDir, "base/lib").listFiles()!! - - for (dstLibs in libs) { - println("Copying lib: ${dstLibs.name}") - val srcDir = File(apksUnzipped, dstLibs.name) - if (!srcDir.exists()) { - continue - } - val srcLibs = File(srcDir, "lib/${dstLibs.name}/") - - dstLibs.listFiles()!!.forEach { it.delete() } - srcLibs.listFiles()!!.forEach { it.copyTo(File(dstLibs, it.name)) } - } - - val zos = ZipOutputStream(bundleTmp.outputStream()) - val bundleZip = ZipFile(bundle) - val bundleEntries = bundleZip.entries() - - val brotli = findToolInPath("brotli") - ?: throw Exception("Brotli not found in path") - val optipng = findToolInPath("optipng") - ?: throw Exception("Optipng not found in path") - - val indexReadWriteLock = ReentrantReadWriteLock() - val assetIndex = mutableMapOf() - - while (bundleEntries.hasMoreElements()) { - val entry = bundleEntries.nextElement() - - /* -if (entry.name == "base/assets/flutter_assets/assets/firka.i") { - println("Patching: ${entry.name}") - zos.putNextEntry(ZipEntry("assets/flutter_assets/assets/firka.i")) - - val indexUncompressed = File(aabTempDir, "index.json") - indexReadWriteLock.readLock().lock() - val json = groovy.json.JsonBuilder(assetIndex) - indexReadWriteLock.readLock().unlock() - indexUncompressed.writeText(json.toString()) - - val indexCompressed = File(aabTempDir, "index.json.br") - - exec { - commandLine( - brotli, - "-Z", - indexUncompressed.absolutePath, - "-o", indexCompressed.absolutePath - ) - } - - zos.write(indexCompressed.readBytes()) - indexUncompressed.delete() - indexCompressed.delete() - - zos.closeEntry() - continue -} -if (entry.name.startsWith("base/lib")) { - println("Patching: ${entry.name}") - zos.putNextEntry(ZipEntry(entry.name)) - - - - zos.closeEntry() - continue -} -*/ - - println("Adding: ${entry.name}") - - zos.putNextEntry(ZipEntry(entry.name)) - - if (!entry.isDirectory) { - val data = bundleZip.getInputStream(entry).readAllBytes() - zos.write(data) - } - zos.closeEntry() - } - bundleZip.close() - zos.close() - - bundle.delete() - signBundle(bundleTmp, bundle) - bundleTmp.delete() - - aabTempDir.deleteRecursively() - println("AAB transformed successfully") - -} - -fun File.sha256(): String { - val md = MessageDigest.getInstance("SHA-256") - val digest = md.digest(this.readBytes()) - return digest.fold("") { str, it -> str + "%02x".format(it) } -} - -fun getApks(debug: Boolean): List { - val buildDir = project.buildDir - val apkDir = File(buildDir, "outputs/flutter-apk") - val apks = apkDir.listFiles()!! - val flavor = if (debug) { "debug" } else { "release" } - - return apks - .filter { apk -> apk.name.startsWith("app-") && apk.name.endsWith("-$flavor.apk") } - .toList() -} - -fun getDebugKeystorePath(): String { - val userHome = System.getProperty("user.home") - val debugKeystore = File(userHome, ".android/debug.keystore") - - if (!debugKeystore.exists()) { - throw GradleException("Debug keystore not found at: ${debugKeystore.absolutePath}") - } - - return debugKeystore.absolutePath -} - -fun getDefaultAndroidSdkPath(): String? { - val os = System.getProperty("os.name").lowercase() - val userHome = System.getProperty("user.home") - val zipAlign = File("/usr/bin/zipalign") - - if (zipAlign.exists()) { - return "/usr/bin" - } - - return when { - os.contains("win") -> - "$userHome\\AppData\\Local\\Android\\Sdk" - os.contains("mac") -> - "$userHome/Library/Android/sdk" - os.contains("linux") -> - "$userHome/Android/Sdk" - else -> null - } -} - -fun findToolInPath(toolName: String): String? { - val pathEnvironment = System.getenv("PATH") - val pathDirs = pathEnvironment.split(File.pathSeparator) - - val executableNames = when { - System.getProperty("os.name").lowercase().contains("win") -> - listOf("$toolName.exe", toolName) - else -> - listOf(toolName) - } - - for (pathDir in pathDirs) { - for (execName in executableNames) { - val possibleTool = File(pathDir, execName) - if (possibleTool.exists() && possibleTool.canExecute()) { - return possibleTool.absolutePath - } - } - } - - return null -} - -fun findToolInSdkPath(toolName: String): String? { - var androidHome : String? = System.getenv("ANDROID_HOME") - ?: System.getenv("ANDROID_SDK_ROOT") - - if (androidHome == null) androidHome = getDefaultAndroidSdkPath() - - if (androidHome != null) { - val buildTools = File(androidHome, "build-tools") - if (buildTools.exists()) { - val latestVersion = buildTools.listFiles() - ?.filter { it.isDirectory } - ?.filter { it.name != "debian" } - ?.maxByOrNull { it.name } - - if (latestVersion != null) { - val toolExec = File(latestVersion, toolName) - if (toolExec.exists()) { - return toolExec.absolutePath - } - } - } else { - val toolExec = File(androidHome, toolName) - if (toolExec.exists()) { - return toolExec.absolutePath - } - } - } - - if (!toolName.contains(".exe")) { - val exeTool = findToolInSdkPath("$toolName.exe") - if (exeTool != null) return exeTool - } - if (!toolName.contains(".sh")) { - val shTool = findToolInSdkPath("$toolName.sh") - if (shTool != null) return shTool - } - if (!toolName.contains(".bat")) { - val batTool = findToolInSdkPath("$toolName.bat") - if (batTool != null) return batTool - } - - return null -} - -fun signWithDebugKey(input: File, output: File) { - val debugKeystore = getDebugKeystorePath() - val debugKeystorePassword = "android" - val debugKeyAlias = "androiddebugkey" - val debugKeyPassword = "android" - - val zipAlign: String = findToolInSdkPath("zipalign") - ?: throw Exception("Could not find zipalign in ANDROID_SDK") - val apksigner: String = findToolInSdkPath("apksigner") - ?: throw Exception("Could not find zipalign in ANDROID_SDK") - - exec { - commandLine( - zipAlign, - "-v", "4", - input.absolutePath, - output.absolutePath - ) - } - - exec { - commandLine( - apksigner, "sign", - "--ks", debugKeystore, - "--ks-pass", "pass:$debugKeystorePassword", - "--ks-key-alias", debugKeyAlias, - "--key-pass", "pass:$debugKeyPassword", - output.absolutePath - ) - } - - println("APK signed and aligned successfully") -} - -fun signWithReleaseKey(input: File, output: File) { - val secretsDir = File(projectDir.absolutePath, "../../../secrets/") - val propsFile = File(secretsDir, "keystore.properties") - - if (!propsFile.exists()) { - throw Exception("Release keystore not found!") - } - - val props = loadProperties(propsFile) - - val releaseKeystore = File(secretsDir, props["storeFile"].toString()) - val releaseKeystorePassword = props["storePassword"] as String - val releaseKeyAlias = props["keyAlias"] as String - val releaseKeyPassword = props["keyPassword"] as String - - val zipAlign: String = findToolInSdkPath("zipalign") - ?: throw Exception("Could not find zipalign either in ANDROID_SDK") - val apksigner: String = findToolInSdkPath("apksigner") - ?: throw Exception("Could not find zipalign either in ANDROID_SDK") - - exec { - commandLine( - zipAlign, - "-v", "4", - input.absolutePath, - output.absolutePath - ) - } - - exec { - commandLine( - apksigner, "sign", - "--ks", releaseKeystore, - "--ks-pass", "pass:$releaseKeystorePassword", - "--ks-key-alias", releaseKeyAlias, - "--key-pass", "pass:$releaseKeyPassword", - output.absolutePath - ) - } - - println("APK signed and aligned successfully") -} - -fun signBundle(input: File, output: File) { - val secretsDir = File(projectDir.absolutePath, "../../../secrets/") - val propsFile = File(secretsDir, "keystore.properties") - - if (!propsFile.exists()) { - throw Exception("Release keystore not found!") - } - - val props = loadProperties(propsFile) - - val releaseKeystore = File(secretsDir, props["storeFile"].toString()) - val releaseKeystorePassword = props["storePassword"] as String - val releaseKeyAlias = props["keyAlias"] as String - val releaseKeyPassword = props["keyPassword"] as String - - // val zipAlign: String = findToolInSdkPath("zipalign") - // ?: throw Exception("Could not find zipalign in ANDROID_SDK") - val jarsigner: String = findToolInPath("jarsigner") - ?: throw Exception("Could not find jarsigner in PATH") - - /* - exec { - commandLine( - zipAlign, - "-v", "4", - input.absolutePath, - output.absolutePath - ) - } - */ - input.copyTo(output, true) - - exec { - // -keystore $KEYSTORE -storetype $STORETYPE -storepass $STOREPASS -digestalg SHA1 -sigalg SHA256withRSA application.zip $KEYALIAS - commandLine( - jarsigner, - "-verbose", - "-sigalg", "SHA256withRSA", - "-digestalg", "SHA-256", - "-keystore", releaseKeystore, - "-storepass", releaseKeystorePassword, - output.absolutePath, - releaseKeyAlias - ) - } - - println("AAB signed and aligned successfully") -} +} \ No newline at end of file diff --git a/firka/android/app/src/main/kotlin/app/firka/naplo/AppMain.kt b/firka/android/app/src/main/kotlin/app/firka/naplo/AppMain.kt index 2186be9..e6ba7bc 100644 --- a/firka/android/app/src/main/kotlin/app/firka/naplo/AppMain.kt +++ b/firka/android/app/src/main/kotlin/app/firka/naplo/AppMain.kt @@ -1,99 +1,5 @@ package app.firka.naplo -import android.annotation.SuppressLint import android.app.Application -import android.os.Build -import android.util.Log -import org.brotli.dec.BrotliInputStream -import org.json.JSONObject -import java.io.File -import java.io.FileOutputStream -import java.security.MessageDigest -import java.util.zip.ZipFile -class AppMain : Application() { - - private fun File.sha256(): String { - if (!exists()) return "0000000000000000000000000000000000000000000000000000000000000000" - - val md = MessageDigest.getInstance("SHA-256") - val digest = md.digest(this.readBytes()) - return digest.fold("") { str, it -> str + "%02x".format(it) } - } - - @SuppressLint("UnsafeDynamicallyLoadedCode") - override fun onCreate() { - super.onCreate() - - var useUncompressedLibs = false - - val abi = Build.SUPPORTED_ABIS[0] - - val apks = File(applicationInfo.nativeLibraryDir, "../..").absoluteFile - .listFiles()!! - .filter { file -> file.name.endsWith(".apk") } - .toList() - - var nativesApkN: ZipFile? = null - for (apk in apks) { - if (nativesApkN != null) break - - val zip = ZipFile(apk) - val entries = zip.entries() - - while (entries.hasMoreElements()) { - val entry = entries.nextElement() - - if (entry.name.endsWith("$abi/index.so")) { - zip.close() - nativesApkN = ZipFile(apk) - break - } - if (entry.name.endsWith("$abi/libflutter.so")) { - useUncompressedLibs = true - break - } - } - - zip.close() - } - - if (useUncompressedLibs) { - return; - } - - if (nativesApkN == null) { - throw Exception("Can't find native libraries") - } - val nativesApk: ZipFile = nativesApkN - - val compressedLibsIndex = nativesApk.getInputStream( - nativesApk.getEntry("lib/$abi/index.so") - ) - val compressedLibs = JSONObject(compressedLibsIndex.readBytes().toString(Charsets.UTF_8)) - - for (so in compressedLibs.keys()) { - val soFile = File(cacheDir, so) - - if (soFile.sha256() == compressedLibs.getString(so)) { - System.load(soFile.absolutePath) - return - } - - Log.d("AppMain", "Decompressing: $so") - val brInput = nativesApk.getInputStream( - nativesApk.getEntry("lib/$abi/${so.replace(".so", "-br.so")}") - ) - val soOutput = FileOutputStream(soFile) - - val brIn = BrotliInputStream(brInput) - brIn.copyTo(soOutput) - - brInput.close() - soOutput.close() - - System.load(soFile.absolutePath) - } - } - -} \ No newline at end of file +class AppMain : Application() {} \ No newline at end of file diff --git a/firka/android/build.gradle.kts b/firka/android/build.gradle.kts index cac7250..3912a0d 100644 --- a/firka/android/build.gradle.kts +++ b/firka/android/build.gradle.kts @@ -22,8 +22,8 @@ subprojects { if (plugins.hasPlugin("com.android.application") || plugins.hasPlugin("com.android.library")) { val androidExtension = extensions.getByName("android") as BaseExtension androidExtension.apply { - compileSdkVersion(35) - buildToolsVersion = "35.0.0" + compileSdkVersion(36) + buildToolsVersion = "36.1.0" } } if (hasProperty("android")) { diff --git a/firka/android/gradle/wrapper/gradle-wrapper.properties b/firka/android/gradle/wrapper/gradle-wrapper.properties index afa1e8e..e4ef43f 100644 --- a/firka/android/gradle/wrapper/gradle-wrapper.properties +++ b/firka/android/gradle/wrapper/gradle-wrapper.properties @@ -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.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip diff --git a/firka/android/settings.gradle.kts b/firka/android/settings.gradle.kts index a439442..e841be4 100644 --- a/firka/android/settings.gradle.kts +++ b/firka/android/settings.gradle.kts @@ -18,8 +18,9 @@ pluginManagement { plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.7.0" apply false - id("org.jetbrains.kotlin.android") version "1.8.22" apply false + id("com.android.application") version "8.11.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false + id("org.jetbrains.kotlin.plugin.compose") version "2.1.0" apply false } include(":app") diff --git a/firka/integration_test/phone_main_home_test.dart b/firka/integration_test/phone_main_home_test.dart deleted file mode 100644 index cd2330a..0000000 --- a/firka/integration_test/phone_main_home_test.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:firka/helpers/db/models/generic_cache_model.dart'; -import 'package:firka/helpers/db/models/timetable_cache_model.dart'; -import 'package:firka/helpers/db/models/token_model.dart'; -import 'package:firka/main.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:integration_test/integration_test.dart'; -import 'package:isar/isar.dart'; -import 'package:path_provider/path_provider.dart'; - -import 'test_helpers.dart'; - -Future main() async { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - - await resetAppData(); - setApiUrls(); - - group('main', () { - testWidgets('InitializationScreen -> HomeScreen', (tester) async { - final dir = await getApplicationDocumentsDirectory(); - - var isar = await Isar.open( - [TokenModelSchema, GenericCacheModelSchema, TimetableCacheModelSchema], - inspector: true, - directory: dir.path, - ); - isarInit = isar; - - await isar.writeTxn(() async { - await isar.tokenModels.put(TokenModel()); - }); - - await tester.pumpWidget(InitializationScreen()); - - await waitUntil(Duration(minutes: 2), tester, () async { - var ele = find.byKey(const Key('homeScreen')); - return ele.allCandidates.isNotEmpty; - }); - }); - }); -} diff --git a/firka/integration_test/phone_main_login_test.dart b/firka/integration_test/phone_main_login_test.dart deleted file mode 100644 index da0bdcd..0000000 --- a/firka/integration_test/phone_main_login_test.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:firka/main.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:integration_test/integration_test.dart'; - -import 'test_helpers.dart'; - -Future main() async { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - - await resetAppData(); - setApiUrls(); - - group('main', () { - testWidgets('InitializationScreen -> LoginScreen', (tester) async { - await tester.pumpWidget(InitializationScreen()); - - await waitUntil(Duration(minutes: 2), tester, () async { - var ele = find.byKey(const Key('loginScreen')); - return ele.allCandidates.isNotEmpty; - }); - }); - }); -} diff --git a/firka/integration_test/test_helpers.dart b/firka/integration_test/test_helpers.dart deleted file mode 100644 index bce4996..0000000 --- a/firka/integration_test/test_helpers.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:firka/helpers/api/consts.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:path_provider/path_provider.dart'; - -Future isWear() async { - const platform = MethodChannel('firka.app/main'); - - return await platform.invokeMethod("isWear"); -} - -Future isPhone() async { - return !(await isWear()); -} - -Future resetAppData() async { - final isarDir = await getApplicationDocumentsDirectory(); - if (await isarDir.exists()) await isarDir.delete(recursive: true); -} - -void setApiUrls() { - KretaEndpoints.kretaBase = "localhost:8060"; - KretaEndpoints.kretaIdp = "http://localhost:8060"; - KretaEndpoints.kretaLoginUrl = - "${KretaEndpoints.kretaIdp}/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fprompt%3Dlogin%26nonce%3DwylCrqT4oN6PPgQn2yQB0euKei9nJeZ6_ffJ-VpSKZU%26response_type%3Dcode%26code_challenge_method%3DS256%26scope%3Dopenid%2520email%2520offline_access%2520kreta-ellenorzo-webapi.public%2520kreta-eugyintezes-webapi.public%2520kreta-fileservice-webapi.public%2520kreta-mobile-global-webapi.public%2520kreta-dkt-webapi.public%2520kreta-ier-webapi.public%26code_challenge%3DHByZRRnPGb-Ko_wTI7ibIba1HQ6lor0ws4bcgReuYSQ%26redirect_uri%3Dhttps%253A%252F%252Fmobil.e-kreta.hu%252Fellenorzo-student%252Fprod%252Foauthredirect%26client_id%3Dkreta-ellenorzo-student-mobile-ios%26state%3Dkreta_student_mobile%26suppressed_prompt%3Dlogin"; - KretaEndpoints.tokenGrantUrl = "${KretaEndpoints.kretaIdp}/connect/token"; -} - -Future waitUntil(Duration timeout, WidgetTester tester, - Future Function() callback) async { - var now = DateTime.now(); - while ( - now.difference(DateTime.now()).inMilliseconds < timeout.inMilliseconds) { - await tester.pump(Duration(milliseconds: 100)); - - if (await callback()) { - return; - } - } - - throw Exception("waitUntil timed out"); -} diff --git a/firka/lib/helpers/api/client/kreta_client.dart b/firka/lib/helpers/api/client/kreta_client.dart index 98aa8ff..7966542 100644 --- a/firka/lib/helpers/api/client/kreta_client.dart +++ b/firka/lib/helpers/api/client/kreta_client.dart @@ -9,7 +9,7 @@ import 'package:firka/helpers/api/model/timetable.dart'; import 'package:firka/helpers/db/models/generic_cache_model.dart'; import 'package:firka/helpers/db/models/timetable_cache_model.dart'; import 'package:intl/intl.dart'; -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import '../../../main.dart'; import '../../db/models/token_model.dart'; diff --git a/firka/lib/helpers/db/models/app_settings_model.dart b/firka/lib/helpers/db/models/app_settings_model.dart index 3802c1b..c117825 100644 --- a/firka/lib/helpers/db/models/app_settings_model.dart +++ b/firka/lib/helpers/db/models/app_settings_model.dart @@ -1,4 +1,4 @@ -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; part 'app_settings_model.g.dart'; diff --git a/firka/lib/helpers/db/models/app_settings_model.g.dart b/firka/lib/helpers/db/models/app_settings_model.g.dart index c8e3a80..be5282b 100644 --- a/firka/lib/helpers/db/models/app_settings_model.g.dart +++ b/firka/lib/helpers/db/models/app_settings_model.g.dart @@ -36,8 +36,9 @@ const AppSettingsModelSchema = CollectionSchema( id: 3, name: r'valueString', type: IsarType.string, - ) + ), }, + estimateSize: _appSettingsModelEstimateSize, serialize: _appSettingsModelSerialize, deserialize: _appSettingsModelDeserialize, @@ -46,10 +47,11 @@ const AppSettingsModelSchema = CollectionSchema( indexes: {}, links: {}, embeddedSchemas: {}, + getId: _appSettingsModelGetId, getLinks: _appSettingsModelGetLinks, attach: _appSettingsModelAttach, - version: '3.1.0+1', + version: '3.3.0', ); int _appSettingsModelEstimateSize( @@ -123,7 +125,10 @@ List> _appSettingsModelGetLinks(AppSettingsModel object) { } void _appSettingsModelAttach( - IsarCollection col, Id id, AppSettingsModel object) { + IsarCollection col, + Id id, + AppSettingsModel object, +) { object.id = id; } @@ -139,17 +144,15 @@ extension AppSettingsModelQueryWhereSort extension AppSettingsModelQueryWhere on QueryBuilder { QueryBuilder idEqualTo( - Id id) { + Id id, + ) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: id, - upper: id, - )); + return query.addWhereClause(IdWhereClause.between(lower: id, upper: id)); }); } QueryBuilder - idNotEqualTo(Id id) { + idNotEqualTo(Id id) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -172,7 +175,7 @@ extension AppSettingsModelQueryWhere } QueryBuilder - idGreaterThan(Id id, {bool include = false}) { + idGreaterThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: id, includeLower: include), @@ -181,7 +184,7 @@ extension AppSettingsModelQueryWhere } QueryBuilder - idLessThan(Id id, {bool include = false}) { + idLessThan(Id id, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: id, includeUpper: include), @@ -196,12 +199,14 @@ extension AppSettingsModelQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerId, - includeLower: includeLower, - upper: upperId, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerId, + includeLower: includeLower, + upper: upperId, + includeUpper: includeUpper, + ), + ); }); } } @@ -209,173 +214,177 @@ extension AppSettingsModelQueryWhere extension AppSettingsModelQueryFilter on QueryBuilder { QueryBuilder - idIsNull() { + idIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'id', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'id'), + ); }); } QueryBuilder - idIsNotNull() { + idIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'id', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'id'), + ); }); } QueryBuilder - idEqualTo(Id? value) { + idEqualTo(Id? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'id', value: value), + ); }); } QueryBuilder - idGreaterThan( - Id? value, { - bool include = false, - }) { + idGreaterThan(Id? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'id', + value: value, + ), + ); }); } QueryBuilder - idLessThan( - Id? value, { - bool include = false, - }) { + idLessThan(Id? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'id', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'id', + value: value, + ), + ); }); } QueryBuilder - idBetween( + idBetween( Id? lower, Id? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'id', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'id', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - valueBoolIsNull() { + valueBoolIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'valueBool', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'valueBool'), + ); }); } QueryBuilder - valueBoolIsNotNull() { + valueBoolIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'valueBool', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'valueBool'), + ); }); } QueryBuilder - valueBoolEqualTo(bool? value) { + valueBoolEqualTo(bool? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'valueBool', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'valueBool', value: value), + ); }); } QueryBuilder - valueDoubleIsNull() { + valueDoubleIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'valueDouble', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'valueDouble'), + ); }); } QueryBuilder - valueDoubleIsNotNull() { + valueDoubleIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'valueDouble', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'valueDouble'), + ); }); } QueryBuilder - valueDoubleEqualTo( - double? value, { - double epsilon = Query.epsilon, - }) { + valueDoubleEqualTo(double? value, {double epsilon = Query.epsilon}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'valueDouble', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'valueDouble', + value: value, + + epsilon: epsilon, + ), + ); }); } QueryBuilder - valueDoubleGreaterThan( + valueDoubleGreaterThan( double? value, { bool include = false, double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'valueDouble', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'valueDouble', + value: value, + + epsilon: epsilon, + ), + ); }); } QueryBuilder - valueDoubleLessThan( + valueDoubleLessThan( double? value, { bool include = false, double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'valueDouble', - value: value, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'valueDouble', + value: value, + + epsilon: epsilon, + ), + ); }); } QueryBuilder - valueDoubleBetween( + valueDoubleBetween( double? lower, double? upper, { bool includeLower = true, @@ -383,157 +392,162 @@ extension AppSettingsModelQueryFilter double epsilon = Query.epsilon, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'valueDouble', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - epsilon: epsilon, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'valueDouble', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + + epsilon: epsilon, + ), + ); }); } QueryBuilder - valueIndexIsNull() { + valueIndexIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'valueIndex', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'valueIndex'), + ); }); } QueryBuilder - valueIndexIsNotNull() { + valueIndexIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'valueIndex', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'valueIndex'), + ); }); } QueryBuilder - valueIndexEqualTo(int? value) { + valueIndexEqualTo(int? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'valueIndex', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'valueIndex', value: value), + ); }); } QueryBuilder - valueIndexGreaterThan( - int? value, { - bool include = false, - }) { + valueIndexGreaterThan(int? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'valueIndex', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'valueIndex', + value: value, + ), + ); }); } QueryBuilder - valueIndexLessThan( - int? value, { - bool include = false, - }) { + valueIndexLessThan(int? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'valueIndex', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'valueIndex', + value: value, + ), + ); }); } QueryBuilder - valueIndexBetween( + valueIndexBetween( int? lower, int? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'valueIndex', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'valueIndex', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - valueStringIsNull() { + valueStringIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'valueString', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'valueString'), + ); }); } QueryBuilder - valueStringIsNotNull() { + valueStringIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'valueString', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'valueString'), + ); }); } QueryBuilder - valueStringEqualTo( - String? value, { - bool caseSensitive = true, - }) { + valueStringEqualTo(String? value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'valueString', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valueStringGreaterThan( + valueStringGreaterThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'valueString', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valueStringLessThan( + valueStringLessThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'valueString', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valueStringBetween( + valueStringBetween( String? lower, String? upper, { bool includeLower = true, @@ -541,84 +555,86 @@ extension AppSettingsModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'valueString', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'valueString', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valueStringStartsWith( - String value, { - bool caseSensitive = true, - }) { + valueStringStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'valueString', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valueStringEndsWith( - String value, { - bool caseSensitive = true, - }) { + valueStringEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'valueString', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valueStringContains(String value, {bool caseSensitive = true}) { + valueStringContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'valueString', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'valueString', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valueStringMatches(String pattern, {bool caseSensitive = true}) { + valueStringMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'valueString', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'valueString', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valueStringIsEmpty() { + valueStringIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'valueString', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'valueString', value: ''), + ); }); } QueryBuilder - valueStringIsNotEmpty() { + valueStringIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'valueString', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'valueString', value: ''), + ); }); } } @@ -632,56 +648,56 @@ extension AppSettingsModelQueryLinks extension AppSettingsModelQuerySortBy on QueryBuilder { QueryBuilder - sortByValueBool() { + sortByValueBool() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueBool', Sort.asc); }); } QueryBuilder - sortByValueBoolDesc() { + sortByValueBoolDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueBool', Sort.desc); }); } QueryBuilder - sortByValueDouble() { + sortByValueDouble() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueDouble', Sort.asc); }); } QueryBuilder - sortByValueDoubleDesc() { + sortByValueDoubleDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueDouble', Sort.desc); }); } QueryBuilder - sortByValueIndex() { + sortByValueIndex() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueIndex', Sort.asc); }); } QueryBuilder - sortByValueIndexDesc() { + sortByValueIndexDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueIndex', Sort.desc); }); } QueryBuilder - sortByValueString() { + sortByValueString() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueString', Sort.asc); }); } QueryBuilder - sortByValueStringDesc() { + sortByValueStringDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueString', Sort.desc); }); @@ -697,63 +713,63 @@ extension AppSettingsModelQuerySortThenBy } QueryBuilder - thenByIdDesc() { + thenByIdDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'id', Sort.desc); }); } QueryBuilder - thenByValueBool() { + thenByValueBool() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueBool', Sort.asc); }); } QueryBuilder - thenByValueBoolDesc() { + thenByValueBoolDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueBool', Sort.desc); }); } QueryBuilder - thenByValueDouble() { + thenByValueDouble() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueDouble', Sort.asc); }); } QueryBuilder - thenByValueDoubleDesc() { + thenByValueDoubleDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueDouble', Sort.desc); }); } QueryBuilder - thenByValueIndex() { + thenByValueIndex() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueIndex', Sort.asc); }); } QueryBuilder - thenByValueIndexDesc() { + thenByValueIndexDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueIndex', Sort.desc); }); } QueryBuilder - thenByValueString() { + thenByValueString() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueString', Sort.asc); }); } QueryBuilder - thenByValueStringDesc() { + thenByValueStringDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'valueString', Sort.desc); }); @@ -763,28 +779,28 @@ extension AppSettingsModelQuerySortThenBy extension AppSettingsModelQueryWhereDistinct on QueryBuilder { QueryBuilder - distinctByValueBool() { + distinctByValueBool() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'valueBool'); }); } QueryBuilder - distinctByValueDouble() { + distinctByValueDouble() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'valueDouble'); }); } QueryBuilder - distinctByValueIndex() { + distinctByValueIndex() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'valueIndex'); }); } QueryBuilder - distinctByValueString({bool caseSensitive = true}) { + distinctByValueString({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'valueString', caseSensitive: caseSensitive); }); @@ -806,7 +822,7 @@ extension AppSettingsModelQueryProperty } QueryBuilder - valueDoubleProperty() { + valueDoubleProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'valueDouble'); }); @@ -819,7 +835,7 @@ extension AppSettingsModelQueryProperty } QueryBuilder - valueStringProperty() { + valueStringProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'valueString'); }); diff --git a/firka/lib/helpers/db/models/generic_cache_model.dart b/firka/lib/helpers/db/models/generic_cache_model.dart index 175a85b..777ec08 100644 --- a/firka/lib/helpers/db/models/generic_cache_model.dart +++ b/firka/lib/helpers/db/models/generic_cache_model.dart @@ -1,4 +1,4 @@ -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; part 'generic_cache_model.g.dart'; diff --git a/firka/lib/helpers/db/models/generic_cache_model.g.dart b/firka/lib/helpers/db/models/generic_cache_model.g.dart index 587d5d8..76f65d7 100644 --- a/firka/lib/helpers/db/models/generic_cache_model.g.dart +++ b/firka/lib/helpers/db/models/generic_cache_model.g.dart @@ -21,8 +21,9 @@ const GenericCacheModelSchema = CollectionSchema( id: 0, name: r'cacheData', type: IsarType.string, - ) + ), }, + estimateSize: _genericCacheModelEstimateSize, serialize: _genericCacheModelSerialize, deserialize: _genericCacheModelDeserialize, @@ -31,10 +32,11 @@ const GenericCacheModelSchema = CollectionSchema( indexes: {}, links: {}, embeddedSchemas: {}, + getId: _genericCacheModelGetId, getLinks: _genericCacheModelGetLinks, attach: _genericCacheModelAttach, - version: '3.1.0+1', + version: '3.3.0', ); int _genericCacheModelEstimateSize( @@ -92,19 +94,23 @@ Id _genericCacheModelGetId(GenericCacheModel object) { } List> _genericCacheModelGetLinks( - GenericCacheModel object) { + GenericCacheModel object, +) { return []; } void _genericCacheModelAttach( - IsarCollection col, Id id, GenericCacheModel object) { + IsarCollection col, + Id id, + GenericCacheModel object, +) { object.cacheKey = id; } extension GenericCacheModelQueryWhereSort on QueryBuilder { QueryBuilder - anyCacheKey() { + anyCacheKey() { return QueryBuilder.apply(this, (query) { return query.addWhereClause(const IdWhereClause.any()); }); @@ -114,17 +120,16 @@ extension GenericCacheModelQueryWhereSort extension GenericCacheModelQueryWhere on QueryBuilder { QueryBuilder - cacheKeyEqualTo(Id cacheKey) { + cacheKeyEqualTo(Id cacheKey) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: cacheKey, - upper: cacheKey, - )); + return query.addWhereClause( + IdWhereClause.between(lower: cacheKey, upper: cacheKey), + ); }); } QueryBuilder - cacheKeyNotEqualTo(Id cacheKey) { + cacheKeyNotEqualTo(Id cacheKey) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -147,7 +152,7 @@ extension GenericCacheModelQueryWhere } QueryBuilder - cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { + cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: cacheKey, includeLower: include), @@ -156,7 +161,7 @@ extension GenericCacheModelQueryWhere } QueryBuilder - cacheKeyLessThan(Id cacheKey, {bool include = false}) { + cacheKeyLessThan(Id cacheKey, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: cacheKey, includeUpper: include), @@ -165,19 +170,21 @@ extension GenericCacheModelQueryWhere } QueryBuilder - cacheKeyBetween( + cacheKeyBetween( Id lowerCacheKey, Id upperCacheKey, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerCacheKey, - includeLower: includeLower, - upper: upperCacheKey, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerCacheKey, + includeLower: includeLower, + upper: upperCacheKey, + includeUpper: includeUpper, + ), + ); }); } } @@ -185,71 +192,74 @@ extension GenericCacheModelQueryWhere extension GenericCacheModelQueryFilter on QueryBuilder { QueryBuilder - cacheDataIsNull() { + cacheDataIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'cacheData', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'cacheData'), + ); }); } QueryBuilder - cacheDataIsNotNull() { + cacheDataIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'cacheData', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'cacheData'), + ); }); } QueryBuilder - cacheDataEqualTo( - String? value, { - bool caseSensitive = true, - }) { + cacheDataEqualTo(String? value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'cacheData', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - cacheDataGreaterThan( + cacheDataGreaterThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'cacheData', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - cacheDataLessThan( + cacheDataLessThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'cacheData', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - cacheDataBetween( + cacheDataBetween( String? lower, String? upper, { bool includeLower = true, @@ -257,158 +267,159 @@ extension GenericCacheModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'cacheData', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'cacheData', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - cacheDataStartsWith( - String value, { - bool caseSensitive = true, - }) { + cacheDataStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'cacheData', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - cacheDataEndsWith( - String value, { - bool caseSensitive = true, - }) { + cacheDataEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'cacheData', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - cacheDataContains(String value, {bool caseSensitive = true}) { + cacheDataContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'cacheData', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'cacheData', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - cacheDataMatches(String pattern, {bool caseSensitive = true}) { + cacheDataMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'cacheData', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'cacheData', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - cacheDataIsEmpty() { + cacheDataIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'cacheData', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'cacheData', value: ''), + ); }); } QueryBuilder - cacheDataIsNotEmpty() { + cacheDataIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'cacheData', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'cacheData', value: ''), + ); }); } QueryBuilder - cacheKeyIsNull() { + cacheKeyIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'cacheKey', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'cacheKey'), + ); }); } QueryBuilder - cacheKeyIsNotNull() { + cacheKeyIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'cacheKey', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'cacheKey'), + ); }); } QueryBuilder - cacheKeyEqualTo(Id? value) { + cacheKeyEqualTo(Id? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'cacheKey', value: value), + ); }); } QueryBuilder - cacheKeyGreaterThan( - Id? value, { - bool include = false, - }) { + cacheKeyGreaterThan(Id? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'cacheKey', + value: value, + ), + ); }); } QueryBuilder - cacheKeyLessThan( - Id? value, { - bool include = false, - }) { + cacheKeyLessThan(Id? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'cacheKey', + value: value, + ), + ); }); } QueryBuilder - cacheKeyBetween( + cacheKeyBetween( Id? lower, Id? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'cacheKey', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'cacheKey', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } } @@ -422,14 +433,14 @@ extension GenericCacheModelQueryLinks extension GenericCacheModelQuerySortBy on QueryBuilder { QueryBuilder - sortByCacheData() { + sortByCacheData() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheData', Sort.asc); }); } QueryBuilder - sortByCacheDataDesc() { + sortByCacheDataDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheData', Sort.desc); }); @@ -439,28 +450,28 @@ extension GenericCacheModelQuerySortBy extension GenericCacheModelQuerySortThenBy on QueryBuilder { QueryBuilder - thenByCacheData() { + thenByCacheData() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheData', Sort.asc); }); } QueryBuilder - thenByCacheDataDesc() { + thenByCacheDataDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheData', Sort.desc); }); } QueryBuilder - thenByCacheKey() { + thenByCacheKey() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheKey', Sort.asc); }); } QueryBuilder - thenByCacheKeyDesc() { + thenByCacheKeyDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheKey', Sort.desc); }); @@ -470,7 +481,7 @@ extension GenericCacheModelQuerySortThenBy extension GenericCacheModelQueryWhereDistinct on QueryBuilder { QueryBuilder - distinctByCacheData({bool caseSensitive = true}) { + distinctByCacheData({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'cacheData', caseSensitive: caseSensitive); }); @@ -486,7 +497,7 @@ extension GenericCacheModelQueryProperty } QueryBuilder - cacheDataProperty() { + cacheDataProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'cacheData'); }); diff --git a/firka/lib/helpers/db/models/homework_cache_model.dart b/firka/lib/helpers/db/models/homework_cache_model.dart index 7027406..6ab664b 100644 --- a/firka/lib/helpers/db/models/homework_cache_model.dart +++ b/firka/lib/helpers/db/models/homework_cache_model.dart @@ -1,4 +1,4 @@ -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import '../../debug_helper.dart'; import '../util.dart'; diff --git a/firka/lib/helpers/db/models/homework_cache_model.g.dart b/firka/lib/helpers/db/models/homework_cache_model.g.dart index fa95e9b..b7946ba 100644 --- a/firka/lib/helpers/db/models/homework_cache_model.g.dart +++ b/firka/lib/helpers/db/models/homework_cache_model.g.dart @@ -22,8 +22,9 @@ const HomeworkCacheModelSchema = CollectionSchema( id: 0, name: r'values', type: IsarType.stringList, - ) + ), }, + estimateSize: _homeworkCacheModelEstimateSize, serialize: _homeworkCacheModelSerialize, deserialize: _homeworkCacheModelDeserialize, @@ -32,10 +33,11 @@ const HomeworkCacheModelSchema = CollectionSchema( indexes: {}, links: {}, embeddedSchemas: {}, + getId: _homeworkCacheModelGetId, getLinks: _homeworkCacheModelGetLinks, attach: _homeworkCacheModelAttach, - version: '3.1.0+1', + version: '3.3.0', ); int _homeworkCacheModelEstimateSize( @@ -99,19 +101,23 @@ Id _homeworkCacheModelGetId(HomeworkCacheModel object) { } List> _homeworkCacheModelGetLinks( - HomeworkCacheModel object) { + HomeworkCacheModel object, +) { return []; } void _homeworkCacheModelAttach( - IsarCollection col, Id id, HomeworkCacheModel object) { + IsarCollection col, + Id id, + HomeworkCacheModel object, +) { object.cacheKey = id; } extension HomeworkCacheModelQueryWhereSort on QueryBuilder { QueryBuilder - anyCacheKey() { + anyCacheKey() { return QueryBuilder.apply(this, (query) { return query.addWhereClause(const IdWhereClause.any()); }); @@ -121,17 +127,16 @@ extension HomeworkCacheModelQueryWhereSort extension HomeworkCacheModelQueryWhere on QueryBuilder { QueryBuilder - cacheKeyEqualTo(Id cacheKey) { + cacheKeyEqualTo(Id cacheKey) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: cacheKey, - upper: cacheKey, - )); + return query.addWhereClause( + IdWhereClause.between(lower: cacheKey, upper: cacheKey), + ); }); } QueryBuilder - cacheKeyNotEqualTo(Id cacheKey) { + cacheKeyNotEqualTo(Id cacheKey) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -154,7 +159,7 @@ extension HomeworkCacheModelQueryWhere } QueryBuilder - cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { + cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: cacheKey, includeLower: include), @@ -163,7 +168,7 @@ extension HomeworkCacheModelQueryWhere } QueryBuilder - cacheKeyLessThan(Id cacheKey, {bool include = false}) { + cacheKeyLessThan(Id cacheKey, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: cacheKey, includeUpper: include), @@ -172,19 +177,21 @@ extension HomeworkCacheModelQueryWhere } QueryBuilder - cacheKeyBetween( + cacheKeyBetween( Id lowerCacheKey, Id upperCacheKey, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerCacheKey, - includeLower: includeLower, - upper: upperCacheKey, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerCacheKey, + includeLower: includeLower, + upper: upperCacheKey, + includeUpper: includeUpper, + ), + ); }); } } @@ -192,145 +199,147 @@ extension HomeworkCacheModelQueryWhere extension HomeworkCacheModelQueryFilter on QueryBuilder { QueryBuilder - cacheKeyIsNull() { + cacheKeyIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'cacheKey', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'cacheKey'), + ); }); } QueryBuilder - cacheKeyIsNotNull() { + cacheKeyIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'cacheKey', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'cacheKey'), + ); }); } QueryBuilder - cacheKeyEqualTo(Id? value) { + cacheKeyEqualTo(Id? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'cacheKey', value: value), + ); }); } QueryBuilder - cacheKeyGreaterThan( - Id? value, { - bool include = false, - }) { + cacheKeyGreaterThan(Id? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'cacheKey', + value: value, + ), + ); }); } QueryBuilder - cacheKeyLessThan( - Id? value, { - bool include = false, - }) { + cacheKeyLessThan(Id? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'cacheKey', + value: value, + ), + ); }); } QueryBuilder - cacheKeyBetween( + cacheKeyBetween( Id? lower, Id? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'cacheKey', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'cacheKey', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - valuesIsNull() { + valuesIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'values', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'values'), + ); }); } QueryBuilder - valuesIsNotNull() { + valuesIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'values', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'values'), + ); }); } QueryBuilder - valuesElementEqualTo( - String value, { - bool caseSensitive = true, - }) { + valuesElementEqualTo(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valuesElementGreaterThan( + valuesElementGreaterThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valuesElementLessThan( + valuesElementLessThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valuesElementBetween( + valuesElementBetween( String lower, String upper, { bool includeLower = true, @@ -338,160 +347,126 @@ extension HomeworkCacheModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'values', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'values', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'values', - value: '', - )); - }); - } - - QueryBuilder - valuesElementIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'values', - value: '', - )); - }); - } - - QueryBuilder - valuesLengthEqualTo(int length) { - return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - length, - true, - length, - true, + return query.addFilterCondition( + FilterCondition.between( + property: r'values', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesIsEmpty() { + valuesElementStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - 0, - true, - 0, - true, + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesIsNotEmpty() { + valuesElementEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - 0, - false, - 999999, - true, + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesLengthLessThan( - int length, { - bool include = false, - }) { + valuesElementContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - 0, - true, - length, - include, + return query.addFilterCondition( + FilterCondition.contains( + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesLengthGreaterThan( - int length, { - bool include = false, - }) { + valuesElementMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - length, - include, - 999999, - true, + return query.addFilterCondition( + FilterCondition.matches( + property: r'values', + wildcard: pattern, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesLengthBetween( + valuesElementIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.equalTo(property: r'values', value: ''), + ); + }); + } + + QueryBuilder + valuesElementIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'values', value: ''), + ); + }); + } + + QueryBuilder + valuesLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', length, true, length, true); + }); + } + + QueryBuilder + valuesIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', 0, true, 0, true); + }); + } + + QueryBuilder + valuesIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', 0, false, 999999, true); + }); + } + + QueryBuilder + valuesLengthLessThan(int length, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', 0, true, length, include); + }); + } + + QueryBuilder + valuesLengthGreaterThan(int length, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', length, include, 999999, true); + }); + } + + QueryBuilder + valuesLengthBetween( int lower, int upper, { bool includeLower = true, @@ -521,14 +496,14 @@ extension HomeworkCacheModelQuerySortBy extension HomeworkCacheModelQuerySortThenBy on QueryBuilder { QueryBuilder - thenByCacheKey() { + thenByCacheKey() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheKey', Sort.asc); }); } QueryBuilder - thenByCacheKeyDesc() { + thenByCacheKeyDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheKey', Sort.desc); }); @@ -538,7 +513,7 @@ extension HomeworkCacheModelQuerySortThenBy extension HomeworkCacheModelQueryWhereDistinct on QueryBuilder { QueryBuilder - distinctByValues() { + distinctByValues() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'values'); }); @@ -554,7 +529,7 @@ extension HomeworkCacheModelQueryProperty } QueryBuilder?, QQueryOperations> - valuesProperty() { + valuesProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'values'); }); diff --git a/firka/lib/helpers/db/models/timetable_cache_model.dart b/firka/lib/helpers/db/models/timetable_cache_model.dart index 76411b8..24909e5 100644 --- a/firka/lib/helpers/db/models/timetable_cache_model.dart +++ b/firka/lib/helpers/db/models/timetable_cache_model.dart @@ -1,4 +1,4 @@ -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import '../../debug_helper.dart'; import '../util.dart'; diff --git a/firka/lib/helpers/db/models/timetable_cache_model.g.dart b/firka/lib/helpers/db/models/timetable_cache_model.g.dart index e2874b1..11ce343 100644 --- a/firka/lib/helpers/db/models/timetable_cache_model.g.dart +++ b/firka/lib/helpers/db/models/timetable_cache_model.g.dart @@ -22,8 +22,9 @@ const TimetableCacheModelSchema = CollectionSchema( id: 0, name: r'values', type: IsarType.stringList, - ) + ), }, + estimateSize: _timetableCacheModelEstimateSize, serialize: _timetableCacheModelSerialize, deserialize: _timetableCacheModelDeserialize, @@ -32,10 +33,11 @@ const TimetableCacheModelSchema = CollectionSchema( indexes: {}, links: {}, embeddedSchemas: {}, + getId: _timetableCacheModelGetId, getLinks: _timetableCacheModelGetLinks, attach: _timetableCacheModelAttach, - version: '3.1.0+1', + version: '3.3.0', ); int _timetableCacheModelEstimateSize( @@ -99,19 +101,23 @@ Id _timetableCacheModelGetId(TimetableCacheModel object) { } List> _timetableCacheModelGetLinks( - TimetableCacheModel object) { + TimetableCacheModel object, +) { return []; } void _timetableCacheModelAttach( - IsarCollection col, Id id, TimetableCacheModel object) { + IsarCollection col, + Id id, + TimetableCacheModel object, +) { object.cacheKey = id; } extension TimetableCacheModelQueryWhereSort on QueryBuilder { QueryBuilder - anyCacheKey() { + anyCacheKey() { return QueryBuilder.apply(this, (query) { return query.addWhereClause(const IdWhereClause.any()); }); @@ -121,17 +127,16 @@ extension TimetableCacheModelQueryWhereSort extension TimetableCacheModelQueryWhere on QueryBuilder { QueryBuilder - cacheKeyEqualTo(Id cacheKey) { + cacheKeyEqualTo(Id cacheKey) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: cacheKey, - upper: cacheKey, - )); + return query.addWhereClause( + IdWhereClause.between(lower: cacheKey, upper: cacheKey), + ); }); } QueryBuilder - cacheKeyNotEqualTo(Id cacheKey) { + cacheKeyNotEqualTo(Id cacheKey) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -154,7 +159,7 @@ extension TimetableCacheModelQueryWhere } QueryBuilder - cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { + cacheKeyGreaterThan(Id cacheKey, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: cacheKey, includeLower: include), @@ -163,7 +168,7 @@ extension TimetableCacheModelQueryWhere } QueryBuilder - cacheKeyLessThan(Id cacheKey, {bool include = false}) { + cacheKeyLessThan(Id cacheKey, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: cacheKey, includeUpper: include), @@ -172,165 +177,174 @@ extension TimetableCacheModelQueryWhere } QueryBuilder - cacheKeyBetween( + cacheKeyBetween( Id lowerCacheKey, Id upperCacheKey, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerCacheKey, - includeLower: includeLower, - upper: upperCacheKey, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerCacheKey, + includeLower: includeLower, + upper: upperCacheKey, + includeUpper: includeUpper, + ), + ); }); } } -extension TimetableCacheModelQueryFilter on QueryBuilder { +extension TimetableCacheModelQueryFilter + on + QueryBuilder< + TimetableCacheModel, + TimetableCacheModel, + QFilterCondition + > { QueryBuilder - cacheKeyIsNull() { + cacheKeyIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'cacheKey', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'cacheKey'), + ); }); } QueryBuilder - cacheKeyIsNotNull() { + cacheKeyIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'cacheKey', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'cacheKey'), + ); }); } QueryBuilder - cacheKeyEqualTo(Id? value) { + cacheKeyEqualTo(Id? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'cacheKey', value: value), + ); }); } QueryBuilder - cacheKeyGreaterThan( - Id? value, { - bool include = false, - }) { + cacheKeyGreaterThan(Id? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'cacheKey', + value: value, + ), + ); }); } QueryBuilder - cacheKeyLessThan( - Id? value, { - bool include = false, - }) { + cacheKeyLessThan(Id? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'cacheKey', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'cacheKey', + value: value, + ), + ); }); } QueryBuilder - cacheKeyBetween( + cacheKeyBetween( Id? lower, Id? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'cacheKey', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'cacheKey', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - valuesIsNull() { + valuesIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'values', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'values'), + ); }); } QueryBuilder - valuesIsNotNull() { + valuesIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'values', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'values'), + ); }); } QueryBuilder - valuesElementEqualTo( - String value, { - bool caseSensitive = true, - }) { + valuesElementEqualTo(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valuesElementGreaterThan( + valuesElementGreaterThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valuesElementLessThan( + valuesElementLessThan( String value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - valuesElementBetween( + valuesElementBetween( String lower, String upper, { bool includeLower = true, @@ -338,160 +352,126 @@ extension TimetableCacheModelQueryFilter on QueryBuilder - valuesElementStartsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementEndsWith( - String value, { - bool caseSensitive = true, - }) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementContains(String value, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'values', - value: value, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementMatches(String pattern, {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'values', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - valuesElementIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'values', - value: '', - )); - }); - } - - QueryBuilder - valuesElementIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'values', - value: '', - )); - }); - } - - QueryBuilder - valuesLengthEqualTo(int length) { - return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - length, - true, - length, - true, + return query.addFilterCondition( + FilterCondition.between( + property: r'values', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesIsEmpty() { + valuesElementStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - 0, - true, - 0, - true, + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesIsNotEmpty() { + valuesElementEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - 0, - false, - 999999, - true, + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesLengthLessThan( - int length, { - bool include = false, - }) { + valuesElementContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - 0, - true, - length, - include, + return query.addFilterCondition( + FilterCondition.contains( + property: r'values', + value: value, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesLengthGreaterThan( - int length, { - bool include = false, - }) { + valuesElementMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.listLength( - r'values', - length, - include, - 999999, - true, + return query.addFilterCondition( + FilterCondition.matches( + property: r'values', + wildcard: pattern, + caseSensitive: caseSensitive, + ), ); }); } QueryBuilder - valuesLengthBetween( + valuesElementIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.equalTo(property: r'values', value: ''), + ); + }); + } + + QueryBuilder + valuesElementIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'values', value: ''), + ); + }); + } + + QueryBuilder + valuesLengthEqualTo(int length) { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', length, true, length, true); + }); + } + + QueryBuilder + valuesIsEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', 0, true, 0, true); + }); + } + + QueryBuilder + valuesIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', 0, false, 999999, true); + }); + } + + QueryBuilder + valuesLengthLessThan(int length, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', 0, true, length, include); + }); + } + + QueryBuilder + valuesLengthGreaterThan(int length, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.listLength(r'values', length, include, 999999, true); + }); + } + + QueryBuilder + valuesLengthBetween( int lower, int upper, { bool includeLower = true, @@ -509,11 +489,21 @@ extension TimetableCacheModelQueryFilter on QueryBuilder {} +extension TimetableCacheModelQueryObject + on + QueryBuilder< + TimetableCacheModel, + TimetableCacheModel, + QFilterCondition + > {} -extension TimetableCacheModelQueryLinks on QueryBuilder {} +extension TimetableCacheModelQueryLinks + on + QueryBuilder< + TimetableCacheModel, + TimetableCacheModel, + QFilterCondition + > {} extension TimetableCacheModelQuerySortBy on QueryBuilder {} @@ -521,14 +511,14 @@ extension TimetableCacheModelQuerySortBy extension TimetableCacheModelQuerySortThenBy on QueryBuilder { QueryBuilder - thenByCacheKey() { + thenByCacheKey() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheKey', Sort.asc); }); } QueryBuilder - thenByCacheKeyDesc() { + thenByCacheKeyDesc() { return QueryBuilder.apply(this, (query) { return query.addSortBy(r'cacheKey', Sort.desc); }); @@ -538,7 +528,7 @@ extension TimetableCacheModelQuerySortThenBy extension TimetableCacheModelQueryWhereDistinct on QueryBuilder { QueryBuilder - distinctByValues() { + distinctByValues() { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'values'); }); @@ -554,7 +544,7 @@ extension TimetableCacheModelQueryProperty } QueryBuilder?, QQueryOperations> - valuesProperty() { + valuesProperty() { return QueryBuilder.apply(this, (query) { return query.addPropertyName(r'values'); }); diff --git a/firka/lib/helpers/db/models/token_model.dart b/firka/lib/helpers/db/models/token_model.dart index ebfdaa3..c0e9d68 100644 --- a/firka/lib/helpers/db/models/token_model.dart +++ b/firka/lib/helpers/db/models/token_model.dart @@ -4,7 +4,7 @@ import 'package:crypto/crypto.dart'; import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; import 'package:firka/helpers/api/resp/token_grant.dart'; import 'package:firka/helpers/extensions.dart'; -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import '../../debug_helper.dart'; diff --git a/firka/lib/helpers/db/models/token_model.g.dart b/firka/lib/helpers/db/models/token_model.g.dart index c700d47..affb6fe 100644 --- a/firka/lib/helpers/db/models/token_model.g.dart +++ b/firka/lib/helpers/db/models/token_model.g.dart @@ -27,16 +27,8 @@ const TokenModelSchema = CollectionSchema( name: r'expiryDate', type: IsarType.dateTime, ), - r'idToken': PropertySchema( - id: 2, - name: r'idToken', - type: IsarType.string, - ), - r'iss': PropertySchema( - id: 3, - name: r'iss', - type: IsarType.string, - ), + r'idToken': PropertySchema(id: 2, name: r'idToken', type: IsarType.string), + r'iss': PropertySchema(id: 3, name: r'iss', type: IsarType.string), r'refreshToken': PropertySchema( id: 4, name: r'refreshToken', @@ -56,8 +48,9 @@ const TokenModelSchema = CollectionSchema( id: 7, name: r'updatedAtMs', type: IsarType.long, - ) + ), }, + estimateSize: _tokenModelEstimateSize, serialize: _tokenModelSerialize, deserialize: _tokenModelDeserialize, @@ -66,10 +59,11 @@ const TokenModelSchema = CollectionSchema( indexes: {}, links: {}, embeddedSchemas: {}, + getId: _tokenModelGetId, getLinks: _tokenModelGetLinks, attach: _tokenModelAttach, - version: '3.1.0+1', + version: '3.3.0', ); int _tokenModelEstimateSize( @@ -198,17 +192,17 @@ extension TokenModelQueryWhereSort extension TokenModelQueryWhere on QueryBuilder { QueryBuilder studentIdNormEqualTo( - Id studentIdNorm) { + Id studentIdNorm, + ) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: studentIdNorm, - upper: studentIdNorm, - )); + return query.addWhereClause( + IdWhereClause.between(lower: studentIdNorm, upper: studentIdNorm), + ); }); } QueryBuilder - studentIdNormNotEqualTo(Id studentIdNorm) { + studentIdNormNotEqualTo(Id studentIdNorm) { return QueryBuilder.apply(this, (query) { if (query.whereSort == Sort.asc) { return query @@ -217,13 +211,17 @@ extension TokenModelQueryWhere ) .addWhereClause( IdWhereClause.greaterThan( - lower: studentIdNorm, includeLower: false), + lower: studentIdNorm, + includeLower: false, + ), ); } else { return query .addWhereClause( IdWhereClause.greaterThan( - lower: studentIdNorm, includeLower: false), + lower: studentIdNorm, + includeLower: false, + ), ) .addWhereClause( IdWhereClause.lessThan(upper: studentIdNorm, includeUpper: false), @@ -233,7 +231,7 @@ extension TokenModelQueryWhere } QueryBuilder - studentIdNormGreaterThan(Id studentIdNorm, {bool include = false}) { + studentIdNormGreaterThan(Id studentIdNorm, {bool include = false}) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.greaterThan(lower: studentIdNorm, includeLower: include), @@ -242,8 +240,9 @@ extension TokenModelQueryWhere } QueryBuilder studentIdNormLessThan( - Id studentIdNorm, - {bool include = false}) { + Id studentIdNorm, { + bool include = false, + }) { return QueryBuilder.apply(this, (query) { return query.addWhereClause( IdWhereClause.lessThan(upper: studentIdNorm, includeUpper: include), @@ -258,12 +257,14 @@ extension TokenModelQueryWhere bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addWhereClause(IdWhereClause.between( - lower: lowerStudentIdNorm, - includeLower: includeLower, - upper: upperStudentIdNorm, - includeUpper: includeUpper, - )); + return query.addWhereClause( + IdWhereClause.between( + lower: lowerStudentIdNorm, + includeLower: includeLower, + upper: upperStudentIdNorm, + includeUpper: includeUpper, + ), + ); }); } } @@ -271,71 +272,74 @@ extension TokenModelQueryWhere extension TokenModelQueryFilter on QueryBuilder { QueryBuilder - accessTokenIsNull() { + accessTokenIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'accessToken', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'accessToken'), + ); }); } QueryBuilder - accessTokenIsNotNull() { + accessTokenIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'accessToken', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'accessToken'), + ); }); } QueryBuilder - accessTokenEqualTo( - String? value, { - bool caseSensitive = true, - }) { + accessTokenEqualTo(String? value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'accessToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - accessTokenGreaterThan( + accessTokenGreaterThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'accessToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - accessTokenLessThan( + accessTokenLessThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'accessToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - accessTokenBetween( + accessTokenBetween( String? lower, String? upper, { bool includeLower = true, @@ -343,140 +347,140 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'accessToken', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'accessToken', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - accessTokenStartsWith( - String value, { - bool caseSensitive = true, - }) { + accessTokenStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'accessToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - accessTokenEndsWith( - String value, { - bool caseSensitive = true, - }) { + accessTokenEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'accessToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - accessTokenContains(String value, {bool caseSensitive = true}) { + accessTokenContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'accessToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'accessToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - accessTokenMatches(String pattern, {bool caseSensitive = true}) { + accessTokenMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'accessToken', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'accessToken', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - accessTokenIsEmpty() { + accessTokenIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'accessToken', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'accessToken', value: ''), + ); }); } QueryBuilder - accessTokenIsNotEmpty() { + accessTokenIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'accessToken', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'accessToken', value: ''), + ); }); } QueryBuilder - expiryDateIsNull() { + expiryDateIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'expiryDate', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'expiryDate'), + ); }); } QueryBuilder - expiryDateIsNotNull() { + expiryDateIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'expiryDate', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'expiryDate'), + ); }); } QueryBuilder expiryDateEqualTo( - DateTime? value) { + DateTime? value, + ) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'expiryDate', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'expiryDate', value: value), + ); }); } QueryBuilder - expiryDateGreaterThan( - DateTime? value, { - bool include = false, - }) { + expiryDateGreaterThan(DateTime? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'expiryDate', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'expiryDate', + value: value, + ), + ); }); } QueryBuilder - expiryDateLessThan( - DateTime? value, { - bool include = false, - }) { + expiryDateLessThan(DateTime? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'expiryDate', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'expiryDate', + value: value, + ), + ); }); } @@ -487,30 +491,32 @@ extension TokenModelQueryFilter bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'expiryDate', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'expiryDate', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder idTokenIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'idToken', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'idToken'), + ); }); } QueryBuilder - idTokenIsNotNull() { + idTokenIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'idToken', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'idToken'), + ); }); } @@ -519,27 +525,31 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'idToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - idTokenGreaterThan( + idTokenGreaterThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'idToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -549,12 +559,14 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'idToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -566,14 +578,16 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'idToken', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'idToken', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } @@ -582,11 +596,13 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'idToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -595,70 +611,76 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'idToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder idTokenContains( - String value, - {bool caseSensitive = true}) { + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'idToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'idToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder idTokenMatches( - String pattern, - {bool caseSensitive = true}) { + String pattern, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'idToken', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'idToken', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder idTokenIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'idToken', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'idToken', value: ''), + ); }); } QueryBuilder - idTokenIsNotEmpty() { + idTokenIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'idToken', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'idToken', value: ''), + ); }); } QueryBuilder issIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'iss', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'iss'), + ); }); } QueryBuilder issIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'iss', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'iss'), + ); }); } @@ -667,11 +689,13 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'iss', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'iss', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -681,12 +705,14 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'iss', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'iss', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -696,12 +722,14 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'iss', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'iss', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -713,14 +741,16 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'iss', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'iss', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } @@ -729,11 +759,13 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'iss', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'iss', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -742,122 +774,131 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'iss', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'iss', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder issContains( - String value, - {bool caseSensitive = true}) { + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'iss', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'iss', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder issMatches( - String pattern, - {bool caseSensitive = true}) { + String pattern, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'iss', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'iss', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder issIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'iss', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'iss', value: ''), + ); }); } QueryBuilder issIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'iss', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'iss', value: ''), + ); }); } QueryBuilder - refreshTokenIsNull() { + refreshTokenIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'refreshToken', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'refreshToken'), + ); }); } QueryBuilder - refreshTokenIsNotNull() { + refreshTokenIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'refreshToken', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'refreshToken'), + ); }); } QueryBuilder - refreshTokenEqualTo( - String? value, { - bool caseSensitive = true, - }) { + refreshTokenEqualTo(String? value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'refreshToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - refreshTokenGreaterThan( + refreshTokenGreaterThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'refreshToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - refreshTokenLessThan( + refreshTokenLessThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'refreshToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - refreshTokenBetween( + refreshTokenBetween( String? lower, String? upper, { bool includeLower = true, @@ -865,102 +906,104 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'refreshToken', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'refreshToken', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - refreshTokenStartsWith( - String value, { - bool caseSensitive = true, - }) { + refreshTokenStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'refreshToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - refreshTokenEndsWith( - String value, { - bool caseSensitive = true, - }) { + refreshTokenEndsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'refreshToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - refreshTokenContains(String value, {bool caseSensitive = true}) { + refreshTokenContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'refreshToken', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'refreshToken', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - refreshTokenMatches(String pattern, {bool caseSensitive = true}) { + refreshTokenMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'refreshToken', - wildcard: pattern, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'refreshToken', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - refreshTokenIsEmpty() { + refreshTokenIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'refreshToken', - value: '', - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'refreshToken', value: ''), + ); }); } QueryBuilder - refreshTokenIsNotEmpty() { + refreshTokenIsNotEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'refreshToken', - value: '', - )); + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'refreshToken', value: ''), + ); }); } QueryBuilder - studentIdIsNull() { + studentIdIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'studentId', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'studentId'), + ); }); } QueryBuilder - studentIdIsNotNull() { + studentIdIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'studentId', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'studentId'), + ); }); } @@ -969,27 +1012,31 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.equalTo( + property: r'studentId', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - studentIdGreaterThan( + studentIdGreaterThan( String? value, { bool include = false, bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'studentId', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -999,12 +1046,14 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'studentId', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -1016,28 +1065,29 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'studentId', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'studentId', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - studentIdStartsWith( - String value, { - bool caseSensitive = true, - }) { + studentIdStartsWith(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.startsWith( - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.startsWith( + property: r'studentId', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } @@ -1046,277 +1096,280 @@ extension TokenModelQueryFilter bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.endsWith( - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.endsWith( + property: r'studentId', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder studentIdContains( - String value, - {bool caseSensitive = true}) { + String value, { + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.contains( - property: r'studentId', - value: value, - caseSensitive: caseSensitive, - )); + return query.addFilterCondition( + FilterCondition.contains( + property: r'studentId', + value: value, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder studentIdMatches( - String pattern, - {bool caseSensitive = true}) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.matches( - property: r'studentId', - wildcard: pattern, - caseSensitive: caseSensitive, - )); - }); - } - - QueryBuilder - studentIdIsEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'studentId', - value: '', - )); - }); - } - - QueryBuilder - studentIdIsNotEmpty() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - property: r'studentId', - value: '', - )); - }); - } - - QueryBuilder - studentIdNormIsNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'studentIdNorm', - )); - }); - } - - QueryBuilder - studentIdNormIsNotNull() { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'studentIdNorm', - )); - }); - } - - QueryBuilder - studentIdNormEqualTo(Id? value) { - return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'studentIdNorm', - value: value, - )); - }); - } - - QueryBuilder - studentIdNormGreaterThan( - Id? value, { - bool include = false, + String pattern, { + bool caseSensitive = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'studentIdNorm', - value: value, - )); + return query.addFilterCondition( + FilterCondition.matches( + property: r'studentId', + wildcard: pattern, + caseSensitive: caseSensitive, + ), + ); }); } QueryBuilder - studentIdNormLessThan( - Id? value, { - bool include = false, - }) { + studentIdIsEmpty() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'studentIdNorm', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'studentId', value: ''), + ); }); } QueryBuilder - studentIdNormBetween( + studentIdIsNotEmpty() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.greaterThan(property: r'studentId', value: ''), + ); + }); + } + + QueryBuilder + studentIdNormIsNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + const FilterCondition.isNull(property: r'studentIdNorm'), + ); + }); + } + + QueryBuilder + studentIdNormIsNotNull() { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'studentIdNorm'), + ); + }); + } + + QueryBuilder + studentIdNormEqualTo(Id? value) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.equalTo(property: r'studentIdNorm', value: value), + ); + }); + } + + QueryBuilder + studentIdNormGreaterThan(Id? value, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'studentIdNorm', + value: value, + ), + ); + }); + } + + QueryBuilder + studentIdNormLessThan(Id? value, {bool include = false}) { + return QueryBuilder.apply(this, (query) { + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'studentIdNorm', + value: value, + ), + ); + }); + } + + QueryBuilder + studentIdNormBetween( Id? lower, Id? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'studentIdNorm', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'studentIdNorm', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - tokenVersionIsNull() { + tokenVersionIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'tokenVersion', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'tokenVersion'), + ); }); } QueryBuilder - tokenVersionIsNotNull() { + tokenVersionIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'tokenVersion', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'tokenVersion'), + ); }); } QueryBuilder - tokenVersionEqualTo(int? value) { + tokenVersionEqualTo(int? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'tokenVersion', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'tokenVersion', value: value), + ); }); } QueryBuilder - tokenVersionGreaterThan( - int? value, { - bool include = false, - }) { + tokenVersionGreaterThan(int? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'tokenVersion', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'tokenVersion', + value: value, + ), + ); }); } QueryBuilder - tokenVersionLessThan( - int? value, { - bool include = false, - }) { + tokenVersionLessThan(int? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'tokenVersion', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'tokenVersion', + value: value, + ), + ); }); } QueryBuilder - tokenVersionBetween( + tokenVersionBetween( int? lower, int? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'tokenVersion', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'tokenVersion', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } QueryBuilder - updatedAtMsIsNull() { + updatedAtMsIsNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNull( - property: r'updatedAtMs', - )); + return query.addFilterCondition( + const FilterCondition.isNull(property: r'updatedAtMs'), + ); }); } QueryBuilder - updatedAtMsIsNotNull() { + updatedAtMsIsNotNull() { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(const FilterCondition.isNotNull( - property: r'updatedAtMs', - )); + return query.addFilterCondition( + const FilterCondition.isNotNull(property: r'updatedAtMs'), + ); }); } QueryBuilder - updatedAtMsEqualTo(int? value) { + updatedAtMsEqualTo(int? value) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.equalTo( - property: r'updatedAtMs', - value: value, - )); + return query.addFilterCondition( + FilterCondition.equalTo(property: r'updatedAtMs', value: value), + ); }); } QueryBuilder - updatedAtMsGreaterThan( - int? value, { - bool include = false, - }) { + updatedAtMsGreaterThan(int? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.greaterThan( - include: include, - property: r'updatedAtMs', - value: value, - )); + return query.addFilterCondition( + FilterCondition.greaterThan( + include: include, + property: r'updatedAtMs', + value: value, + ), + ); }); } QueryBuilder - updatedAtMsLessThan( - int? value, { - bool include = false, - }) { + updatedAtMsLessThan(int? value, {bool include = false}) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.lessThan( - include: include, - property: r'updatedAtMs', - value: value, - )); + return query.addFilterCondition( + FilterCondition.lessThan( + include: include, + property: r'updatedAtMs', + value: value, + ), + ); }); } QueryBuilder - updatedAtMsBetween( + updatedAtMsBetween( int? lower, int? upper, { bool includeLower = true, bool includeUpper = true, }) { return QueryBuilder.apply(this, (query) { - return query.addFilterCondition(FilterCondition.between( - property: r'updatedAtMs', - lower: lower, - includeLower: includeLower, - upper: upper, - includeUpper: includeUpper, - )); + return query.addFilterCondition( + FilterCondition.between( + property: r'updatedAtMs', + lower: lower, + includeLower: includeLower, + upper: upper, + includeUpper: includeUpper, + ), + ); }); } } @@ -1539,8 +1592,9 @@ extension TokenModelQuerySortThenBy extension TokenModelQueryWhereDistinct on QueryBuilder { - QueryBuilder distinctByAccessToken( - {bool caseSensitive = true}) { + QueryBuilder distinctByAccessToken({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'accessToken', caseSensitive: caseSensitive); }); @@ -1552,29 +1606,33 @@ extension TokenModelQueryWhereDistinct }); } - QueryBuilder distinctByIdToken( - {bool caseSensitive = true}) { + QueryBuilder distinctByIdToken({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'idToken', caseSensitive: caseSensitive); }); } - QueryBuilder distinctByIss( - {bool caseSensitive = true}) { + QueryBuilder distinctByIss({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'iss', caseSensitive: caseSensitive); }); } - QueryBuilder distinctByRefreshToken( - {bool caseSensitive = true}) { + QueryBuilder distinctByRefreshToken({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'refreshToken', caseSensitive: caseSensitive); }); } - QueryBuilder distinctByStudentId( - {bool caseSensitive = true}) { + QueryBuilder distinctByStudentId({ + bool caseSensitive = true, + }) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(r'studentId', caseSensitive: caseSensitive); }); diff --git a/firka/lib/helpers/db/util.dart b/firka/lib/helpers/db/util.dart index 455099b..9981a09 100644 --- a/firka/lib/helpers/db/util.dart +++ b/firka/lib/helpers/db/util.dart @@ -1,7 +1,7 @@ import 'dart:math'; import 'package:intl/intl.dart'; -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import '../debug_helper.dart'; diff --git a/firka/lib/helpers/settings.dart b/firka/lib/helpers/settings.dart index 808a991..cd580a7 100644 --- a/firka/lib/helpers/settings.dart +++ b/firka/lib/helpers/settings.dart @@ -8,7 +8,7 @@ import 'package:firka/l10n/app_localizations.dart'; import 'package:firka/ui/widget/firka_icon.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; import '../main.dart'; diff --git a/firka/lib/helpers/watch_sync_helper.dart b/firka/lib/helpers/watch_sync_helper.dart index 8e767a5..ccccc83 100644 --- a/firka/lib/helpers/watch_sync_helper.dart +++ b/firka/lib/helpers/watch_sync_helper.dart @@ -4,7 +4,7 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../main.dart'; diff --git a/firka/lib/l10n b/firka/lib/l10n index d9cb26d..fd4f077 160000 --- a/firka/lib/l10n +++ b/firka/lib/l10n @@ -1 +1 @@ -Subproject commit d9cb26d3fdb98864b62c587fa1e7b83d49532632 +Subproject commit fd4f07740e44f9b1491d7a8741927d7e3163f176 diff --git a/firka/lib/main.dart b/firka/lib/main.dart index 7014bed..bb4251d 100644 --- a/firka/lib/main.dart +++ b/firka/lib/main.dart @@ -24,7 +24,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:intl/intl.dart'; -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import 'package:logging/logging.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:path/path.dart' as p; diff --git a/firka/lib/ui/phone/screens/settings/settings_screen.dart b/firka/lib/ui/phone/screens/settings/settings_screen.dart index 8bead5a..6a52d2e 100644 --- a/firka/lib/ui/phone/screens/settings/settings_screen.dart +++ b/firka/lib/ui/phone/screens/settings/settings_screen.dart @@ -14,7 +14,7 @@ import 'package:firka/ui/widget/firka_icon.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import 'package:majesticons_flutter/majesticons_flutter.dart'; import 'package:path/path.dart' as p; import 'package:share_plus/share_plus.dart'; diff --git a/firka/lib/ui/phone/widgets/login_webview.dart b/firka/lib/ui/phone/widgets/login_webview.dart index 59dcedb..0b9626d 100644 --- a/firka/lib/ui/phone/widgets/login_webview.dart +++ b/firka/lib/ui/phone/widgets/login_webview.dart @@ -5,7 +5,7 @@ import 'package:firka/helpers/live_activity_service.dart'; import 'package:firka/main.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:isar/isar.dart'; +import 'package:isar_community/isar.dart'; import 'package:webview_flutter/webview_flutter.dart'; import '../../../helpers/api/client/kreta_client.dart'; diff --git a/firka/pubspec.yaml b/firka/pubspec.yaml index 3455a98..c5ce058 100644 --- a/firka/pubspec.yaml +++ b/firka/pubspec.yaml @@ -1,34 +1,11 @@ -# TODO: make app icon with adaptive functions: https://pub.dev/packages/flutter_launcher_icons - name: firka description: "Firka, Alternatív e-Kréta kliens." -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: "none" # Remove this line if you wish to publish to pub.dev +publish_to: 'none' -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. -# Read more about iOS versioning at -# 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.0.9+1030 +version: 1.1.0+1040 environment: - sdk: ">=3.6.0 <=3.9.2" - -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. + sdk: ^3.11.0 dependencies: flutter: @@ -37,10 +14,8 @@ dependencies: cupertino_icons: ^1.0.8 flutter_launcher_icons: ^0.14.3 dio: ^5.8.0+1 - isar: - path: vendor/isar - isar_flutter_libs: - path: vendor/isar_flutter_libs + isar_community: 3.3.0 + isar_community_flutter_libs: 3.3.0 build_runner: any path_provider: ^2.1.0 carousel_slider: ^5.0.0 @@ -58,8 +33,6 @@ dependencies: flutter_screenutil: ^5.9.3 flutter_arc_text: ^0.6.0 flutter_svg: ^1.1.6 - fmb_dart: - path: vendor/fmb_dart home_widget: ^0.8.0 brotli: ^0.6.0 crypto: ^3.0.6 @@ -79,9 +52,7 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^6.0.0 - analyzer: ^5.13.0 - isar_generator: - path: vendor/isar_generator + isar_community_generator: 3.3.0 android_notification_icons: ^0.0.1 integration_test: sdk: flutter @@ -91,10 +62,6 @@ android_notification_icons: image_path: 'assets/images/logos/dave_monochrome.png' icon_name: 'ic_notification' -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. flutter: generate: true uses-material-design: true @@ -127,34 +94,4 @@ flutter: - family: RobotoMono fonts: - asset: assets/fonts/RobotoMono-VariableFont_wght.ttf - style: normal - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/to/resolution-aware-images - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/to/asset-from-package - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/to/font-from-package + style: normal \ No newline at end of file diff --git a/firka/vendor/fmb_dart/.gitignore b/firka/vendor/fmb_dart/.gitignore deleted file mode 100644 index 13faa94..0000000 --- a/firka/vendor/fmb_dart/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# https://dart.dev/guides/libraries/private-files -# Created by `dart pub` -.dart_tool/ - -# Avoid committing pubspec.lock for library packages; see -# https://dart.dev/guides/libraries/private-files#pubspeclock. -pubspec.lock -.flutter-plugins -.flutter-plugins-dependencies diff --git a/firka/vendor/fmb_dart/CHANGELOG.md b/firka/vendor/fmb_dart/CHANGELOG.md deleted file mode 100644 index b88a75b..0000000 --- a/firka/vendor/fmb_dart/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 5.0.0 - -- Initial version. diff --git a/firka/vendor/fmb_dart/LICENSE b/firka/vendor/fmb_dart/LICENSE deleted file mode 100644 index be3f7b2..0000000 --- a/firka/vendor/fmb_dart/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/firka/vendor/fmb_dart/README.md b/firka/vendor/fmb_dart/README.md deleted file mode 100644 index ae3c609..0000000 --- a/firka/vendor/fmb_dart/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# FMBCrypt Dart Library 5 -Pretty easy to install and secure, I think... - -## Usage: -**Encryption**: -```dart -await FMBCrypt.handleText('encrypt', plaintext, password); -``` -**Decryption**: -```dart -await FMBCrypt.handleText('decrypt', ciphertext, password); -``` - -## Under the hood -### Key generation -1. Generates a random 32-byte salt -2. Convert password into bytes with UTF-8 encoding -3. PBKDF2 the password (SHA-512, 1,000,000x, 256 bits, salt) -4. Secure the final 32-byte key -### Encryption -1. Generates a 12-byte nonce for GCM -2. Creates associated data (application ID + version + salt + timestamp) for authentication -3. Sets up AES-256 in GCM mode (authenticated encryption) -4. Encrypt bytes using AES-GCM with associated data -5. Combine the data in the following order: - - First 4 bytes: Version header ("FMB5") - - Next 32 bytes: Salt - - Next 8 bytes: Timestamp - - Next 12 bytes: GCM Nonce - - Remaining: Encrypted data + 16-byte authentication tag diff --git a/firka/vendor/fmb_dart/analysis_options.yaml b/firka/vendor/fmb_dart/analysis_options.yaml deleted file mode 100644 index dee8927..0000000 --- a/firka/vendor/fmb_dart/analysis_options.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# This file configures the static analysis results for your project (errors, -# warnings, and lints). -# -# This enables the 'recommended' set of lints from `package:lints`. -# This set helps identify many issues that may lead to problems when running -# or consuming Dart code, and enforces writing Dart using a single, idiomatic -# style and format. -# -# If you want a smaller set of lints you can change this to specify -# 'package:lints/core.yaml'. These are just the most critical lints -# (the recommended set includes the core lints). -# The core lints are also what is used by pub.dev for scoring packages. - -include: package:lints/recommended.yaml - -# Uncomment the following section to specify additional rules. - -# linter: -# rules: -# - camel_case_types - -# analyzer: -# exclude: -# - path/to/excluded/files/** - -# For more information about the core and recommended set of lints, see -# https://dart.dev/go/core-lints - -# For additional information about configuring this file, see -# https://dart.dev/guides/language/analysis-options diff --git a/firka/vendor/fmb_dart/lib/fmb_dart.dart b/firka/vendor/fmb_dart/lib/fmb_dart.dart deleted file mode 100644 index 1a038cc..0000000 --- a/firka/vendor/fmb_dart/lib/fmb_dart.dart +++ /dev/null @@ -1,3 +0,0 @@ -library; - -export 'src/fmb_dart_base.dart'; diff --git a/firka/vendor/fmb_dart/lib/src/fmb_dart_base.dart b/firka/vendor/fmb_dart/lib/src/fmb_dart_base.dart deleted file mode 100644 index c592799..0000000 --- a/firka/vendor/fmb_dart/lib/src/fmb_dart_base.dart +++ /dev/null @@ -1,185 +0,0 @@ -import 'dart:convert'; -import 'dart:typed_data'; -import 'package:cryptography/cryptography.dart'; -import 'package:cryptography/helpers.dart'; - - -/// usage: -/// -/// String encrypted = await FMBCrypt.handleText('encrypt', 'Hello World', 'myPassword'); -/// -/// String decrypted = await FMBCrypt.handleText('decrypt', encrypted, 'myPassword'); -class FMBCrypt { - static const String _version = "FMB5"; - static const int _saltLength = 32; - static const int _nonceLength = 12; - static const int _timestampLength = 8; - static const int _gcmTagLength = 16; - - static Future<({Uint8List key, Uint8List salt})> generateKey( - String password, Uint8List? providedSalt) async { - final salt = providedSalt ?? Uint8List(_saltLength); - if (providedSalt == null) { - fillBytesWithSecureRandom(salt); - } - - final pbkdf2 = Pbkdf2( - macAlgorithm: Hmac.sha512(), - iterations: 1000000, - bits: 256, - ); - - - final newSecretKey = await pbkdf2.deriveKeyFromPassword( - password: password, - nonce: salt, - ); - - final keyBytes = await newSecretKey.extractBytes(); - return (key: Uint8List.fromList(keyBytes), salt: salt); - } - - static Future encrypt(dynamic data, String password) async { - try { - final keyAndSalt = await generateKey(password, null); - final key = keyAndSalt.key; - final salt = keyAndSalt.salt; - - final aesGcm = AesGcm.with256bits(); - final secretKey = SecretKey(key); - - final nonce = Uint8List(_nonceLength); - fillBytesWithSecureRandom(nonce); - - final versionBytes = utf8.encode(_version); - final timestamp = Uint8List(_timestampLength); - final now = DateTime.now().millisecondsSinceEpoch; - for (int i = 0; i < _timestampLength; i++) { - timestamp[i] = (now >> (i * 8)) & 0xFF; - } - - final associatedData = - Uint8List(versionBytes.length + salt.length + timestamp.length); - associatedData.setAll(0, versionBytes); - associatedData.setAll(versionBytes.length, salt); - associatedData.setAll(versionBytes.length + salt.length, timestamp); - - final inputData = data is Uint8List ? data : utf8.encode(data); - - final cipherText = await aesGcm.encrypt( - inputData, - secretKey: secretKey, - nonce: nonce, - aad: associatedData, - ); - - final result = Uint8List(versionBytes.length + - salt.length + - timestamp.length + - nonce.length + - cipherText.cipherText.length + - cipherText.mac.bytes.length); - - result.setAll(0, versionBytes); - result.setAll(versionBytes.length, salt); - result.setAll(versionBytes.length + salt.length, timestamp); - result.setAll( - versionBytes.length + salt.length + timestamp.length, nonce); - result.setAll( - versionBytes.length + salt.length + timestamp.length + nonce.length, - cipherText.cipherText); - result.setAll( - versionBytes.length + - salt.length + - timestamp.length + - nonce.length + - cipherText.cipherText.length, - cipherText.mac.bytes); - - return result; - } catch (e) { - throw Exception("Encryption failed: \${e.toString()}"); - } - } - - static Future decrypt( - Uint8List encryptedData, String password) async { - try { - if (encryptedData.length < - _version.length + - _saltLength + - _timestampLength + - _nonceLength + - _gcmTagLength) { - throw Exception("Invalid encrypted data: too short"); - } - - final versionBytes = encryptedData.sublist(0, _version.length); - final version = utf8.decode(versionBytes); - if (version != _version) { - throw Exception("Invalid or unsupported file format"); - } - - final salt = - encryptedData.sublist(_version.length, _version.length + _saltLength); - final timestamp = encryptedData.sublist(_version.length + _saltLength, - _version.length + _saltLength + _timestampLength); - final nonce = encryptedData.sublist( - _version.length + _saltLength + _timestampLength, - _version.length + _saltLength + _timestampLength + _nonceLength); - final cipherTextWithTag = encryptedData.sublist( - _version.length + _saltLength + _timestampLength + _nonceLength); - - final associatedData = - Uint8List(versionBytes.length + salt.length + timestamp.length); - associatedData.setAll(0, versionBytes); - associatedData.setAll(versionBytes.length, salt); - associatedData.setAll(versionBytes.length + salt.length, timestamp); - - final keyAndSalt = await generateKey(password, salt); - final key = keyAndSalt.key; - - final aesGcm = AesGcm.with256bits(); - final secretKey = SecretKey(key); - - final secretBox = SecretBox( - cipherTextWithTag.sublist(0, cipherTextWithTag.length - _gcmTagLength), - nonce: nonce, - mac: Mac(cipherTextWithTag - .sublist(cipherTextWithTag.length - _gcmTagLength)), - ); - - final decrypted = await aesGcm.decrypt( - secretBox, - secretKey: secretKey, - aad: associatedData, - ); - - return Uint8List.fromList(decrypted); - } catch (e) { - throw Exception("Decryption failed: \${e.toString()}"); - } - } - - static Future handleText( - String action, String input, String password) async { - if (password.isEmpty || input.isEmpty) { - throw Exception("Please provide both input text and a password."); - } - - try { - if (action == "encrypt") { - final encrypted = await encrypt(input, password); - return base64.encode(encrypted); - } else if (action == "decrypt") { - final encryptedData = base64.decode(input); - final decrypted = await decrypt(encryptedData, password); - return utf8.decode(decrypted); - } else { - throw Exception("Invalid action. Use 'encrypt' or 'decrypt'."); - } - } catch (e) { - throw Exception("Operation failed: \${e.toString()}"); - } - } -} diff --git a/firka/vendor/fmb_dart/pubspec.yaml b/firka/vendor/fmb_dart/pubspec.yaml deleted file mode 100644 index c7d2659..0000000 --- a/firka/vendor/fmb_dart/pubspec.yaml +++ /dev/null @@ -1,15 +0,0 @@ -name: fmb_dart -description: FMBCrypt Dart Library -version: 5.0.0 -repository: https://git.anchietae.cc/FMBCrypt/fmb_dart -publish_to: https://git.anchietae.cc/api/packages/FMBCrypt/pub - -environment: - sdk: ^3.6.0 - -dependencies: - cryptography: ^2.7.0 - -dev_dependencies: - lints: ^5.1.1 - test: ^1.24.0 diff --git a/firka/vendor/isar b/firka/vendor/isar deleted file mode 160000 index 4bf4cf0..0000000 --- a/firka/vendor/isar +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4bf4cf07e317550307fcb7251bf3e67708514bb1 diff --git a/firka/vendor/isar_flutter_libs b/firka/vendor/isar_flutter_libs deleted file mode 160000 index 10211a3..0000000 --- a/firka/vendor/isar_flutter_libs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 10211a35ddd98eea47ad5e7296f8dee61ea5fdbd diff --git a/firka/vendor/isar_generator b/firka/vendor/isar_generator deleted file mode 160000 index 97af6ca..0000000 --- a/firka/vendor/isar_generator +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 97af6caaa566b1dad91fab5f34a3199fd5391dda diff --git a/secrets/README.md b/secrets/README.md index ada4c92..81888a6 100644 --- a/secrets/README.md +++ b/secrets/README.md @@ -1,15 +1,15 @@ -# hogyan hozz létre upload-keystore-t flutterhez? +# Hogyan hozz létre upload-keystore-t flutterhez? ha ezt olvasod, akkor valószínűleg szeretnéd a refilc appot build-elni. ha bármi kérdésed lenne, nyugodtan keress minket discordon, vagy akár emailben is! -## 1. keystore létrehozása +## 1. keystore létrehozása (v3/v4 aláíráshoz, EC kulccsal) először, nyiss egy terminált ebben a mappában és futtasd ezt a parancsot: ```sh keytool -genkeypair -v \ -keystore upload-keystore.jks \ - -keyalg RSA -keysize 2048 -validity 10000 \ + -keyalg EC -keysize 256 -validity 10000 \ -alias upload ``` @@ -31,10 +31,4 @@ keyPassword=password keyAlias=upload ``` -cseréld ki a `password` részeket, természetesen a választott jelszavadra. - -## 4. secrets mappa kizárása a gitből - -már beleraktuk a .gitignore mappába a kizárását ennek, ezen nem kell aggódnod. - -készen is vagy, sok sikert! +cseréld ki a `password` részeket, természetesen a választott jelszavadra. \ No newline at end of file diff --git a/secrets/README_en.md b/secrets/README_en.md index ada4c92..8a41ec8 100644 --- a/secrets/README_en.md +++ b/secrets/README_en.md @@ -1,28 +1,28 @@ -# hogyan hozz létre upload-keystore-t flutterhez? +# How to create an upload keystore for Flutter -ha ezt olvasod, akkor valószínűleg szeretnéd a refilc appot build-elni. ha bármi kérdésed lenne, nyugodtan keress minket discordon, vagy akár emailben is! +If you're reading this, you probably want to build the app for release. If you have any questions, reach out on Discord or by email! -## 1. keystore létrehozása +## 1. Create the keystore (for v3/v4 signing, EC key) -először, nyiss egy terminált ebben a mappában és futtasd ezt a parancsot: +Open a terminal in this folder and run: ```sh keytool -genkeypair -v \ -keystore upload-keystore.jks \ - -keyalg RSA -keysize 2048 -validity 10000 \ + -keyalg EC -keysize 256 -validity 10000 \ -alias upload ``` -ezután meg kell adnod néhány adatot: -- egy jelszót a keystore-hoz (ezt jegyezd meg!) -- nevedet, szervezeted nevét (nyugodtan hagyhatod alapértelmezetten) -- egy második jelszót az „upload” aliashoz (ajánlott az előzőt használni) +You will be prompted for: +- A password for the keystore +- Your name, organization name (defaults are fine) +- A second password for the „upload” alias (recommended: same as above) -ha minden jól megy, egy `upload-keystore.jks` fájl létrejön. +When done, an `upload-keystore.jks` file will be created. -## 3. keystore.properties létrehozása +## 2. Create keystore.properties -hozz létre egy új fájlt `keystore.properties` néven, és írd bele a következőt: +Create a new file named `keystore.properties` with: ```properties storeFile=upload-keystore.jks @@ -31,10 +31,4 @@ keyPassword=password keyAlias=upload ``` -cseréld ki a `password` részeket, természetesen a választott jelszavadra. - -## 4. secrets mappa kizárása a gitből - -már beleraktuk a .gitignore mappába a kizárását ennek, ezen nem kell aggódnod. - -készen is vagy, sok sikert! +Replace the `password` values with your chosen password(s). \ No newline at end of file