diff --git a/pkg/db/song.go b/pkg/db/song.go index 217333c..49c477a 100644 --- a/pkg/db/song.go +++ b/pkg/db/song.go @@ -31,6 +31,24 @@ func AddSong(song models.SongData) { } } +func CheckSong(path string) bool { + query, err := pool.Query(context.Background(), + "SELECT path FROM song WHERE path = $1", path) + if err != nil { + _, _ = fmt.Fprintf(os.Stderr, "Exec failed: %v\n", err) + } + return query.Next() +} + +func UpdateSong(songName string, fileName string, path string) { + _, err := pool.Exec(context.Background(), + "UPDATE song SET song_name=$1, file_name=$2 WHERE path = $3", + songName, fileName, path) + if err != nil { + _, _ = fmt.Fprintf(os.Stderr, "Exec failed: %v\n", err) + } +} + func FindSongsFromGame(id int) []models.SongData { rows, err := pool.Query(context.Background(), "SELECT song_name, path, file_name, times_played FROM song WHERE game_id = $1", id) diff --git a/pkg/server/sync.go b/pkg/server/sync.go index 1372d75..5d721ae 100644 --- a/pkg/server/sync.go +++ b/pkg/server/sync.go @@ -123,11 +123,15 @@ func checkSongs(gameDir string, gameId int) { if err != nil { log.Println(err) } - path := gameDir + entry.Name() - fileName := entry.Name() - songName, _ := strings.CutSuffix(fileName, ".mp3") if isSong(entry) { - db.AddSong(models.SongData{GameId: gameId, SongName: songName, Path: path, FileName: fileName}) + path := gameDir + entry.Name() + fileName := entry.Name() + songName, _ := strings.CutSuffix(fileName, ".mp3") + if db.CheckSong(path) { + db.UpdateSong(songName, fileName, path) + } else { + db.AddSong(models.SongData{GameId: gameId, SongName: songName, Path: path, FileName: fileName}) + } } else if isCoverImage(entry) { //TODO: Later add cover art image here in db }