mirror of
https://github.com/krau/SaveAny-Bot.git
synced 2026-07-06 14:41:22 +08:00
feat(i18n): Add progress tracking messages for various tasks and enhance error handling
This commit is contained in:
@@ -102,6 +102,33 @@ const (
|
|||||||
BotMsgParserInfoInstallPluginSuccess Key = "bot.msg.parser.info_install_plugin_success"
|
BotMsgParserInfoInstallPluginSuccess Key = "bot.msg.parser.info_install_plugin_success"
|
||||||
BotMsgParserPluginNotEnabled Key = "bot.msg.parser.plugin_not_enabled"
|
BotMsgParserPluginNotEnabled Key = "bot.msg.parser.plugin_not_enabled"
|
||||||
BotMsgParserPromptReplyWithParserFile Key = "bot.msg.parser.prompt_reply_with_parser_file"
|
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"
|
BotMsgRuleErrorCreateRuleFailed Key = "bot.msg.rule.error_create_rule_failed"
|
||||||
BotMsgRuleErrorDeleteRuleFailed Key = "bot.msg.rule.error_delete_rule_failed"
|
BotMsgRuleErrorDeleteRuleFailed Key = "bot.msg.rule.error_delete_rule_failed"
|
||||||
BotMsgRuleErrorGetUserRulesFailed Key = "bot.msg.rule.error_get_user_rules_failed"
|
BotMsgRuleErrorGetUserRulesFailed Key = "bot.msg.rule.error_get_user_rules_failed"
|
||||||
|
|||||||
@@ -241,6 +241,7 @@ bot:
|
|||||||
prompt_select_option: "请选择要配置的选项"
|
prompt_select_option: "请选择要配置的选项"
|
||||||
button_filename_strategy: "文件名策略"
|
button_filename_strategy: "文件名策略"
|
||||||
error_invalid_callback_data: "无效的回调数据"
|
error_invalid_callback_data: "无效的回调数据"
|
||||||
|
error_invalid_template: "无效的模板, 请检查语法\n{{.Error}}"
|
||||||
info_filename_strategy_set: "已将文件名策略设置为: {{.Strategy}}"
|
info_filename_strategy_set: "已将文件名策略设置为: {{.Strategy}}"
|
||||||
prompt_select_filename_strategy: "请选择文件名策略, 当前策略: {{.Strategy}}"
|
prompt_select_filename_strategy: "请选择文件名策略, 当前策略: {{.Strategy}}"
|
||||||
fnametmpl_help: |-
|
fnametmpl_help: |-
|
||||||
@@ -275,3 +276,31 @@ bot:
|
|||||||
storage:
|
storage:
|
||||||
info_filename_prefix: "文件名: "
|
info_filename_prefix: "文件名: "
|
||||||
info_prompt_select_storage: "\n请选择存储位置"
|
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错误: "
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import (
|
|||||||
"github.com/gotd/td/telegram/message/entity"
|
"github.com/gotd/td/telegram/message/entity"
|
||||||
"github.com/gotd/td/telegram/message/styling"
|
"github.com/gotd/td/telegram/message/styling"
|
||||||
"github.com/gotd/td/tg"
|
"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/dlutil"
|
||||||
"github.com/krau/SaveAny-Bot/common/utils/tgutil"
|
"github.com/krau/SaveAny-Bot/common/utils/tgutil"
|
||||||
)
|
)
|
||||||
@@ -37,7 +39,7 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) {
|
|||||||
entityBuilder := entity.Builder{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
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())),
|
styling.Code(fmt.Sprintf("%.2f MB (%d个文件)", float64(info.TotalSize())/(1024*1024), info.Count())),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
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.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 {
|
func() styling.StyledTextOption {
|
||||||
var lines []string
|
var lines []string
|
||||||
for _, elem := range info.Processing() {
|
for _, elem := range info.Processing() {
|
||||||
lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024)))
|
lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024)))
|
||||||
}
|
}
|
||||||
if len(lines) == 0 {
|
if len(lines) == 0 {
|
||||||
lines = append(lines, " - 无")
|
lines = append(lines, i18n.T(i18nk.BotMsgProgressProcessingNone, nil))
|
||||||
}
|
}
|
||||||
return styling.Plain(slice.Join(lines, "\n"))
|
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.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)),
|
styling.Bold(fmt.Sprintf("%.2f%%", float64(info.Downloaded())/float64(info.TotalSize())*100)),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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 err != nil {
|
||||||
if errors.Is(err, context.Canceled) {
|
if errors.Is(err, context.Canceled) {
|
||||||
stylingErr = styling.Perform(&entityBuilder,
|
stylingErr = styling.Perform(&entityBuilder,
|
||||||
styling.Plain("任务已取消"),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressTaskCanceled, nil)),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
stylingErr = styling.Perform(&entityBuilder,
|
stylingErr = styling.Perform(&entityBuilder,
|
||||||
styling.Plain("处理失败, 错误:\n "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressTaskFailedWithError, map[string]any{
|
||||||
|
"Error": "",
|
||||||
|
})),
|
||||||
styling.Code(err.Error()),
|
styling.Code(err.Error()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
stylingErr = styling.Perform(&entityBuilder,
|
stylingErr = styling.Perform(&entityBuilder,
|
||||||
styling.Plain("处理完成\n文件数: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressBatchDonePrefix, nil)),
|
||||||
styling.Code(strconv.Itoa(info.Count())),
|
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))),
|
styling.Code(fmt.Sprintf("%.2f MB", float64(info.TotalSize())/(1024*1024))),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import (
|
|||||||
"github.com/gotd/td/telegram/message/entity"
|
"github.com/gotd/td/telegram/message/entity"
|
||||||
"github.com/gotd/td/telegram/message/styling"
|
"github.com/gotd/td/telegram/message/styling"
|
||||||
"github.com/gotd/td/tg"
|
"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/dlutil"
|
||||||
"github.com/krau/SaveAny-Bot/common/utils/tgutil"
|
"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)
|
ext := tgutil.ExtFromContext(ctx)
|
||||||
if ext != nil {
|
if ext != nil {
|
||||||
ext.EditMessage(p.chatID, &tg.MessagesEditMessageRequest{
|
ext.EditMessage(p.chatID, &tg.MessagesEditMessageRequest{
|
||||||
ID: p.msgID,
|
ID: p.msgID,
|
||||||
Message: fmt.Sprintf("处理已取消: %s", info.TaskID()),
|
Message: i18n.T(i18nk.BotMsgProgressTaskCanceledWithId, map[string]any{
|
||||||
|
"TaskID": info.TaskID(),
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -62,8 +66,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) {
|
|||||||
ext := tgutil.ExtFromContext(ctx)
|
ext := tgutil.ExtFromContext(ctx)
|
||||||
if ext != nil {
|
if ext != nil {
|
||||||
ext.EditMessage(p.chatID, &tg.MessagesEditMessageRequest{
|
ext.EditMessage(p.chatID, &tg.MessagesEditMessageRequest{
|
||||||
ID: p.msgID,
|
ID: p.msgID,
|
||||||
Message: fmt.Sprintf("处理失败: %s", err.Error()),
|
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{}
|
entityBuilder := entity.Builder{}
|
||||||
if err := styling.Perform(&entityBuilder,
|
if err := styling.Perform(&entityBuilder,
|
||||||
styling.Plain("处理完成, 文件数量: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressDirectDonePrefix, nil)),
|
||||||
styling.Code(fmt.Sprintf("%d", info.TotalFiles())),
|
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())),
|
styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
logger.Errorf("Failed to build entities: %s", err)
|
logger.Errorf("Failed to build entities: %s", err)
|
||||||
@@ -108,22 +114,22 @@ func (p *Progress) OnProgress(ctx context.Context, info TaskInfo) {
|
|||||||
entityBuilder := entity.Builder{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
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.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 {
|
func() styling.StyledTextOption {
|
||||||
var lines []string
|
var lines []string
|
||||||
for _, elem := range info.Processing() {
|
for _, elem := range info.Processing() {
|
||||||
lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024)))
|
lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024)))
|
||||||
}
|
}
|
||||||
if len(lines) == 0 {
|
if len(lines) == 0 {
|
||||||
lines = append(lines, " - 无")
|
lines = append(lines, i18n.T(i18nk.BotMsgProgressProcessingNone, nil))
|
||||||
}
|
}
|
||||||
return styling.Plain(slice.Join(lines, "\n"))
|
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.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)),
|
styling.Bold(fmt.Sprintf("%.2f%%", float64(info.DownloadedBytes())/float64(info.TotalBytes())*100)),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
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)
|
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import (
|
|||||||
"github.com/gotd/td/telegram/message/entity"
|
"github.com/gotd/td/telegram/message/entity"
|
||||||
"github.com/gotd/td/telegram/message/styling"
|
"github.com/gotd/td/telegram/message/styling"
|
||||||
"github.com/gotd/td/tg"
|
"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/dlutil"
|
||||||
"github.com/krau/SaveAny-Bot/common/utils/tgutil"
|
"github.com/krau/SaveAny-Bot/common/utils/tgutil"
|
||||||
)
|
)
|
||||||
@@ -68,7 +70,9 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) {
|
|||||||
entityBuilder := entity.Builder{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
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())),
|
styling.Code(fmt.Sprintf("%.2f MB (%d个资源)", float64(info.TotalBytes())/(1024*1024), info.TotalResources())),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
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.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 {
|
func() styling.StyledTextOption {
|
||||||
var lines []string
|
var lines []string
|
||||||
for _, elem := range info.Processing() {
|
for _, elem := range info.Processing() {
|
||||||
lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024)))
|
lines = append(lines, fmt.Sprintf(" - %s (%.2f MB)", elem.FileName(), float64(elem.FileSize())/(1024*1024)))
|
||||||
}
|
}
|
||||||
if len(lines) == 0 {
|
if len(lines) == 0 {
|
||||||
lines = append(lines, " - 无")
|
lines = append(lines, i18n.T(i18nk.BotMsgProgressProcessingNone, nil))
|
||||||
}
|
}
|
||||||
return styling.Plain(slice.Join(lines, "\n"))
|
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.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)),
|
styling.Bold(fmt.Sprintf("%.2f%%", float64(info.DownloadedBytes())/float64(info.TotalBytes())*100)),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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)
|
ext := tgutil.ExtFromContext(ctx)
|
||||||
if ext != nil {
|
if ext != nil {
|
||||||
ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{
|
ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{
|
||||||
ID: p.MessageID,
|
ID: p.MessageID,
|
||||||
Message: fmt.Sprintf("处理已取消: %s", info.TaskID()),
|
Message: i18n.T(i18nk.BotMsgProgressTaskCanceledWithId, map[string]any{
|
||||||
|
"TaskID": info.TaskID(),
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -169,8 +175,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) {
|
|||||||
ext := tgutil.ExtFromContext(ctx)
|
ext := tgutil.ExtFromContext(ctx)
|
||||||
if ext != nil {
|
if ext != nil {
|
||||||
ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{
|
ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{
|
||||||
ID: p.MessageID,
|
ID: p.MessageID,
|
||||||
Message: fmt.Sprintf("处理失败: %s", err.Error()),
|
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{}
|
entityBuilder := entity.Builder{}
|
||||||
if err := styling.Perform(&entityBuilder,
|
if err := styling.Perform(&entityBuilder,
|
||||||
styling.Plain("处理完成, 资源数量: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressParsedDonePrefix, nil)),
|
||||||
styling.Code(fmt.Sprintf("%d", info.TotalResources())),
|
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())),
|
styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
logger.Errorf("Failed to build entities: %s", err)
|
logger.Errorf("Failed to build entities: %s", err)
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import (
|
|||||||
"github.com/gotd/td/telegram/message/entity"
|
"github.com/gotd/td/telegram/message/entity"
|
||||||
"github.com/gotd/td/telegram/message/styling"
|
"github.com/gotd/td/telegram/message/styling"
|
||||||
"github.com/gotd/td/tg"
|
"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"
|
"github.com/krau/SaveAny-Bot/common/utils/tgutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -29,7 +31,7 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) {
|
|||||||
entityBuilder := entity.Builder{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
if err := styling.Perform(&entityBuilder,
|
||||||
styling.Plain("开始下载Telegraph\n图片数量: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressTelegraphStartPrefix, nil)),
|
||||||
styling.Code(fmt.Sprintf("%d", info.TotalPics())),
|
styling.Code(fmt.Sprintf("%d", info.TotalPics())),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
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())),
|
styling.Code(fmt.Sprintf("%d/%d", info.Downloaded(), info.TotalPics())),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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)
|
ext := tgutil.ExtFromContext(ctx)
|
||||||
if ext != nil {
|
if ext != nil {
|
||||||
ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{
|
ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{
|
||||||
ID: p.MessageID,
|
ID: p.MessageID,
|
||||||
Message: fmt.Sprintf("处理已取消: %s", info.TaskID()),
|
Message: i18n.T(i18nk.BotMsgProgressTaskCanceledWithId, map[string]any{
|
||||||
|
"TaskID": info.TaskID(),
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -110,8 +114,10 @@ func (p *Progress) OnDone(ctx context.Context, info TaskInfo, err error) {
|
|||||||
ext := tgutil.ExtFromContext(ctx)
|
ext := tgutil.ExtFromContext(ctx)
|
||||||
if ext != nil {
|
if ext != nil {
|
||||||
ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{
|
ext.EditMessage(p.ChatID, &tg.MessagesEditMessageRequest{
|
||||||
ID: p.MessageID,
|
ID: p.MessageID,
|
||||||
Message: fmt.Sprintf("处理失败: %s", err.Error()),
|
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{}
|
entityBuilder := entity.Builder{}
|
||||||
if err := styling.Perform(&entityBuilder,
|
if err := styling.Perform(&entityBuilder,
|
||||||
styling.Plain("处理完成\n图片数量: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressTelegraphDonePrefix, nil)),
|
||||||
styling.Code(fmt.Sprintf("%d", info.TotalPics())),
|
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())),
|
styling.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
logger.Errorf("Failed to build entities: %s", err)
|
logger.Errorf("Failed to build entities: %s", err)
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import (
|
|||||||
"github.com/gotd/td/telegram/message/entity"
|
"github.com/gotd/td/telegram/message/entity"
|
||||||
"github.com/gotd/td/telegram/message/styling"
|
"github.com/gotd/td/telegram/message/styling"
|
||||||
"github.com/gotd/td/tg"
|
"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/dlutil"
|
||||||
"github.com/krau/SaveAny-Bot/common/utils/tgutil"
|
"github.com/krau/SaveAny-Bot/common/utils/tgutil"
|
||||||
)
|
)
|
||||||
@@ -35,11 +37,11 @@ func (p *Progress) OnStart(ctx context.Context, info TaskInfo) {
|
|||||||
entityBuilder := entity.Builder{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
if err := styling.Perform(&entityBuilder,
|
||||||
styling.Plain("开始下载\n文件名: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressFileStartPrefix, nil)),
|
||||||
styling.Code(info.FileName()),
|
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.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))),
|
styling.Code(fmt.Sprintf("%.2f MB", float64(info.FileSize())/(1024*1024))),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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{}
|
entityBuilder := entity.Builder{}
|
||||||
var entities []tg.MessageEntityClass
|
var entities []tg.MessageEntityClass
|
||||||
if err := styling.Perform(&entityBuilder,
|
if err := styling.Perform(&entityBuilder,
|
||||||
styling.Plain("正在处理下载任务\n文件名: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressFileProcessingPrefix, nil)),
|
||||||
styling.Code(info.FileName()),
|
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.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.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.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)),
|
styling.Bold(fmt.Sprintf("%.2f%%", float64(downloaded)/float64(total)*100)),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.FromContext(ctx).Errorf("Failed to build entities: %s", err)
|
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 err != nil {
|
||||||
if errors.Is(err, context.Canceled) {
|
if errors.Is(err, context.Canceled) {
|
||||||
stylingErr = styling.Perform(&entityBuilder,
|
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()),
|
styling.Code(info.FileName()),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
stylingErr = styling.Perform(&entityBuilder,
|
stylingErr = styling.Perform(&entityBuilder,
|
||||||
styling.Plain("下载失败\n文件名: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressDownloadFailedPrefix, nil)),
|
||||||
styling.Code(info.FileName()),
|
styling.Code(info.FileName()),
|
||||||
styling.Plain("\n错误: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressErrorPrefix, nil)),
|
||||||
styling.Bold(err.Error()),
|
styling.Bold(err.Error()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
stylingErr = styling.Perform(&entityBuilder,
|
stylingErr = styling.Perform(&entityBuilder,
|
||||||
styling.Plain("下载完成\n文件名: "),
|
styling.Plain(i18n.T(i18nk.BotMsgProgressDownloadDonePrefix, nil)),
|
||||||
styling.Code(info.FileName()),
|
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.Code(fmt.Sprintf("[%s]:%s", info.StorageName(), info.StoragePath())),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user