add custom client option to allow remote cm modification (#8660)

Signed-off-by: 21pages <sunboeasy@gmail.com>
This commit is contained in:
21pages 2024-07-09 15:19:16 +08:00 committed by GitHub
parent 6f74080a2d
commit 0bb4d43e9e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 22 additions and 6 deletions

View File

@ -135,6 +135,7 @@ const String kOptionAllowLinuxHeadless = "allow-linux-headless";
const String kOptionAllowRemoveWallpaper = "allow-remove-wallpaper";
const String kOptionStopService = "stop-service";
const String kOptionDirectxCapture = "enable-directx-capture";
const String kOptionAllowRemoteCmModification = "allow-remote-cm-modification";
const String kOptionToggleViewOnly = "view-only";

View File

@ -112,7 +112,9 @@ class ConnectionManagerState extends State<ConnectionManager>
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.resumed) {
shouldBeBlocked(_block, null);
if (!allowRemoteCMModification()) {
shouldBeBlocked(_block, null);
}
}
}
@ -183,7 +185,7 @@ class ConnectionManagerState extends State<ConnectionManager>
selectedBorderColor: MyTheme.accent,
maxLabelWidth: 100,
tail: null, //buildScrollJumper(),
blockTab: _block,
blockTab: allowRemoteCMModification() ? null : _block,
selectedTabBackgroundColor:
Theme.of(context).hintColor.withOpacity(0),
tabBuilder: (key, icon, label, themeConf) {
@ -226,10 +228,12 @@ class ConnectionManagerState extends State<ConnectionManager>
Consumer<ChatModel>(
builder: (_, model, child) => SizedBox(
width: realChatPageWidth,
child: buildRemoteBlock(
child: buildSidePage(),
block: _block,
mask: true),
child: allowRemoteCMModification()
? buildSidePage()
: buildRemoteBlock(
child: buildSidePage(),
block: _block,
mask: true),
)),
SizedBox(
width: realClosedWidth,
@ -1057,6 +1061,10 @@ class _CmControlPanel extends StatelessWidget {
}
void checkClickTime(int id, Function() callback) async {
if (allowRemoteCMModification()) {
callback();
return;
}
var clickCallbackTime = DateTime.now().millisecondsSinceEpoch;
await bind.cmCheckClickTime(connId: id);
Timer(const Duration(milliseconds: 120), () async {
@ -1065,6 +1073,11 @@ void checkClickTime(int id, Function() callback) async {
});
}
bool allowRemoteCMModification() {
return option2bool(kOptionAllowRemoteCmModification,
bind.mainGetLocalOption(key: kOptionAllowRemoteCmModification));
}
class _FileTransferLogPage extends StatefulWidget {
_FileTransferLogPage({Key? key}) : super(key: key);

View File

@ -2109,6 +2109,7 @@ pub mod keys {
pub const OPTION_FLUTTER_PEER_TAB_VISIBLE: &str = "peer-tab-visible";
pub const OPTION_FLUTTER_PEER_CARD_UI_TYLE: &str = "peer-card-ui-type";
pub const OPTION_FLUTTER_CURRENT_AB_NAME: &str = "current-ab-name";
pub const OPTION_ALLOW_REMOTE_CM_MODIFICATION: &str = "allow-remote-cm-modification";
// android floating window options
pub const OPTION_DISABLE_FLOATING_WINDOW: &str = "disable-floating-window";
@ -2195,6 +2196,7 @@ pub mod keys {
"hide-server-settings",
"hide-proxy-settings",
"hide-username-on-card",
OPTION_ALLOW_REMOTE_CM_MODIFICATION,
];
// DEFAULT_SETTINGS, OVERWRITE_SETTINGS
pub const KEYS_SETTINGS: &[&str] = &[