diff --git a/src/db/migrations/20171015224223_add_song_duration/down.sql b/src/db/migrations/20171015224223_add_song_duration/down.sql new file mode 100644 index 0000000..6f538da --- /dev/null +++ b/src/db/migrations/20171015224223_add_song_duration/down.sql @@ -0,0 +1,19 @@ +CREATE TEMPORARY TABLE songs_backup(id, path, parent, track_number, disc_number, title, artist, album_artist, year, album, artwork); +INSERT INTO songs_backup SELECT id, path, parent, track_number, disc_number, title, artist, album_artist, year, album, artwork FROM songs; +DROP TABLE songs; +CREATE TABLE songs ( + id INTEGER PRIMARY KEY NOT NULL, + path TEXT NOT NULL, + parent TEXT NOT NULL, + track_number INTEGER, + disc_number INTEGER, + title TEXT, + artist TEXT, + album_artist TEXT, + year INTEGER, + album TEXT, + artwork TEXT, + UNIQUE(path) ON CONFLICT REPLACE +); +INSERT INTO songs SELECT * FROM songs_backup; +DROP TABLE songs_backup; diff --git a/src/db/migrations/20171015224223_add_song_duration/up.sql b/src/db/migrations/20171015224223_add_song_duration/up.sql new file mode 100644 index 0000000..cea3ac5 --- /dev/null +++ b/src/db/migrations/20171015224223_add_song_duration/up.sql @@ -0,0 +1 @@ +ALTER TABLE songs ADD COLUMN duration INTEGER; diff --git a/src/db/schema.sqlite b/src/db/schema.sqlite index 02c3662..02b6a9b 100644 Binary files a/src/db/schema.sqlite and b/src/db/schema.sqlite differ diff --git a/src/index.rs b/src/index.rs index f28ff72..8ea7e15 100644 --- a/src/index.rs +++ b/src/index.rs @@ -49,6 +49,7 @@ pub struct Song { pub year: Option, pub album: Option, pub artwork: Option, + pub duration: Option, } #[derive(Debug, Queryable, Serialize)] @@ -84,6 +85,7 @@ struct NewSong { year: Option, album: Option, artwork: Option, + duration: Option } #[derive(Debug, Insertable)] @@ -247,6 +249,7 @@ impl<'conn> IndexBuilder<'conn> { disc_number: tags.disc_number.map(|n| n as i32), track_number: tags.track_number.map(|n| n as i32), title: tags.title, + duration: tags.duration.map(|n| n as i32), artist: tags.artist, album_artist: tags.album_artist, album: tags.album, diff --git a/src/metadata.rs b/src/metadata.rs index b5d8f7c..a328ea0 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -15,6 +15,7 @@ pub struct SongTags { pub disc_number: Option, pub track_number: Option, pub title: Option, + pub duration: Option, pub artist: Option, pub album_artist: Option, pub album: Option, @@ -50,6 +51,7 @@ fn read_id3(path: &Path) -> Result { album_artist: album_artist, album: album, title: title, + duration: None, disc_number: disc_number, track_number: track_number, year: year, @@ -98,6 +100,7 @@ fn read_ape(path: &Path) -> Result { album_artist: album_artist, album: album, title: title, + duration: None, disc_number: disc_number, track_number: track_number, year: year, @@ -114,6 +117,7 @@ fn read_vorbis(path: &Path) -> Result { album_artist: None, album: None, title: None, + duration:None, disc_number: None, track_number: None, year: None, @@ -147,6 +151,7 @@ fn read_flac(path: &Path) -> Result { album_artist: vorbis.album_artist().map(|v| v[0].clone()), album: vorbis.album().map(|v| v[0].clone()), title: vorbis.title().map(|v| v[0].clone()), + duration: None, disc_number: disc_number, track_number: vorbis.track(), year: year,