A tool to sync music with your favorite devices
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

db: store more data about the track

Gee Sawra 80c6edd5 cee02340

+120 -49
-12
.sqlx/query-0c0a2c6966834584d936f6f7afaa1c2e205653ffe0796c0c1b197fa07ba4b319.json
··· 1 - { 2 - "db_name": "SQLite", 3 - "query": "\n INSERT OR REPLACE INTO tracks (\n track_id,\n title,\n artist,\n album,\n number,\n file_path,\n disc_number,\n disc_total,\n file_state,\n extension\n ) VALUES (\n ?1,\n ?2,\n ?3,\n ?4,\n ?5,\n ?6,\n ?7,\n ?8,\n ?9,\n ?10\n );\n ", 4 - "describe": { 5 - "columns": [], 6 - "parameters": { 7 - "Right": 10 8 - }, 9 - "nullable": [] 10 - }, 11 - "hash": "0c0a2c6966834584d936f6f7afaa1c2e205653ffe0796c0c1b197fa07ba4b319" 12 - }
+24 -6
.sqlx/query-86245ea0c3119d94e08fe0404482b4f8de3241bc067136c0181ff4e0aa2bcc67.json
··· 29 29 "type_info": "Text" 30 30 }, 31 31 { 32 - "name": "number", 32 + "name": "genre", 33 33 "ordinal": 5, 34 + "type_info": "Text" 35 + }, 36 + { 37 + "name": "track_len", 38 + "ordinal": 6, 39 + "type_info": "Int64" 40 + }, 41 + { 42 + "name": "year", 43 + "ordinal": 7, 44 + "type_info": "Int64" 45 + }, 46 + { 47 + "name": "number", 48 + "ordinal": 8, 34 49 "type_info": "Int64" 35 50 }, 36 51 { 37 52 "name": "disc_number", 38 - "ordinal": 6, 53 + "ordinal": 9, 39 54 "type_info": "Int64" 40 55 }, 41 56 { 42 57 "name": "disc_total", 43 - "ordinal": 7, 58 + "ordinal": 10, 44 59 "type_info": "Int64" 45 60 }, 46 61 { 47 62 "name": "file_state", 48 - "ordinal": 8, 63 + "ordinal": 11, 49 64 "type_info": "Int64" 50 65 }, 51 66 { 52 67 "name": "file_path", 53 - "ordinal": 9, 68 + "ordinal": 12, 54 69 "type_info": "Text" 55 70 }, 56 71 { 57 72 "name": "extension", 58 - "ordinal": 10, 73 + "ordinal": 13, 59 74 "type_info": "Text" 60 75 } 61 76 ], ··· 63 78 "Right": 1 64 79 }, 65 80 "nullable": [ 81 + false, 82 + false, 83 + false, 66 84 false, 67 85 false, 68 86 false,
+24 -6
.sqlx/query-90d659e4ebb83559ac94ba4618a065c5d9966e99d5c318c5b8f9dcaa670ae5b2.json
··· 29 29 "type_info": "Text" 30 30 }, 31 31 { 32 - "name": "number", 32 + "name": "genre", 33 33 "ordinal": 5, 34 + "type_info": "Text" 35 + }, 36 + { 37 + "name": "track_len", 38 + "ordinal": 6, 39 + "type_info": "Int64" 40 + }, 41 + { 42 + "name": "year", 43 + "ordinal": 7, 44 + "type_info": "Int64" 45 + }, 46 + { 47 + "name": "number", 48 + "ordinal": 8, 34 49 "type_info": "Int64" 35 50 }, 36 51 { 37 52 "name": "disc_number", 38 - "ordinal": 6, 53 + "ordinal": 9, 39 54 "type_info": "Int64" 40 55 }, 41 56 { 42 57 "name": "disc_total", 43 - "ordinal": 7, 58 + "ordinal": 10, 44 59 "type_info": "Int64" 45 60 }, 46 61 { 47 62 "name": "file_state", 48 - "ordinal": 8, 63 + "ordinal": 11, 49 64 "type_info": "Int64" 50 65 }, 51 66 { 52 67 "name": "file_path", 53 - "ordinal": 9, 68 + "ordinal": 12, 54 69 "type_info": "Text" 55 70 }, 56 71 { 57 72 "name": "extension", 58 - "ordinal": 10, 73 + "ordinal": 13, 59 74 "type_info": "Text" 60 75 } 61 76 ], ··· 63 78 "Right": 2 64 79 }, 65 80 "nullable": [ 81 + false, 82 + false, 83 + false, 66 84 false, 67 85 false, 68 86 false,
+24 -6
.sqlx/query-f1349b72ca08058d2503c7348ee66ef638dfc1c3ce09cfd2167c01237ed25840.json
··· 29 29 "type_info": "Text" 30 30 }, 31 31 { 32 - "name": "number", 32 + "name": "genre", 33 33 "ordinal": 5, 34 + "type_info": "Text" 35 + }, 36 + { 37 + "name": "track_len", 38 + "ordinal": 6, 39 + "type_info": "Int64" 40 + }, 41 + { 42 + "name": "year", 43 + "ordinal": 7, 44 + "type_info": "Int64" 45 + }, 46 + { 47 + "name": "number", 48 + "ordinal": 8, 34 49 "type_info": "Int64" 35 50 }, 36 51 { 37 52 "name": "disc_number", 38 - "ordinal": 6, 53 + "ordinal": 9, 39 54 "type_info": "Int64" 40 55 }, 41 56 { 42 57 "name": "disc_total", 43 - "ordinal": 7, 58 + "ordinal": 10, 44 59 "type_info": "Int64" 45 60 }, 46 61 { 47 62 "name": "file_state", 48 - "ordinal": 8, 63 + "ordinal": 11, 49 64 "type_info": "Int64" 50 65 }, 51 66 { 52 67 "name": "file_path", 53 - "ordinal": 9, 68 + "ordinal": 12, 54 69 "type_info": "Text" 55 70 }, 56 71 { 57 72 "name": "extension", 58 - "ordinal": 10, 73 + "ordinal": 13, 59 74 "type_info": "Text" 60 75 } 61 76 ], ··· 63 78 "Right": 0 64 79 }, 65 80 "nullable": [ 81 + false, 82 + false, 83 + false, 66 84 false, 67 85 false, 68 86 false,
+45 -19
src/db/instance.rs
··· 123 123 pub async fn get_transcoding_settings(&self) -> Result<Option<ffmpeg::Quality>, Error> { 124 124 let mut conn = self.pool.acquire().await?; 125 125 126 - let ts = sqlx::query( 126 + let ts = match sqlx::query( 127 127 r#" 128 128 SELECT bitrate, sampling_rate, codec FROM transcoding_settings LIMIT 1; 129 129 "#, 130 130 ) 131 131 .fetch_one(&mut *conn) 132 - .await?; 133 - 134 - if ts.len() == 0 { 135 - return Ok(None); 136 - } 132 + .await 133 + { 134 + Ok(ts) => ts, 135 + Err(e) => match e { 136 + Error::RowNotFound => return Ok(None), 137 + _ => return Err(e), 138 + }, 139 + }; 137 140 138 141 Ok(Some(ffmpeg::Quality { 139 142 bitrate: ffmpeg::Bitrate::from_str(ts.get("bitrate")).unwrap(), ··· 213 216 pub async fn insert_track(&self, track: &model::Track) -> Result<(), Error> { 214 217 let mut conn = self.pool.acquire().await?; 215 218 219 + let year: i64 = track.year as i64; 216 220 sqlx::query!( 217 221 r#" 218 222 INSERT OR REPLACE INTO tracks ( ··· 220 224 title, 221 225 artist, 222 226 album, 227 + genre, 228 + track_len, 229 + year, 223 230 number, 224 231 file_path, 225 232 disc_number, ··· 236 243 ?7, 237 244 ?8, 238 245 ?9, 239 - ?10 246 + ?10, 247 + ?11, 248 + ?12, 249 + ?13 240 250 ); 241 251 "#, 242 252 track.track_id, 243 253 track.title, 244 254 track.artist, 245 255 track.album, 256 + track.genre, 257 + track.track_len, 258 + year, 246 259 track.number, 247 260 track.file_path, 248 261 track.disc_number, ··· 291 304 292 305 Ok(rows 293 306 .into_iter() 294 - .map(|r| model::Track { 295 - id: r.get("id"), 296 - track_id: r.get("track_id"), 297 - title: r.get("title"), 298 - artist: r.get("artist"), 299 - album: r.get("album"), 300 - number: r.get("number"), 301 - file_path: r.get("file_path"), 302 - disc_number: r.get("disc_number"), 303 - disc_total: r.get("disc_total"), 304 - file_state: r.get("file_state"), 305 - extension: r.get("extension"), 307 + .map(|r| { 308 + let year: i64 = r.get("year"); 309 + let track_len: i64 = r.get("track_len"); 310 + model::Track { 311 + id: r.get("id"), 312 + track_id: r.get("track_id"), 313 + title: r.get("title"), 314 + artist: r.get("artist"), 315 + album: r.get("album"), 316 + number: r.get("number"), 317 + file_path: r.get("file_path"), 318 + disc_number: r.get("disc_number"), 319 + disc_total: r.get("disc_total"), 320 + file_state: r.get("file_state"), 321 + extension: r.get("extension"), 322 + genre: r.get("genre"), 323 + track_len: track_len * 1000, 324 + year: year as usize, 325 + } 306 326 }) 307 327 .collect()) 308 328 } ··· 334 354 disc_total: r.disc_total, 335 355 file_state: r.file_state.into(), 336 356 extension: r.extension, 357 + genre: r.genre, 358 + track_len: r.track_len, 359 + year: r.year as usize, 337 360 }) 338 361 .collect::<Vec<model::Track>>()) 339 362 } ··· 515 538 disc_total: track.disc_total, 516 539 file_state: track.file_state.into(), 517 540 extension: track.extension, 541 + genre: track.genre, 542 + track_len: track.track_len, 543 + year: track.year as usize, 518 544 })) 519 545 .await 520 546 .unwrap(),
+3
src/db/migrations/0_base.sql
··· 10 10 title TEXT NOT NULL, 11 11 artist TEXT NOT NULL, 12 12 album TEXT NOT NULL, 13 + genre TEXT NOT NULL, 14 + track_len INTEGER NOT NULL, 15 + year INTEGER NOT NULL, 13 16 number INTEGER NOT NULL, 14 17 disc_number INTEGER NOT NULL, 15 18 disc_total INTEGER NOT NULL,