diff --git a/server/internal/handler/lrcHandlers.go b/server/internal/handler/lrcHandlers.go index 089037d..47aec8e 100644 --- a/server/internal/handler/lrcHandlers.go +++ b/server/internal/handler/lrcHandlers.go @@ -247,30 +247,10 @@ func (h *Handler) getImage(w http.ResponseWriter, r *http.Request) { if cid == "" { h.serverError(w, errors.New("empty cid")) } - uploadDir := "./uploads" - _, err = os.Stat(uploadDir) - if os.IsNotExist(err) { - os.Mkdir(uploadDir, 0755) - } - - imgPath := fmt.Sprintf("%s/%s%s", uploadDir, did, cid) - _, err = os.Stat(imgPath) + imgPath, err := h.rm.AddImageToCache(did, cid, r.Context()) if err != nil { - blob, err := atputils.SyncGetBlob(did, cid, r.Context()) - if err != nil { - h.serverError(w, err) - return - } - file, err := os.Create(imgPath) - if err != nil { - h.serverError(w, err) - return - } - _, err = file.Write(blob) - if err != nil { - h.serverError(w, err) - return - } + h.serverError(w, errors.New("beep: "+err.Error())) + return } stats, err := os.Stat(imgPath) diff --git a/server/internal/recordmanager/media.go b/server/internal/recordmanager/media.go index a17be10..83cc3fb 100644 --- a/server/internal/recordmanager/media.go +++ b/server/internal/recordmanager/media.go @@ -3,10 +3,13 @@ package recordmanager import ( "context" "errors" + "fmt" atoauth "github.com/bluesky-social/indigo/atproto/auth/oauth" "github.com/bluesky-social/indigo/atproto/syntax" lexutil "github.com/bluesky-social/indigo/lex/util" "mime/multipart" + "os" + "rvcx/internal/atputils" "rvcx/internal/lex" "rvcx/internal/oauth" "rvcx/internal/types" @@ -17,6 +20,32 @@ func (rm *RecordManager) PostImage(cs *atoauth.ClientSession, file multipart.Fil return oauth.UploadBLOB(cs, file, fileHeader, ctx) } +func (rm *RecordManager) AddImageToCache(did string, cid string, ctx context.Context) (string, error) { + uploadDir := "./uploads" + _, err := os.Stat(uploadDir) + if os.IsNotExist(err) { + os.Mkdir(uploadDir, 0755) + } + + imgPath := fmt.Sprintf("%s/%s%s", uploadDir, did, cid) + _, err = os.Stat(imgPath) + if err != nil { + blob, err := atputils.SyncGetBlob(did, cid, ctx) + if err != nil { + return "", err + } + file, err := os.Create(imgPath) + if err != nil { + return "", err + } + _, err = file.Write(blob) + if err != nil { + return "", err + } + } + return imgPath, nil +} + func (rm *RecordManager) PostMedia(cs *atoauth.ClientSession, mr *types.ParseMediaRequest, ctx context.Context) error { switch mr.Type { case "image":