Make a robust sending system

This commit is contained in:
2026-05-19 15:45:21 +03:00
Unverified
parent 644499dd2c
commit 1a93145ee5
103 changed files with 7434 additions and 1442 deletions
@@ -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
}
}
}
@@ -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
}
}
}
@@ -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())
}