├── composeApp ├── proguard-rules-android.pro ├── src │ ├── commonMain │ │ ├── kotlin │ │ │ ├── platform │ │ │ │ ├── Download.kt │ │ │ │ ├── Toast.kt │ │ │ │ ├── HttpClient.kt │ │ │ │ ├── Clipboard.kt │ │ │ │ ├── Preferences.kt │ │ │ │ └── Crypto.kt │ │ │ ├── data │ │ │ │ ├── FileInfoHelper.kt │ │ │ │ ├── DataHelper.kt │ │ │ │ ├── RomInfoHelper.kt │ │ │ │ └── DeviceInfoHelper.kt │ │ │ ├── utils │ │ │ │ ├── LinkUtils.kt │ │ │ │ ├── MessageUtils.kt │ │ │ │ ├── DeviceListUtils.kt │ │ │ │ ├── ZipFileUtils.kt │ │ │ │ └── MetadataUtils.kt │ │ │ ├── Theme.kt │ │ │ ├── Password.kt │ │ │ ├── ui │ │ │ │ ├── LoginCardView.kt │ │ │ │ ├── AboutDialog.kt │ │ │ │ ├── DeviceListDialog.kt │ │ │ │ ├── components │ │ │ │ │ └── AutoCompleteTextField.kt │ │ │ │ └── BasicViews.kt │ │ │ └── Login.kt │ │ └── composeResources │ │ │ ├── drawable │ │ │ └── icon.webp │ │ │ ├── values-zh-rCN │ │ │ └── strings.xml │ │ │ ├── values-zh-rTW │ │ │ └── strings.xml │ │ │ ├── values-ja-rJP │ │ │ └── strings.xml │ │ │ ├── values │ │ │ └── strings.xml │ │ │ └── values-pt-rBR │ │ │ └── strings.xml │ ├── androidMain │ │ ├── kotlin │ │ │ ├── Main.android.kt │ │ │ ├── platform │ │ │ │ ├── HttpClient.android.kt │ │ │ │ ├── Clipboard.android.kt │ │ │ │ ├── Toast.android.kt │ │ │ │ ├── Preferences.android.kt │ │ │ │ ├── Download.android.kt │ │ │ │ └── Crypto.android.kt │ │ │ ├── top │ │ │ │ └── yukonga │ │ │ │ │ └── updater │ │ │ │ │ └── kmp │ │ │ │ │ ├── AndroidAppContext.kt │ │ │ │ │ └── MainActivity.kt │ │ │ └── misc │ │ │ │ └── KeyStoreUtils.kt │ │ ├── res │ │ │ ├── values-night │ │ │ │ └── themes.xml │ │ │ ├── values │ │ │ │ ├── themes.xml │ │ │ │ └── colors.xml │ │ │ ├── xml │ │ │ │ └── locales_config.xml │ │ │ └── drawable │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_foreground.xml │ │ └── AndroidManifest.xml │ ├── webMain │ │ ├── resources │ │ │ ├── favicon.ico │ │ │ ├── MiSans VF.woff2 │ │ │ ├── index.html │ │ │ └── styles.css │ │ └── kotlin │ │ │ └── platform │ │ │ ├── Toast.web.kt │ │ │ └── Crypto.web.kt │ ├── macosMain │ │ ├── resources │ │ │ └── Updater.icns │ │ └── kotlin │ │ │ ├── platform │ │ │ ├── Download.macos.kt │ │ │ └── Clipboard.macos.kt │ │ │ └── Main.macos.kt │ ├── desktopMain │ │ ├── resources │ │ │ ├── linux │ │ │ │ └── Icon.png │ │ │ ├── macos │ │ │ │ └── Icon.icns │ │ │ └── windows │ │ │ │ └── Icon.ico │ │ └── kotlin │ │ │ ├── platform │ │ │ ├── Toast.desktop.kt │ │ │ ├── HttpClient.desktop.kt │ │ │ ├── Clipboard.desktop.kt │ │ │ ├── Download.desktop.kt │ │ │ ├── Preferences.desktop.kt │ │ │ └── Crypto.desktop.kt │ │ │ ├── theme │ │ │ ├── MacOSThemeManager.kt │ │ │ ├── WindowsThemeManager.kt │ │ │ └── LinuxThemeManager.kt │ │ │ ├── misc │ │ │ └── KeyStoreUtils.kt │ │ │ └── Main.desktop.kt │ ├── appleMain │ │ └── kotlin │ │ │ └── platform │ │ │ ├── Toast.apple.kt │ │ │ ├── HttpClient.apple.kt │ │ │ ├── Crypto.apple.kt │ │ │ └── Preferences.apple.kt │ ├── iosMain │ │ └── kotlin │ │ │ ├── Main.ios.kt │ │ │ ├── platform │ │ │ ├── Clipboard.ios.kt │ │ │ └── Download.ios.kt │ │ │ └── ResourceEnvironmentFix.kt │ ├── jsMain │ │ ├── kotlin │ │ │ ├── platform │ │ │ │ ├── HttpClient.js.kt │ │ │ │ ├── Clipboard.js.kt │ │ │ │ ├── Preferences.js.kt │ │ │ │ └── Download.js.kt │ │ │ └── Main.js.kt │ │ └── resources │ │ │ └── app.js │ └── wasmJsMain │ │ └── kotlin │ │ ├── platform │ │ ├── HttpClient.wasmJs.kt │ │ ├── Clipboard.wasmJs.kt │ │ ├── Preferences.wasmJs.kt │ │ └── Download.wasmJs.kt │ │ └── Main.wasmJs.kt ├── proguard-rules-jvm.pro └── webpack.config.d │ └── config.js ├── .gitattributes ├── iosApp ├── Configuration │ └── Config.xcconfig └── iosApp │ ├── Assets.xcassets │ ├── Contents.json │ └── AppIcon.appiconset │ │ ├── app-icon-1024.png │ │ └── Contents.json │ ├── iosApp.swift │ ├── ContentView.swift │ └── Info.plist ├── gradle ├── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties └── libs.versions.toml ├── .github ├── dependabot.yml └── workflows │ └── Action CI.yml ├── gradle.properties ├── settings.gradle.kts ├── README.md ├── gradlew.bat ├── gradlew └── .gitignore /composeApp/proguard-rules-android.pro: -------------------------------------------------------------------------------- 1 | -dontwarn org.slf4j.helpers.SubstituteLogger -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /iosApp/Configuration/Config.xcconfig: -------------------------------------------------------------------------------- 1 | TEAM_ID= 2 | BUNDLE_ID=top.yukonga.updater.kmp 3 | APP_NAME=Updater 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/platform/Download.kt: -------------------------------------------------------------------------------- 1 | package platform 2 | 3 | expect fun downloadToLocal(url: String, fileName: String) -------------------------------------------------------------------------------- /composeApp/src/androidMain/kotlin/Main.android.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.runtime.Composable 2 | 3 | @Composable 4 | fun MainView() = App() -------------------------------------------------------------------------------- /composeApp/src/webMain/resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/composeApp/src/webMain/resources/favicon.ico -------------------------------------------------------------------------------- /composeApp/src/macosMain/resources/Updater.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/composeApp/src/macosMain/resources/Updater.icns -------------------------------------------------------------------------------- /composeApp/src/webMain/resources/MiSans VF.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/composeApp/src/webMain/resources/MiSans VF.woff2 -------------------------------------------------------------------------------- /composeApp/src/desktopMain/resources/linux/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/composeApp/src/desktopMain/resources/linux/Icon.png -------------------------------------------------------------------------------- /composeApp/src/desktopMain/resources/macos/Icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/composeApp/src/desktopMain/resources/macos/Icon.icns -------------------------------------------------------------------------------- /composeApp/src/desktopMain/resources/windows/Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/composeApp/src/desktopMain/resources/windows/Icon.ico -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/platform/Toast.kt: -------------------------------------------------------------------------------- 1 | package platform 2 | 3 | expect fun useToast(): Boolean 4 | expect fun showToast(message: String, duration: Long) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/platform/HttpClient.kt: -------------------------------------------------------------------------------- 1 | package platform 2 | 3 | import io.ktor.client.HttpClient 4 | 5 | expect fun httpClientPlatform(): HttpClient 6 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/composeResources/drawable/icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/composeApp/src/commonMain/composeResources/drawable/icon.webp -------------------------------------------------------------------------------- /composeApp/src/webMain/kotlin/platform/Toast.web.kt: -------------------------------------------------------------------------------- 1 | package platform 2 | 3 | actual fun useToast(): Boolean = false 4 | actual fun showToast(message: String, duration: Long) {} -------------------------------------------------------------------------------- /composeApp/src/appleMain/kotlin/platform/Toast.apple.kt: -------------------------------------------------------------------------------- 1 | package platform 2 | 3 | actual fun useToast(): Boolean = false 4 | actual fun showToast(message: String, duration: Long) {} -------------------------------------------------------------------------------- /composeApp/src/desktopMain/kotlin/platform/Toast.desktop.kt: -------------------------------------------------------------------------------- 1 | package platform 2 | 3 | actual fun useToast(): Boolean = false 4 | actual fun showToast(message: String, duration: Long) {} -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuKongA/Updater-KMP/HEAD/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png -------------------------------------------------------------------------------- /iosApp/iosApp/iosApp.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | @main 4 | struct iosApp: App { 5 | var body: some Scene { 6 | WindowGroup { 7 | ContentView() 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/data/FileInfoHelper.kt: -------------------------------------------------------------------------------- 1 | package data 2 | 3 | class FileInfoHelper { 4 | data class FileInfo( 5 | val offset: Long, 6 | val size: Long, 7 | ) 8 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/platform/Clipboard.kt: -------------------------------------------------------------------------------- 1 | package platform 2 | 3 | import androidx.compose.ui.platform.Clipboard 4 | 5 | internal expect suspend fun Clipboard.copyToClipboard(string: String) -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |