mirror of
https://github.com/fromchat-messenger/app.git
synced 2026-09-22 19:15:05 +03:00
Make a robust sending system
This commit is contained in:
+27
@@ -0,0 +1,27 @@
|
||||
package com.pr0gramm3r101.utils
|
||||
|
||||
import android.content.ClipData as AndroidClipData
|
||||
import androidx.compose.ui.platform.ClipEntry
|
||||
import androidx.compose.ui.platform.Clipboard
|
||||
|
||||
actual fun Clipboard.toSupport(): SupportClipboardManager {
|
||||
val clipboard = this
|
||||
return object : SupportClipboardManager {
|
||||
private var listener: ((String) -> Unit)? = null
|
||||
|
||||
override suspend fun setText(string: String) {
|
||||
val clipData = AndroidClipData.newPlainText("text", string)
|
||||
clipboard.setClipEntry(ClipEntry(clipData))
|
||||
listener?.invoke(string)
|
||||
}
|
||||
|
||||
override suspend fun getText(): String? {
|
||||
val entry = clipboard.getClipEntry() ?: return null
|
||||
return entry.clipData?.getItemAt(0)?.text?.toString()
|
||||
}
|
||||
|
||||
override fun setTextListener(listener: (String) -> Unit) {
|
||||
this.listener = listener
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -7,7 +7,9 @@ internal actual fun expectExists(path: String): Boolean =
|
||||
File(path).exists()
|
||||
|
||||
internal actual fun expectWriteBytes(path: String, bytes: ByteArray) {
|
||||
File(path).writeBytes(bytes)
|
||||
val file = File(path)
|
||||
file.parentFile?.mkdirs()
|
||||
file.writeBytes(bytes)
|
||||
}
|
||||
|
||||
internal actual fun expectDelete(path: String) {
|
||||
|
||||
@@ -85,20 +85,7 @@ val LocalSupportClipboardManager = compositionLocalOf<SupportClipboardManager> {
|
||||
|
||||
val supportClipboardManagerImpl @Composable get() = LocalClipboard().toSupport()
|
||||
|
||||
inline fun Clipboard.toSupport() = object : SupportClipboardManager {
|
||||
private var listener: ((String) -> Unit)? = null
|
||||
|
||||
override suspend fun setText(string: String) {
|
||||
setText(string)
|
||||
listener?.invoke(string)
|
||||
}
|
||||
|
||||
override suspend fun getText() = this@toSupport.getClipEntry()?.toString() ?: ""
|
||||
|
||||
override fun setTextListener(listener: (String) -> Unit) {
|
||||
this.listener = listener
|
||||
}
|
||||
}
|
||||
expect fun Clipboard.toSupport(): SupportClipboardManager
|
||||
|
||||
fun String.toAnnotatedString() = AnnotatedString(this)
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.pr0gramm3r101.utils
|
||||
|
||||
import androidx.compose.ui.platform.Clipboard
|
||||
import platform.UIKit.UIPasteboard
|
||||
|
||||
actual fun Clipboard.toSupport(): SupportClipboardManager {
|
||||
return object : SupportClipboardManager {
|
||||
private var listener: ((String) -> Unit)? = null
|
||||
|
||||
override suspend fun setText(string: String) {
|
||||
UIPasteboard.generalPasteboard.string = string
|
||||
listener?.invoke(string)
|
||||
}
|
||||
|
||||
override suspend fun getText(): String? =
|
||||
UIPasteboard.generalPasteboard.string
|
||||
|
||||
override fun setTextListener(listener: (String) -> Unit) {
|
||||
this.listener = listener
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
@@ -19,6 +19,10 @@ internal actual fun expectExists(path: String): Boolean =
|
||||
|
||||
@OptIn(ExperimentalForeignApi::class)
|
||||
internal actual fun expectWriteBytes(path: String, bytes: ByteArray) {
|
||||
val parent = path.substringBeforeLast('/', missingDelimiterValue = "")
|
||||
if (parent.isNotEmpty()) {
|
||||
NSFileManager.defaultManager.createDirectoryAtPath(parent, true, null, null)
|
||||
}
|
||||
val nsData = bytes.usePinned { pinned ->
|
||||
NSData.create(bytes = pinned.addressOf(0), length = bytes.size.toULong())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user