mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-15 03:30:39 +03:00
Add a comment to the generated zip
This commit is contained in:
parent
dc56c52557
commit
a651d65a5b
@ -31,31 +31,21 @@ type archiver struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *archiver) ZipAlbum(ctx context.Context, id string, format string, bitrate int, out io.Writer) error {
|
func (a *archiver) ZipAlbum(ctx context.Context, id string, format string, bitrate int, out io.Writer) error {
|
||||||
mfs, err := a.ds.MediaFile(ctx).GetAll(model.QueryOptions{
|
return a.zipAlbums(ctx, id, format, bitrate, out, squirrel.Eq{"album_id": id})
|
||||||
Filters: squirrel.Eq{"album_id": id},
|
|
||||||
Sort: "album",
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
log.Error(ctx, "Error loading mediafiles from album", "id", id, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return a.zipAlbums(ctx, id, format, bitrate, out, mfs)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *archiver) ZipArtist(ctx context.Context, id string, format string, bitrate int, out io.Writer) error {
|
func (a *archiver) ZipArtist(ctx context.Context, id string, format string, bitrate int, out io.Writer) error {
|
||||||
mfs, err := a.ds.MediaFile(ctx).GetAll(model.QueryOptions{
|
return a.zipAlbums(ctx, id, format, bitrate, out, squirrel.Eq{"album_artist_id": id})
|
||||||
Filters: squirrel.Eq{"album_artist_id": id},
|
}
|
||||||
Sort: "album",
|
|
||||||
})
|
func (a *archiver) zipAlbums(ctx context.Context, id string, format string, bitrate int, out io.Writer, filters squirrel.Sqlizer) error {
|
||||||
|
mfs, err := a.ds.MediaFile(ctx).GetAll(model.QueryOptions{Filters: filters, Sort: "album"})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(ctx, "Error loading mediafiles from artist", "id", id, err)
|
log.Error(ctx, "Error loading mediafiles from artist", "id", id, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return a.zipAlbums(ctx, id, format, bitrate, out, mfs)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *archiver) zipAlbums(ctx context.Context, id string, format string, bitrate int, out io.Writer, mfs model.MediaFiles) error {
|
z := createZipWriter(out, format, bitrate)
|
||||||
z := zip.NewWriter(out)
|
|
||||||
albums := slice.Group(mfs, func(mf model.MediaFile) string {
|
albums := slice.Group(mfs, func(mf model.MediaFile) string {
|
||||||
return mf.AlbumID
|
return mf.AlbumID
|
||||||
})
|
})
|
||||||
@ -69,13 +59,23 @@ func (a *archiver) zipAlbums(ctx context.Context, id string, format string, bitr
|
|||||||
_ = a.addFileToZip(ctx, z, mf, format, bitrate, file)
|
_ = a.addFileToZip(ctx, z, mf, format, bitrate, file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err := z.Close()
|
err = z.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(ctx, "Error closing zip file", "id", id, err)
|
log.Error(ctx, "Error closing zip file", "id", id, err)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createZipWriter(out io.Writer, format string, bitrate int) *zip.Writer {
|
||||||
|
z := zip.NewWriter(out)
|
||||||
|
comment := "Downloaded from Navidrome"
|
||||||
|
if format != "raw" {
|
||||||
|
comment = fmt.Sprintf("%s, transcoded to %s %dbps", comment, format, bitrate)
|
||||||
|
}
|
||||||
|
_ = z.SetComment(comment)
|
||||||
|
return z
|
||||||
|
}
|
||||||
|
|
||||||
func (a *archiver) albumFilename(mf model.MediaFile, format string, isMultDisc bool) string {
|
func (a *archiver) albumFilename(mf model.MediaFile, format string, isMultDisc bool) string {
|
||||||
_, file := filepath.Split(mf.Path)
|
_, file := filepath.Split(mf.Path)
|
||||||
if format != "raw" {
|
if format != "raw" {
|
||||||
@ -97,8 +97,8 @@ func (a *archiver) ZipPlaylist(ctx context.Context, id string, format string, bi
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *archiver) zipPlaylist(ctx context.Context, id string, format string, bitrate int, out io.Writer, pls *model.Playlist) error {
|
func (a *archiver) zipPlaylist(ctx context.Context, id string, format string, bitrate int, out io.Writer, pls *model.Playlist) error {
|
||||||
|
z := createZipWriter(out, format, bitrate)
|
||||||
mfs := pls.MediaFiles()
|
mfs := pls.MediaFiles()
|
||||||
z := zip.NewWriter(out)
|
|
||||||
log.Debug(ctx, "Zipping playlist", "name", pls.Name, "format", format, "bitrate", bitrate, "numTracks", len(mfs))
|
log.Debug(ctx, "Zipping playlist", "name", pls.Name, "format", format, "bitrate", bitrate, "numTracks", len(mfs))
|
||||||
for idx, mf := range mfs {
|
for idx, mf := range mfs {
|
||||||
file := a.playlistFilename(mf, format, idx)
|
file := a.playlistFilename(mf, format, idx)
|
||||||
@ -144,7 +144,7 @@ func (a *archiver) addFileToZip(ctx context.Context, z *zip.Writer, mf model.Med
|
|||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := r.Close(); err != nil && log.CurrentLevel() >= log.LevelDebug {
|
if err := r.Close(); err != nil && log.CurrentLevel() >= log.LevelDebug {
|
||||||
log.Error("Error closing stream", "id", mf.ID, "file", mf.Path, err)
|
log.Error(ctx, "Error closing stream", "id", mf.ID, "file", mf.Path, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user