Files
2026-10-21 13:29:03 +08:00

61 lines
1.2 KiB
Go

package callback
import (
"context"
"os"
"path/filepath"
"strings"
"time"
"lone-services/pkg/redis"
"lone-services/pkg/utils"
pkgws "lone-services/pkg/ws"
)
func CacheUploadedLights(taskID, finalDir string) error {
files, err := os.ReadDir(finalDir)
if err != nil {
return err
}
seen := make(map[string]struct{})
lights := make([]interface{}, 0)
for _, file := range files {
if file.IsDir() {
continue
}
light := lightingTypeFromFileName(file.Name())
if light == utils.StringEmpty {
continue
}
if _, ok := seen[light]; ok {
continue
}
seen[light] = struct{}{}
lights = append(lights, light)
}
if len(lights) == 0 {
return nil
}
ctx := context.Background()
key := pkgws.RedisKeyTaskLights + taskID
if err = redis.Client.SAdd(ctx, key, lights...).Err(); err != nil {
return err
}
return redis.Client.Expire(ctx, key, time.Hour).Err()
}
func lightingTypeFromFileName(fileName string) string {
ext := strings.ToLower(filepath.Ext(fileName))
if !isImageExt(ext) {
return utils.StringEmpty
}
base := strings.TrimSuffix(fileName, filepath.Ext(fileName))
parts := strings.Split(base, "_")
if len(parts) < 2 {
return utils.StringEmpty
}
return strings.ToLower(parts[0])
}