Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
edef778959 | ||
|
|
0bd9b77856 |
12
common/os.go
12
common/os.go
@@ -33,6 +33,18 @@ func PurgeFile(path string) error {
|
||||
return RemoveEmptyDirectories(filepath.Dir(path))
|
||||
}
|
||||
|
||||
func RmFileAfter(path string, td time.Duration) {
|
||||
_, err := os.Stat(path)
|
||||
if err != nil {
|
||||
logger.L.Errorf("Failed to create timer for %s: %s", path, err)
|
||||
return
|
||||
}
|
||||
logger.L.Debugf("Remove file after %s: %s", td, path)
|
||||
time.AfterFunc(td, func() {
|
||||
PurgeFile(path)
|
||||
})
|
||||
}
|
||||
|
||||
// 递归删除空目录
|
||||
func RemoveEmptyDirectories(dirPath string) error {
|
||||
entries, err := os.ReadDir(dirPath)
|
||||
|
||||
@@ -8,8 +8,9 @@ import (
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Threads int `toml:"threads" mapstructure:"threads"`
|
||||
Workers int `toml:"workers" mapstructure:"workers"`
|
||||
Threads int `toml:"threads" mapstructure:"threads"`
|
||||
Workers int `toml:"workers" mapstructure:"workers"`
|
||||
ChunkSize int32 `toml:"chunk_size" mapstructure:"chunk_size"`
|
||||
|
||||
Temp tempConfig `toml:"temp" mapstructure:"temp"`
|
||||
Log logConfig `toml:"log" mapstructure:"log"`
|
||||
@@ -77,6 +78,7 @@ func Init() {
|
||||
|
||||
viper.SetDefault("threads", 3)
|
||||
viper.SetDefault("workers", 3)
|
||||
viper.SetDefault("chunk_size", 50*1024*1024)
|
||||
|
||||
viper.SetDefault("temp.base_path", "cache/")
|
||||
viper.SetDefault("temp.cache_ttl", 3600)
|
||||
|
||||
12
core/core.go
12
core/core.go
@@ -3,6 +3,7 @@ package core
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/amarnathcjd/gogram/telegram"
|
||||
@@ -16,6 +17,8 @@ import (
|
||||
)
|
||||
|
||||
func processPendingTask(task types.Task) error {
|
||||
os.MkdirAll(config.Cfg.Temp.BasePath, os.ModePerm)
|
||||
|
||||
message, err := bot.Client.GetMessageByID(task.ChatID, task.MessageID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -23,8 +26,9 @@ func processPendingTask(task types.Task) error {
|
||||
logger.L.Debugf("Start downloading file: %s", task.FileName)
|
||||
bot.Client.EditMessage(task.ChatID, task.ReplyMessageID, "正在下载文件...")
|
||||
dest, err := message.Download(&telegram.DownloadOptions{
|
||||
FileName: common.GetCacheFilePath(task.FileName),
|
||||
Threads: config.Cfg.Threads,
|
||||
FileName: common.GetCacheFilePath(task.FileName),
|
||||
Threads: config.Cfg.Threads,
|
||||
ChunkSize: config.Cfg.ChunkSize,
|
||||
// ProgressCallback: func(totalBytes, downloadedBytes int64) {},
|
||||
})
|
||||
if err != nil {
|
||||
@@ -33,9 +37,9 @@ func processPendingTask(task types.Task) error {
|
||||
|
||||
defer func() {
|
||||
if config.Cfg.Temp.CacheTTL > 0 {
|
||||
common.PurgeFileAfter(dest, time.Duration(config.Cfg.Temp.CacheTTL)*time.Second)
|
||||
common.RmFileAfter(dest, time.Duration(config.Cfg.Temp.CacheTTL)*time.Second)
|
||||
} else {
|
||||
if err := common.PurgeFile(dest); err != nil {
|
||||
if err := os.Remove(dest); err != nil {
|
||||
logger.L.Errorf("Failed to purge file: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user