package main import ( "os" "path/filepath" "strings" "go.wit.com/lib/protobuf/chatpb" "go.wit.com/log" "google.golang.org/protobuf/types/known/timestamppb" ) func doClean() { log.Info("find all files") scanTmp() } func scanTmp() { var count int filepath.WalkDir("/tmp", func(path string, d os.DirEntry, err error) error { if err != nil { // Handle possible errors, like permission issues // fmt.Fprintf(os.Stderr, "error accessing path %q: %v\n", path, err) // ignore all these problems return err } /* if d.IsDir() { // log.Info("path is dir", path) return nil } */ _, fname := filepath.Split(path) if !strings.HasPrefix(fname, "regex.") { return nil } if count > 5 { return log.Errorf("count exceeded") } if strings.HasPrefix(fname, "regex.gemini-api-response") { // log.Info("response file:", fname) return nil } if strings.Contains(fname, "gemini-api-request") { // log.Info("response file:", fname) if err := cleanGeminiFile(path); err == nil { count += 1 return nil } else { return nil } } if strings.HasSuffix(fname, ".stats") { cleanStatsFile(path) return nil } log.Info("check file:", path) return nil }) } func cleanStatsFile(fullname string) { log.Info("stats file", fullname) } func cleanGeminiFile(fullname string) error { _, fname := filepath.Split(fullname) if !strings.HasSuffix(fname, ".json") { return log.Errorf("not really gemini-api-request .json") } parts := strings.Split(fname, ".") if len(parts) == 5 { if parts[2] != "gemini-api-request" { return log.Errorf("not really gemini-api-request") } } // log.Info("PARSE FILE:", fullname) pb, err := parsePB(fullname) if err != nil { log.Info("parsePB() %s err %v\n", fullname, err) return log.Errorf("parsePB() %s err %v", fullname, err) } if pb == nil { log.Info("parsePB() == nil\n") return log.Errorf("parsePB() == nil") } uuid := parts[1] if chat := me.chats.FindUuid(uuid); chat != nil { log.Info("found uuid in chat", uuid, pb.Model, chat.Uuid) statf, err := os.Stat(fullname) if err == nil { age := statf.ModTime() if chat.AddGeminiRequest(fname, age, pb) { me.chats.ConfigSave() okExit("") } } return nil } id := parts[3] if id == "1" { log.Info("Insert new chat here", fullname, id) statf, err := os.Stat(fullname) if err == nil { age := statf.ModTime() c := new(chatpb.Chat) c.Ctime = timestamppb.New(age) c.Uuid = uuid c.ChatName = "auto clean" log.Info("new chat:", c.Uuid, c.Ctime) me.chats.Append(c) me.chats.ConfigSave() okExit("") } } log.Info("gemini JSON file uuid not found", fullname, id) return log.Errorf("gemini JSON file uuid %s not found", uuid) }