mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-04-15 17:01:29 +03:00
show peer note (#13140)
Signed-off-by: 21pages <sunboeasy@gmail.com> Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
This commit is contained in:
@@ -13,6 +13,7 @@ import 'package:flutter_hbb/desktop/widgets/refresh_wrapper.dart';
|
|||||||
import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
|
import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
|
||||||
import 'package:flutter_hbb/main.dart';
|
import 'package:flutter_hbb/main.dart';
|
||||||
import 'package:flutter_hbb/models/peer_model.dart';
|
import 'package:flutter_hbb/models/peer_model.dart';
|
||||||
|
import 'package:flutter_hbb/models/peer_tab_model.dart';
|
||||||
import 'package:flutter_hbb/models/state_model.dart';
|
import 'package:flutter_hbb/models/state_model.dart';
|
||||||
import 'package:flutter_hbb/utils/multi_window_manager.dart';
|
import 'package:flutter_hbb/utils/multi_window_manager.dart';
|
||||||
import 'package:flutter_hbb/utils/platform_channel.dart';
|
import 'package:flutter_hbb/utils/platform_channel.dart';
|
||||||
@@ -1630,7 +1631,8 @@ bool mainGetPeerBoolOptionSync(String id, String key) {
|
|||||||
// Use `sessionGetToggleOption()` and `sessionToggleOption()` instead.
|
// Use `sessionGetToggleOption()` and `sessionToggleOption()` instead.
|
||||||
// Because all session options use `Y` and `<Empty>` as values.
|
// Because all session options use `Y` and `<Empty>` as values.
|
||||||
|
|
||||||
Future<bool> matchPeer(String searchText, Peer peer) async {
|
Future<bool> matchPeer(
|
||||||
|
String searchText, Peer peer, PeerTabIndex peerTabIndex) async {
|
||||||
if (searchText.isEmpty) {
|
if (searchText.isEmpty) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1641,11 +1643,14 @@ Future<bool> matchPeer(String searchText, Peer peer) async {
|
|||||||
peer.username.toLowerCase().contains(searchText)) {
|
peer.username.toLowerCase().contains(searchText)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
final alias = peer.alias;
|
if (peer.alias.toLowerCase().contains(searchText)) {
|
||||||
if (alias.isEmpty) {
|
return true;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return alias.toLowerCase().contains(searchText);
|
if (peerTabShowNote(peerTabIndex) &&
|
||||||
|
peer.note.toLowerCase().contains(searchText)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the image for the current [platform].
|
/// Get the image for the current [platform].
|
||||||
@@ -4008,3 +4013,7 @@ String decode_http_response(http.Response resp) {
|
|||||||
return resp.body;
|
return resp.body;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool peerTabShowNote(PeerTabIndex peerTabIndex) {
|
||||||
|
return peerTabIndex == PeerTabIndex.ab || peerTabIndex == PeerTabIndex.group;
|
||||||
|
}
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ class PeerPayload {
|
|||||||
"platform": _platform(p.info['os']),
|
"platform": _platform(p.info['os']),
|
||||||
"hostname": p.info['device_name'],
|
"hostname": p.info['device_name'],
|
||||||
"device_group_name": p.device_group_name,
|
"device_group_name": p.device_group_name,
|
||||||
|
"note": p.note,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -466,6 +466,7 @@ class _AddressBookState extends State<AddressBook> {
|
|||||||
IDTextEditingController idController = IDTextEditingController(text: '');
|
IDTextEditingController idController = IDTextEditingController(text: '');
|
||||||
TextEditingController aliasController = TextEditingController(text: '');
|
TextEditingController aliasController = TextEditingController(text: '');
|
||||||
TextEditingController passwordController = TextEditingController(text: '');
|
TextEditingController passwordController = TextEditingController(text: '');
|
||||||
|
TextEditingController noteController = TextEditingController(text: '');
|
||||||
final tags = List.of(gFFI.abModel.currentAbTags);
|
final tags = List.of(gFFI.abModel.currentAbTags);
|
||||||
var selectedTag = List<dynamic>.empty(growable: true).obs;
|
var selectedTag = List<dynamic>.empty(growable: true).obs;
|
||||||
final style = TextStyle(fontSize: 14.0);
|
final style = TextStyle(fontSize: 14.0);
|
||||||
@@ -494,7 +495,11 @@ class _AddressBookState extends State<AddressBook> {
|
|||||||
password = passwordController.text;
|
password = passwordController.text;
|
||||||
}
|
}
|
||||||
String? errMsg2 = await gFFI.abModel.addIdToCurrent(
|
String? errMsg2 = await gFFI.abModel.addIdToCurrent(
|
||||||
id, aliasController.text.trim(), password, selectedTag);
|
id,
|
||||||
|
aliasController.text.trim(),
|
||||||
|
password,
|
||||||
|
selectedTag,
|
||||||
|
noteController.text);
|
||||||
if (errMsg2 != null) {
|
if (errMsg2 != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
isInProgress = false;
|
isInProgress = false;
|
||||||
@@ -600,6 +605,24 @@ class _AddressBookState extends State<AddressBook> {
|
|||||||
),
|
),
|
||||||
).workaroundFreezeLinuxMint(),
|
).workaroundFreezeLinuxMint(),
|
||||||
)),
|
)),
|
||||||
|
row(
|
||||||
|
label: Text(
|
||||||
|
translate('Note'),
|
||||||
|
style: style,
|
||||||
|
),
|
||||||
|
input: Obx(
|
||||||
|
() => TextField(
|
||||||
|
controller: noteController,
|
||||||
|
maxLines: 3,
|
||||||
|
minLines: 1,
|
||||||
|
maxLength: 300,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
labelText: stateGlobal.isPortrait.isFalse
|
||||||
|
? null
|
||||||
|
: translate('Note'),
|
||||||
|
),
|
||||||
|
).workaroundFreezeLinuxMint(),
|
||||||
|
)),
|
||||||
if (gFFI.abModel.currentAbTags.isNotEmpty)
|
if (gFFI.abModel.currentAbTags.isNotEmpty)
|
||||||
Align(
|
Align(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
|
|||||||
@@ -1783,6 +1783,49 @@ void editAbTagDialog(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void editAbPeerNoteDialog(String id) {
|
||||||
|
var isInProgress = false;
|
||||||
|
final currentNote = gFFI.abModel.getPeerNote(id);
|
||||||
|
var controller = TextEditingController(text: currentNote);
|
||||||
|
|
||||||
|
gFFI.dialogManager.show((setState, close, context) {
|
||||||
|
submit() async {
|
||||||
|
setState(() {
|
||||||
|
isInProgress = true;
|
||||||
|
});
|
||||||
|
await gFFI.abModel.changeNote(id: id, note: controller.text);
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return CustomAlertDialog(
|
||||||
|
title: Text(translate("Edit note")),
|
||||||
|
content: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
TextField(
|
||||||
|
controller: controller,
|
||||||
|
autofocus: true,
|
||||||
|
maxLines: 3,
|
||||||
|
minLines: 1,
|
||||||
|
maxLength: 300,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
labelText: translate('Note'),
|
||||||
|
),
|
||||||
|
).workaroundFreezeLinuxMint(),
|
||||||
|
// NOT use Offstage to wrap LinearProgressIndicator
|
||||||
|
if (isInProgress) const LinearProgressIndicator(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
dialogButton("Cancel", onPressed: close, isOutline: true),
|
||||||
|
dialogButton("OK", onPressed: submit),
|
||||||
|
],
|
||||||
|
onSubmit: submit,
|
||||||
|
onCancel: close,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void renameDialog(
|
void renameDialog(
|
||||||
{required String oldName,
|
{required String oldName,
|
||||||
FormFieldValidator<String>? validator,
|
FormFieldValidator<String>? validator,
|
||||||
|
|||||||
@@ -127,6 +127,10 @@ class _PeerCardState extends State<_PeerCard>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool _showNote(Peer peer) {
|
||||||
|
return peerTabShowNote(widget.tab) && peer.note.isNotEmpty;
|
||||||
|
}
|
||||||
|
|
||||||
makeChild(bool isPortrait, Peer peer) {
|
makeChild(bool isPortrait, Peer peer) {
|
||||||
final name = hideUsernameOnCard == true
|
final name = hideUsernameOnCard == true
|
||||||
? peer.hostname
|
? peer.hostname
|
||||||
@@ -134,6 +138,8 @@ class _PeerCardState extends State<_PeerCard>
|
|||||||
final greyStyle = TextStyle(
|
final greyStyle = TextStyle(
|
||||||
fontSize: 11,
|
fontSize: 11,
|
||||||
color: Theme.of(context).textTheme.titleLarge?.color?.withOpacity(0.6));
|
color: Theme.of(context).textTheme.titleLarge?.color?.withOpacity(0.6));
|
||||||
|
final showNote = _showNote(peer);
|
||||||
|
|
||||||
return Row(
|
return Row(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
children: [
|
children: [
|
||||||
@@ -185,14 +191,44 @@ class _PeerCardState extends State<_PeerCard>
|
|||||||
style: Theme.of(context).textTheme.titleSmall,
|
style: Theme.of(context).textTheme.titleSmall,
|
||||||
)),
|
)),
|
||||||
]).marginOnly(top: isPortrait ? 0 : 2),
|
]).marginOnly(top: isPortrait ? 0 : 2),
|
||||||
Align(
|
Row(
|
||||||
alignment: Alignment.centerLeft,
|
children: [
|
||||||
child: Text(
|
Flexible(
|
||||||
name,
|
child: Tooltip(
|
||||||
style: isPortrait ? null : greyStyle,
|
message: name,
|
||||||
textAlign: TextAlign.start,
|
waitDuration: const Duration(seconds: 1),
|
||||||
overflow: TextOverflow.ellipsis,
|
child: Align(
|
||||||
),
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Text(
|
||||||
|
name,
|
||||||
|
style: isPortrait ? null : greyStyle,
|
||||||
|
textAlign: TextAlign.start,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (showNote)
|
||||||
|
Expanded(
|
||||||
|
child: Tooltip(
|
||||||
|
message: peer.note,
|
||||||
|
waitDuration: const Duration(seconds: 1),
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Text(
|
||||||
|
peer.note,
|
||||||
|
style: isPortrait ? null : greyStyle,
|
||||||
|
textAlign: TextAlign.start,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
).marginOnly(
|
||||||
|
left: peerCardUiType.value ==
|
||||||
|
PeerUiType.list
|
||||||
|
? 32
|
||||||
|
: 4),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
).marginOnly(top: 2),
|
).marginOnly(top: 2),
|
||||||
@@ -278,7 +314,7 @@ class _PeerCardState extends State<_PeerCard>
|
|||||||
padding: const EdgeInsets.all(6),
|
padding: const EdgeInsets.all(6),
|
||||||
child:
|
child:
|
||||||
getPlatformImage(peer.platform, size: 60),
|
getPlatformImage(peer.platform, size: 60),
|
||||||
).marginOnly(top: 4),
|
),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
@@ -297,8 +333,26 @@ class _PeerCardState extends State<_PeerCard>
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
if (_showNote(peer))
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Tooltip(
|
||||||
|
message: peer.note,
|
||||||
|
waitDuration: const Duration(seconds: 1),
|
||||||
|
child: Text(
|
||||||
|
peer.note,
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.white38,
|
||||||
|
fontSize: 10),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
],
|
],
|
||||||
).paddingAll(4.0),
|
).paddingOnly(top: 4.0, left: 4.0, right: 4.0),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -1134,6 +1188,7 @@ class AddressBookPeerCard extends BasePeerCard {
|
|||||||
if (gFFI.abModel.currentAbTags.isNotEmpty) {
|
if (gFFI.abModel.currentAbTags.isNotEmpty) {
|
||||||
menuItems.add(_editTagAction(peer.id));
|
menuItems.add(_editTagAction(peer.id));
|
||||||
}
|
}
|
||||||
|
menuItems.add(_editNoteAction(peer.id));
|
||||||
}
|
}
|
||||||
final addressbooks = gFFI.abModel.addressBooksCanWrite();
|
final addressbooks = gFFI.abModel.addressBooksCanWrite();
|
||||||
if (gFFI.peerTabModel.currentTab == PeerTabIndex.ab.index) {
|
if (gFFI.peerTabModel.currentTab == PeerTabIndex.ab.index) {
|
||||||
@@ -1173,6 +1228,21 @@ class AddressBookPeerCard extends BasePeerCard {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@protected
|
||||||
|
MenuEntryBase<String> _editNoteAction(String id) {
|
||||||
|
return MenuEntryButton<String>(
|
||||||
|
childBuilder: (TextStyle? style) => Text(
|
||||||
|
translate('Edit note'),
|
||||||
|
style: style,
|
||||||
|
),
|
||||||
|
proc: () {
|
||||||
|
editAbPeerNoteDialog(id);
|
||||||
|
},
|
||||||
|
padding: super.menuPadding,
|
||||||
|
dismissOnClicked: true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@protected
|
@protected
|
||||||
@override
|
@override
|
||||||
Future<String> _getAlias(String id) async =>
|
Future<String> _getAlias(String id) async =>
|
||||||
|
|||||||
@@ -71,10 +71,12 @@ class _PeersView extends StatefulWidget {
|
|||||||
final Peers peers;
|
final Peers peers;
|
||||||
final PeerFilter? peerFilter;
|
final PeerFilter? peerFilter;
|
||||||
final PeerCardBuilder peerCardBuilder;
|
final PeerCardBuilder peerCardBuilder;
|
||||||
|
final PeerTabIndex peerTabIndex;
|
||||||
|
|
||||||
const _PeersView(
|
const _PeersView(
|
||||||
{required this.peers,
|
{required this.peers,
|
||||||
required this.peerCardBuilder,
|
required this.peerCardBuilder,
|
||||||
|
required this.peerTabIndex,
|
||||||
this.peerFilter,
|
this.peerFilter,
|
||||||
Key? key})
|
Key? key})
|
||||||
: super(key: key);
|
: super(key: key);
|
||||||
@@ -395,8 +397,8 @@ class _PeersViewState extends State<_PeersView>
|
|||||||
return peers;
|
return peers;
|
||||||
}
|
}
|
||||||
searchText = searchText.toLowerCase();
|
searchText = searchText.toLowerCase();
|
||||||
final matches =
|
final matches = await Future.wait(
|
||||||
await Future.wait(peers.map((peer) => matchPeer(searchText, peer)));
|
peers.map((peer) => matchPeer(searchText, peer, widget.peerTabIndex)));
|
||||||
final filteredList = List<Peer>.empty(growable: true);
|
final filteredList = List<Peer>.empty(growable: true);
|
||||||
for (var i = 0; i < peers.length; i++) {
|
for (var i = 0; i < peers.length; i++) {
|
||||||
if (matches[i]) {
|
if (matches[i]) {
|
||||||
@@ -441,7 +443,10 @@ abstract class BasePeersView extends StatelessWidget {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return _PeersView(
|
return _PeersView(
|
||||||
peers: peers, peerFilter: peerFilter, peerCardBuilder: peerCardBuilder);
|
peers: peers,
|
||||||
|
peerFilter: peerFilter,
|
||||||
|
peerCardBuilder: peerCardBuilder,
|
||||||
|
peerTabIndex: peerTabIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -374,6 +374,7 @@ class _ConnectionPageState extends State<ConnectionPage>
|
|||||||
rdpUsername: '',
|
rdpUsername: '',
|
||||||
loginName: '',
|
loginName: '',
|
||||||
device_group_name: '',
|
device_group_name: '',
|
||||||
|
note: '',
|
||||||
);
|
);
|
||||||
_autocompleteOpts = [emptyPeer];
|
_autocompleteOpts = [emptyPeer];
|
||||||
} else {
|
} else {
|
||||||
@@ -536,64 +537,68 @@ class _ConnectionPageState extends State<ConnectionPage>
|
|||||||
builder: (context, setState) {
|
builder: (context, setState) {
|
||||||
var offset = Offset(0, 0);
|
var offset = Offset(0, 0);
|
||||||
return Obx(() => InkWell(
|
return Obx(() => InkWell(
|
||||||
child: _menuOpen.value
|
child: _menuOpen.value
|
||||||
? Transform.rotate(
|
? Transform.rotate(
|
||||||
angle: pi,
|
angle: pi,
|
||||||
child: Icon(IconFont.more, size: 14),
|
child: Icon(IconFont.more, size: 14),
|
||||||
|
)
|
||||||
|
: Icon(IconFont.more, size: 14),
|
||||||
|
onTapDown: (e) {
|
||||||
|
offset = e.globalPosition;
|
||||||
|
},
|
||||||
|
onTap: () async {
|
||||||
|
_menuOpen.value = true;
|
||||||
|
final x = offset.dx;
|
||||||
|
final y = offset.dy;
|
||||||
|
await mod_menu
|
||||||
|
.showMenu(
|
||||||
|
context: context,
|
||||||
|
position: RelativeRect.fromLTRB(x, y, x, y),
|
||||||
|
items: [
|
||||||
|
(
|
||||||
|
'Transfer file',
|
||||||
|
() => onConnect(isFileTransfer: true)
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'View camera',
|
||||||
|
() => onConnect(isViewCamera: true)
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'${translate('Terminal')} (beta)',
|
||||||
|
() => onConnect(isTerminal: true)
|
||||||
|
),
|
||||||
|
]
|
||||||
|
.map((e) => MenuEntryButton<String>(
|
||||||
|
childBuilder: (TextStyle? style) =>
|
||||||
|
Text(
|
||||||
|
translate(e.$1),
|
||||||
|
style: style,
|
||||||
|
),
|
||||||
|
proc: () => e.$2(),
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal:
|
||||||
|
kDesktopMenuPadding.left),
|
||||||
|
dismissOnClicked: true,
|
||||||
|
))
|
||||||
|
.map((e) => e.build(
|
||||||
|
context,
|
||||||
|
const MenuConfig(
|
||||||
|
commonColor: CustomPopupMenuTheme
|
||||||
|
.commonColor,
|
||||||
|
height:
|
||||||
|
CustomPopupMenuTheme.height,
|
||||||
|
dividerHeight:
|
||||||
|
CustomPopupMenuTheme
|
||||||
|
.dividerHeight)))
|
||||||
|
.expand((i) => i)
|
||||||
|
.toList(),
|
||||||
|
elevation: 8,
|
||||||
)
|
)
|
||||||
: Icon(IconFont.more, size: 14),
|
.then((_) {
|
||||||
onTapDown: (e) {
|
_menuOpen.value = false;
|
||||||
offset = e.globalPosition;
|
});
|
||||||
},
|
},
|
||||||
onTap: () async {
|
));
|
||||||
_menuOpen.value = true;
|
|
||||||
final x = offset.dx;
|
|
||||||
final y = offset.dy;
|
|
||||||
await mod_menu
|
|
||||||
.showMenu(
|
|
||||||
context: context,
|
|
||||||
position: RelativeRect.fromLTRB(x, y, x, y),
|
|
||||||
items: [
|
|
||||||
(
|
|
||||||
'Transfer file',
|
|
||||||
() => onConnect(isFileTransfer: true)
|
|
||||||
),
|
|
||||||
(
|
|
||||||
'View camera',
|
|
||||||
() => onConnect(isViewCamera: true)
|
|
||||||
),
|
|
||||||
(
|
|
||||||
'${translate('Terminal')} (beta)',
|
|
||||||
() => onConnect(isTerminal: true)
|
|
||||||
),
|
|
||||||
]
|
|
||||||
.map((e) => MenuEntryButton<String>(
|
|
||||||
childBuilder: (TextStyle? style) => Text(
|
|
||||||
translate(e.$1),
|
|
||||||
style: style,
|
|
||||||
),
|
|
||||||
proc: () => e.$2(),
|
|
||||||
padding: EdgeInsets.symmetric(
|
|
||||||
horizontal: kDesktopMenuPadding.left),
|
|
||||||
dismissOnClicked: true,
|
|
||||||
))
|
|
||||||
.map((e) => e.build(
|
|
||||||
context,
|
|
||||||
const MenuConfig(
|
|
||||||
commonColor:
|
|
||||||
CustomPopupMenuTheme.commonColor,
|
|
||||||
height: CustomPopupMenuTheme.height,
|
|
||||||
dividerHeight: CustomPopupMenuTheme
|
|
||||||
.dividerHeight)))
|
|
||||||
.expand((i) => i)
|
|
||||||
.toList(),
|
|
||||||
elevation: 8,
|
|
||||||
)
|
|
||||||
.then((_) {
|
|
||||||
_menuOpen.value = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
));
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ class _ConnectionPageState extends State<ConnectionPage> {
|
|||||||
rdpUsername: '',
|
rdpUsername: '',
|
||||||
loginName: '',
|
loginName: '',
|
||||||
device_group_name: '',
|
device_group_name: '',
|
||||||
|
note: '',
|
||||||
);
|
);
|
||||||
_autocompleteOpts = [emptyPeer];
|
_autocompleteOpts = [emptyPeer];
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -319,8 +319,8 @@ class AbModel {
|
|||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region peer
|
// #region peer
|
||||||
Future<String?> addIdToCurrent(
|
Future<String?> addIdToCurrent(String id, String alias, String password,
|
||||||
String id, String alias, String password, List<dynamic> tags) async {
|
List<dynamic> tags, String note) async {
|
||||||
if (currentAbPeers.where((element) => element.id == id).isNotEmpty) {
|
if (currentAbPeers.where((element) => element.id == id).isNotEmpty) {
|
||||||
return "$id already exists in address book $_currentName";
|
return "$id already exists in address book $_currentName";
|
||||||
}
|
}
|
||||||
@@ -333,6 +333,9 @@ class AbModel {
|
|||||||
if (password.isNotEmpty) {
|
if (password.isNotEmpty) {
|
||||||
peer['password'] = password;
|
peer['password'] = password;
|
||||||
}
|
}
|
||||||
|
if (note.isNotEmpty) {
|
||||||
|
peer['note'] = note;
|
||||||
|
}
|
||||||
final ret = await addPeersTo([peer], _currentName.value);
|
final ret = await addPeersTo([peer], _currentName.value);
|
||||||
_syncAllFromRecent = true;
|
_syncAllFromRecent = true;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -376,6 +379,14 @@ class AbModel {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<bool> changeNote({required String id, required String note}) async {
|
||||||
|
bool res = await current.changeNote(id: id, note: note);
|
||||||
|
await pullNonLegacyAfterChange();
|
||||||
|
currentAbPeers.refresh();
|
||||||
|
// no need to save cache
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
Future<bool> changePersonalHashPassword(String id, String hash) async {
|
Future<bool> changePersonalHashPassword(String id, String hash) async {
|
||||||
var ret = false;
|
var ret = false;
|
||||||
final personalAb = addressbooks[_personalAddressBookName];
|
final personalAb = addressbooks[_personalAddressBookName];
|
||||||
@@ -658,6 +669,15 @@ class AbModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getPeerNote(String id) {
|
||||||
|
final it = currentAbPeers.where((p0) => p0.id == id);
|
||||||
|
if (it.isEmpty) {
|
||||||
|
return '';
|
||||||
|
} else {
|
||||||
|
return it.first.note;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Color getCurrentAbTagColor(String tag) {
|
Color getCurrentAbTagColor(String tag) {
|
||||||
if (tag == kUntagged) {
|
if (tag == kUntagged) {
|
||||||
return MyTheme.accent;
|
return MyTheme.accent;
|
||||||
@@ -863,6 +883,8 @@ abstract class BaseAb {
|
|||||||
|
|
||||||
Future<bool> changeAlias({required String id, required String alias});
|
Future<bool> changeAlias({required String id, required String alias});
|
||||||
|
|
||||||
|
Future<bool> changeNote({required String id, required String note});
|
||||||
|
|
||||||
Future<bool> changePersonalHashPassword(String id, String hash);
|
Future<bool> changePersonalHashPassword(String id, String hash);
|
||||||
|
|
||||||
Future<bool> changeSharedPassword(String id, String password);
|
Future<bool> changeSharedPassword(String id, String password);
|
||||||
@@ -1090,6 +1112,12 @@ class LegacyAb extends BaseAb {
|
|||||||
return await pushAb();
|
return await pushAb();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> changeNote({required String id, required String note}) async {
|
||||||
|
// no need to implement
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool> changeSharedPassword(String id, String password) async {
|
Future<bool> changeSharedPassword(String id, String password) async {
|
||||||
// no need to implement
|
// no need to implement
|
||||||
@@ -1549,6 +1577,27 @@ class Ab extends BaseAb {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> changeNote({required String id, required String note}) async {
|
||||||
|
try {
|
||||||
|
final api =
|
||||||
|
"${await bind.mainGetApiServer()}/api/ab/peer/update/${profile.guid}";
|
||||||
|
var headers = getHttpHeaders();
|
||||||
|
headers['Content-Type'] = "application/json";
|
||||||
|
final body = jsonEncode({"id": id, "note": note});
|
||||||
|
final resp = await http.put(Uri.parse(api), headers: headers, body: body);
|
||||||
|
final errMsg = _jsonDecodeActionResp(resp);
|
||||||
|
if (errMsg.isNotEmpty) {
|
||||||
|
BotToast.showText(contentColor: Colors.red, text: errMsg);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
debugPrint('changeNote err: ${err.toString()}');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<bool> _setPassword(Object bodyContent) async {
|
Future<bool> _setPassword(Object bodyContent) async {
|
||||||
try {
|
try {
|
||||||
final api =
|
final api =
|
||||||
@@ -1815,6 +1864,11 @@ class DummyAb extends BaseAb {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> changeNote({required String id, required String note}) async {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool> changePersonalHashPassword(String id, String hash) async {
|
Future<bool> changePersonalHashPassword(String id, String hash) async {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ class Peer {
|
|||||||
bool online = false;
|
bool online = false;
|
||||||
String loginName; //login username
|
String loginName; //login username
|
||||||
String device_group_name;
|
String device_group_name;
|
||||||
|
String note;
|
||||||
bool? sameServer;
|
bool? sameServer;
|
||||||
|
|
||||||
String getId() {
|
String getId() {
|
||||||
@@ -43,6 +44,7 @@ class Peer {
|
|||||||
rdpUsername = json['rdpUsername'] ?? '',
|
rdpUsername = json['rdpUsername'] ?? '',
|
||||||
loginName = json['loginName'] ?? '',
|
loginName = json['loginName'] ?? '',
|
||||||
device_group_name = json['device_group_name'] ?? '',
|
device_group_name = json['device_group_name'] ?? '',
|
||||||
|
note = json['note'] is String ? json['note'] : '',
|
||||||
sameServer = json['same_server'];
|
sameServer = json['same_server'];
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
@@ -60,6 +62,7 @@ class Peer {
|
|||||||
"rdpUsername": rdpUsername,
|
"rdpUsername": rdpUsername,
|
||||||
'loginName': loginName,
|
'loginName': loginName,
|
||||||
'device_group_name': device_group_name,
|
'device_group_name': device_group_name,
|
||||||
|
'note': note,
|
||||||
'same_server': sameServer,
|
'same_server': sameServer,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -104,6 +107,7 @@ class Peer {
|
|||||||
required this.rdpUsername,
|
required this.rdpUsername,
|
||||||
required this.loginName,
|
required this.loginName,
|
||||||
required this.device_group_name,
|
required this.device_group_name,
|
||||||
|
required this.note,
|
||||||
this.sameServer,
|
this.sameServer,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -122,6 +126,7 @@ class Peer {
|
|||||||
rdpUsername: '',
|
rdpUsername: '',
|
||||||
loginName: '',
|
loginName: '',
|
||||||
device_group_name: '',
|
device_group_name: '',
|
||||||
|
note: '',
|
||||||
);
|
);
|
||||||
bool equal(Peer other) {
|
bool equal(Peer other) {
|
||||||
return id == other.id &&
|
return id == other.id &&
|
||||||
@@ -136,7 +141,8 @@ class Peer {
|
|||||||
rdpPort == other.rdpPort &&
|
rdpPort == other.rdpPort &&
|
||||||
rdpUsername == other.rdpUsername &&
|
rdpUsername == other.rdpUsername &&
|
||||||
device_group_name == other.device_group_name &&
|
device_group_name == other.device_group_name &&
|
||||||
loginName == other.loginName;
|
loginName == other.loginName &&
|
||||||
|
note == other.note;
|
||||||
}
|
}
|
||||||
|
|
||||||
Peer.copy(Peer other)
|
Peer.copy(Peer other)
|
||||||
@@ -154,6 +160,7 @@ class Peer {
|
|||||||
rdpUsername: other.rdpUsername,
|
rdpUsername: other.rdpUsername,
|
||||||
loginName: other.loginName,
|
loginName: other.loginName,
|
||||||
device_group_name: other.device_group_name,
|
device_group_name: other.device_group_name,
|
||||||
|
note: other.note,
|
||||||
sameServer: other.sameServer);
|
sameServer: other.sameServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", "صغير"),
|
("Small", "صغير"),
|
||||||
("Large", "كبير"),
|
("Large", "كبير"),
|
||||||
("Show virtual joystick", "إظهار عصا التحكم الافتراضية"),
|
("Show virtual joystick", "إظهار عصا التحكم الافتراضية"),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", "小"),
|
("Small", "小"),
|
||||||
("Large", "大"),
|
("Large", "大"),
|
||||||
("Show virtual joystick", "显示虚拟摇杆"),
|
("Show virtual joystick", "显示虚拟摇杆"),
|
||||||
|
("Edit note", "编辑备注"),
|
||||||
|
("Alias", "别名"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", "Klein"),
|
("Small", "Klein"),
|
||||||
("Large", "Groß"),
|
("Large", "Groß"),
|
||||||
("Show virtual joystick", "Virtuellen Joystick anzeigen"),
|
("Show virtual joystick", "Virtuellen Joystick anzeigen"),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -708,18 +708,18 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Failed to check if the user is an administrator.", "No se ha podido comprobar si el usuario es un administrador."),
|
("Failed to check if the user is an administrator.", "No se ha podido comprobar si el usuario es un administrador."),
|
||||||
("Supported only in the installed version.", "Soportado solo en la versión instalada."),
|
("Supported only in the installed version.", "Soportado solo en la versión instalada."),
|
||||||
("elevation_username_tip", "Introduzca el nombre de usuario o dominio\\NombreDeUsuario"),
|
("elevation_username_tip", "Introduzca el nombre de usuario o dominio\\NombreDeUsuario"),
|
||||||
("Preparing for installation ...", "Preparando la instalación ..."),
|
("Preparing for installation ...", ""),
|
||||||
("Show my cursor", "Mostrar mi cursor"),
|
("Show my cursor", ""),
|
||||||
("Scale custom", "Escala personalizada"),
|
("Scale custom", "Escala personalizada"),
|
||||||
("Custom scale slider", "Control deslizante de escala personalizada"),
|
("Custom scale slider", "Control deslizante de escala personalizada"),
|
||||||
("Decrease", "Disminuir"),
|
("Decrease", "Disminuir"),
|
||||||
("Increase", "Aumentar"),
|
("Increase", "Aumentar"),
|
||||||
("Preparing for installation ...", ""),
|
|
||||||
("Show my cursor", ""),
|
|
||||||
("Show virtual mouse", ""),
|
("Show virtual mouse", ""),
|
||||||
("Virtual mouse size", ""),
|
("Virtual mouse size", ""),
|
||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", "کوچک"),
|
("Small", "کوچک"),
|
||||||
("Large", "بزرگ"),
|
("Large", "بزرگ"),
|
||||||
("Show virtual joystick", "نمایش جویاستیک مجازی"),
|
("Show virtual joystick", "نمایش جویاستیک مجازی"),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", "Petite"),
|
("Small", "Petite"),
|
||||||
("Large", "Grande"),
|
("Large", "Grande"),
|
||||||
("Show virtual joystick", "Afficher le joystick virtuel"),
|
("Show virtual joystick", "Afficher le joystick virtuel"),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -550,8 +550,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Open in new window", "Megnyitás új ablakban"),
|
("Open in new window", "Megnyitás új ablakban"),
|
||||||
("Show displays as individual windows", "Kijelzők megjelenítése egyedi ablakokként"),
|
("Show displays as individual windows", "Kijelzők megjelenítése egyedi ablakokként"),
|
||||||
("Use all my displays for the remote session", "Az összes kijelzőm használata a távoli munkamenethez"),
|
("Use all my displays for the remote session", "Az összes kijelzőm használata a távoli munkamenethez"),
|
||||||
("selinux_tip", "A SELinux engedélyezve van az eszközén, ami azt okozhatja, hogy a RustDesk nem fut megfelelően, mint ellenőrzött
|
("selinux_tip", "A SELinux engedélyezve van az eszközén, ami azt okozhatja, hogy a RustDesk nem fut megfelelően, mint ellenőrzött."),
|
||||||
."),
|
|
||||||
("Change view", "Nézet módosítása"),
|
("Change view", "Nézet módosítása"),
|
||||||
("Big tiles", "Nagy csempék"),
|
("Big tiles", "Nagy csempék"),
|
||||||
("Small tiles", "Kis csempék"),
|
("Small tiles", "Kis csempék"),
|
||||||
@@ -710,16 +709,17 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Supported only in the installed version.", "Csak a telepített változatban támogatott."),
|
("Supported only in the installed version.", "Csak a telepített változatban támogatott."),
|
||||||
("elevation_username_tip", "Felhasználónév vagy tartománynév megadása\\felhasználónév"),
|
("elevation_username_tip", "Felhasználónév vagy tartománynév megadása\\felhasználónév"),
|
||||||
("Preparing for installation ...", "Felkészülés a telepítésre ..."),
|
("Preparing for installation ...", "Felkészülés a telepítésre ..."),
|
||||||
("Show my cursor", "Kurzor megjelenítése"),
|
("Show my cursor", ""),
|
||||||
("Scale custom", "Egyéni méretarány"),
|
("Scale custom", "Egyéni méretarány"),
|
||||||
("Custom scale slider", "Egyéni méretarány-csúszka"),
|
("Custom scale slider", "Egyéni méretarány-csúszka"),
|
||||||
("Decrease", "Csökkentés"),
|
("Decrease", "Csökkentés"),
|
||||||
("Increase", "Növelés"),
|
("Increase", "Növelés"),
|
||||||
("Show my cursor", ""),
|
|
||||||
("Show virtual mouse", ""),
|
("Show virtual mouse", ""),
|
||||||
("Virtual mouse size", ""),
|
("Virtual mouse size", ""),
|
||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", "Piccola"),
|
("Small", "Piccola"),
|
||||||
("Large", "Grande"),
|
("Large", "Grande"),
|
||||||
("Show virtual joystick", "Visualizza joystick virtuale"),
|
("Show virtual joystick", "Visualizza joystick virtuale"),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("ID Server", "認証サーバー"),
|
("ID Server", "認証サーバー"),
|
||||||
("Relay Server", "中継サーバー"),
|
("Relay Server", "中継サーバー"),
|
||||||
("API Server", "API サーバー"),
|
("API Server", "API サーバー"),
|
||||||
("Key", "キー"),
|
|
||||||
("invalid_http", "http:// または https:// から始まる必要があります。"),
|
("invalid_http", "http:// または https:// から始まる必要があります。"),
|
||||||
("Invalid IP", "無効な IP"),
|
("Invalid IP", "無効な IP"),
|
||||||
("Invalid format", "無効な形式"),
|
("Invalid format", "無効な形式"),
|
||||||
@@ -710,16 +709,17 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Supported only in the installed version.", "インストールされたバージョンでのみサポートされます。"),
|
("Supported only in the installed version.", "インストールされたバージョンでのみサポートされます。"),
|
||||||
("elevation_username_tip", "ユーザー名またはドメインのユーザー名を入力してください。"),
|
("elevation_username_tip", "ユーザー名またはドメインのユーザー名を入力してください。"),
|
||||||
("Preparing for installation ...", "インストールの準備中です..."),
|
("Preparing for installation ...", "インストールの準備中です..."),
|
||||||
("Show my cursor", "自分のカーソルを表示"),
|
("Show my cursor", "自分のカーソルを表示する"),
|
||||||
("Scale custom", "カスタムスケーリング"),
|
("Scale custom", "カスタムスケーリング"),
|
||||||
("Custom scale slider", "カスタムスケールのスライダー"),
|
("Custom scale slider", "カスタムスケールのスライダー"),
|
||||||
("Decrease", "縮小"),
|
("Decrease", "縮小"),
|
||||||
("Increase", "拡大"),
|
("Increase", "拡大"),
|
||||||
("Show my cursor", "自分のカーソルを表示する"),
|
|
||||||
("Show virtual mouse", "仮想マウスを表示する"),
|
("Show virtual mouse", "仮想マウスを表示する"),
|
||||||
("Virtual mouse size", "仮想マウスのサイズ"),
|
("Virtual mouse size", "仮想マウスのサイズ"),
|
||||||
("Small", "小"),
|
("Small", "小"),
|
||||||
("Large", "中"),
|
("Large", "中"),
|
||||||
("Show virtual joystick", "仮想ジョイスティックを表示する"),
|
("Show virtual joystick", "仮想ジョイスティックを表示する"),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", "작게"),
|
("Small", "작게"),
|
||||||
("Large", "크게"),
|
("Large", "크게"),
|
||||||
("Show virtual joystick", "가상 조이스틱 표시"),
|
("Show virtual joystick", "가상 조이스틱 표시"),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -719,5 +719,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Small", ""),
|
("Small", ""),
|
||||||
("Large", ""),
|
("Large", ""),
|
||||||
("Show virtual joystick", ""),
|
("Show virtual joystick", ""),
|
||||||
|
("Edit note", ""),
|
||||||
|
("Alias", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user