1+ package di
2+
3+ import androidx.compose.runtime.Composable
4+ import androidx.compose.runtime.rememberCoroutineScope
5+ import androidx.compose.ui.graphics.ImageBitmap
6+ import androidx.compose.ui.graphics.toComposeImageBitmap
7+ import androidx.compose.ui.platform.ClipboardManager
8+ import androidx.compose.ui.text.AnnotatedString
9+ import com.darkrockstudios.libraries.mpfilepicker.FilePicker
10+ import domain.model.ChatMessage
11+ import domain.model.Group
12+ import io.github.xxfast.kstore.KStore
13+ import kotlinx.coroutines.CoroutineDispatcher
14+ import kotlinx.coroutines.Dispatchers
15+ import kotlinx.coroutines.IO
16+ import kotlinx.coroutines.launch
17+ import org.jetbrains.skia.Image
18+ import platform.Foundation.NSURL
19+ import platform.Foundation.NSURL
20+ import platform.Foundation.NSURLRequest
21+ import platform.Foundation.sendSynchronousRequest
22+ import platform.Foundation.NSError
23+ import platform.Foundation.NSErrorDomain
24+ import platform.Foundation.NSURLConnection
25+ import presentation.components.CommonTextComposable
26+ import utils.AppCoroutineDispatchers
27+ import utils.TYPE
28+
29+
30+ actual fun getPlatform (): TYPE = TYPE .IOS
31+
32+ actual suspend fun clipData (clipboardManager : ClipboardManager ): String? {
33+ return clipboardManager.getText()?.text.toString().trim()
34+ }
35+ actual suspend fun setClipData (clipboardManager : ClipboardManager ,message : String ) {
36+ return clipboardManager.setText(AnnotatedString (message))
37+ }
38+ actual class AppCoroutineDispatchersImpl actual constructor() : AppCoroutineDispatchers {
39+ override val io: CoroutineDispatcher
40+ get() = Dispatchers .IO
41+ override val default: CoroutineDispatcher
42+ get() = Dispatchers .Default
43+ override val main: CoroutineDispatcher
44+ get() = Dispatchers .Main
45+ }
46+
47+ @Composable
48+ actual fun ImagePicker (showFilePicker : Boolean , onResult : (ByteArray? ) -> Unit ) {
49+ val scope = rememberCoroutineScope()
50+ val fileType = listOf (" jpg" , " png" )
51+ FilePicker (show = showFilePicker, fileExtensions = fileType) { file ->
52+ scope.launch {
53+ file?.getFileByteArray()?.let { onResult(it) }
54+ }
55+
56+ }
57+ }
58+
59+ actual fun ByteArray.toComposeImageBitmap (): ImageBitmap {
60+ return Image .makeFromEncoded(this ).toComposeImageBitmap()
61+ }
62+ @Composable
63+ actual fun TextComposable (message : String ,isGEMINIMessage : Boolean ) {
64+ CommonTextComposable (message,isGEMINIMessage)
65+ }
66+
67+ actual fun isNetworkAvailable (): Boolean {
68+ val url = NSURL .URLWithString (" https://www.google.com" )
69+ val request = NSURLRequest .requestWithURL(url)
70+
71+ val response: AutoreleasingUnsafeMutablePointer <NSURLResponse ?> = null
72+ val error: AutoreleasingUnsafeMutablePointer <NSError ?> = null
73+
74+ val data = NSURLConnection .sendSynchronousRequest(request, response, error)
75+
76+ if (data != null && (response != null && response.pointed !is NSHTTPURLResponse )) {
77+ return true
78+ } else {
79+ val nsError = error?.pointed
80+ if (nsError != null && nsError.domain == NSErrorDomain .NSURLErrorDomain ) {
81+ return nsError.code != - 1009
82+ }
83+ }
84+
85+ return false
86+ }
87+ actual suspend fun readGroupKStore (readFun : suspend (KStore <List <Group >>) -> Unit ) {
88+ }
89+ actual suspend fun readChatMessageKStore (readFun : suspend (KStore <List <ChatMessage >>) -> Unit ) {
90+ }
0 commit comments