defuze.me  Client
playlist.cpp
00001 #include "playlist.hpp"
00002 #include "parser.hpp"
00003 
00004 #include <QSqlQuery>
00005 #include <QDebug>
00006 
00007 using namespace Playlists;
00008 
00009 Playlist::Playlist(int id)
00010 {
00011     this->trackList = new QList<Library::AudioTrack*>();
00012     QSqlQuery query;
00013     query.prepare("SELECT id, name, is_dynamic, definition "
00014                   "FROM playlists WHERE id = :id LIMIT 1");
00015     query.bindValue(":id", id);
00016     query.exec();
00017     if (query.first())
00018     {
00019         this->id = query.value(0).toInt();
00020         this->name = query.value(1).toString();
00021         this->isDynamic = query.value(2).toBool();
00022         QList<QVariant> list = Network::JsonParser().parse(query.value(3).toByteArray()).toList();
00023         this->trackList = new QList<Library::AudioTrack*>();
00024         foreach (QVariant id, list)
00025         {
00026             this->trackList->append(Library::AudioTrack::getTrack(id.toInt()));
00027         }
00028 
00029     }
00030     else
00031         qDebug() << "No playlist with id " << id;
00032 }
00033 
00034 int             Playlist::getId() const
00035 {
00036     return this->id;
00037 }
00038 
00039 const QString   &Playlist::getName() const
00040 {
00041     return this->name;
00042 }
00043 
00044 bool            Playlist::getIsDynamic() const
00045 {
00046     return this->isDynamic;
00047 }
00048 
00049 void            Playlist::setName(const QString newName)
00050 {
00051     this->name = newName;
00052 }
00053 
00054 QList<Library::AudioTrack*> *Playlist::getTrackList() const
00055 {
00056     return this->trackList;
00057 }
00058 
00059 void    Playlist::addTrack(int trackId, int idx)
00060 {
00061     if (idx == -1)
00062         this->trackList->append(Library::AudioTrack::getTrack(trackId));
00063     else
00064         this->trackList->insert(idx, Library::AudioTrack::getTrack(trackId));
00065 
00066 }
00067 
00068 void    Playlist::updatePlaylist()
00069 {
00070     QSqlQuery query;
00071 
00072     query.prepare("UPDATE playlists SET name = :name, is_dynamic = :is_dynamic, definition = :definition "
00073                   "WHERE id = :id");
00074     query.bindValue(":name", name);
00075     query.bindValue(":is_dynamic", isDynamic);
00076     QList<QVariant> *list = new QList<QVariant>();
00077     foreach (Library::AudioTrack* track, *trackList)
00078     {
00079         list->append(track->getUid());
00080     }
00081 
00082     query.bindValue(":definition", Network::JsonParser().serialize(*list));
00083     query.bindValue(":id", id);
00084     if (!query.exec())
00085         qDebug() << "Impossible playlist update " << id;
00086 }