X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/9b01d1bcc1ddeffd3f59cee73341ec440ef6f1e0..cad78cdfcf1f3b76acaadc7e9394df3ef466d770:/src/panels/places/placesitemmodel.cpp diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp index 4770c6b10..caf6b7566 100644 --- a/src/panels/places/placesitemmodel.cpp +++ b/src/panels/places/placesitemmodel.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -51,13 +52,13 @@ #include #ifdef HAVE_NEPOMUK - #include - #include - #include - #include - #include - #include - #include + #include + #include + #include + #include + #include + #include + #include #endif namespace { @@ -87,9 +88,13 @@ PlacesItemModel::PlacesItemModel(QObject* parent) : m_storageSetupInProgress() { #ifdef HAVE_NEPOMUK - if (Nepomuk::ResourceManager::instance()->initialized()) { + Nepomuk2::ResourceManager* rm = Nepomuk2::ResourceManager::instance(); + connect(rm, SIGNAL(nepomukSystemStarted()), this, SLOT(slotNepomukStarted())); + connect(rm, SIGNAL(nepomukSystemStopped()), this, SLOT(slotNepomukStopped())); + + if (rm->initialized()) { KConfig config("nepomukserverrc"); - m_fileIndexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", false); + m_fileIndexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", true); } #endif @@ -554,11 +559,14 @@ void PlacesItemModel::onItemChanged(int index, const QSet& changedRo void PlacesItemModel::slotDeviceAdded(const QString& udi) { const Solid::Device device(udi); - if (m_predicate.matches(device)) { - m_availableDevices << udi; - const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi); - appendItem(new PlacesItem(bookmark)); + + if (!m_predicate.matches(device)) { + return; } + + m_availableDevices << udi; + const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi); + appendItem(new PlacesItem(bookmark)); } void PlacesItemModel::slotDeviceRemoved(const QString& udi) @@ -574,14 +582,14 @@ void PlacesItemModel::slotDeviceRemoved(const QString& udi) delete item; return; } - } - - for (int i = 0; i < count(); ++i) { - if (placesItem(i)->udi() == udi) { - removeItem(i); - return; - } - } + } + + for (int i = 0; i < count(); ++i) { + if (placesItem(i)->udi() == udi) { + removeItem(i); + return; + } + } } void PlacesItemModel::slotStorageTeardownDone(Solid::ErrorType error, const QVariant& errorData) @@ -896,8 +904,6 @@ void PlacesItemModel::createSystemBookmarks() Q_ASSERT(m_systemBookmarks.isEmpty()); Q_ASSERT(m_systemBookmarksIndexes.isEmpty()); - const QString timeLineIcon = "chronometer"; - // Note: The context of the I18N_NOOP2 must be "KFile System Bookmarks". The real // i18nc call is done after reading the bookmark. The reason why the i18nc call is not // done here is because otherwise switching the language would not result in retranslating the @@ -917,16 +923,16 @@ void PlacesItemModel::createSystemBookmarks() if (m_fileIndexingEnabled) { m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/today"), - timeLineIcon, + "go-jump-today", I18N_NOOP2("KFile System Bookmarks", "Today"))); m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/yesterday"), - timeLineIcon, + "view-calendar-day", I18N_NOOP2("KFile System Bookmarks", "Yesterday"))); m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/thismonth"), - timeLineIcon, + "view-calendar-month", I18N_NOOP2("KFile System Bookmarks", "This Month"))); m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/lastmonth"), - timeLineIcon, + "view-calendar-month", I18N_NOOP2("KFile System Bookmarks", "Last Month"))); m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/documents"), "folder-txt", @@ -947,16 +953,57 @@ void PlacesItemModel::createSystemBookmarks() } } +void PlacesItemModel::clear() { + m_bookmarkedItems.clear(); + KStandardItemModel::clear(); +} + +void PlacesItemModel::slotNepomukStarted() +{ + KConfig config("nepomukserverrc"); + m_fileIndexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", true); + if (m_fileIndexingEnabled) { + m_systemBookmarks.clear(); + m_systemBookmarksIndexes.clear(); + createSystemBookmarks(); + + clear(); + loadBookmarks(); + } +} + +void PlacesItemModel::slotNepomukStopped() +{ + if (m_fileIndexingEnabled) { + m_fileIndexingEnabled = false; + + m_systemBookmarks.clear(); + m_systemBookmarksIndexes.clear(); + createSystemBookmarks(); + + clear(); + loadBookmarks(); + } +} + + void PlacesItemModel::initializeAvailableDevices() { - m_predicate = Solid::Predicate::fromString( - "[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]" + QString predicate("[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]" " OR " "[ IS StorageAccess AND StorageDrive.driveType == 'Floppy' ]]" " OR " "OpticalDisc.availableContent & 'Audio' ]" " OR " "StorageAccess.ignored == false ]"); + + + if (KProtocolInfo::isKnownProtocol("mtp")) { + predicate.prepend("["); + predicate.append(" OR PortableMediaPlayer.supportedProtocols == 'mtp']"); + } + + m_predicate = Solid::Predicate::fromString(predicate); Q_ASSERT(m_predicate.isValid()); Solid::DeviceNotifier* notifier = Solid::DeviceNotifier::instance(); @@ -1150,15 +1197,15 @@ KUrl PlacesItemModel::createSearchUrl(const KUrl& url) #ifdef HAVE_NEPOMUK const QString path = url.pathOrUrl(); if (path.endsWith(QLatin1String("documents"))) { - searchUrl = searchUrlForTerm(Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::NFO::Document())); + searchUrl = searchUrlForTerm(Nepomuk2::Query::ResourceTypeTerm(Nepomuk2::Vocabulary::NFO::Document())); } else if (path.endsWith(QLatin1String("images"))) { - searchUrl = searchUrlForTerm(Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::NFO::Image())); + searchUrl = searchUrlForTerm(Nepomuk2::Query::ResourceTypeTerm(Nepomuk2::Vocabulary::NFO::Image())); } else if (path.endsWith(QLatin1String("audio"))) { - searchUrl = searchUrlForTerm(Nepomuk::Query::ComparisonTerm(Nepomuk::Vocabulary::NIE::mimeType(), - Nepomuk::Query::LiteralTerm("audio"))); + searchUrl = searchUrlForTerm(Nepomuk2::Query::ComparisonTerm(Nepomuk2::Vocabulary::NIE::mimeType(), + Nepomuk2::Query::LiteralTerm("audio"))); } else if (path.endsWith(QLatin1String("videos"))) { - searchUrl = searchUrlForTerm(Nepomuk::Query::ComparisonTerm(Nepomuk::Vocabulary::NIE::mimeType(), - Nepomuk::Query::LiteralTerm("video"))); + searchUrl = searchUrlForTerm(Nepomuk2::Query::ComparisonTerm(Nepomuk2::Vocabulary::NIE::mimeType(), + Nepomuk2::Query::LiteralTerm("video"))); } else { Q_ASSERT(false); } @@ -1170,9 +1217,9 @@ KUrl PlacesItemModel::createSearchUrl(const KUrl& url) } #ifdef HAVE_NEPOMUK -KUrl PlacesItemModel::searchUrlForTerm(const Nepomuk::Query::Term& term) +KUrl PlacesItemModel::searchUrlForTerm(const Nepomuk2::Query::Term& term) { - const Nepomuk::Query::FileQuery query(term); + const Nepomuk2::Query::FileQuery query(term); return query.toSearchUrl(); } #endif