mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 06:42:05 +01:00
Make iOS application work
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
@file:OptIn(ExperimentalForeignApi::class, BetaInteropApi::class)
|
||||
|
||||
package ca.gosyer.jui.ios
|
||||
|
||||
import androidx.compose.animation.Crossfade
|
||||
@@ -24,11 +26,13 @@ import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.compose.ui.window.Application
|
||||
import androidx.compose.ui.window.ComposeUIViewController
|
||||
import ca.gosyer.jui.ui.base.theme.AppTheme
|
||||
import ca.gosyer.jui.ui.main.MainMenu
|
||||
import ca.gosyer.jui.uicore.vm.ContextWrapper
|
||||
import ca.gosyer.jui.uicore.vm.Length
|
||||
import kotlinx.cinterop.BetaInteropApi
|
||||
import kotlinx.cinterop.ExperimentalForeignApi
|
||||
import kotlinx.cinterop.autoreleasepool
|
||||
import kotlinx.cinterop.cstr
|
||||
import kotlinx.cinterop.memScoped
|
||||
@@ -37,7 +41,16 @@ import kotlinx.cinterop.useContents
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import org.lighthousegames.logging.FixedLogLevel
|
||||
import org.lighthousegames.logging.KmLog
|
||||
import org.lighthousegames.logging.KmLogging
|
||||
import org.lighthousegames.logging.LogFactory
|
||||
import org.lighthousegames.logging.LogLevel
|
||||
import org.lighthousegames.logging.LogLevelController
|
||||
import org.lighthousegames.logging.Logger
|
||||
import org.lighthousegames.logging.TagProvider
|
||||
import platform.Foundation.NSStringFromClass
|
||||
import platform.Foundation.NSThread
|
||||
import platform.UIKit.UIApplication
|
||||
import platform.UIKit.UIApplicationDelegateProtocol
|
||||
import platform.UIKit.UIApplicationDelegateProtocolMeta
|
||||
@@ -45,77 +58,41 @@ import platform.UIKit.UIApplicationMain
|
||||
import platform.UIKit.UIResponder
|
||||
import platform.UIKit.UIResponderMeta
|
||||
import platform.UIKit.UIScreen
|
||||
import platform.UIKit.UIViewController
|
||||
import platform.UIKit.UIWindow
|
||||
import platform.UIKit.safeAreaInsets
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
fun main() {
|
||||
val args = emptyArray<String>()
|
||||
memScoped {
|
||||
val argc = args.size + 1
|
||||
val argv = (arrayOf("skikoApp") + args).map { it.cstr.ptr }.toCValues()
|
||||
autoreleasepool {
|
||||
UIApplicationMain(argc, argv, null, NSStringFromClass(SkikoAppDelegate))
|
||||
fun initializeApplication(): UIViewController {
|
||||
val appComponent = AppComponent.getInstance(ContextWrapper())
|
||||
|
||||
appComponent.migrations.runMigrations()
|
||||
appComponent.appMigrations.runMigrations()
|
||||
|
||||
appComponent.downloadService.init()
|
||||
appComponent.libraryUpdateService.init()
|
||||
|
||||
val uiHooks = appComponent.hooks
|
||||
val context = appComponent.context
|
||||
|
||||
return ComposeUIViewController {
|
||||
CompositionLocalProvider(*uiHooks) {
|
||||
AppTheme {
|
||||
Box(Modifier.fillMaxSize()) {
|
||||
MainMenu()
|
||||
ToastOverlay(
|
||||
modifier = Modifier
|
||||
.align(Alignment.BottomCenter)
|
||||
.padding(bottom = 64.dp),
|
||||
context = context,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SkikoAppDelegate
|
||||
@OverrideInit
|
||||
constructor() : UIResponder(), UIApplicationDelegateProtocol {
|
||||
companion object : UIResponderMeta(), UIApplicationDelegateProtocolMeta
|
||||
|
||||
private var _window: UIWindow? = null
|
||||
override fun window() = _window
|
||||
override fun setWindow(window: UIWindow?) {
|
||||
_window = window
|
||||
}
|
||||
|
||||
private val context = ContextWrapper()
|
||||
|
||||
private val appComponent = AppComponent.getInstance(context)
|
||||
|
||||
init {
|
||||
appComponent.migrations.runMigrations()
|
||||
appComponent.appMigrations.runMigrations()
|
||||
|
||||
appComponent.downloadService.init()
|
||||
appComponent.libraryUpdateService.init()
|
||||
}
|
||||
|
||||
val uiHooks = appComponent.hooks
|
||||
|
||||
override fun application(
|
||||
application: UIApplication,
|
||||
didFinishLaunchingWithOptions: Map<Any?, *>?,
|
||||
): Boolean {
|
||||
window = UIWindow(frame = UIScreen.mainScreen.bounds).apply {
|
||||
val insets = safeAreaInsets.useContents {
|
||||
WindowInsets(left.dp, top.dp, right.dp, bottom.dp)
|
||||
}
|
||||
|
||||
rootViewController = Application("Tachidesk-JUI") {
|
||||
CompositionLocalProvider(*uiHooks) {
|
||||
AppTheme {
|
||||
Box(Modifier.fillMaxSize().windowInsetsPadding(insets)) {
|
||||
MainMenu()
|
||||
ToastOverlay(
|
||||
modifier = Modifier
|
||||
.align(Alignment.BottomCenter)
|
||||
.padding(bottom = 64.dp),
|
||||
context = context,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
makeKeyAndVisible()
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ToastOverlay(
|
||||
modifier: Modifier,
|
||||
|
||||
Reference in New Issue
Block a user