void ThumbnailLoadThread::initializeThumbnailDatabase(const DbEngineParameters& params, ThumbnailInfoProvider* const provider) { if (static_d->firstThreadCreated) { qCDebug(DIGIKAM_GENERAL_LOG) << "Call initializeThumbnailDatabase at application start. " "There are already thumbnail loading threads created, " "and these will not be switched to use the database. "; } ThumbsDbAccess::setParameters(params); if (ThumbsDbAccess::checkReadyForUse(0)) { qCDebug(DIGIKAM_GENERAL_LOG) << "Thumbnails database ready for use"; static_d->storageMethod = ThumbnailCreator::ThumbnailDatabase; static_d->provider = provider; } else { QMessageBox::information(qApp->activeWindow(), i18n("Failed to initialize thumbnails database"), i18n("Error message: %1", ThumbsDbAccess().lastError())); } }
void ThumbsGenerator::slotStart() { MaintenanceTool::slotStart(); QApplication::setOverrideCursor(Qt::WaitCursor); if (d->albumList.isEmpty()) { d->albumList = AlbumManager::instance()->allPAlbums(); } for (AlbumList::const_iterator it = d->albumList.constBegin(); !canceled() && (it != d->albumList.constEnd()); ++it) { if (!(*it)) { continue; } if ((*it)->type() == Album::PHYSICAL) { d->allPicturesPath += CoreDbAccess().db()->getItemURLsInAlbum((*it)->id()); } else if ((*it)->type() == Album::TAG) { d->allPicturesPath += CoreDbAccess().db()->getItemURLsInTag((*it)->id()); } } if (!d->rebuildAll) { QHash<QString, int> filePaths = ThumbsDbAccess().db()->getFilePathsWithThumbnail(); QStringList::iterator it = d->allPicturesPath.begin(); while (it != d->allPicturesPath.end()) { if (filePaths.contains(*it)) { it = d->allPicturesPath.erase(it); } else { ++it; } } } // remove non-image or video files from the list QStringList::iterator it = d->allPicturesPath.begin(); while (it != d->allPicturesPath.end()) { ItemInfo info = ItemInfo::fromLocalFile(*it); if (info.category() != DatabaseItem::Image && info.category() != DatabaseItem::Video && info.category() != DatabaseItem::Audio) { it = d->allPicturesPath.erase(it); } else { ++it; } } QApplication::restoreOverrideCursor(); if (d->allPicturesPath.isEmpty()) { slotDone(); return; } setTotalItems(d->allPicturesPath.count()); d->thread->generateThumbs(d->allPicturesPath); d->thread->start(); }