defuze.me
Client
|
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 }