diff --git a/go.mod b/go.mod index a7a2840..732c586 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module ym-dl go 1.27.2 require ( - gitea.mrixs.me/Mrixs/yandex-music-api-go v0.0.0-20261018055743-0456ca0665a6 + gitea.mrixs.me/Mrixs/yandex-music-api-go v0.0.0-20261018072517-d0173f795d2a github.com/bogem/id3v2 v1.2.0 gopkg.in/yaml.v3 v3.0.1 modernc.org/sqlite v1.60.1 diff --git a/go.sum b/go.sum index 301d9f9..6960ed5 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ gitea.mrixs.me/Mrixs/yandex-music-api-go v0.0.0-20261014200451-02a6dabcfbea h1:J gitea.mrixs.me/Mrixs/yandex-music-api-go v0.0.0-20261014200451-02a6dabcfbea/go.mod h1:L+GcqPRZiu0Srq6+YxfdLztltXV8DcxKjNUOXWJvR9o= gitea.mrixs.me/Mrixs/yandex-music-api-go v0.0.0-20261018055743-0456ca0665a6 h1:3LRfiTAVWsFG6lzkQV7VhUx+uOie/AYk8uPJQISotaQ= gitea.mrixs.me/Mrixs/yandex-music-api-go v0.0.0-20261018055743-0456ca0665a6/go.mod h1:L+GcqPRZiu0Srq6+YxfdLztltXV8DcxKjNUOXWJvR9o= +gitea.mrixs.me/Mrixs/yandex-music-api-go v0.0.0-20261018072517-d0173f795d2a h1:y+XHpnxtn2xiXx735itwB83X82dOPfwbzCqZ5/WlBs4= +gitea.mrixs.me/Mrixs/yandex-music-api-go v0.0.0-20261018072517-d0173f795d2a/go.mod h1:L+GcqPRZiu0Srq6+YxfdLztltXV8DcxKjNUOXWJvR9o= github.com/bogem/id3v2 v1.2.0 h1:hKDF+F1gOgQ5r1QmBCEZUk4MveJbKxCeIDSBU7CQ4oI= github.com/bogem/id3v2 v1.2.0/go.mod h1:t78PK5AQ56Q47kizpYiV6gtjj3jfxlz87oFpty8DYs8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= diff --git a/internal/downloader/downloader.go b/internal/downloader/downloader.go index 94783b1..c6807c2 100644 --- a/internal/downloader/downloader.go +++ b/internal/downloader/downloader.go @@ -157,21 +157,21 @@ func (d *Downloader) DownloadAlbum(ctx context.Context, albumID string) []Downlo for i, volume := range album.Volumes { for j := range volume { track := &volume[j] - if track.ID == "" || !track.Available { + if string(track.ID) == "" || !track.Available { continue } // Get download URL (handles XML parsing and URL signing) - downloadURL, err := d.yandexClient.GetTrackDownloadURL(ctx, track.ID) + downloadURL, err := d.yandexClient.GetTrackDownloadURL(ctx, string(track.ID)) if err != nil { - results = append(results, DownloadResult{TrackID: track.ID, Success: false, Error: fmt.Errorf("get download URL: %w", err)}) + results = append(results, DownloadResult{TrackID: string(track.ID), Success: false, Error: fmt.Errorf("get download URL: %w", err)}) continue } // Get download info for metadata - downloadInfos, err := d.yandexClient.GetTrackDownloadInfo(ctx, track.ID) + downloadInfos, err := d.yandexClient.GetTrackDownloadInfo(ctx, string(track.ID)) if err != nil { - results = append(results, DownloadResult{TrackID: track.ID, Success: false, Error: fmt.Errorf("get download info: %w", err)}) + results = append(results, DownloadResult{TrackID: string(track.ID), Success: false, Error: fmt.Errorf("get download info: %w", err)}) continue } @@ -202,19 +202,19 @@ func (d *Downloader) DownloadAlbum(ctx context.Context, albumID string) []Downlo // Download audio audioData, err := d.downloadFile(ctx, downloadURL) if err != nil { - results = append(results, DownloadResult{TrackID: track.ID, Success: false, Error: fmt.Errorf("download audio: %w", err)}) + results = append(results, DownloadResult{TrackID: string(track.ID), Success: false, Error: fmt.Errorf("download audio: %w", err)}) continue } // Save track if err := d.storage.SaveTrack(trackMeta, audioData, coverData); err != nil { - results = append(results, DownloadResult{TrackID: track.ID, Success: false, Error: fmt.Errorf("save track: %w", err)}) + results = append(results, DownloadResult{TrackID: string(track.ID), Success: false, Error: fmt.Errorf("save track: %w", err)}) continue } - savedMeta, _ := d.storage.GetTrackMeta(track.ID) + savedMeta, _ := d.storage.GetTrackMeta(string(track.ID)) results = append(results, DownloadResult{ - TrackID: track.ID, + TrackID: string(track.ID), AlbumID: albumID, Success: true, TrackMeta: savedMeta, diff --git a/internal/monitor/monitor.go b/internal/monitor/monitor.go index 4fccc36..51e2d33 100644 --- a/internal/monitor/monitor.go +++ b/internal/monitor/monitor.go @@ -152,9 +152,9 @@ func (m *Monitor) checkArtistTracks(ctx context.Context, artistID int, artistNam newTracks := 0 for _, track := range tracks { - if !m.storage.IsTrackDownloaded(track.ID) { - m.logger.Info("new track found", "track_id", track.ID, "artist", artistName) - result := m.downloader.DownloadTrack(ctx, track.ID) + if !m.storage.IsTrackDownloaded(string(track.ID)) { + m.logger.Info("new track found", "track_id", string(track.ID), "artist", artistName) + result := m.downloader.DownloadTrack(ctx, string(track.ID)) if result.Success { newTracks++ } else { @@ -190,10 +190,10 @@ func (m *Monitor) checkArtistAlbums(ctx context.Context, artistID int, artistNam newAlbums := 0 for _, album := range albums { - albumIDStr := album.ID + albumIDStr := string(album.ID) if !m.isAlbumDownloaded(albumIDStr, album.TrackCount) { m.logger.Info("new album found", "album_id", albumIDStr, "title", album.Title, "artist", artistName) - results := m.downloader.DownloadAlbum(ctx, album.ID) + results := m.downloader.DownloadAlbum(ctx, string(album.ID)) success := false for _, r := range results { if r.Success { diff --git a/internal/storage/storage.go b/internal/storage/storage.go index 2853249..392d7e0 100644 --- a/internal/storage/storage.go +++ b/internal/storage/storage.go @@ -536,7 +536,7 @@ func BuildTrackMetaFromYandex(track *yandexmusic.Track, album *yandexmusic.Album var albumGenre, albumLabel, albumDesc, albumReleaseDate, albumCopyright string if album != nil { albumTitle = album.Title - albumID = album.ID + albumID = string(album.ID) year = album.Year albumGenre = album.Genre albumLabel = album.Label @@ -547,7 +547,7 @@ func BuildTrackMetaFromYandex(track *yandexmusic.Track, album *yandexmusic.Album } } else if len(track.Albums) > 0 { albumTitle = track.Albums[0].Title - albumID = track.Albums[0].ID + albumID = string(track.Albums[0].ID) year = track.Albums[0].Year } @@ -590,7 +590,7 @@ func BuildTrackMetaFromYandex(track *yandexmusic.Track, album *yandexmusic.Album } return TrackMeta{ - TrackID: track.ID, + TrackID: string(track.ID), AlbumID: albumID, ArtistID: artistID, Title: track.Title, @@ -630,7 +630,7 @@ func BuildAlbumMetaFromYandex(album *yandexmusic.Album, tracks []TrackMeta) Albu } return AlbumMeta{ - AlbumID: album.ID, + AlbumID: string(album.ID), ArtistID: artistID, Title: album.Title, ArtistName: artistName, diff --git a/internal/yandex/client.go b/internal/yandex/client.go index d2cbfb8..ad375d8 100644 --- a/internal/yandex/client.go +++ b/internal/yandex/client.go @@ -123,14 +123,14 @@ func (c *YandexClient) GetTrackInfoWithPosition(ctx context.Context, trackID str // Extract track position from first album var position *TrackPosition if len(track.Albums) > 0 { - albumID := track.Albums[0].ID + albumID := string(track.Albums[0].ID) albums, err := c.client.GetAlbumsWithTracks(ctx, []string{albumID}) if err == nil && len(albums) > 0 { album := albums[0] // Find track in album.Volumes and get position for volIdx, volume := range album.Volumes { for trackIdx, t := range volume { - if t.ID == trackID { + if string(t.ID) == trackID { position = &TrackPosition{ Volume: volIdx + 1, Index: trackIdx + 1,