void GMDBTracks::update(GMTrack & track) { /// Artist FXint album_artist_id = insertArtist(track.getAlbumArtist(default_artist)); FXint artist_id = insertArtist(track.getArtist(default_artist)); FXint composer_id = insertArtist(track.composer); FXint conductor_id = insertArtist(track.conductor); FXint album_id = insertAlbum(track,album_artist_id); /// Update Tracks update_track.set(0,track.title.empty() ? FXPath::title(track.url) : track.title); update_track.set(1,track.time); update_track.set(2,track.no); update_track.set(3,track.year); update_track.set(4,(track.sampleformat) ? -track.sampleformat : track.bitrate); update_track.set(5,track.samplerate); update_track.set(6,track.channels); update_track.set(7,track.filetype); update_track.set(8,album_id); update_track.set(9,artist_id); update_track.set_null(10,composer_id); update_track.set_null(11,conductor_id); update_track.set(12,FXThread::time()); update_track.set(13,track.index); update_track.execute(); fxmessage("%d %d\n",track.sampleformat,track.bitrate); /// Update Tags updateTags(track.index,track.tags); }
void GMDBTracks::insert(GMTrack & track,FXint & path_index) { if (__likely(track.index==0)) { FXASSERT(!track.url.empty()); FXASSERT(path_index>=0); if (path_index==0) { path_index = insertPath(FXPath::directory(track.url)); FXASSERT(path_index); if (!path_index) fxwarning("pid==0 for %s\n",FXPath::directory(track.url).text()); } /// Artist FXint album_artist_id = insertArtist(track.getAlbumArtist(default_artist)); FXint artist_id = insertArtist(track.getArtist(default_artist)); FXint composer_id = insertArtist(track.composer); FXint conductor_id = insertArtist(track.conductor); FXint album_id = insertAlbum(track,album_artist_id); FXASSERT(artist_id); FXASSERT(album_id); /// Insert Track insert_track.set(0,path_index); insert_track.set(1,path_index ? FXPath::name(track.url) : track.url); insert_track.set(2,track.title.empty() ? FXPath::title(track.url) : track.title); insert_track.set(3,track.time); insert_track.set(4,track.no); insert_track.set(5,track.year); insert_track.set(6,(track.sampleformat) ? -track.sampleformat : track.bitrate); insert_track.set(7,album_id); insert_track.set(8,artist_id); insert_track.set_null(9,composer_id); insert_track.set_null(10,conductor_id); insert_track.set(11,FXThread::time()); insert_track.set(12,track.samplerate); insert_track.set(13,track.channels); insert_track.set(14,track.filetype); track.index = insert_track.insert(); /// Tags if (track.tags.no()) insertTags(track.index,track.tags); } /// Add to playlist if (playlist) { insert_playlist_track_by_id.set(0,playlist); insert_playlist_track_by_id.set(1,track.index); insert_playlist_track_by_id.set(2,playlist_queue); insert_playlist_track_by_id.execute(); } }
int Database::insertSong(const char *path, const char *title, const char *album, const char *artist, const char *genre, int length) { debug ("path: %s\n", path ? path : "NULL"); debug ("title: %s\n", title ? title : "NULL"); debug ("album: %s\n", album ? album : "NULL"); debug ("artist: %s\n", artist ? artist : "NULL"); debug ("genre: %s\n", genre ? genre : "NULL"); int artist_id = insertArtist(artist); debug("inserted artist_id=%d\n", artist_id); int album_id; if (artist_id > 0) { album_id = insertAlbum(album, artist_id); debug("inserted album_id=%d\n", album_id); } else return 0; debug("insertSong: %s (album_id=%d)\n", title, album_id); if (album_id > 0 && execute("select rowid from songs where title=%Q and album_id=%d", title, album_id)) { debug("returning song_id\n"); Result *r = next(); if (r && r->find("rowid") != r->end()) return strtol((*r)["rowid"], NULL, 10); return 0; } int genre_id = insertGenre(genre); debug("inserted genre_id=%d\n", genre_id); debug("inserting into songs\n"); execute("insert into songs (title, album_id, genre_id, length, path) values (%Q, %d, %d, %d, %Q)", title, album_id, genre_id, length, path); return sqlite3_last_insert_rowid(m_db); }