Jelajahi Sumber

feat: track number

Fela Maslen 5 tahun lalu
induk
melakukan
7a5bd79e5e

+ 3 - 0
music-player/migrations/000005_track_number.down.sql

@@ -0,0 +1,3 @@
+ALTER TABLE songs
+DROP COLUMN track_number
+;

+ 3 - 0
music-player/migrations/000005_track_number.up.sql

@@ -0,0 +1,3 @@
+ALTER TABLE songs
+ADD COLUMN track_number int
+;

+ 7 - 4
music-player/pkg/read/audio.go

@@ -1,12 +1,12 @@
 package read
 
 import (
-  "os"
-  "path/filepath"
+	"os"
+	"path/filepath"
 
-  tag "github.com/dhowden/tag"
+	tag "github.com/dhowden/tag"
 
-  duration "github.com/felamaslen/go-music-player/pkg/read/duration"
+	duration "github.com/felamaslen/go-music-player/pkg/read/duration"
 )
 
 func ReadFile(basePath string, scannedFile *File) (song *Song, err error) {
@@ -24,7 +24,10 @@ func ReadFile(basePath string, scannedFile *File) (song *Song, err error) {
 
   durationTime, durationOk := duration.GetSongDuration(file, tags)
 
+  trackNumber, _ := tags.Track()
+
   result := Song{
+    TrackNumber: trackNumber,
     Title: tags.Title(),
     Artist: tags.Artist(),
     Album: tags.Album(),

+ 1 - 0
music-player/pkg/read/audio_test.go

@@ -26,6 +26,7 @@ var _ = Describe("reading audio files", func() {
       Expect(err).To(BeNil())
 
       Expect(*result).To(Equal(read.Song{
+	TrackNumber: 23,
 	Title: "Impact Moderato",
 	Artist: "Kevin MacLeod",
 	Album: "YouTube Audio Library",

+ 2 - 0
music-player/pkg/read/test_file_info.go

@@ -3,6 +3,7 @@ package read
 const TestDirectory = "pkg/read/testdata"
 
 var TestSong = Song{
+  TrackNumber: 23,
   Title: "Impact Moderato",
   Artist: "Kevin MacLeod",
   Album: "YouTube Audio Library",
@@ -13,6 +14,7 @@ var TestSong = Song{
 }
 
 var TestSongNested = Song{
+  TrackNumber: 14,
   Title: "Clementi: Piano Sonata in D major, Op 25 No 6 - Movement 2: Un poco andante",
   Artist: "Howard Shelley",
   Album: "Clementi: The Complete Piano Sonatas, Vol. 4",

TEMPAT SAMPAH
music-player/pkg/read/testdata/file_example_OOG_1MG.ogg


+ 1 - 0
music-player/pkg/read/types.go

@@ -1,6 +1,7 @@
 package read
 
 type Song struct {
+  TrackNumber int 	`db:"track_number"`
   Title string 		`db:"title"`
   Artist string 	`db:"artist"`
   Album string 		`db:"album"`

+ 4 - 1
music-player/pkg/repository/scan.go

@@ -33,6 +33,7 @@ func InsertMusicIntoDatabase(songs chan *read.Song) {
         `
         insert into songs (
           title
+          ,track_number
           ,artist
           ,album
           ,duration
@@ -40,16 +41,18 @@ func InsertMusicIntoDatabase(songs chan *read.Song) {
           ,relative_path
           ,modified_date
         )
-        values ($1, $2, $3, $4, $5, $6, $7)
+        values ($1, $2, $3, $4, $5, $6, $7, $8)
         on conflict (base_path, relative_path) do update
         set
           title = excluded.title
+          ,track_number = excluded.track_number
           ,artist = excluded.artist
           ,album = excluded.album
           ,duration = excluded.duration
           ,modified_date = excluded.modified_date
         `,
         song.Title,
+        song.TrackNumber,
         song.Artist,
         song.Album,
         duration,

+ 16 - 2
music-player/pkg/repository/scan_test.go

@@ -26,6 +26,7 @@ var _ = Describe("scanning repository", func() {
       go func() {
 	defer close(songs)
 	songs <- &read.Song{
+	  TrackNumber: 7,
 	  Title: "Hey Jude",
 	  Artist: "The Beatles",
 	  Album: "",
@@ -37,6 +38,7 @@ var _ = Describe("scanning repository", func() {
 	}
 
 	songs <- &read.Song{
+	  TrackNumber: 11,
 	  Title: "Starman",
 	  Artist: "David Bowie",
 	  Album: "The Rise and Fall of Ziggy Stardust and the Spiders from Mars",
@@ -64,12 +66,13 @@ var _ = Describe("scanning repository", func() {
 	var songs []read.Song
 
 	db.Select(&songs, `
-	select title, artist, album, duration, base_path, relative_path, modified_date
+	select track_number, title, artist, album, duration, base_path, relative_path, modified_date
 	from songs
 	order by title
 	`)
 
 	Expect(songs[0]).To(Equal(read.Song{
+	  TrackNumber: 7,
 	  Title: "Hey Jude",
 	  Artist: "The Beatles",
 	  Album: "",
@@ -80,6 +83,7 @@ var _ = Describe("scanning repository", func() {
 	}))
 
 	Expect(songs[1]).To(Equal(read.Song{
+	  TrackNumber: 11,
 	  Title: "Starman",
 	  Artist: "David Bowie",
 	  Album: "The Rise and Fall of Ziggy Stardust and the Spiders from Mars",
@@ -122,13 +126,23 @@ var _ = Describe("scanning repository", func() {
       It("should upsert the existing item", func() {
 	var songs []read.Song
 	db.Select(&songs, `
-	select title, artist, album, duration, base_path, relative_path, modified_date from songs
+	select
+	  track_number
+	  ,title
+	  ,artist
+	  ,album
+	  ,duration
+	  ,base_path
+	  ,relative_path
+	  ,modified_date
+	from songs
 	where base_path = '/path/to' and relative_path = 'file.ogg'
 	`)
 
 	Expect(songs).To(HaveLen(1))
 	var song = songs[0]
 
+	Expect(song.TrackNumber).To(Equal(7))
 	Expect(song.Title).To(Equal("Hey Jude"))
 	Expect(song.Artist).To(Equal("The Beatles"))
 	Expect(song.Album).To(Equal(""))