Spaces:
Paused
Paused
| package base | |
| import ( | |
| "fmt" | |
| "strings" | |
| "time" | |
| "github.com/Xhofe/go-cache" | |
| "github.com/alist-org/alist/v3/internal/driver" | |
| ) | |
| // storage upload progress, for upload recovery | |
| var UploadStateCache = cache.NewMemCache(cache.WithShards[any](32)) | |
| // Save upload progress for 20 minutes | |
| func SaveUploadProgress(driver driver.Driver, state any, keys ...string) bool { | |
| return UploadStateCache.Set( | |
| fmt.Sprint(driver.Config().Name, "-upload-", strings.Join(keys, "-")), | |
| state, | |
| cache.WithEx[any](time.Minute*20)) | |
| } | |
| // An upload progress can only be made by one process alone, | |
| // so here you need to get it and then delete it. | |
| func GetUploadProgress[T any](driver driver.Driver, keys ...string) (state T, ok bool) { | |
| v, ok := UploadStateCache.GetDel(fmt.Sprint(driver.Config().Name, "-upload-", strings.Join(keys, "-"))) | |
| if ok { | |
| state, ok = v.(T) | |
| } | |
| return | |
| } | |