From 6db5633ca6cadaf7db5e59bad1813845eb4ce7a3 Mon Sep 17 00:00:00 2001 From: krau <71133316+krau@users.noreply.github.com> Date: Fri, 19 Dec 2025 20:40:14 +0800 Subject: [PATCH] feat(i18n): Add progress tracking messages for various tasks and enhance error handling --- common/i18n/i18nk/keys.go | 27 ++++++++++++++++++++++++ common/i18n/locale/zh-Hans.yaml | 29 ++++++++++++++++++++++++++ core/tasks/batchtfile/progress.go | 24 +++++++++++++--------- core/tasks/directlinks/progress.go | 33 +++++++++++++++++++----------- core/tasks/parsed/progress.go | 32 ++++++++++++++++++----------- core/tasks/telegraph/progress.go | 22 ++++++++++++-------- core/tasks/tfile/progress.go | 30 +++++++++++++++------------ 7 files changed, 142 insertions(+), 55 deletions(-) diff --git a/common/i18n/i18nk/keys.go b/common/i18n/i18nk/keys.go index 961fa89..f0bdaa4 100644 --- a/common/i18n/i18nk/keys.go +++ b/common/i18n/i18nk/keys.go @@ -102,6 +102,33 @@ const ( BotMsgParserInfoInstallPluginSuccess Key = "bot.msg.parser.info_install_plugin_success" BotMsgParserPluginNotEnabled Key = "bot.msg.parser.plugin_not_enabled" BotMsgParserPromptReplyWithParserFile Key = "bot.msg.parser.prompt_reply_with_parser_file" + BotMsgProgressAvgSpeedPrefix Key = "bot.msg.progress.avg_speed_prefix" + BotMsgProgressBatchDonePrefix Key = "bot.msg.progress.batch_done_prefix" + BotMsgProgressBatchProcessingPrefix Key = "bot.msg.progress.batch_processing_prefix" + BotMsgProgressBatchStartPrefix Key = "bot.msg.progress.batch_start_prefix" + BotMsgProgressCurrentProgressPrefix Key = "bot.msg.progress.current_progress_prefix" + BotMsgProgressDirectDonePrefix Key = "bot.msg.progress.direct_done_prefix" + BotMsgProgressDirectStart Key = "bot.msg.progress.direct_start" + BotMsgProgressDownloadDonePrefix Key = "bot.msg.progress.download_done_prefix" + BotMsgProgressDownloadFailedPrefix Key = "bot.msg.progress.download_failed_prefix" + BotMsgProgressDownloadingPrefix Key = "bot.msg.progress.downloading_prefix" + BotMsgProgressErrorPrefix Key = "bot.msg.progress.error_prefix" + BotMsgProgressFileNamePrefix Key = "bot.msg.progress.file_name_prefix" + BotMsgProgressFileProcessingPrefix Key = "bot.msg.progress.file_processing_prefix" + BotMsgProgressFileSizePrefix Key = "bot.msg.progress.file_size_prefix" + BotMsgProgressFileStartPrefix Key = "bot.msg.progress.file_start_prefix" + BotMsgProgressParsedDonePrefix Key = "bot.msg.progress.parsed_done_prefix" + BotMsgProgressParsedStartPrefix Key = "bot.msg.progress.parsed_start_prefix" + BotMsgProgressProcessingListPrefix Key = "bot.msg.progress.processing_list_prefix" + BotMsgProgressProcessingNone Key = "bot.msg.progress.processing_none" + BotMsgProgressSavePathPrefix Key = "bot.msg.progress.save_path_prefix" + BotMsgProgressTaskCanceled Key = "bot.msg.progress.task_canceled" + BotMsgProgressTaskCanceledWithId Key = "bot.msg.progress.task_canceled_with_id" + BotMsgProgressTaskFailedWithError Key = "bot.msg.progress.task_failed_with_error" + BotMsgProgressTelegraphDonePrefix Key = "bot.msg.progress.telegraph_done_prefix" + BotMsgProgressTelegraphProgressPrefix Key = "bot.msg.progress.telegraph_progress_prefix" + BotMsgProgressTelegraphStartPrefix Key = "bot.msg.progress.telegraph_start_prefix" + BotMsgProgressTotalSizePrefix Key = "bot.msg.progress.total_size_prefix" BotMsgRuleErrorCreateRuleFailed Key = "bot.msg.rule.error_create_rule_failed" BotMsgRuleErrorDeleteRuleFailed Key = "bot.msg.rule.error_delete_rule_failed" BotMsgRuleErrorGetUserRulesFailed Key = "bot.msg.rule.error_get_user_rules_failed" diff --git a/common/i18n/locale/zh-Hans.yaml b/common/i18n/locale/zh-Hans.yaml index f011a17..5b9c9f0 100644 --- a/common/i18n/locale/zh-Hans.yaml +++ b/common/i18n/locale/zh-Hans.yaml @@ -241,6 +241,7 @@ bot: prompt_select_option: "请选择要配置的选项" button_filename_strategy: "文件名策略" error_invalid_callback_data: "无效的回调数据" + error_invalid_template: "无效的模板, 请检查语法\n{{.Error}}" info_filename_strategy_set: "已将文件名策略设置为: {{.Strategy}}" prompt_select_filename_strategy: "请选择文件名策略, 当前策略: {{.Strategy}}" fnametmpl_help: |- @@ -275,3 +276,31 @@ bot: storage: info_filename_prefix: "文件名: " info_prompt_select_storage: "\n请选择存储位置" + progress: + batch_start_prefix: "开始执行批量下载任务\n总大小: " + batch_processing_prefix: "正在处理批量下载任务\n总大小: " + downloading_prefix: "正在下载\n总大小: " + processing_list_prefix: "\n正在处理:\n" + processing_none: " - 无" + avg_speed_prefix: "\n平均速度: " + current_progress_prefix: "\n当前进度: " + task_canceled: "任务已取消" + task_canceled_with_id: "处理已取消: {{.TaskID}}" + task_failed_with_error: "处理失败: {{.Error}}" + batch_done_prefix: "处理完成\n文件数: " + direct_done_prefix: "处理完成, 文件数量: " + parsed_start_prefix: "开始下载 {{.Site}} 的资源\n总大小: " + parsed_done_prefix: "处理完成, 资源数量: " + telegraph_start_prefix: "开始下载Telegraph\n图片数量: " + telegraph_progress_prefix: "正在下载\n当前进度: " + telegraph_done_prefix: "处理完成\n图片数量: " + file_start_prefix: "开始下载\n文件名: " + file_processing_prefix: "正在处理下载任务\n文件名: " + download_failed_prefix: "下载失败\n文件名: " + download_done_prefix: "下载完成\n文件名: " + file_size_prefix: "\n文件大小: " + save_path_prefix: "\n保存路径: " + total_size_prefix: "\n总大小: " + direct_start: "开始下载, 总大小: {{.SizeMB}} MB ({{.Count}} 个文件)" + file_name_prefix: "文件名: " + error_prefix: "\n错误: " diff --git a/core/tasks/batchtfile/progress.go b/core/tasks/batchtfile/progress.go index d876325..5267291 100644 --- a/core/tasks/batchtfile/progress.go +++ b/core/tasks/batchtfile/progress.go @@ -13,6 +13,8 @@ import ( "github.com/gotd/td/telegram/message/entity" "github.com/gotd/td/telegram/message/styling" "github.com/gotd/td/tg" + "github.com/krau/SaveAny-Bot/common/i18n" + "github.com/krau/SaveAny-Bot/common/i18n/i18nk" "github.com/krau/SaveAny-Bot/common/utils/dlutil" "github.com/krau/SaveAny-Bot/common/utils/tgutil" ) @@ -37,7 +39,7 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain("开始执行批量下载任务\n总大小: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressBatchStartPrefix, nil)), styling.Code(fmt.Sprintf("%.2f MB (%d个文件)", float64(info.TotalSize())/(1024*1024), info.Count())), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -78,22 +80,22 @@ func (p *Progress) OnProgress(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain("正在处理批量下载任务\n总大小: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressBatchProcessingPrefix, nil)), styling.Code(fmt.Sprintf("%.2f MB (%d个文件)", float64(info.TotalSize())/(1024*1024), info.Count())), - styling.Plain("\n正在处理:\n"), + styling.Plain(i18n.T(i18nk.BotMsgProgressProcessingListPrefix, nil)), func() styling.StyledTextOption { var lines []string for _, elem := range info.Processing() { lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024))) } if len(lines) == 0 { - lines = append(lines, " - 无") + lines = append(lines, i18n.T(i18nk.BotMsgProgressProcessingNone, nil)) } return styling.Plain(slice.Join(lines, "\n")) }(), - styling.Plain("\n平均速度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressAvgSpeedPrefix, nil)), styling.Bold(fmt.Sprintf("%.2f MB/s", dlutil.GetSpeed(info.Downloaded(), p.start)/(1024*1024))), - styling.Plain("\n当前进度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressCurrentProgressPrefix, nil)), styling.Bold(fmt.Sprintf("%.2f%%", float64(info.Downloaded())/float64(info.TotalSize())*100)), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -133,19 +135,21 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { if err != nil { if errors.Is(err, context.Canceled) { stylingErr = styling.Perform(&entityBuilder, - styling.Plain("任务已取消"), + styling.Plain(i18n.T(i18nk.BotMsgProgressTaskCanceled, nil)), ) } else { stylingErr = styling.Perform(&entityBuilder, - styling.Plain("处理失败, 错误:\n "), + styling.Plain(i18n.T(i18nk.BotMsgProgressTaskFailedWithError, map[string]any{ + "Error": "", + })), styling.Code(err.Error()), ) } } else { stylingErr = styling.Perform(&entityBuilder, - styling.Plain("处理完成\n文件数: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressBatchDonePrefix, nil)), styling.Code(strconv.Itoa(info.Count())), - styling.Plain("\n总大小: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressTotalSizePrefix, nil)), styling.Code(fmt.Sprintf("%.2f MB", float64(info.TotalSize())/(1024*1024))), ) } diff --git a/core/tasks/directlinks/progress.go b/core/tasks/directlinks/progress.go index 45aa3b9..223a50c 100644 --- a/core/tasks/directlinks/progress.go +++ b/core/tasks/directlinks/progress.go @@ -12,6 +12,8 @@ import ( "github.com/gotd/td/telegram/message/entity" "github.com/gotd/td/telegram/message/styling" "github.com/gotd/td/tg" + "github.com/krau/SaveAny-Bot/common/i18n" + "github.com/krau/SaveAny-Bot/common/i18n/i18nk" "github.com/krau/SaveAny-Bot/common/utils/dlutil" "github.com/krau/SaveAny-Bot/common/utils/tgutil" ) @@ -53,8 +55,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { ext := tgutil.ExtFromContext(ctx) if ext != nil { ext.EditMessage(p.chatID, &tg.MessagesEditMessageRequest{ - ID: p.msgID, - Message: fmt.Sprintf("处理已取消: %s", info.TaskID()), + ID: p.msgID, + Message: i18n.T(i18nk.BotMsgProgressTaskCanceledWithId, map[string]any{ + "TaskID": info.TaskID(), + }), }) } } else { @@ -62,8 +66,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { ext := tgutil.ExtFromContext(ctx) if ext != nil { ext.EditMessage(p.chatID, &tg.MessagesEditMessageRequest{ - ID: p.msgID, - Message: fmt.Sprintf("处理失败: %s", err.Error()), + ID: p.msgID, + Message: i18n.T(i18nk.BotMsgProgressTaskFailedWithError, map[string]any{ + "Error": err.Error(), + }), }) } } @@ -73,9 +79,9 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { entityBuilder := entity.Builder{} if err := styling.Perform(&entityBuilder, - styling.Plain("处理完成, 文件数量: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressDirectDonePrefix, nil)), styling.Code(fmt.Sprintf("%d", info.TotalFiles())), - styling.Plain("\n保存路径: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressSavePathPrefix, nil)), styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())), ); err != nil { logger.Errorf("Failed to build entities: %s", err) @@ -108,22 +114,22 @@ func (p *Progress) OnProgress(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain("正在下载\n总大小: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressDownloadingPrefix, nil)), styling.Code(fmt.Sprintf("%.2f MB (%d个文件)", float64(info.TotalBytes())/(1024*1024), info.TotalFiles())), - styling.Plain("\n正在处理:\n"), + styling.Plain(i18n.T(i18nk.BotMsgProgressProcessingListPrefix, nil)), func() styling.StyledTextOption { var lines []string for _, elem := range info.Processing() { lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024))) } if len(lines) == 0 { - lines = append(lines, " - 无") + lines = append(lines, i18n.T(i18nk.BotMsgProgressProcessingNone, nil)) } return styling.Plain(slice.Join(lines, "\n")) }(), - styling.Plain("\n平均速度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressAvgSpeedPrefix, nil)), styling.Bold(fmt.Sprintf("%.2f MB/s", dlutil.GetSpeed(info.DownloadedBytes(), p.start)/(1024*1024))), - styling.Plain("\n当前进度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressCurrentProgressPrefix, nil)), styling.Bold(fmt.Sprintf("%.2f%%", float64(info.DownloadedBytes())/float64(info.TotalBytes())*100)), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -164,7 +170,10 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain(fmt.Sprintf("开始下载, 总大小: %.2f MB (%d 个文件)", float64(info.TotalBytes())/(1024*1024), info.TotalFiles()))); err != nil { + styling.Plain(i18n.T(i18nk.BotMsgProgressDirectStart, map[string]any{ + "SizeMB": float64(info.TotalBytes()) / (1024 * 1024), + "Count": info.TotalFiles(), + }))); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) return } diff --git a/core/tasks/parsed/progress.go b/core/tasks/parsed/progress.go index 9daa192..0cac6c4 100644 --- a/core/tasks/parsed/progress.go +++ b/core/tasks/parsed/progress.go @@ -12,6 +12,8 @@ import ( "github.com/gotd/td/telegram/message/entity" "github.com/gotd/td/telegram/message/styling" "github.com/gotd/td/tg" + "github.com/krau/SaveAny-Bot/common/i18n" + "github.com/krau/SaveAny-Bot/common/i18n/i18nk" "github.com/krau/SaveAny-Bot/common/utils/dlutil" "github.com/krau/SaveAny-Bot/common/utils/tgutil" ) @@ -68,7 +70,9 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain(fmt.Sprintf("开始下载 %s 的资源\n总大小: ", info.Site())), + styling.Plain(i18n.T(i18nk.BotMsgProgressParsedStartPrefix, map[string]any{ + "Site": info.Site(), + })), styling.Code(fmt.Sprintf("%.2f MB (%d个资源)", float64(info.TotalBytes())/(1024*1024), info.TotalResources())), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -109,22 +113,22 @@ func (p *Progress) OnProgress(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain("正在下载\n总大小: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressDownloadingPrefix, nil)), styling.Code(fmt.Sprintf("%.2f MB (%d个文件)", float64(info.TotalBytes())/(1024*1024), info.TotalResources())), - styling.Plain("\n正在处理:\n"), + styling.Plain(i18n.T(i18nk.BotMsgProgressProcessingListPrefix, nil)), func() styling.StyledTextOption { var lines []string for _, elem := range info.Processing() { lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024))) } if len(lines) == 0 { - lines = append(lines, " - 无") + lines = append(lines, i18n.T(i18nk.BotMsgProgressProcessingNone, nil)) } return styling.Plain(slice.Join(lines, "\n")) }(), - styling.Plain("\n平均速度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressAvgSpeedPrefix, nil)), styling.Bold(fmt.Sprintf("%.2f MB/s", dlutil.GetSpeed(info.DownloadedBytes(), p.start)/(1024*1024))), - styling.Plain("\n当前进度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressCurrentProgressPrefix, nil)), styling.Bold(fmt.Sprintf("%.2f%%", float64(info.DownloadedBytes())/float64(info.TotalBytes())*100)), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -160,8 +164,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { ext := tgutil.ExtFromContext(ctx) if ext != nil { ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{ - ID: p.MessageID, - Message: fmt.Sprintf("处理已取消: %s", info.TaskID()), + ID: p.MessageID, + Message: i18n.T(i18nk.BotMsgProgressTaskCanceledWithId, map[string]any{ + "TaskID": info.TaskID(), + }), }) } } else { @@ -169,8 +175,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { ext := tgutil.ExtFromContext(ctx) if ext != nil { ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{ - ID: p.MessageID, - Message: fmt.Sprintf("处理失败: %s", err.Error()), + ID: p.MessageID, + Message: i18n.T(i18nk.BotMsgProgressTaskFailedWithError, map[string]any{ + "Error": err.Error(), + }), }) } } @@ -180,9 +188,9 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { entityBuilder := entity.Builder{} if err := styling.Perform(&entityBuilder, - styling.Plain("处理完成, 资源数量: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressParsedDonePrefix, nil)), styling.Code(fmt.Sprintf("%d", info.TotalResources())), - styling.Plain("\n保存路径: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressSavePathPrefix, nil)), styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())), ); err != nil { logger.Errorf("Failed to build entities: %s", err) diff --git a/core/tasks/telegraph/progress.go b/core/tasks/telegraph/progress.go index e664ea3..cc58027 100644 --- a/core/tasks/telegraph/progress.go +++ b/core/tasks/telegraph/progress.go @@ -9,6 +9,8 @@ import ( "github.com/gotd/td/telegram/message/entity" "github.com/gotd/td/telegram/message/styling" "github.com/gotd/td/tg" + "github.com/krau/SaveAny-Bot/common/i18n" + "github.com/krau/SaveAny-Bot/common/i18n/i18nk" "github.com/krau/SaveAny-Bot/common/utils/tgutil" ) @@ -29,7 +31,7 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain("开始下载Telegraph\n图片数量: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressTelegraphStartPrefix, nil)), styling.Code(fmt.Sprintf("%d", info.TotalPics())), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -65,7 +67,7 @@ func (p *Progress) OnProgress(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain("正在下载\n当前进度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressTelegraphProgressPrefix, nil)), styling.Code(fmt.Sprintf("%d/%d", info.Downloaded(), info.TotalPics())), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -101,8 +103,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { ext := tgutil.ExtFromContext(ctx) if ext != nil { ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{ - ID: p.MessageID, - Message: fmt.Sprintf("处理已取消: %s", info.TaskID()), + ID: p.MessageID, + Message: i18n.T(i18nk.BotMsgProgressTaskCanceledWithId, map[string]any{ + "TaskID": info.TaskID(), + }), }) } } else { @@ -110,8 +114,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { ext := tgutil.ExtFromContext(ctx) if ext != nil { ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{ - ID: p.MessageID, - Message: fmt.Sprintf("处理失败: %s", err.Error()), + ID: p.MessageID, + Message: i18n.T(i18nk.BotMsgProgressTaskFailedWithError, map[string]any{ + "Error": err.Error(), + }), }) } } @@ -121,9 +127,9 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { entityBuilder := entity.Builder{} if err := styling.Perform(&entityBuilder, - styling.Plain("处理完成\n图片数量: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressTelegraphDonePrefix, nil)), styling.Code(fmt.Sprintf("%d", info.TotalPics())), - styling.Plain("\n保存路径: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressSavePathPrefix, nil)), styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())), ); err != nil { logger.Errorf("Failed to build entities: %s", err) diff --git a/core/tasks/tfile/progress.go b/core/tasks/tfile/progress.go index 23fb1c2..37a1633 100644 --- a/core/tasks/tfile/progress.go +++ b/core/tasks/tfile/progress.go @@ -11,6 +11,8 @@ import ( "github.com/gotd/td/telegram/message/entity" "github.com/gotd/td/telegram/message/styling" "github.com/gotd/td/tg" + "github.com/krau/SaveAny-Bot/common/i18n" + "github.com/krau/SaveAny-Bot/common/i18n/i18nk" "github.com/krau/SaveAny-Bot/common/utils/dlutil" "github.com/krau/SaveAny-Bot/common/utils/tgutil" ) @@ -35,11 +37,11 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) { entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain("开始下载\n文件名: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressFileStartPrefix, nil)), styling.Code(info.FileName()), - styling.Plain("\n保存路径: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressSavePathPrefix, nil)), styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())), - styling.Plain("\n文件大小: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressFileSizePrefix, nil)), styling.Code(fmt.Sprintf("%.2f MB", float64(info.FileSize())/(1024*1024))), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -80,15 +82,15 @@ func (p *Progress) OnProgress(ctx context.Context, info TaskInfo, downloaded, to entityBuilder := entity.Builder{} var entities []tg.MessageEntityClass if err := styling.Perform(&entityBuilder, - styling.Plain("正在处理下载任务\n文件名: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressFileProcessingPrefix, nil)), styling.Code(info.FileName()), - styling.Plain("\n保存路径: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressSavePathPrefix, nil)), styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())), - styling.Plain("\n文件大小: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressFileSizePrefix, nil)), styling.Code(fmt.Sprintf("%.2f MB", float64(total)/(1024*1024))), - styling.Plain("\n平均速度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressAvgSpeedPrefix, nil)), styling.Bold(fmt.Sprintf("%.2f MB/s", dlutil.GetSpeed(downloaded, p.start)/(1024*1024))), - styling.Plain("\n当前进度: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressCurrentProgressPrefix, nil)), styling.Bold(fmt.Sprintf("%.2f%%", float64(downloaded)/float64(total)*100)), ); err != nil { log.FromContext(ctx).Errorf("Failed to build entities: %s", err) @@ -130,22 +132,24 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) { if err != nil { if errors.Is(err, context.Canceled) { stylingErr = styling.Perform(&entityBuilder, - styling.Plain("任务已取消\n文件名: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressTaskCanceled, nil)), + styling.Plain("\n"), + styling.Plain(i18n.T(i18nk.BotMsgProgressFileNamePrefix, nil)), styling.Code(info.FileName()), ) } else { stylingErr = styling.Perform(&entityBuilder, - styling.Plain("下载失败\n文件名: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressDownloadFailedPrefix, nil)), styling.Code(info.FileName()), - styling.Plain("\n错误: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressErrorPrefix, nil)), styling.Bold(err.Error()), ) } } else { stylingErr = styling.Perform(&entityBuilder, - styling.Plain("下载完成\n文件名: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressDownloadDonePrefix, nil)), styling.Code(info.FileName()), - styling.Plain("\n保存路径: "), + styling.Plain(i18n.T(i18nk.BotMsgProgressSavePathPrefix, nil)), styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())), ) }