61 lines
1.2 KiB
Go
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])
|
|
}
|