mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
opt.: global server logo url & new {BRIGHT} param
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -60,3 +60,5 @@ linux.AppDir
|
|||||||
ServerBox-x86_64.AppImage
|
ServerBox-x86_64.AppImage
|
||||||
|
|
||||||
untranlated.json
|
untranlated.json
|
||||||
|
|
||||||
|
.vscode/settings.json
|
||||||
|
|||||||
@@ -274,6 +274,9 @@ class SettingStore extends PersistentStore {
|
|||||||
/// ssh page
|
/// ssh page
|
||||||
late final sshWakeLock = property('sshWakeLock', true);
|
late final sshWakeLock = property('sshWakeLock', true);
|
||||||
|
|
||||||
|
/// fmt: https://example.com/{DIST}-{BRIGHT}.png
|
||||||
|
late final serverLogoUrl = property('serverLogoUrl', '');
|
||||||
|
|
||||||
// Never show these settings for users
|
// Never show these settings for users
|
||||||
//
|
//
|
||||||
// ------BEGIN------
|
// ------BEGIN------
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "Domain eingeben",
|
"inputDomainHere": "Domain eingeben",
|
||||||
"install": "install",
|
"install": "install",
|
||||||
"installDockerWithUrl": "Bitte installiere docker zuerst. https://docs.docker.com/engine/install",
|
"installDockerWithUrl": "Bitte installiere docker zuerst. https://docs.docker.com/engine/install",
|
||||||
|
"invalid": "Ungültig",
|
||||||
"invalidJson": "Ungültige JSON",
|
"invalidJson": "Ungültige JSON",
|
||||||
"invalidVersion": "Ungültige Version",
|
"invalidVersion": "Ungültige Version",
|
||||||
"invalidVersionHelp": "Bitte stelle sicher, dass Docker korrekt installiert ist oder dass du eine nicht selbstkompilierte Version verwendest. Wenn du die oben genannten Probleme nicht hast, melde bitte einen Fehler auf {url}.",
|
"invalidVersionHelp": "Bitte stelle sicher, dass Docker korrekt installiert ist oder dass du eine nicht selbstkompilierte Version verwendest. Wenn du die oben genannten Probleme nicht hast, melde bitte einen Fehler auf {url}.",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "Input Domain here",
|
"inputDomainHere": "Input Domain here",
|
||||||
"install": "install",
|
"install": "install",
|
||||||
"installDockerWithUrl": "Please https://docs.docker.com/engine/install docker first.",
|
"installDockerWithUrl": "Please https://docs.docker.com/engine/install docker first.",
|
||||||
|
"invalid": "Invalid",
|
||||||
"invalidJson": "Invalid JSON",
|
"invalidJson": "Invalid JSON",
|
||||||
"invalidVersion": "Invalid version",
|
"invalidVersion": "Invalid version",
|
||||||
"invalidVersionHelp": "Please make sure that docker is installed correctly, or that you are using a non-self-compiled version. If you don't have the above issues, please submit an issue on {url}.",
|
"invalidVersionHelp": "Please make sure that docker is installed correctly, or that you are using a non-self-compiled version. If you don't have the above issues, please submit an issue on {url}.",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "Introduce el dominio aquí",
|
"inputDomainHere": "Introduce el dominio aquí",
|
||||||
"install": "Instalar",
|
"install": "Instalar",
|
||||||
"installDockerWithUrl": "Por favor instala Docker primero desde https://docs.docker.com/engine/install",
|
"installDockerWithUrl": "Por favor instala Docker primero desde https://docs.docker.com/engine/install",
|
||||||
|
"invalid": "Inválido",
|
||||||
"invalidJson": "JSON inválido",
|
"invalidJson": "JSON inválido",
|
||||||
"invalidVersion": "Versión no soportada",
|
"invalidVersion": "Versión no soportada",
|
||||||
"invalidVersionHelp": "Por favor asegúrate de haber instalado Docker correctamente o que no estés usando una versión compilada por ti mismo. Si no tienes estos problemas, informa en {url}.",
|
"invalidVersionHelp": "Por favor asegúrate de haber instalado Docker correctamente o que no estés usando una versión compilada por ti mismo. Si no tienes estos problemas, informa en {url}.",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "Saisissez le domaine ici",
|
"inputDomainHere": "Saisissez le domaine ici",
|
||||||
"install": "installer",
|
"install": "installer",
|
||||||
"installDockerWithUrl": "Veuillez d'abord installer https://docs.docker.com/engine/install docker.",
|
"installDockerWithUrl": "Veuillez d'abord installer https://docs.docker.com/engine/install docker.",
|
||||||
|
"invalid": "Invalide",
|
||||||
"invalidJson": "JSON invalide",
|
"invalidJson": "JSON invalide",
|
||||||
"invalidVersion": "Version invalide",
|
"invalidVersion": "Version invalide",
|
||||||
"invalidVersionHelp": "Veuillez vous assurer que docker est installé correctement, ou que vous n'utilisez pas une version auto-compilée. Si vous n'avez pas les problèmes ci-dessus, veuillez soumettre un problème sur {url}.",
|
"invalidVersionHelp": "Veuillez vous assurer que docker est installé correctement, ou que vous n'utilisez pas une version auto-compilée. Si vous n'avez pas les problèmes ci-dessus, veuillez soumettre un problème sur {url}.",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "Input domain di sini",
|
"inputDomainHere": "Input domain di sini",
|
||||||
"install": "Install",
|
"install": "Install",
|
||||||
"installDockerWithUrl": "Silakan https://docs.docker.com/engine/install Docker pertama.",
|
"installDockerWithUrl": "Silakan https://docs.docker.com/engine/install Docker pertama.",
|
||||||
|
"invalid": "Tidak valid",
|
||||||
"invalidJson": "JSON tidak valid",
|
"invalidJson": "JSON tidak valid",
|
||||||
"invalidVersion": "Versi tidak valid",
|
"invalidVersion": "Versi tidak valid",
|
||||||
"invalidVersionHelp": "Pastikan Docker diinstal dengan benar, atau Anda menggunakan versi yang tidak dikompilasi. Jika Anda tidak memiliki masalah di atas, silakan kirimkan masalah pada {url}.",
|
"invalidVersionHelp": "Pastikan Docker diinstal dengan benar, atau Anda menggunakan versi yang tidak dikompilasi. Jika Anda tidak memiliki masalah di atas, silakan kirimkan masalah pada {url}.",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "ここにドメインを入力",
|
"inputDomainHere": "ここにドメインを入力",
|
||||||
"install": "インストール",
|
"install": "インストール",
|
||||||
"installDockerWithUrl": "最初に https://docs.docker.com/engine/install dockerをインストールしてください",
|
"installDockerWithUrl": "最初に https://docs.docker.com/engine/install dockerをインストールしてください",
|
||||||
|
"invalid": "無効",
|
||||||
"invalidJson": "無効なJSON",
|
"invalidJson": "無効なJSON",
|
||||||
"invalidVersion": "サポートされていないバージョン",
|
"invalidVersion": "サポートされていないバージョン",
|
||||||
"invalidVersionHelp": "dockerが正しくインストールされていること、または自己コンパイルされたバージョンを使用していないことを確認してください。問題がない場合は、{url}で問題を報告してください。",
|
"invalidVersionHelp": "dockerが正しくインストールされていること、または自己コンパイルされたバージョンを使用していないことを確認してください。問題がない場合は、{url}で問題を報告してください。",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "Voer hier domein in",
|
"inputDomainHere": "Voer hier domein in",
|
||||||
"install": "Installeren",
|
"install": "Installeren",
|
||||||
"installDockerWithUrl": "Installeer eerst docker via https://docs.docker.com/engine/install.",
|
"installDockerWithUrl": "Installeer eerst docker via https://docs.docker.com/engine/install.",
|
||||||
|
"invalid": "Ongeldig",
|
||||||
"invalidJson": "Ongeldige JSON",
|
"invalidJson": "Ongeldige JSON",
|
||||||
"invalidVersion": "Ongeldige versie",
|
"invalidVersion": "Ongeldige versie",
|
||||||
"invalidVersionHelp": "Zorg ervoor dat docker correct is geïnstalleerd, of dat u een niet-zelf-gecompileerde versie gebruikt. Als dat niet het geval is, meld dan een probleem op {url}.",
|
"invalidVersionHelp": "Zorg ervoor dat docker correct is geïnstalleerd, of dat u een niet-zelf-gecompileerde versie gebruikt. Als dat niet het geval is, meld dan een probleem op {url}.",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "Insira o domínio aqui",
|
"inputDomainHere": "Insira o domínio aqui",
|
||||||
"install": "Instalar",
|
"install": "Instalar",
|
||||||
"installDockerWithUrl": "Por favor, instale o Docker primeiro em https://docs.docker.com/engine/install",
|
"installDockerWithUrl": "Por favor, instale o Docker primeiro em https://docs.docker.com/engine/install",
|
||||||
|
"invalid": "Inválido",
|
||||||
"invalidJson": "JSON inválido",
|
"invalidJson": "JSON inválido",
|
||||||
"invalidVersion": "Versão não suportada",
|
"invalidVersion": "Versão não suportada",
|
||||||
"invalidVersionHelp": "Por favor, assegure que o Docker está corretamente instalado, ou que não está usando uma versão compilada por si mesmo. Se não houver problemas, por favor, reporte em {url}.",
|
"invalidVersionHelp": "Por favor, assegure que o Docker está corretamente instalado, ou que não está usando uma versão compilada por si mesmo. Se não houver problemas, por favor, reporte em {url}.",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "введите домен здесь",
|
"inputDomainHere": "введите домен здесь",
|
||||||
"install": "установить",
|
"install": "установить",
|
||||||
"installDockerWithUrl": "Пожалуйста, сначала установите Docker по адресу https://docs.docker.com/engine/install",
|
"installDockerWithUrl": "Пожалуйста, сначала установите Docker по адресу https://docs.docker.com/engine/install",
|
||||||
|
"invalid": "Недействительный",
|
||||||
"invalidJson": "неверный JSON",
|
"invalidJson": "неверный JSON",
|
||||||
"invalidVersion": "неподдерживаемая версия",
|
"invalidVersion": "неподдерживаемая версия",
|
||||||
"invalidVersionHelp": "Пожалуйста, убедитесь, что docker установлен корректно, или что используется не собственно собранная версия. Если проблема не в этом, пожалуйста, отправьте отчет о проблеме на {url}.",
|
"invalidVersionHelp": "Пожалуйста, убедитесь, что docker установлен корректно, или что используется не собственно собранная версия. Если проблема не в этом, пожалуйста, отправьте отчет о проблеме на {url}.",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "在这里输入域名",
|
"inputDomainHere": "在这里输入域名",
|
||||||
"install": "安装",
|
"install": "安装",
|
||||||
"installDockerWithUrl": "请先 https://docs.docker.com/engine/install docker",
|
"installDockerWithUrl": "请先 https://docs.docker.com/engine/install docker",
|
||||||
|
"invalid": "无效",
|
||||||
"invalidJson": "无效的 JSON",
|
"invalidJson": "无效的 JSON",
|
||||||
"invalidVersion": "不支持的版本",
|
"invalidVersion": "不支持的版本",
|
||||||
"invalidVersionHelp": "请确保正确安装了docker,或者使用的非自编译版本。如果没有以上问题,请在 {url} 提交问题。",
|
"invalidVersionHelp": "请确保正确安装了docker,或者使用的非自编译版本。如果没有以上问题,请在 {url} 提交问题。",
|
||||||
|
|||||||
@@ -136,6 +136,7 @@
|
|||||||
"inputDomainHere": "在這裡輸入域名",
|
"inputDomainHere": "在這裡輸入域名",
|
||||||
"install": "安裝",
|
"install": "安裝",
|
||||||
"installDockerWithUrl": "請先 https://docs.docker.com/engine/install docker",
|
"installDockerWithUrl": "請先 https://docs.docker.com/engine/install docker",
|
||||||
|
"invalid": "無效",
|
||||||
"invalidJson": "無效的 JSON",
|
"invalidJson": "無效的 JSON",
|
||||||
"invalidVersion": "不支持的版本",
|
"invalidVersion": "不支持的版本",
|
||||||
"invalidVersionHelp": "請確保正確安裝了docker,或者使用的非自編譯版本。如果沒有以上問題,請在 {url} 提交問題。",
|
"invalidVersionHelp": "請確保正確安裝了docker,或者使用的非自編譯版本。如果沒有以上問題,請在 {url} 提交問題。",
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:toolbox/core/extension/context/common.dart';
|
|||||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||||
import 'package:toolbox/core/extension/context/locale.dart';
|
import 'package:toolbox/core/extension/context/locale.dart';
|
||||||
import 'package:toolbox/core/extension/listx.dart';
|
import 'package:toolbox/core/extension/listx.dart';
|
||||||
|
import 'package:toolbox/core/extension/stringx.dart';
|
||||||
import 'package:toolbox/data/model/app/server_detail_card.dart';
|
import 'package:toolbox/data/model/app/server_detail_card.dart';
|
||||||
import 'package:toolbox/data/model/app/shell_func.dart';
|
import 'package:toolbox/data/model/app/shell_func.dart';
|
||||||
import 'package:toolbox/data/model/server/battery.dart';
|
import 'package:toolbox/data/model/server/battery.dart';
|
||||||
@@ -104,7 +105,8 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
|||||||
|
|
||||||
Widget _buildMainPage(Server si) {
|
Widget _buildMainPage(Server si) {
|
||||||
final buildFuncs = !Stores.setting.moveOutServerTabFuncBtns.fetch();
|
final buildFuncs = !Stores.setting.moveOutServerTabFuncBtns.fetch();
|
||||||
final logoUrl = si.spi.custom?.logoUrl;
|
final logoUrl = si.spi.custom?.logoUrl ??
|
||||||
|
Stores.setting.serverLogoUrl.fetch().selfIfNotNullEmpty;
|
||||||
final buildLogo = logoUrl != null;
|
final buildLogo = logoUrl != null;
|
||||||
final children = [
|
final children = [
|
||||||
if (buildLogo)
|
if (buildLogo)
|
||||||
@@ -149,7 +151,9 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
|||||||
|
|
||||||
Widget _buildLogo(String logoUrl, Dist? dist) {
|
Widget _buildLogo(String logoUrl, Dist? dist) {
|
||||||
if (dist != null) {
|
if (dist != null) {
|
||||||
logoUrl = logoUrl.replaceFirst('{DIST}', dist.name);
|
logoUrl = logoUrl
|
||||||
|
.replaceFirst('{DIST}', dist.name)
|
||||||
|
.replaceFirst('{BRIGHT}', context.isDark ? 'dark' : 'light');
|
||||||
}
|
}
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 13),
|
padding: const EdgeInsets.symmetric(vertical: 13),
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
Widget _buildServer() {
|
Widget _buildServer() {
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
|
_buildServerLogoUrl(),
|
||||||
_buildServerFuncBtns(),
|
_buildServerFuncBtns(),
|
||||||
_buildNetViewType(),
|
_buildNetViewType(),
|
||||||
_buildServerSeq(),
|
_buildServerSeq(),
|
||||||
@@ -1147,4 +1148,50 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
trailing: StoreSwitch(prop: _setting.sshWakeLock),
|
trailing: StoreSwitch(prop: _setting.sshWakeLock),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildServerLogoUrl() {
|
||||||
|
void onSave(String url) {
|
||||||
|
if (url.isEmpty || !url.startsWith('http')) {
|
||||||
|
context.showRoundDialog(
|
||||||
|
title: Text(l10n.failed),
|
||||||
|
child: Text('${l10n.invalid} URL'),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => context.pop(),
|
||||||
|
child: Text(l10n.ok),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_setting.serverLogoUrl.put(url);
|
||||||
|
context.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ListTile(
|
||||||
|
title: Text('Logo ${l10n.addr}'),
|
||||||
|
subtitle: SimpleMarkdown(data: '${l10n.view} ${l10n.doc}'),
|
||||||
|
trailing: const Icon(Icons.keyboard_arrow_right),
|
||||||
|
onTap: () {
|
||||||
|
final ctrl =
|
||||||
|
TextEditingController(text: _setting.serverLogoUrl.fetch());
|
||||||
|
context.showRoundDialog(
|
||||||
|
title: Text('Logo ${l10n.addr}'),
|
||||||
|
child: Input(
|
||||||
|
controller: ctrl,
|
||||||
|
autoFocus: true,
|
||||||
|
hint: 'https://example.com/logo.png',
|
||||||
|
icon: Icons.link,
|
||||||
|
onSubmitted: onSave,
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => onSave(ctrl.text),
|
||||||
|
child: Text(l10n.ok),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user