package imgedit import ( "encoding/json" "io" "os" "path/filepath" "lmika.dev/lmika/weiro/models" ) type sessionStore struct { baseDir string } func (ss *sessionStore) save(newSession *models.ImageEditSession) error { sessionMeta, err := json.Marshal(newSession) if err != nil { return err } if err := os.MkdirAll(filepath.Join(ss.baseDir, newSession.GUID), 0755); err != nil { return err } if err := os.WriteFile(filepath.Join(ss.baseDir, newSession.GUID, "session.json"), sessionMeta, 0644); err != nil { return err } return nil } func (ss *sessionStore) get(guid string) (*models.ImageEditSession, error) { sessionDataBts, err := os.ReadFile(filepath.Join(ss.baseDir, guid, "session.json")) if err != nil { return nil, err } sessionData := models.ImageEditSession{} if err := json.Unmarshal(sessionDataBts, &sessionData); err != nil { return nil, err } return &sessionData, nil } func (ss *sessionStore) getImage(session *models.ImageEditSession, imageFilename string) (string, func() (io.ReadCloser, error), error) { fullPath := filepath.Join(ss.baseDir, session.GUID, imageFilename) if s, err := os.Stat(fullPath); err != nil { return "", nil, err } else if s.IsDir() { return "", nil, os.ErrNotExist } var mimeType string switch filepath.Ext(imageFilename) { case ".jpg", ".jpeg": mimeType = "image/jpeg" case ".png": mimeType = "image/png" default: return "", nil, models.UnsupportedImageFormat } return mimeType, func() (io.ReadCloser, error) { return os.Open(fullPath) }, nil }