void KipiInterface::addAlbums(const KUrl::List& albums) { for (KUrl::List::const_iterator it = albums.constBegin(); it!=albums.constEnd(); ++it) { addAlbum(*it); } }
void CollectionTreeWidget::showChildrenOf(QModelIndex index) { CollectionTreeWidgetItem *item = (CollectionTreeWidgetItem*)itemFromIndex(index); // If the item pressed was an artist, add albums if (item->getNodeLevel() == LevelArtist) { QString artist = item->text(0).toUtf8(); // Looks for artist id QString artistId = QString::number(item->getId()); // Looks for artist albums QSqlTableModel *albumModel = service->albumModel(); albumModel->setFilter("id_artist = " + artistId); albumModel->select(); while (albumModel->canFetchMore()) albumModel->fetchMore(); int total = albumModel->rowCount(); for (int i = 0; i < total; i++) { QString album = albumModel->record(i).value(albumModel->fieldIndex("title")).toString(); unsigned int id = albumModel->record(i).value(albumModel->fieldIndex("id")).toInt(); addAlbum(artist, album, id); } delete albumModel; } // If the item pressed was an album, add songs else if (item->getNodeLevel() == LevelAlbum) { QString albumId = QString::number(item->getId()); QSqlTableModel *musicModel = service->musicModel(); musicModel->setFilter("id_album = " + albumId); musicModel->setSort(musicModel->fieldIndex("track_number"), Qt::AscendingOrder); musicModel->select(); while (musicModel->canFetchMore()) musicModel->fetchMore(); int total = musicModel->rowCount(); for (int i = 0; i < total; i++) { QString path = musicModel->record(i).value(musicModel->fieldIndex("path")).toString(); unsigned int id = musicModel->record(i).value(musicModel->fieldIndex("id")).toInt(); Music *music = new Music(QUrl(path)); addMusic(music, id); delete music; } } expand(index); }
CollectionTreeWidgetItem *CollectionTreeWidget::addMusic(Music *music, unsigned int id) { // Find id in database if we don't have it if (id == 0) { QSqlTableModel *model = service->collectionModel(); // SQLite used two single quotes to escape a single quote! :) QString filter = "artist = '" + music->getArtist().replace("'","''") + "' AND " "album = '" + music->getAlbum().replace("'","''") + "' AND " "music = '" + music->getTitle().replace("'","''") + "'"; model->setFilter(filter); model->select(); while (model->canFetchMore()) model->fetchMore(); int total = model->rowCount(); if (total > 0) { id = model->record(0).value(model->fieldIndex("id_music")).toInt(); } else { qDebug("ERROR: no songs found! -- " + model->filter().toUtf8()); return NULL; } } // Looks for the album QTreeWidgetItem *albumItem = addAlbum(music->getArtist(), music->getAlbum()); // Create our new music node and add it if it was not found removeMusic(id); CollectionTreeWidgetItem *newMusicNode = new CollectionTreeWidgetItem(LevelMusic, id, (QTreeWidget*)0); newMusicNode->setText(0, music->getTitle()); newMusicNode->setIcon(0, IconFactory::fromTheme("sound")); albumItem->addChild(newMusicNode); musicList.append(newMusicNode); return newMusicNode; }