diff --git a/apps/chanora_flutter/lib/src/rust/api.dart b/apps/chanora_flutter/lib/src/rust/api.dart index 7f4a04d..f571656 100644 --- a/apps/chanora_flutter/lib/src/rust/api.dart +++ b/apps/chanora_flutter/lib/src/rust/api.dart @@ -9,9 +9,13 @@ import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; import 'package:freezed_annotation/freezed_annotation.dart' hide protected; part 'api.freezed.dart'; -// These functions are ignored because they are not marked as `pub`: `log_sink`, `runtime`, `session`, `transmit_mode_from_u8` +// These functions are ignored because they are not marked as `pub`: `log_file_path`, `log_sink`, `open_log_file`, `runtime`, `session`, `transmit_mode_from_u8` // These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `clone`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `fmt`, `from`, `from`, `from`, `from`, `from`, `from`, `from`, `from` +/// Return the platform-conventional log-file path as a string, or +/// an empty string if the platform does not have one (mobile). +String logFilePathStr() => RustLib.instance.api.crateApiLogFilePathStr(); + /// Connect to a TeamSpeak-compatible server and return the initial /// state snapshot. Honours the DEC-006 single-connection invariant /// via [`BridgeError::AlreadyConnected`]. diff --git a/apps/chanora_flutter/lib/src/rust/frb_generated.dart b/apps/chanora_flutter/lib/src/rust/frb_generated.dart index 7f54097..6867251 100644 --- a/apps/chanora_flutter/lib/src/rust/frb_generated.dart +++ b/apps/chanora_flutter/lib/src/rust/frb_generated.dart @@ -67,7 +67,7 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.12.0'; @override - int get rustContentHash => -330689763; + int get rustContentHash => 651188866; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( @@ -109,6 +109,8 @@ abstract class RustLibApi extends BaseApi { Future> crateApiListBookmarks(); + String crateApiLogFilePathStr(); + Future crateApiMoveToChannel({ required BigInt channelId, required String password, @@ -520,6 +522,28 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { TaskConstMeta get kCrateApiListBookmarksConstMeta => const TaskConstMeta(debugName: "list_bookmarks", argNames: []); + @override + String crateApiLogFilePathStr() { + return handler.executeSync( + SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 14)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_String, + decodeErrorData: null, + ), + constMeta: kCrateApiLogFilePathStrConstMeta, + argValues: [], + apiImpl: this, + ), + ); + } + + TaskConstMeta get kCrateApiLogFilePathStrConstMeta => + const TaskConstMeta(debugName: "log_file_path_str", argNames: []); + @override Future crateApiMoveToChannel({ required BigInt channelId, @@ -534,7 +558,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 14, + funcId: 15, port: port_, ); }, @@ -563,7 +587,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 15, + funcId: 16, port: port_, ); }, @@ -591,7 +615,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 16, + funcId: 17, port: port_, ); }, @@ -619,7 +643,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 17, + funcId: 18, port: port_, ); }, @@ -644,7 +668,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { callFfi: () { final serializer = SseSerializer(generalizedFrbRustBinding); sse_encode_bridge_network_state(state, serializer); - return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 18)!; + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 19)!; }, codec: SseCodec( decodeSuccessData: sse_decode_unit, @@ -670,7 +694,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 19, + funcId: 20, port: port_, ); }, @@ -698,7 +722,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 20, + funcId: 21, port: port_, ); }, @@ -726,7 +750,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 21, + funcId: 22, port: port_, ); }, @@ -758,7 +782,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 22, + funcId: 23, port: port_, ); }, @@ -788,7 +812,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 23, + funcId: 24, port: port_, ); }, @@ -816,7 +840,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 24, + funcId: 25, port: port_, ); }, @@ -843,7 +867,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 25, + funcId: 26, port: port_, ); }, @@ -871,7 +895,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 26, + funcId: 27, port: port_, ); }, @@ -903,7 +927,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 27, + funcId: 28, port: port_, ); }, @@ -932,7 +956,7 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { pdeCallFfi( generalizedFrbRustBinding, serializer, - funcId: 28, + funcId: 29, port: port_, ); }, diff --git a/crates/chanora_bridge/src/frb_generated.rs b/crates/chanora_bridge/src/frb_generated.rs index c9cc08b..0a56564 100644 --- a/crates/chanora_bridge/src/frb_generated.rs +++ b/crates/chanora_bridge/src/frb_generated.rs @@ -38,7 +38,7 @@ flutter_rust_bridge::frb_generated_boilerplate!( default_rust_auto_opaque = RustAutoOpaqueMoi, ); pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.12.0"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -330689763; +pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = 651188866; // Section: executor @@ -503,6 +503,35 @@ fn wire__crate__api__list_bookmarks_impl( }, ) } +fn wire__crate__api__log_file_path_str_impl( + ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, + rust_vec_len_: i32, + data_len_: i32, +) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { + FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::( + flutter_rust_bridge::for_generated::TaskInfo { + debug_name: "log_file_path_str", + port: None, + mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync, + }, + move || { + let message = unsafe { + flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( + ptr_, + rust_vec_len_, + data_len_, + ) + }; + let mut deserializer = + flutter_rust_bridge::for_generated::SseDeserializer::new(message); + deserializer.end(); + transform_result_sse::<_, ()>((move || { + let output_ok = Result::<_, ()>::Ok(crate::api::log_file_path_str())?; + Ok(output_ok) + })()) + }, + ) +} fn wire__crate__api__move_to_channel_impl( port_: flutter_rust_bridge::for_generated::MessagePort, ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, @@ -1434,20 +1463,20 @@ fn pde_ffi_dispatcher_primary_impl( 11 => wire__crate__api__init_storage_impl(port, ptr, rust_vec_len, data_len), 12 => wire__crate__api__is_connected_impl(port, ptr, rust_vec_len, data_len), 13 => wire__crate__api__list_bookmarks_impl(port, ptr, rust_vec_len, data_len), - 14 => wire__crate__api__move_to_channel_impl(port, ptr, rust_vec_len, data_len), - 15 => wire__crate__api__ptt_descriptor_impl(port, ptr, rust_vec_len, data_len), - 16 => wire__crate__api__set_hard_mute_impl(port, ptr, rust_vec_len, data_len), - 17 => wire__crate__api__set_input_muted_impl(port, ptr, rust_vec_len, data_len), - 19 => wire__crate__api__set_output_gain_impl(port, ptr, rust_vec_len, data_len), - 20 => wire__crate__api__set_output_muted_impl(port, ptr, rust_vec_len, data_len), - 21 => wire__crate__api__set_ptt_impl(port, ptr, rust_vec_len, data_len), - 22 => wire__crate__api__set_ptt_binding_impl(port, ptr, rust_vec_len, data_len), - 23 => wire__crate__api__set_release_tail_ms_impl(port, ptr, rust_vec_len, data_len), - 24 => wire__crate__api__set_transmit_mode_impl(port, ptr, rust_vec_len, data_len), - 25 => wire__crate__api__snapshot_impl(port, ptr, rust_vec_len, data_len), - 26 => wire__crate__api__update_bookmark_impl(port, ptr, rust_vec_len, data_len), - 27 => wire__crate__api__voice_join_impl(port, ptr, rust_vec_len, data_len), - 28 => wire__crate__api__voice_leave_impl(port, ptr, rust_vec_len, data_len), + 15 => wire__crate__api__move_to_channel_impl(port, ptr, rust_vec_len, data_len), + 16 => wire__crate__api__ptt_descriptor_impl(port, ptr, rust_vec_len, data_len), + 17 => wire__crate__api__set_hard_mute_impl(port, ptr, rust_vec_len, data_len), + 18 => wire__crate__api__set_input_muted_impl(port, ptr, rust_vec_len, data_len), + 20 => wire__crate__api__set_output_gain_impl(port, ptr, rust_vec_len, data_len), + 21 => wire__crate__api__set_output_muted_impl(port, ptr, rust_vec_len, data_len), + 22 => wire__crate__api__set_ptt_impl(port, ptr, rust_vec_len, data_len), + 23 => wire__crate__api__set_ptt_binding_impl(port, ptr, rust_vec_len, data_len), + 24 => wire__crate__api__set_release_tail_ms_impl(port, ptr, rust_vec_len, data_len), + 25 => wire__crate__api__set_transmit_mode_impl(port, ptr, rust_vec_len, data_len), + 26 => wire__crate__api__snapshot_impl(port, ptr, rust_vec_len, data_len), + 27 => wire__crate__api__update_bookmark_impl(port, ptr, rust_vec_len, data_len), + 28 => wire__crate__api__voice_join_impl(port, ptr, rust_vec_len, data_len), + 29 => wire__crate__api__voice_leave_impl(port, ptr, rust_vec_len, data_len), _ => unreachable!(), } } @@ -1461,7 +1490,8 @@ fn pde_ffi_dispatcher_sync_impl( // Codec=Pde (Serialization + dispatch), see doc to use other codecs match func_id { 8 => wire__crate__api__export_diagnostics_impl(ptr, rust_vec_len, data_len), - 18 => wire__crate__api__set_network_state_impl(ptr, rust_vec_len, data_len), + 14 => wire__crate__api__log_file_path_str_impl(ptr, rust_vec_len, data_len), + 19 => wire__crate__api__set_network_state_impl(ptr, rust_vec_len, data_len), _ => unreachable!(), } }