defuze.me  Client
playlistsmodel.cpp
00001 #include "playlistsmodel.hpp"
00002 #include "playlists.hpp"
00003 #include "playlistitem.hpp"
00004 
00005 using namespace Playlists;
00006 
00007 PlaylistsModel::PlaylistsModel(PlaylistsPlugin *playlists) : playlists(playlists)
00008 {
00009     rootItem = invisibleRootItem();
00010 }
00011 
00012 PlaylistsPlugin *PlaylistsModel::getPlaylists() const
00013 {
00014     return playlists;
00015 }
00016 
00017 void            PlaylistsModel::update(int playlistId)
00018 {
00019     PlaylistItem    *playlistItem;
00020     PlaylistItem   *trackItem;
00021 
00022     if (playlistId == -1)
00023     {
00024         removeRows(0, rowCount(rootItem->index()), rootItem->index());
00025         QList<Playlist*> *playlistsList = playlists->getPlaylistList();
00026         QList<Library::AudioTrack*> *trackList;
00027         for (int idx = 0; idx < playlistsList->size(); idx++)
00028         {
00029             playlistItem = new PlaylistItem(((*playlistsList)[idx])->getId(), ((*playlistsList)[idx])->getName(), TRUE);
00030             rootItem->appendRow(playlistItem);
00031             trackList = ((*playlistsList)[idx])->getTrackList();
00032             for (int trackIdx = 0; trackIdx < trackList->size(); trackIdx++)
00033             {
00034                 trackItem = new PlaylistItem(((*trackList)[trackIdx])->getUid(), ((*trackList)[trackIdx])->getArtist() + " - " + ((*trackList)[trackIdx])->getTitle(), FALSE);
00035                 playlistItem->appendRow(trackItem);
00036             }
00037         }
00038     }
00039     else
00040     {
00041         for (int idx = 0; idx < rootItem->rowCount(); idx++)
00042         {
00043             PlaylistItem *item = static_cast<PlaylistItem*>(rootItem->child(idx));
00044             if (item->itemIsPlaylist() && (item->getIdItem() == playlistId))
00045             {
00046                 item->removeRows(0, item->rowCount());
00047                 foreach (Library::AudioTrack *track, *(this->getPlaylists()->getPlaylistById(playlistId)->getTrackList()))
00048                 {
00049                     trackItem = new PlaylistItem(track->getUid(), track->getArtist() + " - " + track->getTitle(), FALSE);
00050                     item->appendRow(trackItem);
00051                 };
00052             }
00053         }
00054     }
00055 }
00056 
00057 int         PlaylistsModel::getIdByIndex(const QModelIndex &index) const
00058 {
00059     PlaylistItem *item = static_cast<PlaylistItem *>(this->itemFromIndex(index));
00060     return item->getIdItem();
00061 }
00062 
00063 void        PlaylistsModel::insertPlaylist(int playlistId)
00064 {
00065     PlaylistItem    *playlistItem;
00066     playlistItem = new PlaylistItem(playlistId, getPlaylists()->getPlaylistById(playlistId)->getName(), TRUE);
00067     rootItem->appendRow(playlistItem);
00068 }
00069 
00070 void        PlaylistsModel::deletePlaylist(int playlistId)
00071 {
00072     int rowIndexToRemove = -1;
00073     for (int idx = 0; idx < rootItem->rowCount(); idx++)
00074     {
00075         PlaylistItem *item = static_cast<PlaylistItem*>(rootItem->child(idx));
00076         if (item->itemIsPlaylist() && (item->getIdItem() == playlistId))
00077         {
00078             item->removeRows(0, item->rowCount());
00079             rowIndexToRemove = idx;
00080         }
00081     }
00082     if(rowIndexToRemove != -1)
00083         rootItem->removeRow(rowIndexToRemove);
00084 }
00085 
00086 QMimeData *PlaylistsModel::mimeData(const QModelIndexList &indexes) const
00087 {
00088         QMimeData *mimeData = new QMimeData();
00089         QByteArray encodedData;
00090         QDataStream stream(&encodedData, QIODevice::WriteOnly);
00091         PlaylistItem *item;
00092 
00093         foreach (const QModelIndex &index, indexes)
00094         {
00095             if (index.isValid())
00096             {
00097                 item = static_cast<PlaylistItem *>(this->itemFromIndex(index));
00098                 if (item->itemIsPlaylist())
00099                         foreach (Library::AudioTrack *track, *(playlists->getPlaylistById(item->getIdItem())->getTrackList()))
00100                             stream << track->getUid();
00101                 else
00102                     stream << getIdByIndex(index);
00103             }
00104         }
00105         mimeData->setData("application/x-defuzeme-audiotrack", encodedData);
00106         return mimeData;
00107 }