_get_track_count = new QSqlQuery(db);
_get_track_count->prepare("SELECT count from tracks WHERE id = :id");
- _get_track_by_source_query = new QSqlQuery(db);
- _get_track_by_source_query->prepare("SELECT track_id AS id, title, artist, album.name AS album, source, count, length FROM "
- "(SELECT tracks.id AS track_id, artist.name AS artist, title, count, tracks.album_id, length FROM "
- "tracks JOIN artist ON tracks.artist_id = artist.id AND source = :source) "
- "JOIN album ON album_id = album.id LIMIT 1");
-
_get_tracks_by_pattern_query = new QSqlQuery(db);
_get_tracks_by_pattern_query->prepare("SELECT id, title, artist, album, source, count, length, year FROM "
"entire WHERE "
"artist_uname LIKE (SELECT '%' || :partist || '%') "
"ORDER BY artist_uname, year");
+ _get_track_id_by_source_query = new QSqlQuery(db);
+ _get_track_id_by_source_query->prepare("SELECT id FROM tracks WHERE source = :source");
+
_check_artist_query = new QSqlQuery(db);
_check_artist_query->prepare("SELECT id FROM artist WHERE uname = :uname");
_check_album_query = new QSqlQuery(db);
_check_album_query->prepare("SELECT id FROM album WHERE uname = :uname AND artist_id = :artist_id");
- _check_track_query = new QSqlQuery(db);
- _check_track_query->prepare("SELECT id FROM tracks WHERE source = :source");
-
_insert_artist_query = new QSqlQuery(db);
_insert_artist_query->prepare("INSERT INTO artist (name, uname) values (:name, :uname)");
delete _get_never_played_query;
delete _get_recently_added_query;
delete _get_tracks_for_album_query;
- delete _get_track_by_source_query;
delete _get_tracks_by_pattern_query;
delete _check_album_query;
delete _check_artist_query;
- delete _check_track_query;
+ delete _get_track_id_by_source_query;
delete _insert_album_query;
delete _insert_artist_query;
delete _insert_date_query;
query->exec();
while (query->next()) {
- int id = query->value(0).toInt();
QString title = query->value(1).toString();
QString source = query->value(2).toString();
int count = query->value(3).toInt();
int length = query->value(4).toInt();
TrackMetadata meta (title, artist, album, length);
- Track track(id, meta, source);
+ Track track(meta, source);
track.setCount(count);
tracks.append(track);
}
QSqlQuery *query = _get_favorites_query;
query->exec();
while(query->next()) {
- int id = query->value(0).toInt();
QString title = query->value(1).toString();
QString artist = query->value(2).toString();
QString album = query->value(3).toString();
int count = query->value(5).toInt();
int length = query->value(6).toInt();
TrackMetadata meta(title, artist, album, length);
- Track track(id, meta, source);
+ Track track(meta, source);
track.setCount(count);
playlist.addTrack(track);
playlist.setName("Favorites");
query->bindValue(":max", _DYNAMIC_PLAYLIST_MAX_COUNT_);
query->exec();
while (query->next()) {
- int id = query->value(0).toInt();
QString title = query->value(1).toString();
QString artist = query->value(2).toString();
QString album = query->value(3).toString();
int count = query->value(5).toInt();
int length = query->value(6).toInt();
TrackMetadata meta(title, artist, album, length);
- Track track(id, meta, source);
+ Track track(meta, source);
track.setCount(count);
playlist.addTrack(track);
playlist.setName("Most popular");
query->bindValue(":max", _DYNAMIC_PLAYLIST_MAX_COUNT_);
query->exec();
while (query->next()) {
- int id = query->value(0).toInt();
QString title = query->value(1).toString();
QString artist = query->value(2).toString();
QString album = query->value(3).toString();
int count = query->value(5).toInt();
int length = query->value(6).toInt();
TrackMetadata meta(title, artist, album, length);
- Track track(id, meta, source);
+ Track track(meta, source);
track.setCount(count);
playlist.addTrack(track);
playlist.setName("Never played");
query->bindValue(":max", _DYNAMIC_PLAYLIST_MAX_COUNT_);
query->exec();
while (query->next()) {
- int id = query->value(0).toInt();
QString title = query->value(1).toString();
QString artist = query->value(2).toString();
QString album = query->value(3).toString();
int count = query->value(5).toInt();
int length = query->value(6).toInt();
TrackMetadata meta(title, artist, album, length);
- Track track(id, meta, source);
+ Track track(meta, source);
track.setCount(count);
playlist.addTrack(track);
playlist.setName("Recently added");
}
void DbStorage::removeTrack(Track track) {
- int id = track.id();
- QSqlQuery *query = new QSqlQuery(db);
- query->prepare("DELETE FROM tracks WHERE id = :id;");
- query->bindValue(":id", id);
- query->exec();
- query->prepare("DELETE FROM favorites WHERE track_id = :id;");
- query->bindValue(":id", id);
- query->exec();
- query->prepare("DELETE FROM adding_date WHERE id = :id;");
- query->bindValue(":id", id);
+ QSqlQuery *query = _get_track_id_by_source_query;
+ query->bindValue(":source", track.source());
query->exec();
+ if (query->next()) {
+ int id = query->value(0).toInt();
+ query = new QSqlQuery(db);
+ query->prepare("DELETE FROM tracks WHERE id = :id;");
+ query->bindValue(":id", id);
+ query->exec();
+ query->prepare("DELETE FROM favorites WHERE track_id = :id;");
+ query->bindValue(":id", id);
+ query->exec();
+ query->prepare("DELETE FROM adding_date WHERE id = :id;");
+ query->bindValue(":id", id);
+ query->exec();
+ }
}
void DbStorage::addTrack(Track track) {
//big bang
return;
}
- QSqlQuery *query = _check_track_query;
+ QSqlQuery *query = _get_track_id_by_source_query;
query->bindValue(":source", source);
query->exec();
if (query->next()) {
query->bindValue(":length", track.metadata().length());
if (query->exec()) {
//ok
- query = _check_track_query;
+ query = _get_track_id_by_source_query;
query->bindValue(":source", source);
query->exec();
if (query->next()) {
}
void DbStorage::addToFavorites(Track track) {
- QSqlQuery *query = _insert_favorites_query;
- query->bindValue(":track_id", track.id());
+ QSqlQuery *query = _get_track_id_by_source_query;
+ query->bindValue(":source", track.source());
query->exec();
+ if (query->next()) {
+ int id = query->value(0).toInt();
+ query = _insert_favorites_query;
+ query->bindValue(":track_id", id);
+ query->exec();
+ }
}
void DbStorage::updateTrackCount(Track track) {
- QSqlQuery *query = _get_track_count;
- query->bindValue(":id", track.id());
+ QSqlQuery *query = _get_track_id_by_source_query;
+ query->bindValue(":source", track.source());
query->exec();
if (query->next()) {
- int count = query->value(0).toInt();
- query = _update_track_count_query;
- query->bindValue(":count", count+1);
- query->bindValue(":id", track.id());
+ int id = query->value(0).toInt();
+ query = _get_track_count;
+ query->bindValue(":id", id);
query->exec();
+ if (query->next()) {
+ int count = query->value(0).toInt();
+ query = _update_track_count_query;
+ query->bindValue(":count", count+1);
+ query->bindValue(":id", id);
+ query->exec();
+ }
}
}
Track DbStorage::updateTrack(Track track) {
- QSqlQuery *query = _remove_track_query;
- query->bindValue(":id", track.id());
- addTrack(track);
- query = _get_track_by_source_query;
+ QSqlQuery *query = _get_track_id_by_source_query;
query->bindValue(":source", track.source());
query->exec();
- if (query->next()) {
+ if (query->next()) { // found track in library
int id = query->value(0).toInt();
- QString title = query->value(1).toString();
- QString artist = query->value(2).toString();
- QString album = query->value(3).toString();
- QString source = query->value(4).toString();
- int count = query->value(5).toInt();
- int length = query->value(6).toInt();
- TrackMetadata meta(title, artist, album, length);
- Track ntrack(id, meta, source);
- ntrack.setCount(count);
- return ntrack;
+ qWarning() << "found " << id;
+ query = _remove_track_query;
+ query->bindValue(":id", id);
+ query->exec();
+ addTrack(track);
}
return track;
}
query->exec();
// id, title, artist, album, source, count, length, year
while (query->next()) {
- int id = query->value(0).toInt();
QString title = query->value(1).toString();
QString artist = query->value(2).toString();
QString album = query->value(3).toString();
int year = query->value(7).toInt();
TrackMetadata meta(title, artist, album, length);
meta.setYear(year);
- Track track(id, meta, source);
+ Track track(meta, source);
track.setCount(count);
found.append(track);
}