regex/doClean.go

121 lines
2.7 KiB
Go

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)
}