feat: implement dialog callback
This commit is contained in:
parent
19f81ad317
commit
77fa807b57
@ -557,7 +557,7 @@ void window_on_top(int? id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef DialogBuilder = CustomAlertDialog Function(
|
typedef DialogBuilder = CustomAlertDialog Function(
|
||||||
StateSetter setState, void Function([dynamic]) close);
|
StateSetter setState, void Function([dynamic]) close, BuildContext context);
|
||||||
|
|
||||||
class Dialog<T> {
|
class Dialog<T> {
|
||||||
OverlayEntry? entry;
|
OverlayEntry? entry;
|
||||||
@ -660,7 +660,7 @@ class OverlayDialogManager {
|
|||||||
child: StatefulBuilder(builder: (context, setState) {
|
child: StatefulBuilder(builder: (context, setState) {
|
||||||
return Listener(
|
return Listener(
|
||||||
onPointerUp: (_) => innerClicked = true,
|
onPointerUp: (_) => innerClicked = true,
|
||||||
child: builder(setState, close),
|
child: builder(setState, close, overlayState.context),
|
||||||
);
|
);
|
||||||
})));
|
})));
|
||||||
});
|
});
|
||||||
@ -680,7 +680,7 @@ class OverlayDialogManager {
|
|||||||
VoidCallback? onCancel}) {
|
VoidCallback? onCancel}) {
|
||||||
final tag = _tagCount.toString();
|
final tag = _tagCount.toString();
|
||||||
_tagCount++;
|
_tagCount++;
|
||||||
show((setState, close) {
|
show((setState, close, context) {
|
||||||
cancel() {
|
cancel() {
|
||||||
dismissAll();
|
dismissAll();
|
||||||
if (onCancel != null) {
|
if (onCancel != null) {
|
||||||
@ -938,7 +938,7 @@ void msgBox(String id, String type, String title, String text, String link,
|
|||||||
buttons.insert(0, dialogButton('JumpLink', onPressed: jumplink));
|
buttons.insert(0, dialogButton('JumpLink', onPressed: jumplink));
|
||||||
}
|
}
|
||||||
dialogManager.show(
|
dialogManager.show(
|
||||||
(setState, close) => CustomAlertDialog(
|
(setState, close, context) => CustomAlertDialog(
|
||||||
title: null,
|
title: null,
|
||||||
content: SelectionArea(child: msgboxContent(type, title, text)),
|
content: SelectionArea(child: msgboxContent(type, title, text)),
|
||||||
actions: buttons,
|
actions: buttons,
|
||||||
@ -1011,7 +1011,7 @@ Widget msgboxContent(String type, String title, String text) {
|
|||||||
void msgBoxCommon(OverlayDialogManager dialogManager, String title,
|
void msgBoxCommon(OverlayDialogManager dialogManager, String title,
|
||||||
Widget content, List<Widget> buttons,
|
Widget content, List<Widget> buttons,
|
||||||
{bool hasCancel = true}) {
|
{bool hasCancel = true}) {
|
||||||
dialogManager.show((setState, close) => CustomAlertDialog(
|
dialogManager.show((setState, close, context) => CustomAlertDialog(
|
||||||
title: Text(
|
title: Text(
|
||||||
translate(title),
|
translate(title),
|
||||||
style: TextStyle(fontSize: 21),
|
style: TextStyle(fontSize: 21),
|
||||||
|
@ -224,7 +224,7 @@ class _AddressBookState extends State<AddressBook> {
|
|||||||
final style = TextStyle(fontSize: 14.0);
|
final style = TextStyle(fontSize: 14.0);
|
||||||
String? errorMsg;
|
String? errorMsg;
|
||||||
|
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
setState(() {
|
setState(() {
|
||||||
isInProgress = true;
|
isInProgress = true;
|
||||||
@ -334,7 +334,7 @@ class _AddressBookState extends State<AddressBook> {
|
|||||||
var msg = "";
|
var msg = "";
|
||||||
var isInProgress = false;
|
var isInProgress = false;
|
||||||
TextEditingController controller = TextEditingController(text: field);
|
TextEditingController controller = TextEditingController(text: field);
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
setState(() {
|
setState(() {
|
||||||
msg = "";
|
msg = "";
|
||||||
|
@ -65,7 +65,7 @@ void changeIdDialog() {
|
|||||||
RegexValidationRule('allowed characters', RegExp(r'^\w*$'))
|
RegexValidationRule('allowed characters', RegExp(r'^\w*$'))
|
||||||
];
|
];
|
||||||
|
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
debugPrint("onSubmit");
|
debugPrint("onSubmit");
|
||||||
newId = controller.text.trim();
|
newId = controller.text.trim();
|
||||||
@ -175,7 +175,7 @@ void changeWhiteList({Function()? callback}) async {
|
|||||||
var controller = TextEditingController(text: newWhiteListField);
|
var controller = TextEditingController(text: newWhiteListField);
|
||||||
var msg = "";
|
var msg = "";
|
||||||
var isInProgress = false;
|
var isInProgress = false;
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
title: Text(translate("IP Whitelisting")),
|
title: Text(translate("IP Whitelisting")),
|
||||||
content: Column(
|
content: Column(
|
||||||
@ -255,7 +255,7 @@ void changeWhiteList({Function()? callback}) async {
|
|||||||
Future<String> changeDirectAccessPort(
|
Future<String> changeDirectAccessPort(
|
||||||
String currentIP, String currentPort) async {
|
String currentIP, String currentPort) async {
|
||||||
final controller = TextEditingController(text: currentPort);
|
final controller = TextEditingController(text: currentPort);
|
||||||
await gFFI.dialogManager.show((setState, close) {
|
await gFFI.dialogManager.show((setState, close, context) {
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
title: Text(translate("Change Local Port")),
|
title: Text(translate("Change Local Port")),
|
||||||
content: Column(
|
content: Column(
|
||||||
@ -425,7 +425,7 @@ class _PasswordWidgetState extends State<PasswordWidget> {
|
|||||||
void wrongPasswordDialog(
|
void wrongPasswordDialog(
|
||||||
String id, OverlayDialogManager dialogManager, type, title, text) {
|
String id, OverlayDialogManager dialogManager, type, title, text) {
|
||||||
dialogManager.dismissAll();
|
dialogManager.dismissAll();
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
cancel() {
|
cancel() {
|
||||||
close();
|
close();
|
||||||
closeConnection();
|
closeConnection();
|
||||||
@ -498,7 +498,7 @@ _connectDialog(
|
|||||||
rememberAccount = await bind.sessionGetRemember(id: id) ?? false;
|
rememberAccount = await bind.sessionGetRemember(id: id) ?? false;
|
||||||
}
|
}
|
||||||
dialogManager.dismissAll();
|
dialogManager.dismissAll();
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
cancel() {
|
cancel() {
|
||||||
close();
|
close();
|
||||||
closeConnection();
|
closeConnection();
|
||||||
@ -653,7 +653,7 @@ void showWaitUacDialog(
|
|||||||
dialogManager.dismissAll();
|
dialogManager.dismissAll();
|
||||||
dialogManager.show(
|
dialogManager.show(
|
||||||
tag: '$id-wait-uac',
|
tag: '$id-wait-uac',
|
||||||
(setState, close) => CustomAlertDialog(
|
(setState, close, context) => CustomAlertDialog(
|
||||||
title: null,
|
title: null,
|
||||||
content: msgboxContent(type, 'Wait', 'wait_accept_uac_tip'),
|
content: msgboxContent(type, 'Wait', 'wait_accept_uac_tip'),
|
||||||
));
|
));
|
||||||
@ -769,7 +769,7 @@ void showRequestElevationDialog(String id, OverlayDialogManager dialogManager) {
|
|||||||
]));
|
]));
|
||||||
|
|
||||||
dialogManager.dismissAll();
|
dialogManager.dismissAll();
|
||||||
dialogManager.show(tag: '$id-request-elevation', (setState, close) {
|
dialogManager.show(tag: '$id-request-elevation', (setState, close, context) {
|
||||||
void submit() {
|
void submit() {
|
||||||
if (groupValue.value == 'logon') {
|
if (groupValue.value == 'logon') {
|
||||||
if (userController.text.isEmpty) {
|
if (userController.text.isEmpty) {
|
||||||
@ -813,7 +813,7 @@ void showOnBlockDialog(
|
|||||||
dialogManager.existing('$id-request-elevation')) {
|
dialogManager.existing('$id-request-elevation')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dialogManager.show(tag: '$id-$type', (setState, close) {
|
dialogManager.show(tag: '$id-$type', (setState, close, context) {
|
||||||
void submit() {
|
void submit() {
|
||||||
close();
|
close();
|
||||||
showRequestElevationDialog(id, dialogManager);
|
showRequestElevationDialog(id, dialogManager);
|
||||||
@ -835,7 +835,7 @@ void showOnBlockDialog(
|
|||||||
|
|
||||||
void showElevationError(String id, String type, String title, String text,
|
void showElevationError(String id, String type, String title, String text,
|
||||||
OverlayDialogManager dialogManager) {
|
OverlayDialogManager dialogManager) {
|
||||||
dialogManager.show(tag: '$id-$type', (setState, close) {
|
dialogManager.show(tag: '$id-$type', (setState, close, context) {
|
||||||
void submit() {
|
void submit() {
|
||||||
close();
|
close();
|
||||||
showRequestElevationDialog(id, dialogManager);
|
showRequestElevationDialog(id, dialogManager);
|
||||||
@ -859,7 +859,7 @@ void showElevationError(String id, String type, String title, String text,
|
|||||||
void showWaitAcceptDialog(String id, String type, String title, String text,
|
void showWaitAcceptDialog(String id, String type, String title, String text,
|
||||||
OverlayDialogManager dialogManager) {
|
OverlayDialogManager dialogManager) {
|
||||||
dialogManager.dismissAll();
|
dialogManager.dismissAll();
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
onCancel() {
|
onCancel() {
|
||||||
closeConnection();
|
closeConnection();
|
||||||
}
|
}
|
||||||
@ -878,7 +878,7 @@ void showWaitAcceptDialog(String id, String type, String title, String text,
|
|||||||
void showRestartRemoteDevice(
|
void showRestartRemoteDevice(
|
||||||
PeerInfo pi, String id, OverlayDialogManager dialogManager) async {
|
PeerInfo pi, String id, OverlayDialogManager dialogManager) async {
|
||||||
final res =
|
final res =
|
||||||
await dialogManager.show<bool>((setState, close) => CustomAlertDialog(
|
await dialogManager.show<bool>((setState, close, context) => CustomAlertDialog(
|
||||||
title: Row(children: [
|
title: Row(children: [
|
||||||
Icon(Icons.warning_rounded, color: Colors.redAccent, size: 28),
|
Icon(Icons.warning_rounded, color: Colors.redAccent, size: 28),
|
||||||
Flexible(
|
Flexible(
|
||||||
@ -915,7 +915,7 @@ showSetOSPassword(
|
|||||||
var password = await bind.sessionGetOption(id: id, arg: 'os-password') ?? '';
|
var password = await bind.sessionGetOption(id: id, arg: 'os-password') ?? '';
|
||||||
var autoLogin = await bind.sessionGetOption(id: id, arg: 'auto-login') != '';
|
var autoLogin = await bind.sessionGetOption(id: id, arg: 'auto-login') != '';
|
||||||
controller.text = password;
|
controller.text = password;
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
submit() {
|
submit() {
|
||||||
var text = controller.text.trim();
|
var text = controller.text.trim();
|
||||||
bind.sessionPeerOption(id: id, name: 'os-password', value: text);
|
bind.sessionPeerOption(id: id, name: 'os-password', value: text);
|
||||||
@ -983,7 +983,7 @@ showSetOSAccount(
|
|||||||
var password = await bind.sessionGetOption(id: id, arg: 'os-password') ?? '';
|
var password = await bind.sessionGetOption(id: id, arg: 'os-password') ?? '';
|
||||||
usernameController.text = username;
|
usernameController.text = username;
|
||||||
passwdController.text = password;
|
passwdController.text = password;
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
submit() {
|
submit() {
|
||||||
final username = usernameController.text.trim();
|
final username = usernameController.text.trim();
|
||||||
final password = usernameController.text.trim();
|
final password = usernameController.text.trim();
|
||||||
@ -1115,7 +1115,7 @@ showAuditDialog(String id, dialogManager) async {
|
|||||||
|
|
||||||
void showConfirmSwitchSidesDialog(
|
void showConfirmSwitchSidesDialog(
|
||||||
String id, OverlayDialogManager dialogManager) async {
|
String id, OverlayDialogManager dialogManager) async {
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
await bind.sessionSwitchSides(id: id);
|
await bind.sessionSwitchSides(id: id);
|
||||||
closeConnection(id: id);
|
closeConnection(id: id);
|
||||||
|
@ -391,7 +391,7 @@ Future<bool?> loginDialog() async {
|
|||||||
final autoLogin = true.obs;
|
final autoLogin = true.obs;
|
||||||
final RxString curOP = ''.obs;
|
final RxString curOP = ''.obs;
|
||||||
|
|
||||||
final res = await gFFI.dialogManager.show<bool>((setState, close) {
|
final res = await gFFI.dialogManager.show<bool>((setState, close, context) {
|
||||||
username.addListener(() {
|
username.addListener(() {
|
||||||
if (usernameMsg != null) {
|
if (usernameMsg != null) {
|
||||||
setState(() => usernameMsg = null);
|
setState(() => usernameMsg = null);
|
||||||
@ -530,7 +530,7 @@ Future<bool?> verificationCodeDialog(UserPayload? user) async {
|
|||||||
final focusNode = FocusNode()..requestFocus();
|
final focusNode = FocusNode()..requestFocus();
|
||||||
Timer(Duration(milliseconds: 100), () => focusNode..requestFocus());
|
Timer(Duration(milliseconds: 100), () => focusNode..requestFocus());
|
||||||
|
|
||||||
final res = await gFFI.dialogManager.show<bool>((setState, close) {
|
final res = await gFFI.dialogManager.show<bool>((setState, close, context) {
|
||||||
bool validate() {
|
bool validate() {
|
||||||
return code.text.length >= 6;
|
return code.text.length >= 6;
|
||||||
}
|
}
|
||||||
|
@ -664,7 +664,7 @@ abstract class BasePeerCard extends StatelessWidget {
|
|||||||
RxBool isInProgress = false.obs;
|
RxBool isInProgress = false.obs;
|
||||||
String name = await _getAlias(id);
|
String name = await _getAlias(id);
|
||||||
var controller = TextEditingController(text: name);
|
var controller = TextEditingController(text: name);
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
isInProgress.value = true;
|
isInProgress.value = true;
|
||||||
String name = controller.text.trim();
|
String name = controller.text.trim();
|
||||||
@ -724,7 +724,7 @@ abstract class BasePeerCard extends StatelessWidget {
|
|||||||
|
|
||||||
void _delete(String id, bool isLan, Function reloadFunc) async {
|
void _delete(String id, bool isLan, Function reloadFunc) async {
|
||||||
gFFI.dialogManager.show(
|
gFFI.dialogManager.show(
|
||||||
(setState, close) {
|
(setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
if (isLan) {
|
if (isLan) {
|
||||||
bind.mainRemoveDiscovered(id: id);
|
bind.mainRemoveDiscovered(id: id);
|
||||||
@ -1023,7 +1023,7 @@ class AddressBookPeerCard extends BasePeerCard {
|
|||||||
final tags = List.of(gFFI.abModel.tags);
|
final tags = List.of(gFFI.abModel.tags);
|
||||||
var selectedTag = gFFI.abModel.getPeerTags(id).obs;
|
var selectedTag = gFFI.abModel.getPeerTags(id).obs;
|
||||||
|
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
setState(() {
|
setState(() {
|
||||||
isInProgress = true;
|
isInProgress = true;
|
||||||
@ -1115,7 +1115,7 @@ void _rdpDialog(String id) async {
|
|||||||
text: await bind.mainGetPeerOption(id: id, key: 'rdp_password'));
|
text: await bind.mainGetPeerOption(id: id, key: 'rdp_password'));
|
||||||
RxBool secure = true.obs;
|
RxBool secure = true.obs;
|
||||||
|
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
String port = portController.text.trim();
|
String port = portController.text.trim();
|
||||||
String username = userController.text;
|
String username = userController.text;
|
||||||
|
@ -589,7 +589,7 @@ void setPasswordDialog() async {
|
|||||||
MinCharactersValidationRule(8),
|
MinCharactersValidationRule(8),
|
||||||
];
|
];
|
||||||
|
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
submit() {
|
submit() {
|
||||||
setState(() {
|
setState(() {
|
||||||
errMsg0 = "";
|
errMsg0 = "";
|
||||||
|
@ -2016,7 +2016,7 @@ void changeSocks5Proxy() async {
|
|||||||
RxBool obscure = true.obs;
|
RxBool obscure = true.obs;
|
||||||
|
|
||||||
var isInProgress = false;
|
var isInProgress = false;
|
||||||
gFFI.dialogManager.show((setState, close) {
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
setState(() {
|
setState(() {
|
||||||
proxyMsg = '';
|
proxyMsg = '';
|
||||||
|
@ -643,7 +643,7 @@ class _FileManagerViewState extends State<FileManagerView> {
|
|||||||
MenuButton(
|
MenuButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
final name = TextEditingController();
|
final name = TextEditingController();
|
||||||
_ffi.dialogManager.show((setState, close) {
|
_ffi.dialogManager.show((setState, close, context) {
|
||||||
submit() {
|
submit() {
|
||||||
if (name.value.text.isNotEmpty) {
|
if (name.value.text.isNotEmpty) {
|
||||||
controller.createDir(PathUtil.join(
|
controller.createDir(PathUtil.join(
|
||||||
|
@ -293,7 +293,7 @@ class _InstallPageBodyState extends State<_InstallPageBody>
|
|||||||
),
|
),
|
||||||
];
|
];
|
||||||
gFFI.dialogManager.show(
|
gFFI.dialogManager.show(
|
||||||
(setState, close) => CustomAlertDialog(
|
(setState, close, context) => CustomAlertDialog(
|
||||||
title: null,
|
title: null,
|
||||||
content: SelectionArea(
|
content: SelectionArea(
|
||||||
child:
|
child:
|
||||||
|
@ -204,7 +204,7 @@ showKBLayoutTypeChooser(
|
|||||||
String localPlatform,
|
String localPlatform,
|
||||||
OverlayDialogManager dialogManager,
|
OverlayDialogManager dialogManager,
|
||||||
) {
|
) {
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
title:
|
title:
|
||||||
Text('${translate('Select local keyboard type')} ($localPlatform)'),
|
Text('${translate('Select local keyboard type')} ($localPlatform)'),
|
||||||
|
@ -687,7 +687,7 @@ Future<bool> toggleMaximize(bool isMainWindow) async {
|
|||||||
|
|
||||||
Future<bool> closeConfirmDialog() async {
|
Future<bool> closeConfirmDialog() async {
|
||||||
var confirm = true;
|
var confirm = true;
|
||||||
final res = await gFFI.dialogManager.show<bool>((setState, close) {
|
final res = await gFFI.dialogManager.show<bool>((setState, close, context) {
|
||||||
submit() {
|
submit() {
|
||||||
final opt = "enable-confirm-closing-tabs";
|
final opt = "enable-confirm-closing-tabs";
|
||||||
String value = bool2option(opt, confirm);
|
String value = bool2option(opt, confirm);
|
||||||
|
@ -197,7 +197,7 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
|||||||
} else if (v == "folder") {
|
} else if (v == "folder") {
|
||||||
final name = TextEditingController();
|
final name = TextEditingController();
|
||||||
gFFI.dialogManager
|
gFFI.dialogManager
|
||||||
.show((setState, close) => CustomAlertDialog(
|
.show((setState, close, context) => CustomAlertDialog(
|
||||||
title: Text(translate("Create Folder")),
|
title: Text(translate("Create Folder")),
|
||||||
content: Column(
|
content: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
@ -868,7 +868,7 @@ void showOptions(
|
|||||||
List<TToggleMenu> displayToggles =
|
List<TToggleMenu> displayToggles =
|
||||||
await toolbarDisplayToggle(context, id, gFFI);
|
await toolbarDisplayToggle(context, id, gFFI);
|
||||||
|
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
var viewStyle =
|
var viewStyle =
|
||||||
(viewStyleRadios.isNotEmpty ? viewStyleRadios[0].groupValue : '').obs;
|
(viewStyleRadios.isNotEmpty ? viewStyleRadios[0].groupValue : '').obs;
|
||||||
var imageQuality =
|
var imageQuality =
|
||||||
|
@ -318,7 +318,7 @@ class _SettingsState extends State<SettingsPage> with WidgetsBindingObserver {
|
|||||||
kRequestIgnoreBatteryOptimizations);
|
kRequestIgnoreBatteryOptimizations);
|
||||||
} else {
|
} else {
|
||||||
final res = await gFFI.dialogManager
|
final res = await gFFI.dialogManager
|
||||||
.show<bool>((setState, close) => CustomAlertDialog(
|
.show<bool>((setState, close, context) => CustomAlertDialog(
|
||||||
title: Text(translate("Open System Setting")),
|
title: Text(translate("Open System Setting")),
|
||||||
content: Text(translate(
|
content: Text(translate(
|
||||||
"android_open_battery_optimizations_tip")),
|
"android_open_battery_optimizations_tip")),
|
||||||
@ -505,7 +505,7 @@ void showLanguageSettings(OverlayDialogManager dialogManager) async {
|
|||||||
try {
|
try {
|
||||||
final langs = json.decode(await bind.mainGetLangs()) as List<dynamic>;
|
final langs = json.decode(await bind.mainGetLangs()) as List<dynamic>;
|
||||||
var lang = bind.mainGetLocalOption(key: "lang");
|
var lang = bind.mainGetLocalOption(key: "lang");
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
setLang(v) {
|
setLang(v) {
|
||||||
if (lang != v) {
|
if (lang != v) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@ -539,7 +539,7 @@ void showLanguageSettings(OverlayDialogManager dialogManager) async {
|
|||||||
void showThemeSettings(OverlayDialogManager dialogManager) async {
|
void showThemeSettings(OverlayDialogManager dialogManager) async {
|
||||||
var themeMode = MyTheme.getThemeModePreference();
|
var themeMode = MyTheme.getThemeModePreference();
|
||||||
|
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
setTheme(v) {
|
setTheme(v) {
|
||||||
if (themeMode != v) {
|
if (themeMode != v) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@ -563,7 +563,7 @@ void showThemeSettings(OverlayDialogManager dialogManager) async {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void showAbout(OverlayDialogManager dialogManager) {
|
void showAbout(OverlayDialogManager dialogManager) {
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
title: Text('${translate('About')} RustDesk'),
|
title: Text('${translate('About')} RustDesk'),
|
||||||
content: Wrap(direction: Axis.vertical, spacing: 12, children: [
|
content: Wrap(direction: Axis.vertical, spacing: 12, children: [
|
||||||
|
@ -20,7 +20,7 @@ void setPermanentPasswordDialog(OverlayDialogManager dialogManager) async {
|
|||||||
final p1 = TextEditingController(text: pw);
|
final p1 = TextEditingController(text: pw);
|
||||||
var validateLength = false;
|
var validateLength = false;
|
||||||
var validateSame = false;
|
var validateSame = false;
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
submit() async {
|
submit() async {
|
||||||
close();
|
close();
|
||||||
dialogManager.showLoading(translate("Waiting"));
|
dialogManager.showLoading(translate("Waiting"));
|
||||||
@ -111,7 +111,7 @@ void setTemporaryPasswordLengthDialog(
|
|||||||
var index = lengths.indexOf(length);
|
var index = lengths.indexOf(length);
|
||||||
if (index < 0) index = 0;
|
if (index < 0) index = 0;
|
||||||
length = lengths[index];
|
length = lengths[index];
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
setLength(newValue) {
|
setLength(newValue) {
|
||||||
final oldValue = length;
|
final oldValue = length;
|
||||||
if (oldValue == newValue) return;
|
if (oldValue == newValue) return;
|
||||||
@ -160,7 +160,7 @@ void showServerSettingsWithValue(
|
|||||||
String? relayServerMsg;
|
String? relayServerMsg;
|
||||||
String? apiServerMsg;
|
String? apiServerMsg;
|
||||||
|
|
||||||
dialogManager.show((setState, close) {
|
dialogManager.show((setState, close, context) {
|
||||||
Future<bool> validate() async {
|
Future<bool> validate() async {
|
||||||
if (idCtrl.text != oldCfg.idServer) {
|
if (idCtrl.text != oldCfg.idServer) {
|
||||||
final res = await validateAsync(idCtrl.text);
|
final res = await validateAsync(idCtrl.text);
|
||||||
|
@ -152,7 +152,7 @@ class FileModel {
|
|||||||
String title, String content, bool showCheckbox, bool isIdentical) async {
|
String title, String content, bool showCheckbox, bool isIdentical) async {
|
||||||
fileConfirmCheckboxRemember = false;
|
fileConfirmCheckboxRemember = false;
|
||||||
return await parent.target?.dialogManager.show<bool?>(
|
return await parent.target?.dialogManager.show<bool?>(
|
||||||
(setState, Function(bool? v) close) {
|
(setState, Function(bool? v) close, context) {
|
||||||
cancel() => close(false);
|
cancel() => close(false);
|
||||||
submit() => close(true);
|
submit() => close(true);
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
@ -547,7 +547,7 @@ class FileController {
|
|||||||
|
|
||||||
Future<bool?> showRemoveDialog(
|
Future<bool?> showRemoveDialog(
|
||||||
String title, String content, bool showCheckbox) async {
|
String title, String content, bool showCheckbox) async {
|
||||||
return await dialogManager?.show<bool>((setState, Function(bool v) close) {
|
return await dialogManager?.show<bool>((setState, Function(bool v) close, context) {
|
||||||
cancel() => close(false);
|
cancel() => close(false);
|
||||||
submit() => close(true);
|
submit() => close(true);
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
|
@ -383,7 +383,7 @@ class FfiModel with ChangeNotifier {
|
|||||||
|
|
||||||
void showRelayHintDialog(String id, String type, String title, String text,
|
void showRelayHintDialog(String id, String type, String title, String text,
|
||||||
OverlayDialogManager dialogManager) {
|
OverlayDialogManager dialogManager) {
|
||||||
dialogManager.show(tag: '$id-$type', (setState, close) {
|
dialogManager.show(tag: '$id-$type', (setState, close, context) {
|
||||||
onClose() {
|
onClose() {
|
||||||
closeConnection();
|
closeConnection();
|
||||||
close();
|
close();
|
||||||
|
@ -289,7 +289,7 @@ class ServerModel with ChangeNotifier {
|
|||||||
toggleService() async {
|
toggleService() async {
|
||||||
if (_isStart) {
|
if (_isStart) {
|
||||||
final res =
|
final res =
|
||||||
await parent.target?.dialogManager.show<bool>((setState, close) {
|
await parent.target?.dialogManager.show<bool>((setState, close, context) {
|
||||||
submit() => close(true);
|
submit() => close(true);
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
title: Row(children: [
|
title: Row(children: [
|
||||||
@ -312,7 +312,7 @@ class ServerModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
final res =
|
final res =
|
||||||
await parent.target?.dialogManager.show<bool>((setState, close) {
|
await parent.target?.dialogManager.show<bool>((setState, close, context) {
|
||||||
submit() => close(true);
|
submit() => close(true);
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
title: Row(children: [
|
title: Row(children: [
|
||||||
@ -481,7 +481,7 @@ class ServerModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void showLoginDialog(Client client) {
|
void showLoginDialog(Client client) {
|
||||||
parent.target?.dialogManager.show((setState, close) {
|
parent.target?.dialogManager.show((setState, close, context) {
|
||||||
cancel() {
|
cancel() {
|
||||||
sendLoginResponse(client, false);
|
sendLoginResponse(client, false);
|
||||||
close();
|
close();
|
||||||
@ -699,7 +699,7 @@ String getLoginDialogTag(int id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
showInputWarnAlert(FFI ffi) {
|
showInputWarnAlert(FFI ffi) {
|
||||||
ffi.dialogManager.show((setState, close) {
|
ffi.dialogManager.show((setState, close, context) {
|
||||||
submit() {
|
submit() {
|
||||||
AndroidPermissionManager.startAction(kActionAccessibilitySettings);
|
AndroidPermissionManager.startAction(kActionAccessibilitySettings);
|
||||||
close();
|
close();
|
||||||
@ -726,7 +726,7 @@ showInputWarnAlert(FFI ffi) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> showClientsMayNotBeChangedAlert(FFI? ffi) async {
|
Future<void> showClientsMayNotBeChangedAlert(FFI? ffi) async {
|
||||||
await ffi?.dialogManager.show((setState, close) {
|
await ffi?.dialogManager.show((setState, close, context) {
|
||||||
return CustomAlertDialog(
|
return CustomAlertDialog(
|
||||||
title: Text(translate("Permissions")),
|
title: Text(translate("Permissions")),
|
||||||
content: Column(
|
content: Column(
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
|
import 'dart:convert';
|
||||||
import 'dart:ffi';
|
import 'dart:ffi';
|
||||||
|
|
||||||
|
import 'package:ffi/ffi.dart';
|
||||||
|
import 'package:flutter_hbb/plugin/utils/dialogs.dart';
|
||||||
|
|
||||||
abstract class NativeHandler {
|
abstract class NativeHandler {
|
||||||
bool onEvent(Map<String, dynamic> evt);
|
bool onEvent(Map<String, dynamic> evt);
|
||||||
}
|
}
|
||||||
@ -37,7 +41,13 @@ class NativeUiHandler extends NativeHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void onSelectPeers(OnSelectPeersCallbackDart cb, int userData) async {
|
void onSelectPeers(OnSelectPeersCallbackDart cb, int userData) async {
|
||||||
// TODO: design a UI interface to pick peers.
|
showPeerSelectionDialog(onPeersCallback: (peers) {
|
||||||
cb(0, Pointer.fromAddress(0), 0, Pointer.fromAddress(userData));
|
String json = jsonEncode(<String, dynamic> {
|
||||||
|
"peers": peers
|
||||||
|
});
|
||||||
|
final native = json.toNativeUtf8();
|
||||||
|
cb(0, native.cast(), native.length, Pointer.fromAddress(userData));
|
||||||
|
malloc.free(native);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
83
flutter/lib/plugin/utils/dialogs.dart
Normal file
83
flutter/lib/plugin/utils/dialogs.dart
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_hbb/common.dart';
|
||||||
|
import 'package:flutter_hbb/models/platform_model.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
void showPeerSelectionDialog(
|
||||||
|
{bool singleSelection = false,
|
||||||
|
required Function(List<String>) onPeersCallback}) {
|
||||||
|
final peers = bind.mainLoadRecentPeersSync();
|
||||||
|
if (peers.isEmpty) {
|
||||||
|
debugPrint("load recent peers sync failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<String, dynamic> map = jsonDecode(peers);
|
||||||
|
List<dynamic> peersList = map['peers'] ?? [];
|
||||||
|
final selected = List<String>.empty(growable: true);
|
||||||
|
|
||||||
|
submit() async {
|
||||||
|
onPeersCallback.call(selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
|
return CustomAlertDialog(
|
||||||
|
title:
|
||||||
|
Text(translate(singleSelection ? "Select peers" : "Select a peer")),
|
||||||
|
content: SizedBox(
|
||||||
|
height: 300.0,
|
||||||
|
child: ListView.builder(
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final Map<String, dynamic> peer = peersList[index];
|
||||||
|
final String platform = peer['platform'] ?? "";
|
||||||
|
final String id = peer['id'] ?? "";
|
||||||
|
final String alias = peer['alias'] ?? "";
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
setState(() {
|
||||||
|
if (selected.contains(id)) {
|
||||||
|
selected.remove(id);
|
||||||
|
} else {
|
||||||
|
selected.add(id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
key: ValueKey(index),
|
||||||
|
height: 50.0,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Theme.of(context).highlightColor,
|
||||||
|
borderRadius: BorderRadius.circular(12.0)
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 4.0),
|
||||||
|
margin: EdgeInsets.symmetric(vertical: 4.0),
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: [
|
||||||
|
// platform
|
||||||
|
SizedBox(width: 8.0,),
|
||||||
|
Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
getPlatformImage(platform, size: 34.0),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(width: 8.0,),
|
||||||
|
// id/alias
|
||||||
|
Expanded(child: Text(alias.isEmpty ? id : alias)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
itemCount: peersList.length,
|
||||||
|
itemExtent: 50.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onSubmit: submit,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
@ -751,6 +751,25 @@ pub fn main_load_recent_peers() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn main_load_recent_peers_sync() -> SyncReturn<String> {
|
||||||
|
if !config::APP_DIR.read().unwrap().is_empty() {
|
||||||
|
let peers: Vec<HashMap<&str, String>> = PeerConfig::peers()
|
||||||
|
.drain(..)
|
||||||
|
.map(|(id, _, p)| peer_to_map(id, p))
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let data = HashMap::from([
|
||||||
|
("name", "load_recent_peers".to_owned()),
|
||||||
|
(
|
||||||
|
"peers",
|
||||||
|
serde_json::ser::to_string(&peers).unwrap_or("".to_owned()),
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
return SyncReturn(serde_json::ser::to_string(&data).unwrap_or("".to_owned()));
|
||||||
|
}
|
||||||
|
SyncReturn("".to_string())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn main_load_fav_peers() {
|
pub fn main_load_fav_peers() {
|
||||||
if !config::APP_DIR.read().unwrap().is_empty() {
|
if !config::APP_DIR.read().unwrap().is_empty() {
|
||||||
let favs = get_fav();
|
let favs = get_fav();
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "指纹"),
|
("Fingerprint", "指纹"),
|
||||||
("Copy Fingerprint", "复制指纹"),
|
("Copy Fingerprint", "复制指纹"),
|
||||||
("no fingerprints", "没有指纹"),
|
("no fingerprints", "没有指纹"),
|
||||||
|
("Select a peer", "选择一个被控端"),
|
||||||
|
("Select peers", "选择被控端")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "Fingerabdruck"),
|
("Fingerprint", "Fingerabdruck"),
|
||||||
("Copy Fingerprint", "Fingerabdruck kopieren"),
|
("Copy Fingerprint", "Fingerabdruck kopieren"),
|
||||||
("no fingerprints", "Keine Fingerabdrücke"),
|
("no fingerprints", "Keine Fingerabdrücke"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "Huella digital"),
|
("Fingerprint", "Huella digital"),
|
||||||
("Copy Fingerprint", "Copiar huella digital"),
|
("Copy Fingerprint", "Copiar huella digital"),
|
||||||
("no fingerprints", "sin huellas digitales"),
|
("no fingerprints", "sin huellas digitales"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "اثر انگشت"),
|
("Fingerprint", "اثر انگشت"),
|
||||||
("Copy Fingerprint", "کپی کردن اثر انگشت"),
|
("Copy Fingerprint", "کپی کردن اثر انگشت"),
|
||||||
("no fingerprints", "بدون اثر انگشت"),
|
("no fingerprints", "بدون اثر انگشت"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "Firma digitale"),
|
("Fingerprint", "Firma digitale"),
|
||||||
("Copy Fingerprint", "Copia firma digitale"),
|
("Copy Fingerprint", "Copia firma digitale"),
|
||||||
("no fingerprints", "Nessuna firma digitale"),
|
("no fingerprints", "Nessuna firma digitale"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
1006
src/lang/lt.rs
1006
src/lang/lt.rs
File diff suppressed because it is too large
Load Diff
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "Vingerafdruk"),
|
("Fingerprint", "Vingerafdruk"),
|
||||||
("Copy Fingerprint", "Kopieer Vingerafdruk"),
|
("Copy Fingerprint", "Kopieer Vingerafdruk"),
|
||||||
("no fingerprints", "geen vingerafdrukken"),
|
("no fingerprints", "geen vingerafdrukken"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "Sygnatura"),
|
("Fingerprint", "Sygnatura"),
|
||||||
("Copy Fingerprint", "Skopiuj sygnaturę"),
|
("Copy Fingerprint", "Skopiuj sygnaturę"),
|
||||||
("no fingerprints", "brak sygnatur"),
|
("no fingerprints", "brak sygnatur"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "Отпечаток"),
|
("Fingerprint", "Отпечаток"),
|
||||||
("Copy Fingerprint", "Копировать отпечаток"),
|
("Copy Fingerprint", "Копировать отпечаток"),
|
||||||
("no fingerprints", "отпечатки отсутствуют"),
|
("no fingerprints", "отпечатки отсутствуют"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", "指紋"),
|
("Fingerprint", "指紋"),
|
||||||
("Copy Fingerprint", "複製指紋"),
|
("Copy Fingerprint", "複製指紋"),
|
||||||
("no fingerprints", "沒有指紋"),
|
("no fingerprints", "沒有指紋"),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -498,5 +498,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Fingerprint", ""),
|
("Fingerprint", ""),
|
||||||
("Copy Fingerprint", ""),
|
("Copy Fingerprint", ""),
|
||||||
("no fingerprints", ""),
|
("no fingerprints", ""),
|
||||||
|
("Select a peer", ""),
|
||||||
|
("Select peers", "")
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user