feat: add import command and batch import functionality

- Implemented the `/import` command to allow users to import files from storage to Telegram.
- Added support for listing files in storage and filtering based on regex patterns.
- Created a batch import task to handle multiple file uploads concurrently.
- Introduced progress tracking for batch imports, providing real-time updates to users.
- Enhanced storage interfaces to support file listing and reading capabilities.
- Updated localization files for the new import command and its usage instructions.
- Added utility functions for file size formatting and speed calculation.
- Refactored Telegram storage handling to support reading from non-seekable streams.
This commit is contained in:
krau
2026-01-17 18:59:09 +08:00
parent 3ce00884a0
commit eda0756f0c
18 changed files with 902 additions and 69 deletions

View File

@@ -1,5 +1,5 @@
package tasktype
//go:generate go-enum --values --names --flag --nocase
// ENUM(tgfiles,tphpics,parseditem,directlinks,aria2,ytdlp)
// ENUM(tgfiles,tphpics,parseditem,directlinks,aria2,ytdlp,batchimport)
type TaskType string

View File

@@ -24,6 +24,8 @@ const (
TaskTypeAria2 TaskType = "aria2"
// TaskTypeYtdlp is a TaskType of type ytdlp.
TaskTypeYtdlp TaskType = "ytdlp"
// TaskTypeBatchimport is a TaskType of type batchimport.
TaskTypeBatchimport TaskType = "batchimport"
)
var ErrInvalidTaskType = fmt.Errorf("not a valid TaskType, try [%s]", strings.Join(_TaskTypeNames, ", "))
@@ -35,6 +37,7 @@ var _TaskTypeNames = []string{
string(TaskTypeDirectlinks),
string(TaskTypeAria2),
string(TaskTypeYtdlp),
string(TaskTypeBatchimport),
}
// TaskTypeNames returns a list of possible string values of TaskType.
@@ -53,6 +56,7 @@ func TaskTypeValues() []TaskType {
TaskTypeDirectlinks,
TaskTypeAria2,
TaskTypeYtdlp,
TaskTypeBatchimport,
}
}
@@ -75,6 +79,7 @@ var _TaskTypeValue = map[string]TaskType{
"directlinks": TaskTypeDirectlinks,
"aria2": TaskTypeAria2,
"ytdlp": TaskTypeYtdlp,
"batchimport": TaskTypeBatchimport,
}
// ParseTaskType attempts to convert a string to a TaskType.

View File

@@ -0,0 +1,12 @@
package storagetypes
import "time"
// FileInfo 表示文件元数据
type FileInfo struct {
Name string
Path string
Size int64
IsDir bool
ModTime time.Time
}