void SinglePlaylistView::onBrowseResult(uint browseId, int remainingCount, uint index, QString objectId, GHashTable *metadata) { if (browseId != this->browsePlaylistId) return; if (index != 0 || remainingCount != 0 || !objectId.isNull()) { QStandardItem *item = new QStandardItem(); setItemMetadata(item, objectId, metadata); objectModel->appendRow(item); updateSongCount(); } if (remainingCount == 0) { disconnect(mafwTrackerSource, SIGNAL(browseResult(uint,int,uint,QString,GHashTable*,QString)), this, SLOT(onBrowseResult(uint,int,uint,QString,GHashTable*))); setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); playlistLoaded = true; switch (pendingActivation) { case Nothing: break; case AddToNowPlaying: addAllToNowPlaying(); break; case AddToPlaylist: addAllToPlaylist(); break; default: onItemActivated(objectProxyModel->mapFromSource(objectModel->index(pendingActivation,0))); break; } }
void SingleGenreView::browseAllGenres(uint browseId, int remainingCount, uint, QString objectId, GHashTable* metadata, QString error) { if (browseId != browseGenreId) return; if (metadata != NULL) { QString title; int songCount = -1; int albumCount = -1; GValue *v; QStandardItem *item = new QStandardItem(); v = mafw_metadata_first(metadata, MAFW_METADATA_KEY_TITLE); title = v ? QString::fromUtf8(g_value_get_string(v)) : tr("(unknown artist)"); v = mafw_metadata_first(metadata, MAFW_METADATA_KEY_CHILDCOUNT_1); albumCount = v ? g_value_get_int (v) : -1; v = mafw_metadata_first(metadata, MAFW_METADATA_KEY_CHILDCOUNT_2); songCount = v ? g_value_get_int (v) : -1; v = mafw_metadata_first(metadata, MAFW_METADATA_KEY_ALBUM_ART_SMALL_URI); if (v != NULL) { const gchar* file_uri = g_value_get_string(v); gchar* filename = NULL; if (file_uri != NULL && (filename = g_filename_from_uri(file_uri, NULL, NULL)) != NULL) item->setIcon(QIcon(QString::fromUtf8(filename))); } else { item->setIcon(QIcon::fromTheme(defaultAlbumIcon)); } if (title.isEmpty()) title = tr("(unknown artist)"); item->setText(title); item->setData(songCount, UserRoleSongCount); item->setData(albumCount, UserRoleAlbumCount); item->setData(objectId, UserRoleObjectID); objectModel->appendRow(item); visibleSongs += songCount; updateSongCount(); } if (!error.isEmpty()) qDebug() << error; if (remainingCount == 0) { disconnect(mafwTrackerSource, SIGNAL(browseResult(uint,int,uint,QString,GHashTable*,QString)), this, SLOT(browseAllGenres(uint,int,uint,QString,GHashTable*,QString))); setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); }
SinglePlaylistView::SinglePlaylistView(QWidget *parent, MafwRegistryAdapter *mafwRegistry) : BrowserWindow(parent, mafwRegistry), mafwRegistry(mafwRegistry), mafwRenderer(mafwRegistry->renderer()), mafwTrackerSource(mafwRegistry->source(MafwRegistryAdapter::Tracker)), playlist(mafwRegistry->playlist()) { browsePlaylistId = MAFW_SOURCE_INVALID_BROWSE_ID; setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true); permanentDelete = QSettings().value("main/permanentDelete").toBool(); ui->objectList->setItemDelegate(new SongListItemDelegate(ui->objectList)); ui->objectList->setItemDelegateForRow(0, new ShuffleButtonDelegate(ui->objectList)); objectProxyModel->setFilterRole(UserRoleFilterString); ui->objectList->setDragDropMode(QAbstractItemView::InternalMove); ui->objectList->viewport()->setAcceptDrops(true); ui->objectList->setAutoScrollMargin(70); QApplication::setStartDragDistance(20); ui->objectList->setDragEnabled(false); playlistModified = false; pendingActivation = Nothing; clickedIndex = QModelIndex(); clickTimer = new QTimer(this); clickTimer->setInterval(QApplication::doubleClickInterval()); clickTimer->setSingleShot(true); ui->windowMenu->addAction(tr("Add to now playing"), this, SLOT(addAllToNowPlaying())); ui->windowMenu->addAction(tr("Add to a playlist" ), this, SLOT(addAllToPlaylist())); ui->windowMenu->addAction(tr("Delete playlist" ), this, SLOT(deletePlaylist())); connect(new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Enter), this), SIGNAL(activated()), this, SLOT(onContextMenuRequested())); connect(ui->objectList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onContextMenuRequested(QPoint))); connect(ui->searchEdit, SIGNAL(textChanged(QString)), this, SLOT(updateSongCount())); connect(clickTimer, SIGNAL(timeout()), this, SLOT(forgetClick())); }
void SinglePlaylistView::browseSavedPlaylist(MafwPlaylist *mafwplaylist) { currentObjectId = QString(); playlistLoaded = true; objectModel->clear(); QStandardItem *item = new QStandardItem(); item->setData(true, UserRoleHeader); item->setDragEnabled(false); item->setDropEnabled(false); objectModel->appendRow(item); connect(ui->objectList, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onItemDoubleClicked())); MafwPlaylistAdapter *mpa = new MafwPlaylistAdapter(mafwplaylist); int size = mpa->size(); gchar** items = mpa->items(0, size-1); for (int i = 0; items[i] != NULL; i++) { QStandardItem *item = new QStandardItem(); item->setData(QString::fromUtf8(items[i]), UserRoleObjectID); item->setData(Duration::Blank, UserRoleSongDuration); item->setDropEnabled(false); objectModel->appendRow(item); } g_strfreev(items); PlaylistQueryManager *playlistQM = new PlaylistQueryManager(this, mpa); mpa->setParent(playlistQM); connect(playlistQM, SIGNAL(gotItem(QString,GHashTable*,uint)), this, SLOT(onItemReceived(QString,GHashTable*,uint))); connect(ui->objectList->verticalScrollBar(), SIGNAL(valueChanged(int)), playlistQM, SLOT(setPriority(int))); playlistQM->getItems(0, size-1); remainingCount = size; updateSongCount(); }