refactor remote menubar with MenuBar for submenu
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
parent
5b8e51d6b9
commit
4338451f6f
@ -1814,3 +1814,19 @@ class DraggableNeverScrollableScrollPhysics extends ScrollPhysics {
|
|||||||
@override
|
@override
|
||||||
bool get allowImplicitScrolling => false;
|
bool get allowImplicitScrolling => false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget futureBuilder(
|
||||||
|
{required Future? future, required Widget Function(dynamic data) hasData}) {
|
||||||
|
return FutureBuilder(
|
||||||
|
future: future,
|
||||||
|
builder: (BuildContext context, AsyncSnapshot snapshot) {
|
||||||
|
if (snapshot.hasData) {
|
||||||
|
return hasData(snapshot.data!);
|
||||||
|
} else {
|
||||||
|
if (snapshot.hasError) {
|
||||||
|
debugPrint(snapshot.error.toString());
|
||||||
|
}
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@ -319,7 +319,7 @@ class _GeneralState extends State<_General> {
|
|||||||
bind.mainSetOption(key: 'audio-input', value: device);
|
bind.mainSetOption(key: 'audio-input', value: device);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _futureBuilder(future: () async {
|
return futureBuilder(future: () async {
|
||||||
List<String> devices = (await bind.mainGetSoundInputs()).toList();
|
List<String> devices = (await bind.mainGetSoundInputs()).toList();
|
||||||
if (Platform.isWindows) {
|
if (Platform.isWindows) {
|
||||||
devices.insert(0, 'System Sound');
|
devices.insert(0, 'System Sound');
|
||||||
@ -346,7 +346,7 @@ class _GeneralState extends State<_General> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget record(BuildContext context) {
|
Widget record(BuildContext context) {
|
||||||
return _futureBuilder(future: () async {
|
return futureBuilder(future: () async {
|
||||||
String customDirectory =
|
String customDirectory =
|
||||||
await bind.mainGetOption(key: 'video-save-directory');
|
await bind.mainGetOption(key: 'video-save-directory');
|
||||||
String defaultDirectory = await bind.mainDefaultVideoSaveDirectory();
|
String defaultDirectory = await bind.mainDefaultVideoSaveDirectory();
|
||||||
@ -399,7 +399,7 @@ class _GeneralState extends State<_General> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget language() {
|
Widget language() {
|
||||||
return _futureBuilder(future: () async {
|
return futureBuilder(future: () async {
|
||||||
String langs = await bind.mainGetLangs();
|
String langs = await bind.mainGetLangs();
|
||||||
String lang = bind.mainGetLocalOption(key: kCommConfKeyLang);
|
String lang = bind.mainGetLocalOption(key: kCommConfKeyLang);
|
||||||
return {'langs': langs, 'lang': lang};
|
return {'langs': langs, 'lang': lang};
|
||||||
@ -487,7 +487,7 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin {
|
|||||||
|
|
||||||
Widget _permissions(context, bool stopService) {
|
Widget _permissions(context, bool stopService) {
|
||||||
bool enabled = !locked;
|
bool enabled = !locked;
|
||||||
return _futureBuilder(future: () async {
|
return futureBuilder(future: () async {
|
||||||
return await bind.mainGetOption(key: 'access-mode');
|
return await bind.mainGetOption(key: 'access-mode');
|
||||||
}(), hasData: (data) {
|
}(), hasData: (data) {
|
||||||
String accessMode = data! as String;
|
String accessMode = data! as String;
|
||||||
@ -744,7 +744,7 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin {
|
|||||||
return [
|
return [
|
||||||
_OptionCheckBox(context, 'Enable Direct IP Access', 'direct-server',
|
_OptionCheckBox(context, 'Enable Direct IP Access', 'direct-server',
|
||||||
update: update, enabled: !locked),
|
update: update, enabled: !locked),
|
||||||
_futureBuilder(
|
futureBuilder(
|
||||||
future: () async {
|
future: () async {
|
||||||
String enabled = await bind.mainGetOption(key: 'direct-server');
|
String enabled = await bind.mainGetOption(key: 'direct-server');
|
||||||
String port = await bind.mainGetOption(key: 'direct-access-port');
|
String port = await bind.mainGetOption(key: 'direct-access-port');
|
||||||
@ -805,7 +805,7 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin {
|
|||||||
|
|
||||||
Widget whitelist() {
|
Widget whitelist() {
|
||||||
bool enabled = !locked;
|
bool enabled = !locked;
|
||||||
return _futureBuilder(future: () async {
|
return futureBuilder(future: () async {
|
||||||
return await bind.mainGetOption(key: 'whitelist');
|
return await bind.mainGetOption(key: 'whitelist');
|
||||||
}(), hasData: (data) {
|
}(), hasData: (data) {
|
||||||
RxBool hasWhitelist = (data as String).isNotEmpty.obs;
|
RxBool hasWhitelist = (data as String).isNotEmpty.obs;
|
||||||
@ -931,7 +931,7 @@ class _NetworkState extends State<_Network> with AutomaticKeepAliveClientMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
server(bool enabled) {
|
server(bool enabled) {
|
||||||
return _futureBuilder(future: () async {
|
return futureBuilder(future: () async {
|
||||||
return await bind.mainGetOptions();
|
return await bind.mainGetOptions();
|
||||||
}(), hasData: (data) {
|
}(), hasData: (data) {
|
||||||
// Setting page is not modal, oldOptions should only be used when getting options, never when setting.
|
// Setting page is not modal, oldOptions should only be used when getting options, never when setting.
|
||||||
@ -1366,7 +1366,7 @@ class _About extends StatefulWidget {
|
|||||||
class _AboutState extends State<_About> {
|
class _AboutState extends State<_About> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return _futureBuilder(future: () async {
|
return futureBuilder(future: () async {
|
||||||
final license = await bind.mainGetLicense();
|
final license = await bind.mainGetLicense();
|
||||||
final version = await bind.mainGetVersion();
|
final version = await bind.mainGetVersion();
|
||||||
final buildDate = await bind.mainGetBuildDate();
|
final buildDate = await bind.mainGetBuildDate();
|
||||||
@ -1500,7 +1500,7 @@ Widget _OptionCheckBox(BuildContext context, String label, String key,
|
|||||||
bool enabled = true,
|
bool enabled = true,
|
||||||
Icon? checkedIcon,
|
Icon? checkedIcon,
|
||||||
bool? fakeValue}) {
|
bool? fakeValue}) {
|
||||||
return _futureBuilder(
|
return futureBuilder(
|
||||||
future: bind.mainGetOption(key: key),
|
future: bind.mainGetOption(key: key),
|
||||||
hasData: (data) {
|
hasData: (data) {
|
||||||
bool value = option2bool(key, data.toString());
|
bool value = option2bool(key, data.toString());
|
||||||
@ -1633,22 +1633,6 @@ Widget _SubLabeledWidget(BuildContext context, String label, Widget child,
|
|||||||
).marginOnly(left: _kContentHSubMargin);
|
).marginOnly(left: _kContentHSubMargin);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _futureBuilder(
|
|
||||||
{required Future? future, required Widget Function(dynamic data) hasData}) {
|
|
||||||
return FutureBuilder(
|
|
||||||
future: future,
|
|
||||||
builder: (BuildContext context, AsyncSnapshot snapshot) {
|
|
||||||
if (snapshot.hasData) {
|
|
||||||
return hasData(snapshot.data!);
|
|
||||||
} else {
|
|
||||||
if (snapshot.hasError) {
|
|
||||||
debugPrint(snapshot.error.toString());
|
|
||||||
}
|
|
||||||
return Container();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _lock(
|
Widget _lock(
|
||||||
bool locked,
|
bool locked,
|
||||||
String label,
|
String label,
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", "停止语音通话"),
|
("Stop voice call", "停止语音通话"),
|
||||||
("relay_hint_tip", "可能无法直连,可以尝试中继连接。\n另外,如果想直接使用中继连接,可以在 ID 后面添加/r,或者在卡片选项里选择强制走中继连接。"),
|
("relay_hint_tip", "可能无法直连,可以尝试中继连接。\n另外,如果想直接使用中继连接,可以在 ID 后面添加/r,或者在卡片选项里选择强制走中继连接。"),
|
||||||
("Reconnect", "重连"),
|
("Reconnect", "重连"),
|
||||||
|
("Codec", "编解码"),
|
||||||
|
("Resolution", "分辨率"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", "Sprachanruf beenden"),
|
("Stop voice call", "Sprachanruf beenden"),
|
||||||
("relay_hint_tip", "Wenn eine direkte Verbindung nicht möglich ist, können Sie versuchen, eine Verbindung über einen Relay-Server herzustellen. \nWenn Sie eine Relay-Verbindung beim ersten Versuch herstellen möchten, können Sie das Suffix \"/r\" an die ID anhängen oder die Option \"Immer über Relay-Server verbinden\" auf der Gegenstelle auswählen."),
|
("relay_hint_tip", "Wenn eine direkte Verbindung nicht möglich ist, können Sie versuchen, eine Verbindung über einen Relay-Server herzustellen. \nWenn Sie eine Relay-Verbindung beim ersten Versuch herstellen möchten, können Sie das Suffix \"/r\" an die ID anhängen oder die Option \"Immer über Relay-Server verbinden\" auf der Gegenstelle auswählen."),
|
||||||
("Reconnect", "Erneut verbinden"),
|
("Reconnect", "Erneut verbinden"),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", "Detener llamada de voz"),
|
("Stop voice call", "Detener llamada de voz"),
|
||||||
("relay_hint_tip", "Puede que no sea posible conectar directamente. Puedes tratar de conectar a través de relay. \nAdicionalmente, si quieres usar relay en el primer intento, puedes añadir el sufijo \"/r\" a la ID o seleccionar la opción \"Conectar siempre a través de relay\" en la tarjeta del par."),
|
("relay_hint_tip", "Puede que no sea posible conectar directamente. Puedes tratar de conectar a través de relay. \nAdicionalmente, si quieres usar relay en el primer intento, puedes añadir el sufijo \"/r\" a la ID o seleccionar la opción \"Conectar siempre a través de relay\" en la tarjeta del par."),
|
||||||
("Reconnect", "Reconectar"),
|
("Reconnect", "Reconectar"),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", "توقف تماس صوتی"),
|
("Stop voice call", "توقف تماس صوتی"),
|
||||||
("relay_hint_tip", " را به شناسه اضافه کنید یا گزینه \"همیشه از طریق رله متصل شوید\" را در کارت همتا انتخاب کنید. همچنین، اگر میخواهید فوراً از سرور رله استفاده کنید، میتوانید پسوند \"/r\".\n اتصال مستقیم ممکن است امکان پذیر نباشد. در این صورت می توانید سعی کنید از طریق سرور رله متصل شوید"),
|
("relay_hint_tip", " را به شناسه اضافه کنید یا گزینه \"همیشه از طریق رله متصل شوید\" را در کارت همتا انتخاب کنید. همچنین، اگر میخواهید فوراً از سرور رله استفاده کنید، میتوانید پسوند \"/r\".\n اتصال مستقیم ممکن است امکان پذیر نباشد. در این صورت می توانید سعی کنید از طریق سرور رله متصل شوید"),
|
||||||
("Reconnect", "اتصال مجدد"),
|
("Reconnect", "اتصال مجدد"),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", "Interrompi la chiamata vocale"),
|
("Stop voice call", "Interrompi la chiamata vocale"),
|
||||||
("relay_hint_tip", "Se non è possibile connettersi direttamente, si può provare a farlo tramite relay.\nInoltre, se si desidera utilizzare il relay al primo tentativo, è possibile aggiungere il suffisso \"/r\" all'ID o selezionare l'opzione \"Collegati sempre tramite relay\" nella scheda peer."),
|
("relay_hint_tip", "Se non è possibile connettersi direttamente, si può provare a farlo tramite relay.\nInoltre, se si desidera utilizzare il relay al primo tentativo, è possibile aggiungere il suffisso \"/r\" all'ID o selezionare l'opzione \"Collegati sempre tramite relay\" nella scheda peer."),
|
||||||
("Reconnect", "Riconnetti"),
|
("Reconnect", "Riconnetti"),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", "Stop spraakoproep"),
|
("Stop voice call", "Stop spraakoproep"),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", "Завершить голосовой вызов"),
|
("Stop voice call", "Завершить голосовой вызов"),
|
||||||
("relay_hint_tip", "Прямое подключение может оказаться невозможным. В этом случае можно попытаться подключиться через сервер ретрансляции. \nКроме того, если вы хотите сразу использовать сервер ретрансляции, можно добавить к ID суффикс \"/r\" или включить \"Всегда подключаться через ретранслятор\" в настройках удалённого узла."),
|
("relay_hint_tip", "Прямое подключение может оказаться невозможным. В этом случае можно попытаться подключиться через сервер ретрансляции. \nКроме того, если вы хотите сразу использовать сервер ретрансляции, можно добавить к ID суффикс \"/r\" или включить \"Всегда подключаться через ретранслятор\" в настройках удалённого узла."),
|
||||||
("Reconnect", "Переподключить"),
|
("Reconnect", "Переподключить"),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", "停止語音聊天"),
|
("Stop voice call", "停止語音聊天"),
|
||||||
("relay_hint_tip", "可能無法直連,可以嘗試中繼連接。 \n另外,如果想直接使用中繼連接,可以在ID後面添加/r,或者在卡片選項裡選擇強制走中繼連接。"),
|
("relay_hint_tip", "可能無法直連,可以嘗試中繼連接。 \n另外,如果想直接使用中繼連接,可以在ID後面添加/r,或者在卡片選項裡選擇強制走中繼連接。"),
|
||||||
("Reconnect", "重連"),
|
("Reconnect", "重連"),
|
||||||
|
("Codec", "編解碼"),
|
||||||
|
("Resolution", "分辨率"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -454,5 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("Stop voice call", ""),
|
("Stop voice call", ""),
|
||||||
("relay_hint_tip", ""),
|
("relay_hint_tip", ""),
|
||||||
("Reconnect", ""),
|
("Reconnect", ""),
|
||||||
|
("Codec", ""),
|
||||||
|
("Resolution", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user