diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 50bb35dca..bb553683c 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -425,7 +425,8 @@ class _AddressBookState extends State { if (canWrite) getEntry(translate("Add ID"), addIdToCurrentAb), if (canWrite) getEntry(translate("Add Tag"), abAddTag), getEntry(translate("Unselect all tags"), gFFI.abModel.unsetSelectedTags), - sortMenuItem(), + if (gFFI.abModel.legacyMode.value) + sortMenuItem(), // It's already sorted after pulling down if (canWrite) syncMenuItem(), filterMenuItem(), if (!gFFI.abModel.legacyMode.value && canWrite) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 1b099cbeb..f9dd73bbf 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -636,8 +636,8 @@ abstract class BasePeerCard extends StatelessWidget { @protected Future _isForceAlwaysRelay(String id) async { - return (await bind.mainGetPeerOption(id: id, key: kOptionForceAlwaysRelay)) - .isNotEmpty; + return option2bool(kOptionForceAlwaysRelay, + (await bind.mainGetPeerOption(id: id, key: kOptionForceAlwaysRelay))); } @protected diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 9fdae087a..8cd5cc922 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -17,17 +17,17 @@ import '../common.dart'; final syncAbOption = 'sync-ab-with-recent-sessions'; bool shouldSyncAb() { - return bind.mainGetLocalOption(key: syncAbOption).isNotEmpty; + return bind.mainGetLocalOption(key: syncAbOption) == 'Y'; } final sortAbTagsOption = 'sync-ab-tags'; bool shouldSortTags() { - return bind.mainGetLocalOption(key: sortAbTagsOption).isNotEmpty; + return bind.mainGetLocalOption(key: sortAbTagsOption) == 'Y'; } final filterAbTagOption = 'filter-ab-by-intersection'; bool filterAbTagByIntersection() { - return bind.mainGetLocalOption(key: filterAbTagOption).isNotEmpty; + return bind.mainGetLocalOption(key: filterAbTagOption) == 'Y'; } const _personalAddressBookName = "My address book"; @@ -815,8 +815,6 @@ abstract class BaseAb { } class LegacyAb extends BaseAb { - final sortTags = shouldSortTags().obs; - final filterByIntersection = filterAbTagByIntersection().obs; bool get emtpy => peers.isEmpty && tags.isEmpty; // licensedDevices is obtained from personal ab, shared ab restrict it in server var licensedDevices = 0; @@ -1209,8 +1207,6 @@ class LegacyAb extends BaseAb { class Ab extends BaseAb { AbProfile profile; late final bool personal; - final sortTags = shouldSortTags().obs; - final filterByIntersection = filterAbTagByIntersection().obs; bool get emtpy => peers.isEmpty && tags.isEmpty; Ab(this.profile, this.personal); diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index b643a7c20..613fee6ad 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -196,7 +196,7 @@ class ServerModel with ChangeNotifier { bind.mainSetOption(key: kOptionEnableAudio, value: "N"); } else { final audioOption = await bind.mainGetOption(key: kOptionEnableAudio); - _audioOk = audioOption.isEmpty; + _audioOk = audioOption != 'N'; } // file @@ -206,7 +206,7 @@ class ServerModel with ChangeNotifier { } else { final fileOption = await bind.mainGetOption(key: kOptionEnableFileTransfer); - _fileOk = fileOption.isEmpty; + _fileOk = fileOption != 'N'; } notifyListeners(); diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index dcb538179..65bb6a2b3 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -12,7 +12,10 @@ use uuid::Uuid; use hbb_common::{ allow_err, anyhow::{self, bail}, - config::{self, Config, CONNECT_TIMEOUT, READ_TIMEOUT, REG_INTERVAL, RENDEZVOUS_PORT}, + config::{ + self, keys::*, option2bool, Config, CONNECT_TIMEOUT, READ_TIMEOUT, REG_INTERVAL, + RENDEZVOUS_PORT, + }, futures::future::join_all, log, protobuf::Message as _, @@ -637,8 +640,10 @@ async fn direct_server(server: ServerPtr) { let mut listener = None; let mut port = 0; loop { - let disabled = Config::get_option("direct-server").is_empty() - || !Config::get_option("stop-service").is_empty(); + let disabled = !option2bool( + OPTION_DIRECT_SERVER, + &Config::get_option(OPTION_DIRECT_SERVER), + ) || option2bool("stop-service", &Config::get_option("stop-service")); if !disabled && listener.is_none() { port = get_direct_port(); match hbb_common::tcp::listen_any(port as _).await { diff --git a/src/ui/index.tis b/src/ui/index.tis index d76cae583..b10df7623 100644 --- a/src/ui/index.tis +++ b/src/ui/index.tis @@ -1149,7 +1149,7 @@ function showSettings() { function checkConnectStatus() { handler.check_mouse_time(); // trigger connection status updater self.timer(1s, function() { - var tmp = !!handler.get_option("stop-service"); + var tmp = handler.get_option("stop-service") == "Y"; if (tmp != service_stopped) { service_stopped = tmp; app.update(); diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 8b4a31f3d..7dae13ebc 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -21,7 +21,7 @@ use clipboard::ContextSend; use hbb_common::tokio::sync::mpsc::unbounded_channel; use hbb_common::{ allow_err, - config::Config, + config::{keys::*, option2bool, Config}, fs::is_write_need_confirmation, fs::{self, get_string, new_send_confirm, DigestCheckResult}, log, @@ -583,9 +583,10 @@ pub async fn start_ipc(cm: ConnectionManager) { feature = "unix-file-copy-paste" ), ))] - ContextSend::enable( - Config::get_option(hbb_common::config::keys::OPTION_ENABLE_FILE_TRANSFER).is_empty(), - ); + ContextSend::enable(option2bool( + OPTION_ENABLE_FILE_TRANSFER, + &Config::get_option(OPTION_ENABLE_FILE_TRANSFER), + )); match ipc::new_listener("_cm").await { Ok(mut incoming) => { diff --git a/src/ui_interface.rs b/src/ui_interface.rs index fec0380b5..a192265df 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -3,7 +3,10 @@ use hbb_common::password_security; use hbb_common::{ allow_err, bytes::Bytes, - config::{self, Config, LocalConfig, PeerConfig, CONNECT_TIMEOUT, RENDEZVOUS_PORT}, + config::{ + self, keys::*, option2bool, Config, LocalConfig, PeerConfig, CONNECT_TIMEOUT, + RENDEZVOUS_PORT, + }, directories_next, futures::future::join_all, log, @@ -1156,9 +1159,9 @@ async fn check_connect_status_(reconnect: bool, rx: mpsc::UnboundedReceiver