opt.: global server logo url & new {BRIGHT} param

This commit is contained in:
lollipopkit
2024-05-12 15:17:59 +08:00
parent 6b5f98cb2d
commit 248430e5b0
15 changed files with 69 additions and 2 deletions

2
.gitignore vendored
View File

@@ -60,3 +60,5 @@ linux.AppDir
ServerBox-x86_64.AppImage
untranlated.json
.vscode/settings.json

View File

@@ -274,6 +274,9 @@ class SettingStore extends PersistentStore {
/// ssh page
late final sshWakeLock = property('sshWakeLock', true);
/// fmt: https://example.com/{DIST}-{BRIGHT}.png
late final serverLogoUrl = property('serverLogoUrl', '');
// Never show these settings for users
//
// ------BEGIN------

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "Domain eingeben",
"install": "install",
"installDockerWithUrl": "Bitte installiere docker zuerst. https://docs.docker.com/engine/install",
"invalid": "Ungültig",
"invalidJson": "Ungültige JSON",
"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}.",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "Input Domain here",
"install": "install",
"installDockerWithUrl": "Please https://docs.docker.com/engine/install docker first.",
"invalid": "Invalid",
"invalidJson": "Invalid JSON",
"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}.",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "Introduce el dominio aquí",
"install": "Instalar",
"installDockerWithUrl": "Por favor instala Docker primero desde https://docs.docker.com/engine/install",
"invalid": "Inválido",
"invalidJson": "JSON inválido",
"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}.",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "Saisissez le domaine ici",
"install": "installer",
"installDockerWithUrl": "Veuillez d'abord installer https://docs.docker.com/engine/install docker.",
"invalid": "Invalide",
"invalidJson": "JSON 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}.",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "Input domain di sini",
"install": "Install",
"installDockerWithUrl": "Silakan https://docs.docker.com/engine/install Docker pertama.",
"invalid": "Tidak valid",
"invalidJson": "JSON 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}.",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "ここにドメインを入力",
"install": "インストール",
"installDockerWithUrl": "最初に https://docs.docker.com/engine/install dockerをインストールしてください",
"invalid": "無効",
"invalidJson": "無効なJSON",
"invalidVersion": "サポートされていないバージョン",
"invalidVersionHelp": "dockerが正しくインストールされていること、または自己コンパイルされたバージョンを使用していないことを確認してください。問題がない場合は、{url}で問題を報告してください。",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "Voer hier domein in",
"install": "Installeren",
"installDockerWithUrl": "Installeer eerst docker via https://docs.docker.com/engine/install.",
"invalid": "Ongeldig",
"invalidJson": "Ongeldige JSON",
"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}.",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "Insira o domínio aqui",
"install": "Instalar",
"installDockerWithUrl": "Por favor, instale o Docker primeiro em https://docs.docker.com/engine/install",
"invalid": "Inválido",
"invalidJson": "JSON inválido",
"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}.",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "введите домен здесь",
"install": "установить",
"installDockerWithUrl": "Пожалуйста, сначала установите Docker по адресу https://docs.docker.com/engine/install",
"invalid": "Недействительный",
"invalidJson": "неверный JSON",
"invalidVersion": "неподдерживаемая версия",
"invalidVersionHelp": "Пожалуйста, убедитесь, что docker установлен корректно, или что используется не собственно собранная версия. Если проблема не в этом, пожалуйста, отправьте отчет о проблеме на {url}.",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "在这里输入域名",
"install": "安装",
"installDockerWithUrl": "请先 https://docs.docker.com/engine/install docker",
"invalid": "无效",
"invalidJson": "无效的 JSON",
"invalidVersion": "不支持的版本",
"invalidVersionHelp": "请确保正确安装了docker或者使用的非自编译版本。如果没有以上问题请在 {url} 提交问题。",

View File

@@ -136,6 +136,7 @@
"inputDomainHere": "在這裡輸入域名",
"install": "安裝",
"installDockerWithUrl": "請先 https://docs.docker.com/engine/install docker",
"invalid": "無效",
"invalidJson": "無效的 JSON",
"invalidVersion": "不支持的版本",
"invalidVersionHelp": "請確保正確安裝了docker或者使用的非自編譯版本。如果沒有以上問題請在 {url} 提交問題。",

View File

@@ -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/locale.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/shell_func.dart';
import 'package:toolbox/data/model/server/battery.dart';
@@ -104,7 +105,8 @@ class _ServerDetailPageState extends State<ServerDetailPage>
Widget _buildMainPage(Server si) {
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 children = [
if (buildLogo)
@@ -149,7 +151,9 @@ class _ServerDetailPageState extends State<ServerDetailPage>
Widget _buildLogo(String logoUrl, Dist? dist) {
if (dist != null) {
logoUrl = logoUrl.replaceFirst('{DIST}', dist.name);
logoUrl = logoUrl
.replaceFirst('{DIST}', dist.name)
.replaceFirst('{BRIGHT}', context.isDark ? 'dark' : 'light');
}
return Padding(
padding: const EdgeInsets.symmetric(vertical: 13),

View File

@@ -151,6 +151,7 @@ class _SettingPageState extends State<SettingPage> {
Widget _buildServer() {
return Column(
children: [
_buildServerLogoUrl(),
_buildServerFuncBtns(),
_buildNetViewType(),
_buildServerSeq(),
@@ -1147,4 +1148,50 @@ class _SettingPageState extends State<SettingPage> {
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),
),
],
);
},
);
}
}