Recursive UserPlaylist adding, subsonic uses UserPlaylist for folders

This commit is contained in:
Alan Briolat 2012-01-30 18:56:34 +00:00
parent 6c8d1b25b7
commit a62b7752ad
3 changed files with 33 additions and 6 deletions

View File

@ -231,8 +231,24 @@ QMimeData* InternetModel::mimeData(const QModelIndexList& indexes) const {
int column = 0;
QModelIndex child = index.child(row, column);
while (child.isValid()) {
new_indexes << child;
urls << child.data(Role_Url).toUrl();
// If the playlist contains another playlist, expand it
if (child.data(Role_Type).toInt() == Type_UserPlaylist) {
// "List" of indexes to recurse on
QModelIndexList templist;
templist.append(child);
// We know this is going to be an InternetMimeData because we're calling
// ourselves with something that we always return InternetMimeData for!
InternetMimeData* recurse = qobject_cast<InternetMimeData*>(mimeData(templist));
// Add children if there were any
if (recurse) {
new_indexes.append(recurse->indexes);
urls.append(recurse->urls());
delete recurse;
}
} else {
new_indexes << child;
urls << child.data(Role_Url).toUrl();
}
child = index.child(++row, column);
}
} else {

View File

@ -46,12 +46,14 @@ void SubsonicService::LazyPopulate(QStandardItem *item)
{
switch (item->data(InternetModel::Role_Type).toInt())
{
// The "root" item
case InternetModel::Type_Service:
GetIndexes();
break;
case Type_Artist:
case Type_Album:
// Any folder item
case InternetModel::Type_UserPlaylist:
qLog(Debug) << "Lazy loading" << item->data(Role_Id).toString();
GetMusicDirectory(item->data(Role_Id).toString());
break;
@ -64,6 +66,12 @@ void SubsonicService::LazyPopulate(QStandardItem *item)
item->appendRow(loading);
}
smart_playlists::GeneratorPtr SubsonicService::CreateGenerator(QStandardItem* item)
{
qLog(Debug) << "Attempting to smart load" << item->data(Role_Id).toString();
return smart_playlists::GeneratorPtr();
}
void SubsonicService::ReloadSettings()
{
QSettings s;
@ -154,8 +162,9 @@ void SubsonicService::ReadArtist(QXmlStreamReader *reader, QStandardItem *parent
QString id = reader->attributes().value("id").toString();
QStandardItem *item = new QStandardItem(IconLoader::Load("document-open-folder"),
reader->attributes().value("name").toString());
item->setData(Type_Artist, InternetModel::Role_Type);
item->setData(true, InternetModel::Role_CanLazyLoad);
item->setData(InternetModel::Type_UserPlaylist, InternetModel::Role_Type);
item->setData(InternetModel::PlayBehaviour_SingleItem, InternetModel::Role_PlayBehaviour);
item->setData(id, Role_Id);
parent->appendRow(item);
item_lookup_.insert(id, item);
@ -168,8 +177,9 @@ void SubsonicService::ReadAlbum(QXmlStreamReader *reader, QStandardItem *parent)
QString id = reader->attributes().value("id").toString();
QStandardItem *item = new QStandardItem(IconLoader::Load("document-open-folder"),
reader->attributes().value("title").toString());
item->setData(Type_Album, InternetModel::Role_Type);
item->setData(true, InternetModel::Role_CanLazyLoad);
item->setData(InternetModel::Type_UserPlaylist, InternetModel::Role_Type);
item->setData(InternetModel::PlayBehaviour_SingleItem, InternetModel::Role_PlayBehaviour);
item->setData(id, Role_Id);
parent->appendRow(item);
item_lookup_.insert(id, item);

View File

@ -56,6 +56,7 @@ class SubsonicService : public InternetService
QStandardItem* CreateRootItem();
void LazyPopulate(QStandardItem *item);
smart_playlists::GeneratorPtr CreateGenerator(QStandardItem* item);
void ReloadSettings();
void Login();