From 6e4cc8eb280f8e135d95d4356307544027869f26 Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Thu, 7 Sep 2023 19:17:49 +0800 Subject: [PATCH] new: `note` of `Snippet` --- .dart_tool/flutter_gen/gen_l10n/l10n.dart | 6 ++++ .dart_tool/flutter_gen/gen_l10n/l10n_de.dart | 3 ++ .dart_tool/flutter_gen/gen_l10n/l10n_en.dart | 3 ++ .dart_tool/flutter_gen/gen_l10n/l10n_id.dart | 3 ++ .dart_tool/flutter_gen/gen_l10n/l10n_zh.dart | 6 ++++ lib/data/model/server/snippet.dart | 22 ++++++++++--- lib/data/model/server/snippet.g.dart | 13 +++++--- lib/data/store/setting.dart | 1 + lib/l10n/app_de.arb | 1 + lib/l10n/app_en.arb | 1 + lib/l10n/app_id.arb | 1 + lib/l10n/app_zh.arb | 1 + lib/l10n/app_zh_tw.arb | 1 + lib/view/page/snippet/edit.dart | 33 +++++++++++++++----- lib/view/page/snippet/list.dart | 4 +-- 15 files changed, 80 insertions(+), 19 deletions(-) diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n.dart b/.dart_tool/flutter_gen/gen_l10n/l10n.dart index c3db0897..2ebb5c96 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n.dart @@ -890,6 +890,12 @@ abstract class S { /// **'Not selected'** String get notSelected; + /// No description provided for @note. + /// + /// In en, this message translates to: + /// **'Note'** + String get note; + /// No description provided for @nullToken. /// /// In en, this message translates to: diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart index bb2220a9..1edb5d35 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart @@ -420,6 +420,9 @@ class SDe extends S { @override String get notSelected => 'Nicht ausgewählt'; + @override + String get note => 'Hinweis'; + @override String get nullToken => 'Null token'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart index eabdb9c9..16f3cb75 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart @@ -420,6 +420,9 @@ class SEn extends S { @override String get notSelected => 'Not selected'; + @override + String get note => 'Note'; + @override String get nullToken => 'Null token'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart index e96a80de..a824c225 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart @@ -420,6 +420,9 @@ class SId extends S { @override String get notSelected => 'Tidak terpilih'; + @override + String get note => 'Catatan'; + @override String get nullToken => 'Token NULL'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart index e2d27bde..fff11cff 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart @@ -420,6 +420,9 @@ class SZh extends S { @override String get notSelected => '未选择'; + @override + String get note => '备注'; + @override String get nullToken => '无Token'; @@ -1149,6 +1152,9 @@ class SZhTw extends SZh { @override String get notSelected => '未選擇'; + @override + String get note => '備註'; + @override String get nullToken => '無Token'; diff --git a/lib/data/model/server/snippet.dart b/lib/data/model/server/snippet.dart index d3af95ff..68115c3a 100644 --- a/lib/data/model/server/snippet.dart +++ b/lib/data/model/server/snippet.dart @@ -12,18 +12,28 @@ class Snippet implements TagPickable { final String script; @HiveField(2) final List? tags; - const Snippet(this.name, this.script, this.tags); + @HiveField(3) + final String? note; + + const Snippet({ + required this.name, + required this.script, + this.tags, + this.note, + }); Snippet.fromJson(Map json) : name = json['name'].toString(), script = json['script'].toString(), - tags = json['tags']?.cast(); + tags = json['tags']?.cast(), + note = json['note']?.toString(); Map toJson() { final data = {}; data['name'] = name; data['script'] = script; data['tags'] = tags; + data['note'] = note; return data; } @@ -38,7 +48,9 @@ class Snippet implements TagPickable { /// Snippet for installing ServerBoxMonitor const installSBM = Snippet( - 'Install ServerBoxMonitor', - 'curl -fsSL https://raw.githubusercontent.com/lollipopkit/server_box_monitor/main/install.sh | sh -s -- install', - null, + name: 'Install ServerBoxMonitor', + script: + 'curl -fsSL https://raw.githubusercontent.com/lollipopkit/server_box_monitor/main/install.sh | sh -s -- install', + tags: ['ServerBoxMonitor'], + note: 'One click script to install ServerBoxMonitor', ); diff --git a/lib/data/model/server/snippet.g.dart b/lib/data/model/server/snippet.g.dart index 5c194f89..91c2944a 100644 --- a/lib/data/model/server/snippet.g.dart +++ b/lib/data/model/server/snippet.g.dart @@ -17,22 +17,25 @@ class SnippetAdapter extends TypeAdapter { for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), }; return Snippet( - fields[0] as String, - fields[1] as String, - (fields[2] as List?)?.cast(), + name: fields[0] as String, + script: fields[1] as String, + tags: (fields[2] as List?)?.cast(), + note: fields[3] as String?, ); } @override void write(BinaryWriter writer, Snippet obj) { writer - ..writeByte(3) + ..writeByte(4) ..writeByte(0) ..write(obj.name) ..writeByte(1) ..write(obj.script) ..writeByte(2) - ..write(obj.tags); + ..write(obj.tags) + ..writeByte(3) + ..write(obj.note); } @override diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index 75e097ef..7229050c 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -27,6 +27,7 @@ class SettingStore extends PersistentStore { 'timeOut', 5, ); + /// Duration of [timeout] Duration get timeoutD => Duration(seconds: timeout.fetch()); diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 2a1cbda5..d212f57b 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -132,6 +132,7 @@ "noTask": "Nicht fragen", "noUpdateAvailable": "Kein Update verfügbar", "notSelected": "Nicht ausgewählt", + "note": "Hinweis", "nullToken": "Null token", "ok": "OK", "onServerDetailPage": "in Detailansicht des Servers", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 2873039a..66dfbfaa 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -132,6 +132,7 @@ "noTask": "No task", "noUpdateAvailable": "No update available", "notSelected": "Not selected", + "note": "Note", "nullToken": "Null token", "ok": "OK", "onServerDetailPage": "On server detail page", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index 5bcdc4ce..201e75c7 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -132,6 +132,7 @@ "noTask": "Tidak bertanya", "noUpdateAvailable": "Tidak ada pembaruan yang tersedia", "notSelected": "Tidak terpilih", + "note": "Catatan", "nullToken": "Token NULL", "ok": "OKE", "onServerDetailPage": "Di halaman detail server", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 9cb96310..e06d3aaa 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -132,6 +132,7 @@ "noTask": "没有任务", "noUpdateAvailable": "没有可用更新", "notSelected": "未选择", + "note": "备注", "nullToken": "无Token", "ok": "好", "onServerDetailPage": "在服务器详情页", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index d20fac47..6225157d 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -132,6 +132,7 @@ "noTask": "沒有任務", "noUpdateAvailable": "沒有可用更新", "notSelected": "未選擇", + "note": "備註", "nullToken": "無Token", "ok": "好", "onServerDetailPage": "在服務器詳情頁", diff --git a/lib/view/page/snippet/edit.dart b/lib/view/page/snippet/edit.dart index 3b59901b..9aede026 100644 --- a/lib/view/page/snippet/edit.dart +++ b/lib/view/page/snippet/edit.dart @@ -25,6 +25,7 @@ class _SnippetEditPageState extends State with AfterLayoutMixin { final _nameController = TextEditingController(); final _scriptController = TextEditingController(); + final _noteController = TextEditingController(); final _scriptNode = FocusNode(); late SnippetProvider _provider; @@ -91,7 +92,13 @@ class _SnippetEditPageState extends State showSnackBar(context, Text(_s.fieldMustNotEmpty)); return; } - final snippet = Snippet(name, script, _tags); + final note = _noteController.text; + final snippet = Snippet( + name: name, + script: script, + tags: _tags.isEmpty ? null : _tags, + note: note.isEmpty ? null : note, + ); if (widget.snippet != null) { _provider.update(widget.snippet!, snippet); } else { @@ -115,13 +122,12 @@ class _SnippetEditPageState extends State icon: Icons.info, ), Input( - controller: _scriptController, - node: _scriptNode, + controller: _noteController, minLines: 3, - maxLines: 10, + maxLines: 3, type: TextInputType.multiline, - label: _s.snippet, - icon: Icons.code, + label: _s.note, + icon: Icons.note, ), TagEditor( tags: _tags, @@ -133,7 +139,16 @@ class _SnippetEditPageState extends State onRenameTag: (old, n) => setState(() { _provider.renameTag(old, n); }), - ) + ), + Input( + controller: _scriptController, + node: _scriptNode, + minLines: 3, + maxLines: 10, + type: TextInputType.multiline, + label: _s.snippet, + icon: Icons.code, + ), ], ); } @@ -143,6 +158,10 @@ class _SnippetEditPageState extends State if (widget.snippet != null) { _nameController.text = widget.snippet!.name; _scriptController.text = widget.snippet!.script; + if (widget.snippet!.note != null) { + _noteController.text = widget.snippet!.note!; + } + if (widget.snippet!.tags != null) { _tags = widget.snippet!.tags!; setState(() {}); diff --git a/lib/view/page/snippet/list.dart b/lib/view/page/snippet/list.dart index 97d80a2d..ef734e93 100644 --- a/lib/view/page/snippet/list.dart +++ b/lib/view/page/snippet/list.dart @@ -108,9 +108,9 @@ class _SnippetListPageState extends State { maxLines: 1, ), subtitle: Text( - snippet.script, + snippet.note ?? snippet.script, overflow: TextOverflow.ellipsis, - maxLines: 1, + maxLines: 3, style: grey, ), trailing: Row(