mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-02 02:00:49 +08:00
feat: integrate native indexer for mobile (#14174)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
## Release Notes
* **New Features**
* Added full-text search functionality to mobile apps (Android and iOS),
enabling document indexing and search capabilities.
* Enhanced blob upload support with new GraphQL mutations for creating,
completing, and managing file uploads.
* **Improvements**
* iOS and Android now use SQLite storage backend for improved indexing
performance, aligning with desktop experience.
<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
+117
@@ -618,4 +618,121 @@ class NbStorePlugin : Plugin() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PluginMethod
|
||||
fun ftsAddDocument(call: PluginCall) {
|
||||
launch(Dispatchers.IO) {
|
||||
try {
|
||||
val id = call.getStringEnsure("id")
|
||||
val indexName = call.getStringEnsure("indexName")
|
||||
val docId = call.getStringEnsure("docId")
|
||||
val text = call.getStringEnsure("text")
|
||||
val index = call.getBoolean("index")
|
||||
?: throw IllegalArgumentException("index is required")
|
||||
docStoragePool.ftsAddDocument(id, indexName, docId, text, index)
|
||||
call.resolve()
|
||||
} catch (e: Exception) {
|
||||
call.reject("Failed to add document to fts: ${e.message}", null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PluginMethod
|
||||
fun ftsDeleteDocument(call: PluginCall) {
|
||||
launch(Dispatchers.IO) {
|
||||
try {
|
||||
val id = call.getStringEnsure("id")
|
||||
val indexName = call.getStringEnsure("indexName")
|
||||
val docId = call.getStringEnsure("docId")
|
||||
docStoragePool.ftsDeleteDocument(id, indexName, docId)
|
||||
call.resolve()
|
||||
} catch (e: Exception) {
|
||||
call.reject("Failed to delete document from fts: ${e.message}", null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PluginMethod
|
||||
fun ftsSearch(call: PluginCall) {
|
||||
launch(Dispatchers.IO) {
|
||||
try {
|
||||
val id = call.getStringEnsure("id")
|
||||
val indexName = call.getStringEnsure("indexName")
|
||||
val query = call.getStringEnsure("query")
|
||||
val results = docStoragePool.ftsSearch(id, indexName, query)
|
||||
val mapped = results.map {
|
||||
JSObject()
|
||||
.put("id", it.id)
|
||||
.put("score", it.score)
|
||||
.put("terms", JSArray(it.terms))
|
||||
}
|
||||
call.resolve(
|
||||
JSObject().put("results", JSArray(mapped))
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
call.reject("Failed to search fts: ${e.message}", null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PluginMethod
|
||||
fun ftsGetDocument(call: PluginCall) {
|
||||
launch(Dispatchers.IO) {
|
||||
try {
|
||||
val id = call.getStringEnsure("id")
|
||||
val indexName = call.getStringEnsure("indexName")
|
||||
val docId = call.getStringEnsure("docId")
|
||||
val text = docStoragePool.ftsGetDocument(id, indexName, docId)
|
||||
call.resolve(JSObject().put("text", text))
|
||||
} catch (e: Exception) {
|
||||
call.reject("Failed to get fts document: ${e.message}", null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PluginMethod
|
||||
fun ftsGetMatches(call: PluginCall) {
|
||||
launch(Dispatchers.IO) {
|
||||
try {
|
||||
val id = call.getStringEnsure("id")
|
||||
val indexName = call.getStringEnsure("indexName")
|
||||
val docId = call.getStringEnsure("docId")
|
||||
val query = call.getStringEnsure("query")
|
||||
val matches = docStoragePool.ftsGetMatches(id, indexName, docId, query)
|
||||
val mapped = matches.map {
|
||||
JSObject()
|
||||
.put("start", it.start.toInt())
|
||||
.put("end", it.end.toInt())
|
||||
}
|
||||
call.resolve(JSObject().put("matches", JSArray(mapped)))
|
||||
} catch (e: Exception) {
|
||||
call.reject("Failed to get fts matches: ${e.message}", null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PluginMethod
|
||||
fun ftsFlushIndex(call: PluginCall) {
|
||||
launch(Dispatchers.IO) {
|
||||
try {
|
||||
val id = call.getStringEnsure("id")
|
||||
docStoragePool.ftsFlushIndex(id)
|
||||
call.resolve()
|
||||
} catch (e: Exception) {
|
||||
call.reject("Failed to flush fts index: ${e.message}", null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@PluginMethod
|
||||
fun ftsIndexVersion(call: PluginCall) {
|
||||
launch(Dispatchers.IO) {
|
||||
try {
|
||||
val version = docStoragePool.ftsIndexVersion()
|
||||
call.resolve(JSObject().put("indexVersion", version))
|
||||
} catch (e: Exception) {
|
||||
call.reject("Failed to get fts index version: ${e.message}", null, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+374
@@ -768,6 +768,20 @@ internal interface UniffiForeignFutureCompleteVoid : com.sun.jna.Callback {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -814,6 +828,20 @@ fun uniffi_affine_mobile_native_checksum_method_docstoragepool_delete_doc(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_disconnect(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_add_document(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_delete_document(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_flush_index(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_get_document(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_get_matches(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_index_version(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_search(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_get_blob(
|
||||
): Short
|
||||
fun uniffi_affine_mobile_native_checksum_method_docstoragepool_get_blob_uploaded_at(
|
||||
@@ -925,6 +953,20 @@ fun uniffi_affine_mobile_native_fn_method_docstoragepool_delete_doc(`ptr`: Point
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_disconnect(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_fts_add_document(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,`indexName`: RustBuffer.ByValue,`docId`: RustBuffer.ByValue,`text`: RustBuffer.ByValue,`index`: Byte,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_fts_delete_document(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,`indexName`: RustBuffer.ByValue,`docId`: RustBuffer.ByValue,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_fts_flush_index(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_fts_get_document(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,`indexName`: RustBuffer.ByValue,`docId`: RustBuffer.ByValue,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_fts_get_matches(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,`indexName`: RustBuffer.ByValue,`docId`: RustBuffer.ByValue,`query`: RustBuffer.ByValue,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_fts_index_version(`ptr`: Pointer,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_fts_search(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,`indexName`: RustBuffer.ByValue,`query`: RustBuffer.ByValue,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_get_blob(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,`key`: RustBuffer.ByValue,
|
||||
): Long
|
||||
fun uniffi_affine_mobile_native_fn_method_docstoragepool_get_blob_uploaded_at(`ptr`: Pointer,`universalId`: RustBuffer.ByValue,`peer`: RustBuffer.ByValue,`blobId`: RustBuffer.ByValue,
|
||||
@@ -1125,6 +1167,27 @@ private fun uniffiCheckApiChecksums(lib: IntegrityCheckingUniffiLib) {
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_disconnect() != 20410.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_add_document() != 37651.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_delete_document() != 47292.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_flush_index() != 9921.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_get_document() != 45953.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_get_matches() != 35972.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_index_version() != 44498.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_search() != 28341.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
if (lib.uniffi_affine_mobile_native_checksum_method_docstoragepool_get_blob() != 56927.toShort()) {
|
||||
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
|
||||
}
|
||||
@@ -1423,6 +1486,29 @@ public object FfiConverterLong: FfiConverter<Long, Long> {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @suppress
|
||||
*/
|
||||
public object FfiConverterDouble: FfiConverter<Double, Double> {
|
||||
override fun lift(value: Double): Double {
|
||||
return value
|
||||
}
|
||||
|
||||
override fun read(buf: ByteBuffer): Double {
|
||||
return buf.getDouble()
|
||||
}
|
||||
|
||||
override fun lower(value: Double): Double {
|
||||
return value
|
||||
}
|
||||
|
||||
override fun allocationSize(value: Double) = 8UL
|
||||
|
||||
override fun write(value: Double, buf: ByteBuffer) {
|
||||
buf.putDouble(value)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @suppress
|
||||
*/
|
||||
@@ -1619,6 +1705,20 @@ public interface DocStoragePoolInterface {
|
||||
|
||||
suspend fun `disconnect`(`universalId`: kotlin.String)
|
||||
|
||||
suspend fun `ftsAddDocument`(`universalId`: kotlin.String, `indexName`: kotlin.String, `docId`: kotlin.String, `text`: kotlin.String, `index`: kotlin.Boolean)
|
||||
|
||||
suspend fun `ftsDeleteDocument`(`universalId`: kotlin.String, `indexName`: kotlin.String, `docId`: kotlin.String)
|
||||
|
||||
suspend fun `ftsFlushIndex`(`universalId`: kotlin.String)
|
||||
|
||||
suspend fun `ftsGetDocument`(`universalId`: kotlin.String, `indexName`: kotlin.String, `docId`: kotlin.String): kotlin.String?
|
||||
|
||||
suspend fun `ftsGetMatches`(`universalId`: kotlin.String, `indexName`: kotlin.String, `docId`: kotlin.String, `query`: kotlin.String): List<MatchRange>
|
||||
|
||||
suspend fun `ftsIndexVersion`(): kotlin.UInt
|
||||
|
||||
suspend fun `ftsSearch`(`universalId`: kotlin.String, `indexName`: kotlin.String, `query`: kotlin.String): List<SearchHit>
|
||||
|
||||
suspend fun `getBlob`(`universalId`: kotlin.String, `key`: kotlin.String): Blob?
|
||||
|
||||
suspend fun `getBlobUploadedAt`(`universalId`: kotlin.String, `peer`: kotlin.String, `blobId`: kotlin.String): kotlin.Long?
|
||||
@@ -1885,6 +1985,156 @@ open class DocStoragePool: Disposable, AutoCloseable, DocStoragePoolInterface
|
||||
}
|
||||
|
||||
|
||||
@Throws(UniffiException::class)
|
||||
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
|
||||
override suspend fun `ftsAddDocument`(`universalId`: kotlin.String, `indexName`: kotlin.String, `docId`: kotlin.String, `text`: kotlin.String, `index`: kotlin.Boolean) {
|
||||
return uniffiRustCallAsync(
|
||||
callWithPointer { thisPtr ->
|
||||
UniffiLib.INSTANCE.uniffi_affine_mobile_native_fn_method_docstoragepool_fts_add_document(
|
||||
thisPtr,
|
||||
FfiConverterString.lower(`universalId`),FfiConverterString.lower(`indexName`),FfiConverterString.lower(`docId`),FfiConverterString.lower(`text`),FfiConverterBoolean.lower(`index`),
|
||||
)
|
||||
},
|
||||
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_poll_void(future, callback, continuation) },
|
||||
{ future, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_complete_void(future, continuation) },
|
||||
{ future -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_free_void(future) },
|
||||
// lift function
|
||||
{ Unit },
|
||||
|
||||
// Error FFI converter
|
||||
UniffiException.ErrorHandler,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Throws(UniffiException::class)
|
||||
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
|
||||
override suspend fun `ftsDeleteDocument`(`universalId`: kotlin.String, `indexName`: kotlin.String, `docId`: kotlin.String) {
|
||||
return uniffiRustCallAsync(
|
||||
callWithPointer { thisPtr ->
|
||||
UniffiLib.INSTANCE.uniffi_affine_mobile_native_fn_method_docstoragepool_fts_delete_document(
|
||||
thisPtr,
|
||||
FfiConverterString.lower(`universalId`),FfiConverterString.lower(`indexName`),FfiConverterString.lower(`docId`),
|
||||
)
|
||||
},
|
||||
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_poll_void(future, callback, continuation) },
|
||||
{ future, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_complete_void(future, continuation) },
|
||||
{ future -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_free_void(future) },
|
||||
// lift function
|
||||
{ Unit },
|
||||
|
||||
// Error FFI converter
|
||||
UniffiException.ErrorHandler,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Throws(UniffiException::class)
|
||||
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
|
||||
override suspend fun `ftsFlushIndex`(`universalId`: kotlin.String) {
|
||||
return uniffiRustCallAsync(
|
||||
callWithPointer { thisPtr ->
|
||||
UniffiLib.INSTANCE.uniffi_affine_mobile_native_fn_method_docstoragepool_fts_flush_index(
|
||||
thisPtr,
|
||||
FfiConverterString.lower(`universalId`),
|
||||
)
|
||||
},
|
||||
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_poll_void(future, callback, continuation) },
|
||||
{ future, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_complete_void(future, continuation) },
|
||||
{ future -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_free_void(future) },
|
||||
// lift function
|
||||
{ Unit },
|
||||
|
||||
// Error FFI converter
|
||||
UniffiException.ErrorHandler,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Throws(UniffiException::class)
|
||||
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
|
||||
override suspend fun `ftsGetDocument`(`universalId`: kotlin.String, `indexName`: kotlin.String, `docId`: kotlin.String) : kotlin.String? {
|
||||
return uniffiRustCallAsync(
|
||||
callWithPointer { thisPtr ->
|
||||
UniffiLib.INSTANCE.uniffi_affine_mobile_native_fn_method_docstoragepool_fts_get_document(
|
||||
thisPtr,
|
||||
FfiConverterString.lower(`universalId`),FfiConverterString.lower(`indexName`),FfiConverterString.lower(`docId`),
|
||||
)
|
||||
},
|
||||
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_poll_rust_buffer(future, callback, continuation) },
|
||||
{ future, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_complete_rust_buffer(future, continuation) },
|
||||
{ future -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_free_rust_buffer(future) },
|
||||
// lift function
|
||||
{ FfiConverterOptionalString.lift(it) },
|
||||
// Error FFI converter
|
||||
UniffiException.ErrorHandler,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Throws(UniffiException::class)
|
||||
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
|
||||
override suspend fun `ftsGetMatches`(`universalId`: kotlin.String, `indexName`: kotlin.String, `docId`: kotlin.String, `query`: kotlin.String) : List<MatchRange> {
|
||||
return uniffiRustCallAsync(
|
||||
callWithPointer { thisPtr ->
|
||||
UniffiLib.INSTANCE.uniffi_affine_mobile_native_fn_method_docstoragepool_fts_get_matches(
|
||||
thisPtr,
|
||||
FfiConverterString.lower(`universalId`),FfiConverterString.lower(`indexName`),FfiConverterString.lower(`docId`),FfiConverterString.lower(`query`),
|
||||
)
|
||||
},
|
||||
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_poll_rust_buffer(future, callback, continuation) },
|
||||
{ future, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_complete_rust_buffer(future, continuation) },
|
||||
{ future -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_free_rust_buffer(future) },
|
||||
// lift function
|
||||
{ FfiConverterSequenceTypeMatchRange.lift(it) },
|
||||
// Error FFI converter
|
||||
UniffiException.ErrorHandler,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Throws(UniffiException::class)
|
||||
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
|
||||
override suspend fun `ftsIndexVersion`() : kotlin.UInt {
|
||||
return uniffiRustCallAsync(
|
||||
callWithPointer { thisPtr ->
|
||||
UniffiLib.INSTANCE.uniffi_affine_mobile_native_fn_method_docstoragepool_fts_index_version(
|
||||
thisPtr,
|
||||
|
||||
)
|
||||
},
|
||||
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_poll_u32(future, callback, continuation) },
|
||||
{ future, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_complete_u32(future, continuation) },
|
||||
{ future -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_free_u32(future) },
|
||||
// lift function
|
||||
{ FfiConverterUInt.lift(it) },
|
||||
// Error FFI converter
|
||||
UniffiException.ErrorHandler,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Throws(UniffiException::class)
|
||||
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
|
||||
override suspend fun `ftsSearch`(`universalId`: kotlin.String, `indexName`: kotlin.String, `query`: kotlin.String) : List<SearchHit> {
|
||||
return uniffiRustCallAsync(
|
||||
callWithPointer { thisPtr ->
|
||||
UniffiLib.INSTANCE.uniffi_affine_mobile_native_fn_method_docstoragepool_fts_search(
|
||||
thisPtr,
|
||||
FfiConverterString.lower(`universalId`),FfiConverterString.lower(`indexName`),FfiConverterString.lower(`query`),
|
||||
)
|
||||
},
|
||||
{ future, callback, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_poll_rust_buffer(future, callback, continuation) },
|
||||
{ future, continuation -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_complete_rust_buffer(future, continuation) },
|
||||
{ future -> UniffiLib.INSTANCE.ffi_affine_mobile_native_rust_future_free_rust_buffer(future) },
|
||||
// lift function
|
||||
{ FfiConverterSequenceTypeSearchHit.lift(it) },
|
||||
// Error FFI converter
|
||||
UniffiException.ErrorHandler,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Throws(UniffiException::class)
|
||||
@Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
|
||||
override suspend fun `getBlob`(`universalId`: kotlin.String, `key`: kotlin.String) : Blob? {
|
||||
@@ -2696,6 +2946,74 @@ public object FfiConverterTypeListedBlob: FfiConverterRustBuffer<ListedBlob> {
|
||||
|
||||
|
||||
|
||||
data class MatchRange (
|
||||
var `start`: kotlin.UInt,
|
||||
var `end`: kotlin.UInt
|
||||
) {
|
||||
|
||||
companion object
|
||||
}
|
||||
|
||||
/**
|
||||
* @suppress
|
||||
*/
|
||||
public object FfiConverterTypeMatchRange: FfiConverterRustBuffer<MatchRange> {
|
||||
override fun read(buf: ByteBuffer): MatchRange {
|
||||
return MatchRange(
|
||||
FfiConverterUInt.read(buf),
|
||||
FfiConverterUInt.read(buf),
|
||||
)
|
||||
}
|
||||
|
||||
override fun allocationSize(value: MatchRange) = (
|
||||
FfiConverterUInt.allocationSize(value.`start`) +
|
||||
FfiConverterUInt.allocationSize(value.`end`)
|
||||
)
|
||||
|
||||
override fun write(value: MatchRange, buf: ByteBuffer) {
|
||||
FfiConverterUInt.write(value.`start`, buf)
|
||||
FfiConverterUInt.write(value.`end`, buf)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
data class SearchHit (
|
||||
var `id`: kotlin.String,
|
||||
var `score`: kotlin.Double,
|
||||
var `terms`: List<kotlin.String>
|
||||
) {
|
||||
|
||||
companion object
|
||||
}
|
||||
|
||||
/**
|
||||
* @suppress
|
||||
*/
|
||||
public object FfiConverterTypeSearchHit: FfiConverterRustBuffer<SearchHit> {
|
||||
override fun read(buf: ByteBuffer): SearchHit {
|
||||
return SearchHit(
|
||||
FfiConverterString.read(buf),
|
||||
FfiConverterDouble.read(buf),
|
||||
FfiConverterSequenceString.read(buf),
|
||||
)
|
||||
}
|
||||
|
||||
override fun allocationSize(value: SearchHit) = (
|
||||
FfiConverterString.allocationSize(value.`id`) +
|
||||
FfiConverterDouble.allocationSize(value.`score`) +
|
||||
FfiConverterSequenceString.allocationSize(value.`terms`)
|
||||
)
|
||||
|
||||
override fun write(value: SearchHit, buf: ByteBuffer) {
|
||||
FfiConverterString.write(value.`id`, buf)
|
||||
FfiConverterDouble.write(value.`score`, buf)
|
||||
FfiConverterSequenceString.write(value.`terms`, buf)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
data class SetBlob (
|
||||
var `key`: kotlin.String,
|
||||
var `data`: kotlin.String,
|
||||
@@ -3188,6 +3506,62 @@ public object FfiConverterSequenceTypeListedBlob: FfiConverterRustBuffer<List<Li
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @suppress
|
||||
*/
|
||||
public object FfiConverterSequenceTypeMatchRange: FfiConverterRustBuffer<List<MatchRange>> {
|
||||
override fun read(buf: ByteBuffer): List<MatchRange> {
|
||||
val len = buf.getInt()
|
||||
return List<MatchRange>(len) {
|
||||
FfiConverterTypeMatchRange.read(buf)
|
||||
}
|
||||
}
|
||||
|
||||
override fun allocationSize(value: List<MatchRange>): ULong {
|
||||
val sizeForLength = 4UL
|
||||
val sizeForItems = value.map { FfiConverterTypeMatchRange.allocationSize(it) }.sum()
|
||||
return sizeForLength + sizeForItems
|
||||
}
|
||||
|
||||
override fun write(value: List<MatchRange>, buf: ByteBuffer) {
|
||||
buf.putInt(value.size)
|
||||
value.iterator().forEach {
|
||||
FfiConverterTypeMatchRange.write(it, buf)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @suppress
|
||||
*/
|
||||
public object FfiConverterSequenceTypeSearchHit: FfiConverterRustBuffer<List<SearchHit>> {
|
||||
override fun read(buf: ByteBuffer): List<SearchHit> {
|
||||
val len = buf.getInt()
|
||||
return List<SearchHit>(len) {
|
||||
FfiConverterTypeSearchHit.read(buf)
|
||||
}
|
||||
}
|
||||
|
||||
override fun allocationSize(value: List<SearchHit>): ULong {
|
||||
val sizeForLength = 4UL
|
||||
val sizeForItems = value.map { FfiConverterTypeSearchHit.allocationSize(it) }.sum()
|
||||
return sizeForLength + sizeForItems
|
||||
}
|
||||
|
||||
override fun write(value: List<SearchHit>, buf: ByteBuffer) {
|
||||
buf.putInt(value.size)
|
||||
value.iterator().forEach {
|
||||
FfiConverterTypeSearchHit.write(it, buf)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -171,7 +171,9 @@ export interface NbStorePlugin {
|
||||
id: string;
|
||||
indexName: string;
|
||||
query: string;
|
||||
}) => Promise<{ id: string; score: number; terms: Array<string> }[]>;
|
||||
}) => Promise<{
|
||||
results: { id: string; score: number; terms: Array<string> }[];
|
||||
}>;
|
||||
ftsGetDocument: (options: {
|
||||
id: string;
|
||||
indexName: string;
|
||||
@@ -182,7 +184,7 @@ export interface NbStorePlugin {
|
||||
indexName: string;
|
||||
docId: string;
|
||||
query: string;
|
||||
}) => Promise<Array<{ start: number; end: number }>>;
|
||||
}) => Promise<{ matches: Array<{ start: number; end: number }> }>;
|
||||
ftsFlushIndex: (options: { id: string }) => Promise<void>;
|
||||
ftsIndexVersion: () => Promise<number>;
|
||||
ftsIndexVersion: () => Promise<{ indexVersion: number }>;
|
||||
}
|
||||
|
||||
@@ -370,11 +370,12 @@ export const NbStoreNativeDBApis: NativeDBApis = {
|
||||
indexName: string,
|
||||
query: string
|
||||
): Promise<{ id: string; score: number; terms: Array<string> }[]> {
|
||||
return await NbStore.ftsSearch({
|
||||
const { results } = await NbStore.ftsSearch({
|
||||
id,
|
||||
indexName,
|
||||
query,
|
||||
});
|
||||
return results ?? [];
|
||||
},
|
||||
ftsGetDocument: async function (
|
||||
id: string,
|
||||
@@ -394,12 +395,13 @@ export const NbStoreNativeDBApis: NativeDBApis = {
|
||||
docId: string,
|
||||
query: string
|
||||
): Promise<{ start: number; end: number }[]> {
|
||||
return await NbStore.ftsGetMatches({
|
||||
const { matches } = await NbStore.ftsGetMatches({
|
||||
id,
|
||||
indexName,
|
||||
docId,
|
||||
query,
|
||||
});
|
||||
return matches ?? [];
|
||||
},
|
||||
ftsFlushIndex: async function (id: string): Promise<void> {
|
||||
await NbStore.ftsFlushIndex({
|
||||
@@ -407,6 +409,6 @@ export const NbStoreNativeDBApis: NativeDBApis = {
|
||||
});
|
||||
},
|
||||
ftsIndexVersion: function (): Promise<number> {
|
||||
return NbStore.ftsIndexVersion();
|
||||
return NbStore.ftsIndexVersion().then(res => res.indexVersion);
|
||||
},
|
||||
};
|
||||
|
||||
+17
-8
@@ -23,8 +23,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Lakr233/ListViewKit",
|
||||
"state" : {
|
||||
"revision" : "a4372d7f90c846d834c1f1575d1af0050d70fa0f",
|
||||
"version" : "1.1.6"
|
||||
"revision" : "5dea05a52a6c2c7bb013a5925c517d6e32940605",
|
||||
"version" : "1.1.8"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -41,8 +41,17 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Lakr233/MarkdownView",
|
||||
"state" : {
|
||||
"revision" : "c052f57768436212c91e4369d76181c38eaa3ba3",
|
||||
"version" : "3.4.2"
|
||||
"revision" : "20fa808889944921e8da3a1c8317e8a557db373e",
|
||||
"version" : "3.4.7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "msdisplaylink",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Lakr233/MSDisplayLink",
|
||||
"state" : {
|
||||
"revision" : "ebf5823cb5fc1326639d9a05bc06d16bbe82989f",
|
||||
"version" : "2.0.8"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -77,8 +86,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Lakr233/SpringInterpolation",
|
||||
"state" : {
|
||||
"revision" : "f9ae95ece5d6b7cdceafd4381f1d5f0f9494e5d2",
|
||||
"version" : "1.3.1"
|
||||
"revision" : "cdb556516daa9b43c16aae9436dd39e19ff930fd",
|
||||
"version" : "1.4.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -95,8 +104,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-collections",
|
||||
"state" : {
|
||||
"revision" : "8c0c0a8b49e080e54e5e328cc552821ff07cd341",
|
||||
"version" : "1.2.1"
|
||||
"revision" : "7b847a3b7008b2dc2f47ca3110d8c782fb2e5c7e",
|
||||
"version" : "1.3.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -36,6 +36,14 @@ public class NbStorePlugin: CAPPlugin, CAPBridgedPlugin {
|
||||
CAPPluginMethod(name: "clearClocks", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "getBlobUploadedAt", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "setBlobUploadedAt", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "crawlDocData", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "ftsAddDocument", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "ftsDeleteDocument", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "ftsSearch", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "ftsGetDocument", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "ftsGetMatches", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "ftsFlushIndex", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "ftsIndexVersion", returnType: CAPPluginReturnPromise),
|
||||
]
|
||||
|
||||
@objc func connect(_ call: CAPPluginCall) {
|
||||
@@ -546,4 +554,169 @@ public class NbStorePlugin: CAPPlugin, CAPBridgedPlugin {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc func crawlDocData(_ call: CAPPluginCall) {
|
||||
Task {
|
||||
do {
|
||||
let id = try call.getStringEnsure("id")
|
||||
let docId = try call.getStringEnsure("docId")
|
||||
let result = try await docStoragePool.crawlDocData(universalId: id, docId: docId)
|
||||
let blocks = result.blocks.map {
|
||||
[
|
||||
"blockId": $0.blockId,
|
||||
"flavour": $0.flavour,
|
||||
"content": $0.content as Any,
|
||||
"blob": $0.blob as Any,
|
||||
"refDocId": $0.refDocId as Any,
|
||||
"refInfo": $0.refInfo as Any,
|
||||
"parentFlavour": $0.parentFlavour as Any,
|
||||
"parentBlockId": $0.parentBlockId as Any,
|
||||
"additional": $0.additional as Any,
|
||||
]
|
||||
}
|
||||
call.resolve([
|
||||
"title": result.title,
|
||||
"summary": result.summary,
|
||||
"blocks": blocks,
|
||||
])
|
||||
} catch {
|
||||
call.reject("Failed to crawl doc data, \(error)", nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc func ftsAddDocument(_ call: CAPPluginCall) {
|
||||
Task {
|
||||
do {
|
||||
let id = try call.getStringEnsure("id")
|
||||
let indexName = try call.getStringEnsure("indexName")
|
||||
let docId = try call.getStringEnsure("docId")
|
||||
let text = try call.getStringEnsure("text")
|
||||
guard let index = call.getBool("index") else {
|
||||
call.reject("index is required", nil, nil)
|
||||
return
|
||||
}
|
||||
try await docStoragePool.ftsAddDocument(
|
||||
universalId: id,
|
||||
indexName: indexName,
|
||||
docId: docId,
|
||||
text: text,
|
||||
index: index
|
||||
)
|
||||
call.resolve()
|
||||
} catch {
|
||||
call.reject("Failed to add document to fts, \(error)", nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc func ftsDeleteDocument(_ call: CAPPluginCall) {
|
||||
Task {
|
||||
do {
|
||||
let id = try call.getStringEnsure("id")
|
||||
let indexName = try call.getStringEnsure("indexName")
|
||||
let docId = try call.getStringEnsure("docId")
|
||||
try await docStoragePool.ftsDeleteDocument(
|
||||
universalId: id,
|
||||
indexName: indexName,
|
||||
docId: docId
|
||||
)
|
||||
call.resolve()
|
||||
} catch {
|
||||
call.reject("Failed to delete document from fts, \(error)", nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc func ftsSearch(_ call: CAPPluginCall) {
|
||||
Task {
|
||||
do {
|
||||
let id = try call.getStringEnsure("id")
|
||||
let indexName = try call.getStringEnsure("indexName")
|
||||
let query = try call.getStringEnsure("query")
|
||||
let results = try await docStoragePool.ftsSearch(
|
||||
universalId: id,
|
||||
indexName: indexName,
|
||||
query: query
|
||||
)
|
||||
let mapped = results.map {
|
||||
[
|
||||
"id": $0.id,
|
||||
"score": $0.score,
|
||||
"terms": $0.terms,
|
||||
] as [String: Any]
|
||||
}
|
||||
call.resolve(["results": mapped])
|
||||
} catch {
|
||||
call.reject("Failed to search fts, \(error)", nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc func ftsGetDocument(_ call: CAPPluginCall) {
|
||||
Task {
|
||||
do {
|
||||
let id = try call.getStringEnsure("id")
|
||||
let indexName = try call.getStringEnsure("indexName")
|
||||
let docId = try call.getStringEnsure("docId")
|
||||
let text = try await docStoragePool.ftsGetDocument(
|
||||
universalId: id,
|
||||
indexName: indexName,
|
||||
docId: docId
|
||||
)
|
||||
call.resolve(["text": text as Any])
|
||||
} catch {
|
||||
call.reject("Failed to get fts document, \(error)", nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc func ftsGetMatches(_ call: CAPPluginCall) {
|
||||
Task {
|
||||
do {
|
||||
let id = try call.getStringEnsure("id")
|
||||
let indexName = try call.getStringEnsure("indexName")
|
||||
let docId = try call.getStringEnsure("docId")
|
||||
let query = try call.getStringEnsure("query")
|
||||
let matches = try await docStoragePool.ftsGetMatches(
|
||||
universalId: id,
|
||||
indexName: indexName,
|
||||
docId: docId,
|
||||
query: query
|
||||
)
|
||||
let mapped = matches.map {
|
||||
[
|
||||
"start": $0.start,
|
||||
"end": $0.end,
|
||||
]
|
||||
}
|
||||
call.resolve(["matches": mapped])
|
||||
} catch {
|
||||
call.reject("Failed to get fts matches, \(error)", nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc func ftsFlushIndex(_ call: CAPPluginCall) {
|
||||
Task {
|
||||
do {
|
||||
let id = try call.getStringEnsure("id")
|
||||
try await docStoragePool.ftsFlushIndex(universalId: id)
|
||||
call.resolve()
|
||||
} catch {
|
||||
call.reject("Failed to flush fts index, \(error)", nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc func ftsIndexVersion(_ call: CAPPluginCall) {
|
||||
Task {
|
||||
do {
|
||||
let version = try await docStoragePool.ftsIndexVersion()
|
||||
call.resolve(["indexVersion": version])
|
||||
} catch {
|
||||
call.reject("Failed to get fts index version, \(error)", nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -429,6 +429,22 @@ fileprivate struct FfiConverterInt64: FfiConverterPrimitive {
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterDouble: FfiConverterPrimitive {
|
||||
typealias FfiType = Double
|
||||
typealias SwiftType = Double
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> Double {
|
||||
return try lift(readDouble(&buf))
|
||||
}
|
||||
|
||||
public static func write(_ value: Double, into buf: inout [UInt8]) {
|
||||
writeDouble(&buf, lower(value))
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
@@ -506,12 +522,28 @@ public protocol DocStoragePoolProtocol: AnyObject, Sendable {
|
||||
*/
|
||||
func connect(universalId: String, path: String) async throws
|
||||
|
||||
func crawlDocData(universalId: String, docId: String) async throws -> CrawlResult
|
||||
|
||||
func deleteBlob(universalId: String, key: String, permanently: Bool) async throws
|
||||
|
||||
func deleteDoc(universalId: String, docId: String) async throws
|
||||
|
||||
func disconnect(universalId: String) async throws
|
||||
|
||||
func ftsAddDocument(universalId: String, indexName: String, docId: String, text: String, index: Bool) async throws
|
||||
|
||||
func ftsDeleteDocument(universalId: String, indexName: String, docId: String) async throws
|
||||
|
||||
func ftsFlushIndex(universalId: String) async throws
|
||||
|
||||
func ftsGetDocument(universalId: String, indexName: String, docId: String) async throws -> String?
|
||||
|
||||
func ftsGetMatches(universalId: String, indexName: String, docId: String, query: String) async throws -> [MatchRange]
|
||||
|
||||
func ftsIndexVersion() async throws -> UInt32
|
||||
|
||||
func ftsSearch(universalId: String, indexName: String, query: String) async throws -> [SearchHit]
|
||||
|
||||
func getBlob(universalId: String, key: String) async throws -> Blob?
|
||||
|
||||
func getBlobUploadedAt(universalId: String, peer: String, blobId: String) async throws -> Int64?
|
||||
@@ -648,6 +680,23 @@ open func connect(universalId: String, path: String)async throws {
|
||||
)
|
||||
}
|
||||
|
||||
open func crawlDocData(universalId: String, docId: String)async throws -> CrawlResult {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
rustFutureFunc: {
|
||||
uniffi_affine_mobile_native_fn_method_docstoragepool_crawl_doc_data(
|
||||
self.uniffiClonePointer(),
|
||||
FfiConverterString.lower(universalId),FfiConverterString.lower(docId)
|
||||
)
|
||||
},
|
||||
pollFunc: ffi_affine_mobile_native_rust_future_poll_rust_buffer,
|
||||
completeFunc: ffi_affine_mobile_native_rust_future_complete_rust_buffer,
|
||||
freeFunc: ffi_affine_mobile_native_rust_future_free_rust_buffer,
|
||||
liftFunc: FfiConverterTypeCrawlResult_lift,
|
||||
errorHandler: FfiConverterTypeUniffiError_lift
|
||||
)
|
||||
}
|
||||
|
||||
open func deleteBlob(universalId: String, key: String, permanently: Bool)async throws {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
@@ -699,6 +748,125 @@ open func disconnect(universalId: String)async throws {
|
||||
)
|
||||
}
|
||||
|
||||
open func ftsAddDocument(universalId: String, indexName: String, docId: String, text: String, index: Bool)async throws {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
rustFutureFunc: {
|
||||
uniffi_affine_mobile_native_fn_method_docstoragepool_fts_add_document(
|
||||
self.uniffiClonePointer(),
|
||||
FfiConverterString.lower(universalId),FfiConverterString.lower(indexName),FfiConverterString.lower(docId),FfiConverterString.lower(text),FfiConverterBool.lower(index)
|
||||
)
|
||||
},
|
||||
pollFunc: ffi_affine_mobile_native_rust_future_poll_void,
|
||||
completeFunc: ffi_affine_mobile_native_rust_future_complete_void,
|
||||
freeFunc: ffi_affine_mobile_native_rust_future_free_void,
|
||||
liftFunc: { $0 },
|
||||
errorHandler: FfiConverterTypeUniffiError_lift
|
||||
)
|
||||
}
|
||||
|
||||
open func ftsDeleteDocument(universalId: String, indexName: String, docId: String)async throws {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
rustFutureFunc: {
|
||||
uniffi_affine_mobile_native_fn_method_docstoragepool_fts_delete_document(
|
||||
self.uniffiClonePointer(),
|
||||
FfiConverterString.lower(universalId),FfiConverterString.lower(indexName),FfiConverterString.lower(docId)
|
||||
)
|
||||
},
|
||||
pollFunc: ffi_affine_mobile_native_rust_future_poll_void,
|
||||
completeFunc: ffi_affine_mobile_native_rust_future_complete_void,
|
||||
freeFunc: ffi_affine_mobile_native_rust_future_free_void,
|
||||
liftFunc: { $0 },
|
||||
errorHandler: FfiConverterTypeUniffiError_lift
|
||||
)
|
||||
}
|
||||
|
||||
open func ftsFlushIndex(universalId: String)async throws {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
rustFutureFunc: {
|
||||
uniffi_affine_mobile_native_fn_method_docstoragepool_fts_flush_index(
|
||||
self.uniffiClonePointer(),
|
||||
FfiConverterString.lower(universalId)
|
||||
)
|
||||
},
|
||||
pollFunc: ffi_affine_mobile_native_rust_future_poll_void,
|
||||
completeFunc: ffi_affine_mobile_native_rust_future_complete_void,
|
||||
freeFunc: ffi_affine_mobile_native_rust_future_free_void,
|
||||
liftFunc: { $0 },
|
||||
errorHandler: FfiConverterTypeUniffiError_lift
|
||||
)
|
||||
}
|
||||
|
||||
open func ftsGetDocument(universalId: String, indexName: String, docId: String)async throws -> String? {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
rustFutureFunc: {
|
||||
uniffi_affine_mobile_native_fn_method_docstoragepool_fts_get_document(
|
||||
self.uniffiClonePointer(),
|
||||
FfiConverterString.lower(universalId),FfiConverterString.lower(indexName),FfiConverterString.lower(docId)
|
||||
)
|
||||
},
|
||||
pollFunc: ffi_affine_mobile_native_rust_future_poll_rust_buffer,
|
||||
completeFunc: ffi_affine_mobile_native_rust_future_complete_rust_buffer,
|
||||
freeFunc: ffi_affine_mobile_native_rust_future_free_rust_buffer,
|
||||
liftFunc: FfiConverterOptionString.lift,
|
||||
errorHandler: FfiConverterTypeUniffiError_lift
|
||||
)
|
||||
}
|
||||
|
||||
open func ftsGetMatches(universalId: String, indexName: String, docId: String, query: String)async throws -> [MatchRange] {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
rustFutureFunc: {
|
||||
uniffi_affine_mobile_native_fn_method_docstoragepool_fts_get_matches(
|
||||
self.uniffiClonePointer(),
|
||||
FfiConverterString.lower(universalId),FfiConverterString.lower(indexName),FfiConverterString.lower(docId),FfiConverterString.lower(query)
|
||||
)
|
||||
},
|
||||
pollFunc: ffi_affine_mobile_native_rust_future_poll_rust_buffer,
|
||||
completeFunc: ffi_affine_mobile_native_rust_future_complete_rust_buffer,
|
||||
freeFunc: ffi_affine_mobile_native_rust_future_free_rust_buffer,
|
||||
liftFunc: FfiConverterSequenceTypeMatchRange.lift,
|
||||
errorHandler: FfiConverterTypeUniffiError_lift
|
||||
)
|
||||
}
|
||||
|
||||
open func ftsIndexVersion()async throws -> UInt32 {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
rustFutureFunc: {
|
||||
uniffi_affine_mobile_native_fn_method_docstoragepool_fts_index_version(
|
||||
self.uniffiClonePointer()
|
||||
|
||||
)
|
||||
},
|
||||
pollFunc: ffi_affine_mobile_native_rust_future_poll_u32,
|
||||
completeFunc: ffi_affine_mobile_native_rust_future_complete_u32,
|
||||
freeFunc: ffi_affine_mobile_native_rust_future_free_u32,
|
||||
liftFunc: FfiConverterUInt32.lift,
|
||||
errorHandler: FfiConverterTypeUniffiError_lift
|
||||
)
|
||||
}
|
||||
|
||||
open func ftsSearch(universalId: String, indexName: String, query: String)async throws -> [SearchHit] {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
rustFutureFunc: {
|
||||
uniffi_affine_mobile_native_fn_method_docstoragepool_fts_search(
|
||||
self.uniffiClonePointer(),
|
||||
FfiConverterString.lower(universalId),FfiConverterString.lower(indexName),FfiConverterString.lower(query)
|
||||
)
|
||||
},
|
||||
pollFunc: ffi_affine_mobile_native_rust_future_poll_rust_buffer,
|
||||
completeFunc: ffi_affine_mobile_native_rust_future_complete_rust_buffer,
|
||||
freeFunc: ffi_affine_mobile_native_rust_future_free_rust_buffer,
|
||||
liftFunc: FfiConverterSequenceTypeSearchHit.lift,
|
||||
errorHandler: FfiConverterTypeUniffiError_lift
|
||||
)
|
||||
}
|
||||
|
||||
open func getBlob(universalId: String, key: String)async throws -> Blob? {
|
||||
return
|
||||
try await uniffiRustCallAsync(
|
||||
@@ -1240,6 +1408,210 @@ public func FfiConverterTypeBlob_lower(_ value: Blob) -> RustBuffer {
|
||||
}
|
||||
|
||||
|
||||
public struct BlockInfo {
|
||||
public var blockId: String
|
||||
public var flavour: String
|
||||
public var content: [String]?
|
||||
public var blob: [String]?
|
||||
public var refDocId: [String]?
|
||||
public var refInfo: [String]?
|
||||
public var parentFlavour: String?
|
||||
public var parentBlockId: String?
|
||||
public var additional: String?
|
||||
|
||||
// Default memberwise initializers are never public by default, so we
|
||||
// declare one manually.
|
||||
public init(blockId: String, flavour: String, content: [String]?, blob: [String]?, refDocId: [String]?, refInfo: [String]?, parentFlavour: String?, parentBlockId: String?, additional: String?) {
|
||||
self.blockId = blockId
|
||||
self.flavour = flavour
|
||||
self.content = content
|
||||
self.blob = blob
|
||||
self.refDocId = refDocId
|
||||
self.refInfo = refInfo
|
||||
self.parentFlavour = parentFlavour
|
||||
self.parentBlockId = parentBlockId
|
||||
self.additional = additional
|
||||
}
|
||||
}
|
||||
|
||||
#if compiler(>=6)
|
||||
extension BlockInfo: Sendable {}
|
||||
#endif
|
||||
|
||||
|
||||
extension BlockInfo: Equatable, Hashable {
|
||||
public static func ==(lhs: BlockInfo, rhs: BlockInfo) -> Bool {
|
||||
if lhs.blockId != rhs.blockId {
|
||||
return false
|
||||
}
|
||||
if lhs.flavour != rhs.flavour {
|
||||
return false
|
||||
}
|
||||
if lhs.content != rhs.content {
|
||||
return false
|
||||
}
|
||||
if lhs.blob != rhs.blob {
|
||||
return false
|
||||
}
|
||||
if lhs.refDocId != rhs.refDocId {
|
||||
return false
|
||||
}
|
||||
if lhs.refInfo != rhs.refInfo {
|
||||
return false
|
||||
}
|
||||
if lhs.parentFlavour != rhs.parentFlavour {
|
||||
return false
|
||||
}
|
||||
if lhs.parentBlockId != rhs.parentBlockId {
|
||||
return false
|
||||
}
|
||||
if lhs.additional != rhs.additional {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(blockId)
|
||||
hasher.combine(flavour)
|
||||
hasher.combine(content)
|
||||
hasher.combine(blob)
|
||||
hasher.combine(refDocId)
|
||||
hasher.combine(refInfo)
|
||||
hasher.combine(parentFlavour)
|
||||
hasher.combine(parentBlockId)
|
||||
hasher.combine(additional)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public struct FfiConverterTypeBlockInfo: FfiConverterRustBuffer {
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> BlockInfo {
|
||||
return
|
||||
try BlockInfo(
|
||||
blockId: FfiConverterString.read(from: &buf),
|
||||
flavour: FfiConverterString.read(from: &buf),
|
||||
content: FfiConverterOptionSequenceString.read(from: &buf),
|
||||
blob: FfiConverterOptionSequenceString.read(from: &buf),
|
||||
refDocId: FfiConverterOptionSequenceString.read(from: &buf),
|
||||
refInfo: FfiConverterOptionSequenceString.read(from: &buf),
|
||||
parentFlavour: FfiConverterOptionString.read(from: &buf),
|
||||
parentBlockId: FfiConverterOptionString.read(from: &buf),
|
||||
additional: FfiConverterOptionString.read(from: &buf)
|
||||
)
|
||||
}
|
||||
|
||||
public static func write(_ value: BlockInfo, into buf: inout [UInt8]) {
|
||||
FfiConverterString.write(value.blockId, into: &buf)
|
||||
FfiConverterString.write(value.flavour, into: &buf)
|
||||
FfiConverterOptionSequenceString.write(value.content, into: &buf)
|
||||
FfiConverterOptionSequenceString.write(value.blob, into: &buf)
|
||||
FfiConverterOptionSequenceString.write(value.refDocId, into: &buf)
|
||||
FfiConverterOptionSequenceString.write(value.refInfo, into: &buf)
|
||||
FfiConverterOptionString.write(value.parentFlavour, into: &buf)
|
||||
FfiConverterOptionString.write(value.parentBlockId, into: &buf)
|
||||
FfiConverterOptionString.write(value.additional, into: &buf)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public func FfiConverterTypeBlockInfo_lift(_ buf: RustBuffer) throws -> BlockInfo {
|
||||
return try FfiConverterTypeBlockInfo.lift(buf)
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public func FfiConverterTypeBlockInfo_lower(_ value: BlockInfo) -> RustBuffer {
|
||||
return FfiConverterTypeBlockInfo.lower(value)
|
||||
}
|
||||
|
||||
|
||||
public struct CrawlResult {
|
||||
public var blocks: [BlockInfo]
|
||||
public var title: String
|
||||
public var summary: String
|
||||
|
||||
// Default memberwise initializers are never public by default, so we
|
||||
// declare one manually.
|
||||
public init(blocks: [BlockInfo], title: String, summary: String) {
|
||||
self.blocks = blocks
|
||||
self.title = title
|
||||
self.summary = summary
|
||||
}
|
||||
}
|
||||
|
||||
#if compiler(>=6)
|
||||
extension CrawlResult: Sendable {}
|
||||
#endif
|
||||
|
||||
|
||||
extension CrawlResult: Equatable, Hashable {
|
||||
public static func ==(lhs: CrawlResult, rhs: CrawlResult) -> Bool {
|
||||
if lhs.blocks != rhs.blocks {
|
||||
return false
|
||||
}
|
||||
if lhs.title != rhs.title {
|
||||
return false
|
||||
}
|
||||
if lhs.summary != rhs.summary {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(blocks)
|
||||
hasher.combine(title)
|
||||
hasher.combine(summary)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public struct FfiConverterTypeCrawlResult: FfiConverterRustBuffer {
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> CrawlResult {
|
||||
return
|
||||
try CrawlResult(
|
||||
blocks: FfiConverterSequenceTypeBlockInfo.read(from: &buf),
|
||||
title: FfiConverterString.read(from: &buf),
|
||||
summary: FfiConverterString.read(from: &buf)
|
||||
)
|
||||
}
|
||||
|
||||
public static func write(_ value: CrawlResult, into buf: inout [UInt8]) {
|
||||
FfiConverterSequenceTypeBlockInfo.write(value.blocks, into: &buf)
|
||||
FfiConverterString.write(value.title, into: &buf)
|
||||
FfiConverterString.write(value.summary, into: &buf)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public func FfiConverterTypeCrawlResult_lift(_ buf: RustBuffer) throws -> CrawlResult {
|
||||
return try FfiConverterTypeCrawlResult.lift(buf)
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public func FfiConverterTypeCrawlResult_lower(_ value: CrawlResult) -> RustBuffer {
|
||||
return FfiConverterTypeCrawlResult.lower(value)
|
||||
}
|
||||
|
||||
|
||||
public struct DocClock {
|
||||
public var docId: String
|
||||
public var timestamp: Int64
|
||||
@@ -1552,6 +1924,154 @@ public func FfiConverterTypeListedBlob_lower(_ value: ListedBlob) -> RustBuffer
|
||||
}
|
||||
|
||||
|
||||
public struct MatchRange {
|
||||
public var start: UInt32
|
||||
public var end: UInt32
|
||||
|
||||
// Default memberwise initializers are never public by default, so we
|
||||
// declare one manually.
|
||||
public init(start: UInt32, end: UInt32) {
|
||||
self.start = start
|
||||
self.end = end
|
||||
}
|
||||
}
|
||||
|
||||
#if compiler(>=6)
|
||||
extension MatchRange: Sendable {}
|
||||
#endif
|
||||
|
||||
|
||||
extension MatchRange: Equatable, Hashable {
|
||||
public static func ==(lhs: MatchRange, rhs: MatchRange) -> Bool {
|
||||
if lhs.start != rhs.start {
|
||||
return false
|
||||
}
|
||||
if lhs.end != rhs.end {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(start)
|
||||
hasher.combine(end)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public struct FfiConverterTypeMatchRange: FfiConverterRustBuffer {
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MatchRange {
|
||||
return
|
||||
try MatchRange(
|
||||
start: FfiConverterUInt32.read(from: &buf),
|
||||
end: FfiConverterUInt32.read(from: &buf)
|
||||
)
|
||||
}
|
||||
|
||||
public static func write(_ value: MatchRange, into buf: inout [UInt8]) {
|
||||
FfiConverterUInt32.write(value.start, into: &buf)
|
||||
FfiConverterUInt32.write(value.end, into: &buf)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public func FfiConverterTypeMatchRange_lift(_ buf: RustBuffer) throws -> MatchRange {
|
||||
return try FfiConverterTypeMatchRange.lift(buf)
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public func FfiConverterTypeMatchRange_lower(_ value: MatchRange) -> RustBuffer {
|
||||
return FfiConverterTypeMatchRange.lower(value)
|
||||
}
|
||||
|
||||
|
||||
public struct SearchHit {
|
||||
public var id: String
|
||||
public var score: Double
|
||||
public var terms: [String]
|
||||
|
||||
// Default memberwise initializers are never public by default, so we
|
||||
// declare one manually.
|
||||
public init(id: String, score: Double, terms: [String]) {
|
||||
self.id = id
|
||||
self.score = score
|
||||
self.terms = terms
|
||||
}
|
||||
}
|
||||
|
||||
#if compiler(>=6)
|
||||
extension SearchHit: Sendable {}
|
||||
#endif
|
||||
|
||||
|
||||
extension SearchHit: Equatable, Hashable {
|
||||
public static func ==(lhs: SearchHit, rhs: SearchHit) -> Bool {
|
||||
if lhs.id != rhs.id {
|
||||
return false
|
||||
}
|
||||
if lhs.score != rhs.score {
|
||||
return false
|
||||
}
|
||||
if lhs.terms != rhs.terms {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(id)
|
||||
hasher.combine(score)
|
||||
hasher.combine(terms)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public struct FfiConverterTypeSearchHit: FfiConverterRustBuffer {
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SearchHit {
|
||||
return
|
||||
try SearchHit(
|
||||
id: FfiConverterString.read(from: &buf),
|
||||
score: FfiConverterDouble.read(from: &buf),
|
||||
terms: FfiConverterSequenceString.read(from: &buf)
|
||||
)
|
||||
}
|
||||
|
||||
public static func write(_ value: SearchHit, into buf: inout [UInt8]) {
|
||||
FfiConverterString.write(value.id, into: &buf)
|
||||
FfiConverterDouble.write(value.score, into: &buf)
|
||||
FfiConverterSequenceString.write(value.terms, into: &buf)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public func FfiConverterTypeSearchHit_lift(_ buf: RustBuffer) throws -> SearchHit {
|
||||
return try FfiConverterTypeSearchHit.lift(buf)
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
public func FfiConverterTypeSearchHit_lower(_ value: SearchHit) -> RustBuffer {
|
||||
return FfiConverterTypeSearchHit.lower(value)
|
||||
}
|
||||
|
||||
|
||||
public struct SetBlob {
|
||||
public var key: String
|
||||
public var data: String
|
||||
@@ -1745,6 +2265,30 @@ fileprivate struct FfiConverterOptionInt64: FfiConverterRustBuffer {
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterOptionString: FfiConverterRustBuffer {
|
||||
typealias SwiftType = String?
|
||||
|
||||
public static func write(_ value: SwiftType, into buf: inout [UInt8]) {
|
||||
guard let value = value else {
|
||||
writeInt(&buf, Int8(0))
|
||||
return
|
||||
}
|
||||
writeInt(&buf, Int8(1))
|
||||
FfiConverterString.write(value, into: &buf)
|
||||
}
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType {
|
||||
switch try readInt(&buf) as Int8 {
|
||||
case 0: return nil
|
||||
case 1: return try FfiConverterString.read(from: &buf)
|
||||
default: throw UniffiInternalError.unexpectedOptionalTag
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
@@ -1817,6 +2361,30 @@ fileprivate struct FfiConverterOptionTypeDocRecord: FfiConverterRustBuffer {
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterOptionSequenceString: FfiConverterRustBuffer {
|
||||
typealias SwiftType = [String]?
|
||||
|
||||
public static func write(_ value: SwiftType, into buf: inout [UInt8]) {
|
||||
guard let value = value else {
|
||||
writeInt(&buf, Int8(0))
|
||||
return
|
||||
}
|
||||
writeInt(&buf, Int8(1))
|
||||
FfiConverterSequenceString.write(value, into: &buf)
|
||||
}
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType {
|
||||
switch try readInt(&buf) as Int8 {
|
||||
case 0: return nil
|
||||
case 1: return try FfiConverterSequenceString.read(from: &buf)
|
||||
default: throw UniffiInternalError.unexpectedOptionalTag
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
@@ -1842,6 +2410,56 @@ fileprivate struct FfiConverterSequenceInt64: FfiConverterRustBuffer {
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterSequenceString: FfiConverterRustBuffer {
|
||||
typealias SwiftType = [String]
|
||||
|
||||
public static func write(_ value: [String], into buf: inout [UInt8]) {
|
||||
let len = Int32(value.count)
|
||||
writeInt(&buf, len)
|
||||
for item in value {
|
||||
FfiConverterString.write(item, into: &buf)
|
||||
}
|
||||
}
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [String] {
|
||||
let len: Int32 = try readInt(&buf)
|
||||
var seq = [String]()
|
||||
seq.reserveCapacity(Int(len))
|
||||
for _ in 0 ..< len {
|
||||
seq.append(try FfiConverterString.read(from: &buf))
|
||||
}
|
||||
return seq
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterSequenceTypeBlockInfo: FfiConverterRustBuffer {
|
||||
typealias SwiftType = [BlockInfo]
|
||||
|
||||
public static func write(_ value: [BlockInfo], into buf: inout [UInt8]) {
|
||||
let len = Int32(value.count)
|
||||
writeInt(&buf, len)
|
||||
for item in value {
|
||||
FfiConverterTypeBlockInfo.write(item, into: &buf)
|
||||
}
|
||||
}
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [BlockInfo] {
|
||||
let len: Int32 = try readInt(&buf)
|
||||
var seq = [BlockInfo]()
|
||||
seq.reserveCapacity(Int(len))
|
||||
for _ in 0 ..< len {
|
||||
seq.append(try FfiConverterTypeBlockInfo.read(from: &buf))
|
||||
}
|
||||
return seq
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
@@ -1916,6 +2534,56 @@ fileprivate struct FfiConverterSequenceTypeListedBlob: FfiConverterRustBuffer {
|
||||
return seq
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterSequenceTypeMatchRange: FfiConverterRustBuffer {
|
||||
typealias SwiftType = [MatchRange]
|
||||
|
||||
public static func write(_ value: [MatchRange], into buf: inout [UInt8]) {
|
||||
let len = Int32(value.count)
|
||||
writeInt(&buf, len)
|
||||
for item in value {
|
||||
FfiConverterTypeMatchRange.write(item, into: &buf)
|
||||
}
|
||||
}
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [MatchRange] {
|
||||
let len: Int32 = try readInt(&buf)
|
||||
var seq = [MatchRange]()
|
||||
seq.reserveCapacity(Int(len))
|
||||
for _ in 0 ..< len {
|
||||
seq.append(try FfiConverterTypeMatchRange.read(from: &buf))
|
||||
}
|
||||
return seq
|
||||
}
|
||||
}
|
||||
|
||||
#if swift(>=5.8)
|
||||
@_documentation(visibility: private)
|
||||
#endif
|
||||
fileprivate struct FfiConverterSequenceTypeSearchHit: FfiConverterRustBuffer {
|
||||
typealias SwiftType = [SearchHit]
|
||||
|
||||
public static func write(_ value: [SearchHit], into buf: inout [UInt8]) {
|
||||
let len = Int32(value.count)
|
||||
writeInt(&buf, len)
|
||||
for item in value {
|
||||
FfiConverterTypeSearchHit.write(item, into: &buf)
|
||||
}
|
||||
}
|
||||
|
||||
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [SearchHit] {
|
||||
let len: Int32 = try readInt(&buf)
|
||||
var seq = [SearchHit]()
|
||||
seq.reserveCapacity(Int(len))
|
||||
for _ in 0 ..< len {
|
||||
seq.append(try FfiConverterTypeSearchHit.read(from: &buf))
|
||||
}
|
||||
return seq
|
||||
}
|
||||
}
|
||||
private let UNIFFI_RUST_FUTURE_POLL_READY: Int8 = 0
|
||||
private let UNIFFI_RUST_FUTURE_POLL_MAYBE_READY: Int8 = 1
|
||||
|
||||
@@ -2004,6 +2672,9 @@ private let initializationResult: InitializationResult = {
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_connect() != 19047) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_crawl_doc_data() != 36347) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_delete_blob() != 53695) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
@@ -2013,6 +2684,27 @@ private let initializationResult: InitializationResult = {
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_disconnect() != 20410) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_add_document() != 37651) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_delete_document() != 47292) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_flush_index() != 9921) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_get_document() != 45953) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_get_matches() != 35972) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_index_version() != 44498) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_search() != 28341) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
if (uniffi_affine_mobile_native_checksum_method_docstoragepool_get_blob() != 56927) {
|
||||
return InitializationResult.apiChecksumMismatch
|
||||
}
|
||||
|
||||
@@ -271,6 +271,11 @@ uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_clear_clocks(void*
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_connect(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer path
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_CRAWL_DOC_DATA
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_CRAWL_DOC_DATA
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_crawl_doc_data(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer doc_id
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_DELETE_BLOB
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_DELETE_BLOB
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_delete_blob(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer key, int8_t permanently
|
||||
@@ -286,6 +291,41 @@ uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_delete_doc(void*_N
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_disconnect(void*_Nonnull ptr, RustBuffer universal_id
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_ADD_DOCUMENT
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_ADD_DOCUMENT
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_fts_add_document(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer index_name, RustBuffer doc_id, RustBuffer text, int8_t index
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_DELETE_DOCUMENT
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_DELETE_DOCUMENT
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_fts_delete_document(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer index_name, RustBuffer doc_id
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_FLUSH_INDEX
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_FLUSH_INDEX
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_fts_flush_index(void*_Nonnull ptr, RustBuffer universal_id
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_GET_DOCUMENT
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_GET_DOCUMENT
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_fts_get_document(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer index_name, RustBuffer doc_id
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_GET_MATCHES
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_GET_MATCHES
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_fts_get_matches(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer index_name, RustBuffer doc_id, RustBuffer query
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_INDEX_VERSION
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_INDEX_VERSION
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_fts_index_version(void*_Nonnull ptr
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_SEARCH
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_FTS_SEARCH
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_fts_search(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer index_name, RustBuffer query
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_GET_BLOB
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_FN_METHOD_DOCSTORAGEPOOL_GET_BLOB
|
||||
uint64_t uniffi_affine_mobile_native_fn_method_docstoragepool_get_blob(void*_Nonnull ptr, RustBuffer universal_id, RustBuffer key
|
||||
@@ -714,6 +754,12 @@ uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_clear_clocks
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_CONNECT
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_connect(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_CRAWL_DOC_DATA
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_CRAWL_DOC_DATA
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_crawl_doc_data(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_DELETE_BLOB
|
||||
@@ -732,6 +778,48 @@ uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_delete_doc(v
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_DISCONNECT
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_disconnect(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_ADD_DOCUMENT
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_ADD_DOCUMENT
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_add_document(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_DELETE_DOCUMENT
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_DELETE_DOCUMENT
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_delete_document(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_FLUSH_INDEX
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_FLUSH_INDEX
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_flush_index(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_GET_DOCUMENT
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_GET_DOCUMENT
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_get_document(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_GET_MATCHES
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_GET_MATCHES
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_get_matches(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_INDEX_VERSION
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_INDEX_VERSION
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_index_version(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_SEARCH
|
||||
#define UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_FTS_SEARCH
|
||||
uint16_t uniffi_affine_mobile_native_checksum_method_docstoragepool_fts_search(void
|
||||
|
||||
);
|
||||
#endif
|
||||
#ifndef UNIFFI_FFIDEF_UNIFFI_AFFINE_MOBILE_NATIVE_CHECKSUM_METHOD_DOCSTORAGEPOOL_GET_BLOB
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
@_exported import ApolloAPI
|
||||
|
||||
public class AbortBlobUploadMutation: GraphQLMutation {
|
||||
public static let operationName: String = "abortBlobUpload"
|
||||
public static let operationDocument: ApolloAPI.OperationDocument = .init(
|
||||
definition: .init(
|
||||
#"mutation abortBlobUpload($workspaceId: String!, $key: String!, $uploadId: String!) { abortBlobUpload(workspaceId: $workspaceId, key: $key, uploadId: $uploadId) }"#
|
||||
))
|
||||
|
||||
public var workspaceId: String
|
||||
public var key: String
|
||||
public var uploadId: String
|
||||
|
||||
public init(
|
||||
workspaceId: String,
|
||||
key: String,
|
||||
uploadId: String
|
||||
) {
|
||||
self.workspaceId = workspaceId
|
||||
self.key = key
|
||||
self.uploadId = uploadId
|
||||
}
|
||||
|
||||
public var __variables: Variables? { [
|
||||
"workspaceId": workspaceId,
|
||||
"key": key,
|
||||
"uploadId": uploadId
|
||||
] }
|
||||
|
||||
public struct Data: AffineGraphQL.SelectionSet {
|
||||
public let __data: DataDict
|
||||
public init(_dataDict: DataDict) { __data = _dataDict }
|
||||
|
||||
public static var __parentType: any ApolloAPI.ParentType { AffineGraphQL.Objects.Mutation }
|
||||
public static var __selections: [ApolloAPI.Selection] { [
|
||||
.field("abortBlobUpload", Bool.self, arguments: [
|
||||
"workspaceId": .variable("workspaceId"),
|
||||
"key": .variable("key"),
|
||||
"uploadId": .variable("uploadId")
|
||||
]),
|
||||
] }
|
||||
|
||||
public var abortBlobUpload: Bool { __data["abortBlobUpload"] }
|
||||
}
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
@_exported import ApolloAPI
|
||||
|
||||
public class CompleteBlobUploadMutation: GraphQLMutation {
|
||||
public static let operationName: String = "completeBlobUpload"
|
||||
public static let operationDocument: ApolloAPI.OperationDocument = .init(
|
||||
definition: .init(
|
||||
#"mutation completeBlobUpload($workspaceId: String!, $key: String!, $uploadId: String, $parts: [BlobUploadPartInput!]) { completeBlobUpload( workspaceId: $workspaceId key: $key uploadId: $uploadId parts: $parts ) }"#
|
||||
))
|
||||
|
||||
public var workspaceId: String
|
||||
public var key: String
|
||||
public var uploadId: GraphQLNullable<String>
|
||||
public var parts: GraphQLNullable<[BlobUploadPartInput]>
|
||||
|
||||
public init(
|
||||
workspaceId: String,
|
||||
key: String,
|
||||
uploadId: GraphQLNullable<String>,
|
||||
parts: GraphQLNullable<[BlobUploadPartInput]>
|
||||
) {
|
||||
self.workspaceId = workspaceId
|
||||
self.key = key
|
||||
self.uploadId = uploadId
|
||||
self.parts = parts
|
||||
}
|
||||
|
||||
public var __variables: Variables? { [
|
||||
"workspaceId": workspaceId,
|
||||
"key": key,
|
||||
"uploadId": uploadId,
|
||||
"parts": parts
|
||||
] }
|
||||
|
||||
public struct Data: AffineGraphQL.SelectionSet {
|
||||
public let __data: DataDict
|
||||
public init(_dataDict: DataDict) { __data = _dataDict }
|
||||
|
||||
public static var __parentType: any ApolloAPI.ParentType { AffineGraphQL.Objects.Mutation }
|
||||
public static var __selections: [ApolloAPI.Selection] { [
|
||||
.field("completeBlobUpload", String.self, arguments: [
|
||||
"workspaceId": .variable("workspaceId"),
|
||||
"key": .variable("key"),
|
||||
"uploadId": .variable("uploadId"),
|
||||
"parts": .variable("parts")
|
||||
]),
|
||||
] }
|
||||
|
||||
public var completeBlobUpload: String { __data["completeBlobUpload"] }
|
||||
}
|
||||
}
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
@_exported import ApolloAPI
|
||||
|
||||
public class CreateBlobUploadMutation: GraphQLMutation {
|
||||
public static let operationName: String = "createBlobUpload"
|
||||
public static let operationDocument: ApolloAPI.OperationDocument = .init(
|
||||
definition: .init(
|
||||
#"mutation createBlobUpload($workspaceId: String!, $key: String!, $size: Int!, $mime: String!) { createBlobUpload(workspaceId: $workspaceId, key: $key, size: $size, mime: $mime) { __typename method blobKey alreadyUploaded uploadUrl headers expiresAt uploadId partSize uploadedParts { __typename partNumber etag } } }"#
|
||||
))
|
||||
|
||||
public var workspaceId: String
|
||||
public var key: String
|
||||
public var size: Int
|
||||
public var mime: String
|
||||
|
||||
public init(
|
||||
workspaceId: String,
|
||||
key: String,
|
||||
size: Int,
|
||||
mime: String
|
||||
) {
|
||||
self.workspaceId = workspaceId
|
||||
self.key = key
|
||||
self.size = size
|
||||
self.mime = mime
|
||||
}
|
||||
|
||||
public var __variables: Variables? { [
|
||||
"workspaceId": workspaceId,
|
||||
"key": key,
|
||||
"size": size,
|
||||
"mime": mime
|
||||
] }
|
||||
|
||||
public struct Data: AffineGraphQL.SelectionSet {
|
||||
public let __data: DataDict
|
||||
public init(_dataDict: DataDict) { __data = _dataDict }
|
||||
|
||||
public static var __parentType: any ApolloAPI.ParentType { AffineGraphQL.Objects.Mutation }
|
||||
public static var __selections: [ApolloAPI.Selection] { [
|
||||
.field("createBlobUpload", CreateBlobUpload.self, arguments: [
|
||||
"workspaceId": .variable("workspaceId"),
|
||||
"key": .variable("key"),
|
||||
"size": .variable("size"),
|
||||
"mime": .variable("mime")
|
||||
]),
|
||||
] }
|
||||
|
||||
public var createBlobUpload: CreateBlobUpload { __data["createBlobUpload"] }
|
||||
|
||||
/// CreateBlobUpload
|
||||
///
|
||||
/// Parent Type: `BlobUploadInit`
|
||||
public struct CreateBlobUpload: AffineGraphQL.SelectionSet {
|
||||
public let __data: DataDict
|
||||
public init(_dataDict: DataDict) { __data = _dataDict }
|
||||
|
||||
public static var __parentType: any ApolloAPI.ParentType { AffineGraphQL.Objects.BlobUploadInit }
|
||||
public static var __selections: [ApolloAPI.Selection] { [
|
||||
.field("__typename", String.self),
|
||||
.field("method", GraphQLEnum<AffineGraphQL.BlobUploadMethod>.self),
|
||||
.field("blobKey", String.self),
|
||||
.field("alreadyUploaded", Bool?.self),
|
||||
.field("uploadUrl", String?.self),
|
||||
.field("headers", AffineGraphQL.JSONObject?.self),
|
||||
.field("expiresAt", AffineGraphQL.DateTime?.self),
|
||||
.field("uploadId", String?.self),
|
||||
.field("partSize", Int?.self),
|
||||
.field("uploadedParts", [UploadedPart]?.self),
|
||||
] }
|
||||
|
||||
public var method: GraphQLEnum<AffineGraphQL.BlobUploadMethod> { __data["method"] }
|
||||
public var blobKey: String { __data["blobKey"] }
|
||||
public var alreadyUploaded: Bool? { __data["alreadyUploaded"] }
|
||||
public var uploadUrl: String? { __data["uploadUrl"] }
|
||||
public var headers: AffineGraphQL.JSONObject? { __data["headers"] }
|
||||
public var expiresAt: AffineGraphQL.DateTime? { __data["expiresAt"] }
|
||||
public var uploadId: String? { __data["uploadId"] }
|
||||
public var partSize: Int? { __data["partSize"] }
|
||||
public var uploadedParts: [UploadedPart]? { __data["uploadedParts"] }
|
||||
|
||||
/// CreateBlobUpload.UploadedPart
|
||||
///
|
||||
/// Parent Type: `BlobUploadedPart`
|
||||
public struct UploadedPart: AffineGraphQL.SelectionSet {
|
||||
public let __data: DataDict
|
||||
public init(_dataDict: DataDict) { __data = _dataDict }
|
||||
|
||||
public static var __parentType: any ApolloAPI.ParentType { AffineGraphQL.Objects.BlobUploadedPart }
|
||||
public static var __selections: [ApolloAPI.Selection] { [
|
||||
.field("__typename", String.self),
|
||||
.field("partNumber", Int.self),
|
||||
.field("etag", String.self),
|
||||
] }
|
||||
|
||||
public var partNumber: Int { __data["partNumber"] }
|
||||
public var etag: String { __data["etag"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
@_exported import ApolloAPI
|
||||
|
||||
public class GetBlobUploadPartUrlMutation: GraphQLMutation {
|
||||
public static let operationName: String = "getBlobUploadPartUrl"
|
||||
public static let operationDocument: ApolloAPI.OperationDocument = .init(
|
||||
definition: .init(
|
||||
#"mutation getBlobUploadPartUrl($workspaceId: String!, $key: String!, $uploadId: String!, $partNumber: Int!) { getBlobUploadPartUrl( workspaceId: $workspaceId key: $key uploadId: $uploadId partNumber: $partNumber ) { __typename uploadUrl headers expiresAt } }"#
|
||||
))
|
||||
|
||||
public var workspaceId: String
|
||||
public var key: String
|
||||
public var uploadId: String
|
||||
public var partNumber: Int
|
||||
|
||||
public init(
|
||||
workspaceId: String,
|
||||
key: String,
|
||||
uploadId: String,
|
||||
partNumber: Int
|
||||
) {
|
||||
self.workspaceId = workspaceId
|
||||
self.key = key
|
||||
self.uploadId = uploadId
|
||||
self.partNumber = partNumber
|
||||
}
|
||||
|
||||
public var __variables: Variables? { [
|
||||
"workspaceId": workspaceId,
|
||||
"key": key,
|
||||
"uploadId": uploadId,
|
||||
"partNumber": partNumber
|
||||
] }
|
||||
|
||||
public struct Data: AffineGraphQL.SelectionSet {
|
||||
public let __data: DataDict
|
||||
public init(_dataDict: DataDict) { __data = _dataDict }
|
||||
|
||||
public static var __parentType: any ApolloAPI.ParentType { AffineGraphQL.Objects.Mutation }
|
||||
public static var __selections: [ApolloAPI.Selection] { [
|
||||
.field("getBlobUploadPartUrl", GetBlobUploadPartUrl.self, arguments: [
|
||||
"workspaceId": .variable("workspaceId"),
|
||||
"key": .variable("key"),
|
||||
"uploadId": .variable("uploadId"),
|
||||
"partNumber": .variable("partNumber")
|
||||
]),
|
||||
] }
|
||||
|
||||
public var getBlobUploadPartUrl: GetBlobUploadPartUrl { __data["getBlobUploadPartUrl"] }
|
||||
|
||||
/// GetBlobUploadPartUrl
|
||||
///
|
||||
/// Parent Type: `BlobUploadPart`
|
||||
public struct GetBlobUploadPartUrl: AffineGraphQL.SelectionSet {
|
||||
public let __data: DataDict
|
||||
public init(_dataDict: DataDict) { __data = _dataDict }
|
||||
|
||||
public static var __parentType: any ApolloAPI.ParentType { AffineGraphQL.Objects.BlobUploadPart }
|
||||
public static var __selections: [ApolloAPI.Selection] { [
|
||||
.field("__typename", String.self),
|
||||
.field("uploadUrl", String.self),
|
||||
.field("headers", AffineGraphQL.JSONObject?.self),
|
||||
.field("expiresAt", AffineGraphQL.DateTime?.self),
|
||||
] }
|
||||
|
||||
public var uploadUrl: String { __data["uploadUrl"] }
|
||||
public var headers: AffineGraphQL.JSONObject? { __data["headers"] }
|
||||
public var expiresAt: AffineGraphQL.DateTime? { __data["expiresAt"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
import ApolloAPI
|
||||
|
||||
/// Blob upload method
|
||||
public enum BlobUploadMethod: String, EnumType {
|
||||
case graphql = "GRAPHQL"
|
||||
case multipart = "MULTIPART"
|
||||
case presigned = "PRESIGNED"
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
import ApolloAPI
|
||||
|
||||
public struct BlobUploadPartInput: InputObject {
|
||||
public private(set) var __data: InputDict
|
||||
|
||||
public init(_ data: InputDict) {
|
||||
__data = data
|
||||
}
|
||||
|
||||
public init(
|
||||
etag: String,
|
||||
partNumber: Int
|
||||
) {
|
||||
__data = InputDict([
|
||||
"etag": etag,
|
||||
"partNumber": partNumber
|
||||
])
|
||||
}
|
||||
|
||||
public var etag: String {
|
||||
get { __data["etag"] }
|
||||
set { __data["etag"] = newValue }
|
||||
}
|
||||
|
||||
public var partNumber: Int {
|
||||
get { __data["partNumber"] }
|
||||
set { __data["partNumber"] = newValue }
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
import ApolloAPI
|
||||
|
||||
public extension Objects {
|
||||
static let BlobUploadInit = ApolloAPI.Object(
|
||||
typename: "BlobUploadInit",
|
||||
implementedInterfaces: [],
|
||||
keyFields: nil
|
||||
)
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
import ApolloAPI
|
||||
|
||||
public extension Objects {
|
||||
static let BlobUploadPart = ApolloAPI.Object(
|
||||
typename: "BlobUploadPart",
|
||||
implementedInterfaces: [],
|
||||
keyFields: nil
|
||||
)
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
import ApolloAPI
|
||||
|
||||
public extension Objects {
|
||||
static let BlobUploadedPart = ApolloAPI.Object(
|
||||
typename: "BlobUploadedPart",
|
||||
implementedInterfaces: [],
|
||||
keyFields: nil
|
||||
)
|
||||
}
|
||||
+3
@@ -24,6 +24,9 @@ public enum SchemaMetadata: ApolloAPI.SchemaMetadata {
|
||||
case "AggregateBucketObjectType": return AffineGraphQL.Objects.AggregateBucketObjectType
|
||||
case "AggregateResultObjectType": return AffineGraphQL.Objects.AggregateResultObjectType
|
||||
case "AppConfigValidateResult": return AffineGraphQL.Objects.AppConfigValidateResult
|
||||
case "BlobUploadInit": return AffineGraphQL.Objects.BlobUploadInit
|
||||
case "BlobUploadPart": return AffineGraphQL.Objects.BlobUploadPart
|
||||
case "BlobUploadedPart": return AffineGraphQL.Objects.BlobUploadedPart
|
||||
case "ChatMessage": return AffineGraphQL.Objects.ChatMessage
|
||||
case "CommentChangeObjectType": return AffineGraphQL.Objects.CommentChangeObjectType
|
||||
case "CommentChangeObjectTypeEdge": return AffineGraphQL.Objects.CommentChangeObjectTypeEdge
|
||||
|
||||
@@ -45,13 +45,13 @@ EXTERNAL SOURCES:
|
||||
:path: "../../../../../node_modules/capacitor-plugin-app-tracking-transparency"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Capacitor: 03bc7cbdde6a629a8b910a9d7d78c3cc7ed09ea7
|
||||
CapacitorApp: febecbb9582cb353aed037e18ec765141f880fe9
|
||||
CapacitorBrowser: 6299776d496e968505464884d565992faa20444a
|
||||
Capacitor: 106e7a4205f4618d582b886a975657c61179138d
|
||||
CapacitorApp: d63334c052278caf5d81585d80b21905c6f93f39
|
||||
CapacitorBrowser: 081852cf532acf77b9d2953f3a88fe5b9711fb06
|
||||
CapacitorCordova: 5967b9ba03915ef1d585469d6e31f31dc49be96f
|
||||
CapacitorHaptics: 1f1e17041f435d8ead9ff2a34edd592c6aa6a8d6
|
||||
CapacitorKeyboard: 09fd91dcde4f8a37313e7f11bde553ad1ed52036
|
||||
CapacitorPluginAppTrackingTransparency: 92ae9c1cfb5cf477753db9269689332a686f675a
|
||||
CapacitorHaptics: 70e47470fa1a6bd6338cd102552e3846b7f9a1b3
|
||||
CapacitorKeyboard: 969647d0ca2e5c737d7300088e2517aa832434e2
|
||||
CapacitorPluginAppTrackingTransparency: 2a2792623a5a72795f2e8f9ab3f1147573732fd8
|
||||
CryptoSwift: 967f37cea5a3294d9cce358f78861652155be483
|
||||
|
||||
PODFILE CHECKSUM: 2c1e4be82121f2d9724ecf7e31dd14e165aeb082
|
||||
|
||||
@@ -171,7 +171,9 @@ export interface NbStorePlugin {
|
||||
id: string;
|
||||
indexName: string;
|
||||
query: string;
|
||||
}) => Promise<{ id: string; score: number; terms: Array<string> }[]>;
|
||||
}) => Promise<{
|
||||
results: { id: string; score: number; terms: Array<string> }[];
|
||||
}>;
|
||||
ftsGetDocument: (options: {
|
||||
id: string;
|
||||
indexName: string;
|
||||
@@ -182,7 +184,7 @@ export interface NbStorePlugin {
|
||||
indexName: string;
|
||||
docId: string;
|
||||
query: string;
|
||||
}) => Promise<Array<{ start: number; end: number }>>;
|
||||
}) => Promise<{ matches: { start: number; end: number }[] }>;
|
||||
ftsFlushIndex: (options: { id: string }) => Promise<void>;
|
||||
ftsIndexVersion: () => Promise<number>;
|
||||
ftsIndexVersion: () => Promise<{ indexVersion: number }>;
|
||||
}
|
||||
|
||||
@@ -374,11 +374,12 @@ export const NbStoreNativeDBApis: NativeDBApis = {
|
||||
indexName: string,
|
||||
query: string
|
||||
): Promise<{ id: string; score: number; terms: Array<string> }[]> {
|
||||
return await NbStore.ftsSearch({
|
||||
const { results } = await NbStore.ftsSearch({
|
||||
id,
|
||||
indexName,
|
||||
query,
|
||||
});
|
||||
return results ?? [];
|
||||
},
|
||||
ftsGetDocument: async function (
|
||||
id: string,
|
||||
@@ -398,12 +399,13 @@ export const NbStoreNativeDBApis: NativeDBApis = {
|
||||
docId: string,
|
||||
query: string
|
||||
): Promise<{ start: number; end: number }[]> {
|
||||
return await NbStore.ftsGetMatches({
|
||||
const { matches } = await NbStore.ftsGetMatches({
|
||||
id,
|
||||
indexName,
|
||||
docId,
|
||||
query,
|
||||
});
|
||||
return matches ?? [];
|
||||
},
|
||||
ftsFlushIndex: async function (id: string): Promise<void> {
|
||||
await NbStore.ftsFlushIndex({
|
||||
@@ -411,6 +413,6 @@ export const NbStoreNativeDBApis: NativeDBApis = {
|
||||
});
|
||||
},
|
||||
ftsIndexVersion: function (): Promise<number> {
|
||||
return NbStore.ftsIndexVersion();
|
||||
return NbStore.ftsIndexVersion().then(res => res.indexVersion);
|
||||
},
|
||||
};
|
||||
|
||||
@@ -132,9 +132,10 @@ class CloudWorkspaceFlavourProvider implements WorkspaceFlavourProvider {
|
||||
BUILD_CONFIG.isElectron || BUILD_CONFIG.isIOS || BUILD_CONFIG.isAndroid
|
||||
? SqliteBlobSyncStorage
|
||||
: IndexedDBBlobSyncStorage;
|
||||
IndexerStorageType = BUILD_CONFIG.isElectron
|
||||
? SqliteIndexerStorage
|
||||
: IndexedDBIndexerStorage;
|
||||
IndexerStorageType =
|
||||
BUILD_CONFIG.isElectron || BUILD_CONFIG.isIOS || BUILD_CONFIG.isAndroid
|
||||
? SqliteIndexerStorage
|
||||
: IndexedDBIndexerStorage;
|
||||
|
||||
async deleteWorkspace(id: string): Promise<void> {
|
||||
await this.graphqlService.gql({
|
||||
|
||||
@@ -109,9 +109,10 @@ class LocalWorkspaceFlavourProvider implements WorkspaceFlavourProvider {
|
||||
BUILD_CONFIG.isElectron || BUILD_CONFIG.isIOS || BUILD_CONFIG.isAndroid
|
||||
? SqliteBlobSyncStorage
|
||||
: IndexedDBBlobSyncStorage;
|
||||
IndexerStorageType = BUILD_CONFIG.isElectron
|
||||
? SqliteIndexerStorage
|
||||
: IndexedDBIndexerStorage;
|
||||
IndexerStorageType =
|
||||
BUILD_CONFIG.isElectron || BUILD_CONFIG.isIOS || BUILD_CONFIG.isAndroid
|
||||
? SqliteIndexerStorage
|
||||
: IndexedDBIndexerStorage;
|
||||
|
||||
async deleteWorkspace(id: string): Promise<void> {
|
||||
setLocalWorkspaceIds(ids => ids.filter(x => x !== id));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use affine_common::hashcash::Stamp;
|
||||
use affine_nbstore::pool::SqliteDocStoragePool;
|
||||
use affine_nbstore::{pool::SqliteDocStoragePool, Data};
|
||||
|
||||
#[derive(uniffi::Error, thiserror::Error, Debug)]
|
||||
pub enum UniffiError {
|
||||
@@ -50,9 +50,11 @@ impl TryFrom<DocRecord> for affine_nbstore::DocRecord {
|
||||
fn try_from(record: DocRecord) -> Result<Self> {
|
||||
Ok(Self {
|
||||
doc_id: record.doc_id,
|
||||
bin: base64_simd::STANDARD
|
||||
.decode_to_vec(record.bin)
|
||||
.map_err(|e| UniffiError::Base64DecodingError(e.to_string()))?,
|
||||
bin: Into::<Data>::into(
|
||||
base64_simd::STANDARD
|
||||
.decode_to_vec(record.bin)
|
||||
.map_err(|e| UniffiError::Base64DecodingError(e.to_string()))?,
|
||||
),
|
||||
timestamp: chrono::DateTime::<chrono::Utc>::from_timestamp_millis(record.timestamp)
|
||||
.ok_or(UniffiError::TimestampDecodingError)?
|
||||
.naive_utc(),
|
||||
@@ -156,9 +158,11 @@ impl TryFrom<SetBlob> for affine_nbstore::SetBlob {
|
||||
fn try_from(blob: SetBlob) -> Result<Self> {
|
||||
Ok(Self {
|
||||
key: blob.key,
|
||||
data: base64_simd::STANDARD
|
||||
.decode_to_vec(blob.data)
|
||||
.map_err(|e| UniffiError::Base64DecodingError(e.to_string()))?,
|
||||
data: Into::<Data>::into(
|
||||
base64_simd::STANDARD
|
||||
.decode_to_vec(blob.data)
|
||||
.map_err(|e| UniffiError::Base64DecodingError(e.to_string()))?,
|
||||
),
|
||||
mime: blob.mime,
|
||||
})
|
||||
}
|
||||
@@ -229,6 +233,38 @@ impl From<affine_nbstore::indexer::NativeCrawlResult> for CrawlResult {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(uniffi::Record)]
|
||||
pub struct SearchHit {
|
||||
pub id: String,
|
||||
pub score: f64,
|
||||
pub terms: Vec<String>,
|
||||
}
|
||||
|
||||
impl From<affine_nbstore::indexer::NativeSearchHit> for SearchHit {
|
||||
fn from(value: affine_nbstore::indexer::NativeSearchHit) -> Self {
|
||||
Self {
|
||||
id: value.id,
|
||||
score: value.score,
|
||||
terms: value.terms,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(uniffi::Record)]
|
||||
pub struct MatchRange {
|
||||
pub start: u32,
|
||||
pub end: u32,
|
||||
}
|
||||
|
||||
impl From<affine_nbstore::indexer::NativeMatch> for MatchRange {
|
||||
fn from(value: affine_nbstore::indexer::NativeMatch) -> Self {
|
||||
Self {
|
||||
start: value.start,
|
||||
end: value.end,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(uniffi::Object)]
|
||||
pub struct DocStoragePool {
|
||||
inner: SqliteDocStoragePool,
|
||||
@@ -699,4 +735,100 @@ impl DocStoragePool {
|
||||
.await?;
|
||||
Ok(result.into())
|
||||
}
|
||||
|
||||
pub async fn fts_add_document(
|
||||
&self,
|
||||
universal_id: String,
|
||||
index_name: String,
|
||||
doc_id: String,
|
||||
text: String,
|
||||
index: bool,
|
||||
) -> Result<()> {
|
||||
self
|
||||
.inner
|
||||
.get(universal_id)
|
||||
.await?
|
||||
.fts_add(&index_name, &doc_id, &text, index)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn fts_delete_document(
|
||||
&self,
|
||||
universal_id: String,
|
||||
index_name: String,
|
||||
doc_id: String,
|
||||
) -> Result<()> {
|
||||
self
|
||||
.inner
|
||||
.get(universal_id)
|
||||
.await?
|
||||
.fts_delete(&index_name, &doc_id)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn fts_get_document(
|
||||
&self,
|
||||
universal_id: String,
|
||||
index_name: String,
|
||||
doc_id: String,
|
||||
) -> Result<Option<String>> {
|
||||
Ok(
|
||||
self
|
||||
.inner
|
||||
.get(universal_id)
|
||||
.await?
|
||||
.fts_get(&index_name, &doc_id)
|
||||
.await?,
|
||||
)
|
||||
}
|
||||
|
||||
pub async fn fts_search(
|
||||
&self,
|
||||
universal_id: String,
|
||||
index_name: String,
|
||||
query: String,
|
||||
) -> Result<Vec<SearchHit>> {
|
||||
Ok(
|
||||
self
|
||||
.inner
|
||||
.get(universal_id)
|
||||
.await?
|
||||
.fts_search(&index_name, &query)
|
||||
.await?
|
||||
.into_iter()
|
||||
.map(Into::into)
|
||||
.collect(),
|
||||
)
|
||||
}
|
||||
|
||||
pub async fn fts_get_matches(
|
||||
&self,
|
||||
universal_id: String,
|
||||
index_name: String,
|
||||
doc_id: String,
|
||||
query: String,
|
||||
) -> Result<Vec<MatchRange>> {
|
||||
Ok(
|
||||
self
|
||||
.inner
|
||||
.get(universal_id)
|
||||
.await?
|
||||
.fts_get_matches(&index_name, &doc_id, &query)
|
||||
.await?
|
||||
.into_iter()
|
||||
.map(Into::into)
|
||||
.collect(),
|
||||
)
|
||||
}
|
||||
|
||||
pub async fn fts_flush_index(&self, universal_id: String) -> Result<()> {
|
||||
self.inner.get(universal_id).await?.flush_index().await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn fts_index_version(&self) -> Result<u32> {
|
||||
Ok(affine_nbstore::storage::SqliteDocStorage::index_version())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user