Skip to content

Commit 1a5a6ac

Browse files
committed
fix: go back to synchronous image processing
1 parent aba2b76 commit 1a5a6ac

10 files changed

Lines changed: 58 additions & 168 deletions

File tree

engine/engine.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@ func Run(
101101
EnableDeezer: !cfg.DeezerDisabled(),
102102
})
103103

104-
ip := catalog.NewImageProcessor(1)
105-
106104
userCount, _ := store.CountUsers(ctx)
107105
if userCount < 1 {
108106
l.Debug().Msg("Creating default user...")
@@ -147,7 +145,7 @@ func Run(
147145
mux.Use(chimiddleware.Recoverer)
148146
mux.Use(chimiddleware.RealIP)
149147
// call router binds on mux
150-
bindRoutes(mux, &ready, store, mbzC, ip)
148+
bindRoutes(mux, &ready, store, mbzC)
151149

152150
httpServer := &http.Server{
153151
Addr: cfg.ListenAddr(),

engine/handlers/image_handler.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
"github.com/google/uuid"
1818
)
1919

20-
func ImageHandler(store db.DB, ip *catalog.ImageProcessor) http.HandlerFunc {
20+
func ImageHandler(store db.DB) http.HandlerFunc {
2121
return func(w http.ResponseWriter, r *http.Request) {
2222
l := logger.FromContext(r.Context())
2323
size := chi.URLParam(r, "size")
@@ -31,7 +31,7 @@ func ImageHandler(store db.DB, ip *catalog.ImageProcessor) http.HandlerFunc {
3131

3232
imgid, err := uuid.Parse(filename)
3333
if err != nil {
34-
serveDefaultImage(w, r, imageSize, ip)
34+
serveDefaultImage(w, r, imageSize)
3535
return
3636
}
3737

@@ -51,7 +51,7 @@ func ImageHandler(store db.DB, ip *catalog.ImageProcessor) http.HandlerFunc {
5151
if _, err = os.Stat(fullSizePath); os.IsNotExist(err) {
5252
if _, err = os.Stat(largeSizePath); os.IsNotExist(err) {
5353
l.Warn().Msgf("Could not find requested image %s. If this image is tied to an album or artist, it should be replaced", imgid.String())
54-
serveDefaultImage(w, r, imageSize, ip)
54+
serveDefaultImage(w, r, imageSize)
5555
return
5656
} else if err != nil {
5757
// non-not found error for full file
@@ -80,7 +80,7 @@ func ImageHandler(store db.DB, ip *catalog.ImageProcessor) http.HandlerFunc {
8080
return
8181
}
8282

83-
err = ip.EnqueueCompressAndSave(r.Context(), imgid.String(), imageSize, bytes.NewReader(imageBuf))
83+
err = catalog.CompressAndSaveImage(r.Context(), imgid.String(), imageSize, bytes.NewReader(imageBuf))
8484
if err != nil {
8585
l.Err(err).Msg("Failed to save compressed image to cache")
8686
}
@@ -96,7 +96,7 @@ func ImageHandler(store db.DB, ip *catalog.ImageProcessor) http.HandlerFunc {
9696
}
9797
}
9898

99-
func serveDefaultImage(w http.ResponseWriter, r *http.Request, size catalog.ImageSize, ip *catalog.ImageProcessor) {
99+
func serveDefaultImage(w http.ResponseWriter, r *http.Request, size catalog.ImageSize) {
100100
var lock sync.Mutex
101101
l := logger.FromContext(r.Context())
102102
defaultImagePath := filepath.Join(cfg.ConfigDir(), catalog.ImageCacheDir, string(size), "default_img")
@@ -127,7 +127,7 @@ func serveDefaultImage(w http.ResponseWriter, r *http.Request, size catalog.Imag
127127
w.WriteHeader(http.StatusInternalServerError)
128128
return
129129
}
130-
err = ip.EnqueueCompressAndSave(r.Context(), "default_img", size, file)
130+
err = catalog.CompressAndSaveImage(r.Context(), "default_img", size, file)
131131
if err != nil {
132132
l.Err(err).Msg("Error when caching default img at desired size")
133133
w.WriteHeader(http.StatusInternalServerError)

engine/handlers/replace_image.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type ReplaceImageResponse struct {
2020
Message string `json:"message,omitempty"`
2121
}
2222

23-
func ReplaceImageHandler(store db.DB, ip *catalog.ImageProcessor) http.HandlerFunc {
23+
func ReplaceImageHandler(store db.DB) http.HandlerFunc {
2424
return func(w http.ResponseWriter, r *http.Request) {
2525
ctx := r.Context()
2626
l := logger.FromContext(ctx)
@@ -80,7 +80,7 @@ func ReplaceImageHandler(store db.DB, ip *catalog.ImageProcessor) http.HandlerFu
8080
dlSize = catalog.ImageSizeLarge
8181
}
8282
l.Debug().Msg("Downloading album image from source...")
83-
err = ip.EnqueueDownloadAndCache(ctx, id, fileUrl, dlSize)
83+
err = catalog.DownloadAndCacheImage(ctx, id, fileUrl, dlSize)
8484
if err != nil {
8585
l.Err(err).Msg("Failed to cache image")
8686
}
@@ -120,7 +120,7 @@ func ReplaceImageHandler(store db.DB, ip *catalog.ImageProcessor) http.HandlerFu
120120
dlSize = catalog.ImageSizeLarge
121121
}
122122

123-
err = ip.EnqueueCompressAndSave(ctx, id.String(), dlSize, file)
123+
err = catalog.CompressAndSaveImage(ctx, id.String(), dlSize, file)
124124
if err != nil {
125125
utils.WriteError(w, "Could not save file", http.StatusInternalServerError)
126126
return

engine/routes.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010

1111
"github.com/gabehf/koito/engine/handlers"
1212
"github.com/gabehf/koito/engine/middleware"
13-
"github.com/gabehf/koito/internal/catalog"
1413
"github.com/gabehf/koito/internal/cfg"
1514
"github.com/gabehf/koito/internal/db"
1615
mbz "github.com/gabehf/koito/internal/mbz"
@@ -25,11 +24,10 @@ func bindRoutes(
2524
ready *atomic.Bool,
2625
db db.DB,
2726
mbz mbz.MusicBrainzCaller,
28-
ip *catalog.ImageProcessor,
2927
) {
3028
r.With(chimiddleware.RequestSize(5<<20)).
3129
With(middleware.AllowedHosts).
32-
Get("/images/{size}/{filename}", handlers.ImageHandler(db, ip))
30+
Get("/images/{size}/{filename}", handlers.ImageHandler(db))
3331

3432
r.Route("/apis/web/v1", func(r chi.Router) {
3533
r.Use(middleware.AllowedHosts)
@@ -67,7 +65,7 @@ func bindRoutes(
6765

6866
r.Group(func(r chi.Router) {
6967
r.Use(middleware.ValidateSession(db))
70-
r.Post("/replace-image", handlers.ReplaceImageHandler(db, ip))
68+
r.Post("/replace-image", handlers.ReplaceImageHandler(db))
7169
r.Post("/merge/tracks", handlers.MergeTracksHandler(db))
7270
r.Post("/merge/albums", handlers.MergeReleaseGroupsHandler(db))
7371
r.Post("/merge/artists", handlers.MergeArtistsHandler(db))

internal/catalog/associate_album.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ type AssociateAlbumOpts struct {
2323
ReleaseName string
2424
TrackName string // required
2525
Mbzc mbz.MusicBrainzCaller
26-
IP *ImageProcessor
2726
}
2827

2928
func AssociateAlbum(ctx context.Context, d db.DB, opts AssociateAlbumOpts) (*models.Album, error) {
@@ -134,7 +133,7 @@ func createOrUpdateAlbumWithMbzReleaseID(ctx context.Context, d db.DB, opts Asso
134133
}
135134
imgid = uuid.New()
136135
l.Debug().Msg("Downloading album image from source...")
137-
err = opts.IP.EnqueueDownloadAndCache(ctx, imgid, imgUrl, size)
136+
err = DownloadAndCacheImage(ctx, imgid, imgUrl, size)
138137
if err != nil {
139138
l.Err(err).Msg("Failed to cache image")
140139
}
@@ -217,7 +216,7 @@ func matchAlbumByTitle(ctx context.Context, d db.DB, opts AssociateAlbumOpts) (*
217216
}
218217
imgid = uuid.New()
219218
l.Debug().Msg("Downloading album image from source...")
220-
err = opts.IP.EnqueueDownloadAndCache(ctx, imgid, imgUrl, size)
219+
err = DownloadAndCacheImage(ctx, imgid, imgUrl, size)
221220
if err != nil {
222221
l.Err(err).Msg("Failed to cache image")
223222
}

internal/catalog/associate_artists.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ type AssociateArtistsOpts struct {
2222
ArtistName string
2323
TrackTitle string
2424
Mbzc mbz.MusicBrainzCaller
25-
IP *ImageProcessor
2625
}
2726

2827
func AssociateArtists(ctx context.Context, d db.DB, opts AssociateArtistsOpts) ([]*models.Artist, error) {
@@ -41,7 +40,7 @@ func AssociateArtists(ctx context.Context, d db.DB, opts AssociateArtistsOpts) (
4140

4241
if len(opts.ArtistNames) > len(result) {
4342
l.Debug().Msg("Associating artists by list of artist names")
44-
nameMatches, err := matchArtistsByNames(ctx, opts.ArtistNames, result, d, opts)
43+
nameMatches, err := matchArtistsByNames(ctx, opts.ArtistNames, result, d)
4544
if err != nil {
4645
return nil, err
4746
}
@@ -51,7 +50,7 @@ func AssociateArtists(ctx context.Context, d db.DB, opts AssociateArtistsOpts) (
5150
if len(result) < 1 {
5251
allArtists := slices.Concat(opts.ArtistNames, ParseArtists(opts.ArtistName, opts.TrackTitle))
5352
l.Debug().Msgf("Associating artists by artist name(s) %v and track title '%s'", allArtists, opts.TrackTitle)
54-
fallbackMatches, err := matchArtistsByNames(ctx, allArtists, nil, d, opts)
53+
fallbackMatches, err := matchArtistsByNames(ctx, allArtists, nil, d)
5554
if err != nil {
5655
return nil, err
5756
}
@@ -68,7 +67,7 @@ func matchArtistsByMBID(ctx context.Context, d db.DB, opts AssociateArtistsOpts)
6867
for _, id := range opts.ArtistMbzIDs {
6968
if id == uuid.Nil {
7069
l.Warn().Msg("Provided artist has uuid.Nil MusicBrainzID")
71-
return matchArtistsByNames(ctx, opts.ArtistNames, result, d, opts)
70+
return matchArtistsByNames(ctx, opts.ArtistNames, result, d)
7271
}
7372
a, err := d.GetArtist(ctx, db.GetArtistOpts{
7473
MusicBrainzID: id,
@@ -86,20 +85,20 @@ func matchArtistsByMBID(ctx context.Context, d db.DB, opts AssociateArtistsOpts)
8685
if len(opts.ArtistNames) < 1 {
8786
opts.ArtistNames = slices.Concat(opts.ArtistNames, ParseArtists(opts.ArtistName, opts.TrackTitle))
8887
}
89-
a, err = resolveAliasOrCreateArtist(ctx, id, opts.ArtistNames, d, opts)
88+
a, err = resolveAliasOrCreateArtist(ctx, id, opts.ArtistNames, d, opts.Mbzc)
9089
if err != nil {
9190
l.Warn().Msg("MusicBrainz unreachable, falling back to artist name matching")
92-
return matchArtistsByNames(ctx, opts.ArtistNames, result, d, opts)
91+
return matchArtistsByNames(ctx, opts.ArtistNames, result, d)
9392
// return nil, err
9493
}
9594
result = append(result, a)
9695
}
9796
return result, nil
9897
}
99-
func resolveAliasOrCreateArtist(ctx context.Context, mbzID uuid.UUID, names []string, d db.DB, opts AssociateArtistsOpts) (*models.Artist, error) {
98+
func resolveAliasOrCreateArtist(ctx context.Context, mbzID uuid.UUID, names []string, d db.DB, mbz mbz.MusicBrainzCaller) (*models.Artist, error) {
10099
l := logger.FromContext(ctx)
101100

102-
aliases, err := opts.Mbzc.GetArtistPrimaryAliases(ctx, mbzID)
101+
aliases, err := mbz.GetArtistPrimaryAliases(ctx, mbzID)
103102
if err != nil {
104103
return nil, err
105104
}
@@ -146,7 +145,7 @@ func resolveAliasOrCreateArtist(ctx context.Context, mbzID uuid.UUID, names []st
146145
}
147146
imgid = uuid.New()
148147
l.Debug().Msg("Downloading artist image from source...")
149-
err = opts.IP.EnqueueDownloadAndCache(ctx, imgid, imgUrl, size)
148+
err = DownloadAndCacheImage(ctx, imgid, imgUrl, size)
150149
if err != nil {
151150
l.Err(err).Msg("Failed to cache image")
152151
}
@@ -168,7 +167,7 @@ func resolveAliasOrCreateArtist(ctx context.Context, mbzID uuid.UUID, names []st
168167
return u, nil
169168
}
170169

171-
func matchArtistsByNames(ctx context.Context, names []string, existing []*models.Artist, d db.DB, opts AssociateArtistsOpts) ([]*models.Artist, error) {
170+
func matchArtistsByNames(ctx context.Context, names []string, existing []*models.Artist, d db.DB) ([]*models.Artist, error) {
172171
l := logger.FromContext(ctx)
173172
var result []*models.Artist
174173

@@ -199,7 +198,7 @@ func matchArtistsByNames(ctx context.Context, names []string, existing []*models
199198
}
200199
imgid = uuid.New()
201200
l.Debug().Msg("Downloading artist image from source...")
202-
err = opts.IP.EnqueueDownloadAndCache(ctx, imgid, imgUrl, size)
201+
err = DownloadAndCacheImage(ctx, imgid, imgUrl, size)
203202
if err != nil {
204203
l.Err(err).Msg("Failed to cache image")
205204
}

internal/catalog/catalog.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ type SubmitListenOpts struct {
4747
Time time.Time
4848
UserID int32
4949
Client string
50-
IP *ImageProcessor
5150
}
5251

5352
const (
@@ -70,7 +69,6 @@ func SubmitListen(ctx context.Context, store db.DB, opts SubmitListenOpts) error
7069
ArtistName: opts.Artist,
7170
Mbzc: opts.MbzCaller,
7271
TrackTitle: opts.TrackTitle,
73-
IP: opts.IP,
7472
})
7573
if err != nil {
7674
l.Error().Err(err).Msg("Failed to associate artists to listen")
@@ -92,7 +90,6 @@ func SubmitListen(ctx context.Context, store db.DB, opts SubmitListenOpts) error
9290
TrackName: opts.TrackTitle,
9391
Mbzc: opts.MbzCaller,
9492
Artists: artists,
95-
IP: opts.IP,
9693
})
9794
if err != nil {
9895
l.Error().Err(err).Msg("Failed to associate release group to listen")

0 commit comments

Comments
 (0)