feat(setting): enhance auto backup tips with folder link and dynamic content #4222

* Updated backup tips to include a link to the backup folder.
* Added a new method `getBackupFolder` to retrieve the backup directory.
* Modified the `formField` to accept custom tips for better flexibility.
This commit is contained in:
qianlifeng 2025-07-13 22:21:59 +08:00
parent 093088771c
commit 9d9c173ae9
8 changed files with 74 additions and 9 deletions

View File

@ -140,7 +140,10 @@
"ui_cancel": "Cancel",
"ui_delete": "Delete",
"ui_data_backup_auto_title": "Auto Backup",
"ui_data_backup_auto_tips": "Enable auto backup to backup your data daily",
"ui_data_backup_auto_tips": "Enable auto backup to backup your data daily in data folder",
"ui_data_backup_auto_tips_prefix": "Enable auto backup to backup your data daily in",
"ui_data_backup_folder_link": "backup folder",
"ui_data_backup_auto_tips_suffix": "",
"ui_data_backup_list_title": "Backup List",
"ui_data_backup_now": "Backup Now",
"ui_data_backup_refresh": "Refresh",

View File

@ -126,7 +126,10 @@
"ui_cancel": "Cancelar",
"ui_delete": "Excluir",
"ui_data_backup_auto_title": "Backup automático",
"ui_data_backup_auto_tips": "Habilitar backup automático para salvar as configurações do Wox diariamente",
"ui_data_backup_auto_tips": "Habilitar backup automático para salvar as configurações do Wox diariamente na pasta data",
"ui_data_backup_auto_tips_prefix": "Habilitar backup automático para salvar dados diariamente na",
"ui_data_backup_folder_link": "pasta de backup",
"ui_data_backup_auto_tips_suffix": "",
"ui_data_backup_list_title": "Lista de backups",
"ui_data_backup_now": "Fazer backup agora",
"ui_data_backup_refresh": "Atualizar",

View File

@ -126,7 +126,10 @@
"ui_cancel": "Отмена",
"ui_delete": "Удалить",
"ui_data_backup_auto_title": "Автоматическая резервная копия",
"ui_data_backup_auto_tips": "Включить автоматическую резервную копию для ежедневного резервного копирования настроек Wox",
"ui_data_backup_auto_tips": "Включить автоматическую резервную копию для ежедневного резервного копирования настроек Wox в папку data",
"ui_data_backup_auto_tips_prefix": "Включить автоматическое резервное копирование данных ежедневно в",
"ui_data_backup_folder_link": "папку резервных копий",
"ui_data_backup_auto_tips_suffix": "",
"ui_data_backup_list_title": "Список резервных копий",
"ui_data_backup_now": "Сделать резервную копию сейчас",
"ui_data_backup_refresh": "Обновить",

View File

@ -140,7 +140,10 @@
"ui_cancel": "取消",
"ui_delete": "删除",
"ui_data_backup_auto_title": "自动备份",
"ui_data_backup_auto_tips": "启用自动备份每天备份一次Wox设置",
"ui_data_backup_auto_tips": "启用自动备份每天在data文件夹中备份一次Wox设置",
"ui_data_backup_auto_tips_prefix": "启用自动备份,每天在",
"ui_data_backup_folder_link": "备份文件夹",
"ui_data_backup_auto_tips_suffix": "中备份数据",
"ui_data_backup_list_title": "备份列表",
"ui_data_backup_now": "立即备份",
"ui_data_backup_refresh": "刷新",

View File

@ -83,6 +83,7 @@ var routers = map[string]func(w http.ResponseWriter, r *http.Request){
"/backup/now": handleBackupNow,
"/backup/restore": handleBackupRestore,
"/backup/all": handleBackupAll,
"/backup/folder": handleBackupFolder,
"/hotkey/available": handleHotkeyAvailable,
"/query/icon": handleQueryIcon,
"/query/ratio": handleQueryRatio,
@ -630,6 +631,18 @@ func handleBackupAll(w http.ResponseWriter, r *http.Request) {
writeSuccessResponse(w, backups)
}
func handleBackupFolder(w http.ResponseWriter, r *http.Request) {
backupDir := util.GetLocation().GetBackupDirectory()
// Ensure backup directory exists
if err := util.GetLocation().EnsureDirectoryExist(backupDir); err != nil {
writeErrorResponse(w, fmt.Sprintf("Failed to create backup directory: %s", err.Error()))
return
}
writeSuccessResponse(w, backupDir)
}
func handleHotkeyAvailable(w http.ResponseWriter, r *http.Request) {
ctx := util.NewTraceContext()

View File

@ -203,6 +203,10 @@ class WoxApi {
await WoxHttpUtil.instance.postData("/backup/restore", {"id": id});
}
Future<String> getBackupFolder() async {
return await WoxHttpUtil.instance.postData("/backup/folder", null);
}
Future<void> open(String path) async {
await WoxHttpUtil.instance.postData("/open", {"path": path});
}

View File

@ -22,7 +22,7 @@ abstract class WoxSettingBaseView extends GetView<WoxSettingController> {
);
}
Widget formField({required String label, required Widget child, String? tips, double labelWidth = 160}) {
Widget formField({required String label, required Widget child, String? tips, Widget? customTips, double labelWidth = 160}) {
return Padding(
padding: const EdgeInsets.only(bottom: 20),
child: Column(
@ -41,7 +41,7 @@ abstract class WoxSettingBaseView extends GetView<WoxSettingController> {
),
],
),
if (tips != null)
if (tips != null || customTips != null)
Padding(
padding: const EdgeInsets.only(top: 2),
child: Row(
@ -52,8 +52,8 @@ abstract class WoxSettingBaseView extends GetView<WoxSettingController> {
child: SizedBox(width: labelWidth, child: const Text("")),
),
Flexible(
child: Text(
tips,
child: customTips ?? Text(
tips!,
style: TextStyle(color: getThemeSubTextColor(), fontSize: 13),
),
),

View File

@ -7,10 +7,45 @@ import 'package:wox/utils/colors.dart';
import 'package:wox/utils/picker.dart';
import 'package:wox/utils/wox_theme_util.dart';
import 'package:flutter/material.dart' as material;
import 'package:wox/api/wox_api.dart';
class WoxSettingDataView extends WoxSettingBaseView {
const WoxSettingDataView({super.key});
Widget _buildAutoBackupTips() {
return Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
children: [
Text(
controller.tr("ui_data_backup_auto_tips_prefix"),
style: TextStyle(color: getThemeSubTextColor(), fontSize: 13),
),
HyperlinkButton(
onPressed: () async {
try {
final backupPath = await WoxApi.instance.getBackupFolder();
await controller.openFolder(backupPath);
} catch (e) {
// Handle error silently or show a notification
}
},
child: Text(
controller.tr("ui_data_backup_folder_link"),
style: TextStyle(
color: fromCssColor(WoxThemeUtil.instance.currentTheme.value.actionItemActiveBackgroundColor),
fontSize: 13,
decoration: TextDecoration.underline,
),
),
),
Text(
controller.tr("ui_data_backup_auto_tips_suffix"),
style: TextStyle(color: getThemeSubTextColor(), fontSize: 13),
),
],
);
}
@override
Widget build(BuildContext context) {
return form(children: [
@ -77,7 +112,8 @@ class WoxSettingDataView extends WoxSettingBaseView {
},
);
}),
tips: controller.tr("ui_data_backup_auto_tips"),
tips: null,
customTips: _buildAutoBackupTips(),
),
formField(
label: controller.tr("ui_data_backup_list_title"),