X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/59e8f22cd5de7cc1811550d8bac6aacc5c36587c..4479a546bda708cad514412e8cf749c11caa0697:/src/panels/places/placesitemmodel.cpp diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp index a37c17fd8..6accdc837 100644 --- a/src/panels/places/placesitemmodel.cpp +++ b/src/panels/places/placesitemmodel.cpp @@ -51,22 +51,17 @@ #include #include -#ifdef HAVE_NEPOMUK - #include - #include - #include - #include - #include - #include - #include +#ifdef HAVE_BALOO + #include + #include #endif namespace { // As long as KFilePlacesView from kdelibs is available in parallel, the - // system-bookmarks for "Recently Accessed" and "Search For" should be + // system-bookmarks for "Recently Saved" and "Search For" should be // shown only inside the Places Panel. This is necessary as the stored - // URLs needs to get translated to a Nepomuk-search-URL on-the-fly to - // be independent from changes in the Nepomuk-search-URL-syntax. + // URLs needs to get translated to a Baloo-search-URL on-the-fly to + // be independent from changes in the Baloo-search-URL-syntax. // Hence a prefix to the application-name of the stored bookmarks is // added, which is only read by PlacesItemModel. const char* AppNamePrefix = "-places-panel"; @@ -87,12 +82,9 @@ PlacesItemModel::PlacesItemModel(QObject* parent) : m_updateBookmarksTimer(0), m_storageSetupInProgress() { -#ifdef HAVE_NEPOMUK - if (Nepomuk2::ResourceManager::instance()->initialized()) { - KConfig config("nepomukserverrc"); - m_fileIndexingEnabled = config.group("Service-nepomukfileindexer").readEntry("autostart", false); - } - +#ifdef HAVE_BALOO + Baloo::IndexerConfig config; + m_fileIndexingEnabled = config.fileIndexingEnabled(); #endif const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml"); m_bookmarkManager = KBookmarkManager::managerForFile(file, "kfilePlaces"); @@ -321,7 +313,8 @@ void PlacesItemModel::requestEject(int index) Solid::OpticalDrive* drive = item->device().parent().as(); if (drive) { connect(drive, SIGNAL(ejectDone(Solid::ErrorType,QVariant,QString)), - this, SLOT(slotStorageTeardownDone(Solid::ErrorType,QVariant))); + this, SLOT(slotStorageTeardownDone(Solid::ErrorType,QVariant)), + Qt::UniqueConnection); drive->eject(); } else { const QString label = item->text(); @@ -338,7 +331,8 @@ void PlacesItemModel::requestTeardown(int index) Solid::StorageAccess* access = item->device().as(); if (access) { connect(access, SIGNAL(teardownDone(Solid::ErrorType,QVariant,QString)), - this, SLOT(slotStorageTeardownDone(Solid::ErrorType,QVariant))); + this, SLOT(slotStorageTeardownDone(Solid::ErrorType,QVariant)), + Qt::UniqueConnection); access->teardown(); } } @@ -367,13 +361,14 @@ void PlacesItemModel::requestStorageSetup(int index) m_storageSetupInProgress[access] = index; connect(access, SIGNAL(setupDone(Solid::ErrorType,QVariant,QString)), - this, SLOT(slotStorageSetupDone(Solid::ErrorType,QVariant,QString))); + this, SLOT(slotStorageSetupDone(Solid::ErrorType,QVariant,QString)), + Qt::UniqueConnection); access->setup(); } } -QMimeData* PlacesItemModel::createMimeData(const QSet& indexes) const +QMimeData* PlacesItemModel::createMimeData(const KItemSet& indexes) const { KUrl::List urls; QByteArray itemData; @@ -440,6 +435,12 @@ void PlacesItemModel::dropMimeDataBefore(int index, const QMimeData* mimeData) text = url.host(); } + if ((url.isLocalFile() && !QFileInfo(url.toLocalFile()).isDir()) + || url.protocol() == "trash") { + // Only directories outside the trash are allowed + continue; + } + PlacesItem* newItem = createPlacesItem(text, url); const int dropIndex = groupedDropIndex(index, newItem); insertItem(dropIndex, newItem); @@ -601,6 +602,7 @@ void PlacesItemModel::slotStorageSetupDone(Solid::ErrorType error, { Q_UNUSED(udi); + Q_ASSERT(!m_storageSetupInProgress.isEmpty()); const int index = m_storageSetupInProgress.take(sender()); const PlacesItem* item = placesItem(index); if (!item) { @@ -608,17 +610,13 @@ void PlacesItemModel::slotStorageSetupDone(Solid::ErrorType error, } if (error) { - // TODO: Request message-freeze exception if (errorData.isValid()) { - // emit errorMessage(i18nc("@info", "An error occurred while accessing '%1', the system responded: %2", - // item->text(), - // errorData.toString())); - emit errorMessage(QString("An error occurred while accessing '%1', the system responded: %2") - .arg(item->text()).arg(errorData.toString())); + emit errorMessage(i18nc("@info", "An error occurred while accessing '%1', the system responded: %2", + item->text(), + errorData.toString())); } else { - // emit errorMessage(i18nc("@info", "An error occurred while accessing '%1'", - // item->text())); - emit errorMessage(QString("An error occurred while accessing '%1'").arg(item->text())); + emit errorMessage(i18nc("@info", "An error occurred while accessing '%1'", + item->text())); } emit storageSetupDone(index, false); } else { @@ -657,6 +655,7 @@ void PlacesItemModel::updateBookmarks() found = true; if (newBookmark.metaDataItem("UDI").isEmpty()) { item->setBookmark(newBookmark); + item->setText(i18nc("KFile System Bookmarks", newBookmark.text().toUtf8().data())); } break; } @@ -743,7 +742,7 @@ void PlacesItemModel::loadBookmarks() // items should always be collected in one group so the items are collected first // in separate lists before inserting them. QList placesItems; - QList recentlyAccessedItems; + QList recentlySavedItems; QList searchForItems; QList devicesItems; @@ -768,11 +767,11 @@ void PlacesItemModel::loadBookmarks() } switch (item->groupType()) { - case PlacesItem::PlacesType: placesItems.append(item); break; - case PlacesItem::RecentlyAccessedType: recentlyAccessedItems.append(item); break; - case PlacesItem::SearchForType: searchForItems.append(item); break; + case PlacesItem::PlacesType: placesItems.append(item); break; + case PlacesItem::RecentlySavedType: recentlySavedItems.append(item); break; + case PlacesItem::SearchForType: searchForItems.append(item); break; case PlacesItem::DevicesType: - default: Q_ASSERT(false); break; + default: Q_ASSERT(false); break; } } } @@ -787,11 +786,11 @@ void PlacesItemModel::loadBookmarks() if (missingSystemBookmarks.contains(data.url)) { PlacesItem* item = createSystemPlacesItem(data); switch (item->groupType()) { - case PlacesItem::PlacesType: placesItems.append(item); break; - case PlacesItem::RecentlyAccessedType: recentlyAccessedItems.append(item); break; - case PlacesItem::SearchForType: searchForItems.append(item); break; + case PlacesItem::PlacesType: placesItems.append(item); break; + case PlacesItem::RecentlySavedType: recentlySavedItems.append(item); break; + case PlacesItem::SearchForType: searchForItems.append(item); break; case PlacesItem::DevicesType: - default: Q_ASSERT(false); break; + default: Q_ASSERT(false); break; } } } @@ -805,7 +804,7 @@ void PlacesItemModel::loadBookmarks() QList items; items.append(placesItems); - items.append(recentlyAccessedItems); + items.append(recentlySavedItems); items.append(searchForItems); items.append(devicesItems); @@ -850,7 +849,7 @@ PlacesItem* PlacesItemModel::createSystemPlacesItem(const SystemBookmarkData& da const QString protocol = data.url.protocol(); if (protocol == QLatin1String("timeline") || protocol == QLatin1String("search")) { // As long as the KFilePlacesView from kdelibs is available, the system-bookmarks - // for "Recently Accessed" and "Search For" should be a setting available only + // for "Recently Saved" and "Search For" should be a setting available only // in the Places Panel (see description of AppNamePrefix for more details). const QString appName = KGlobal::mainComponent().componentName() + AppNamePrefix; bookmark.setMetaDataItem("OnlyInApp", appName); @@ -859,11 +858,11 @@ PlacesItem* PlacesItemModel::createSystemPlacesItem(const SystemBookmarkData& da PlacesItem* item = new PlacesItem(bookmark); item->setSystemItem(true); - // Create default view-properties for all "Search For" and "Recently Accessed" bookmarks + // Create default view-properties for all "Search For" and "Recently Saved" bookmarks // in case if the user has not already created custom view-properties for a corresponding // query yet. const bool createDefaultViewProperties = (item->groupType() == PlacesItem::SearchForType || - item->groupType() == PlacesItem::RecentlyAccessedType) && + item->groupType() == PlacesItem::RecentlySavedType) && !GeneralSettings::self()->globalViewProps(); if (createDefaultViewProperties) { ViewProperties props(convertedUrl(data.url)); @@ -949,6 +948,11 @@ void PlacesItemModel::createSystemBookmarks() } } +void PlacesItemModel::clear() { + m_bookmarkedItems.clear(); + KStandardItemModel::clear(); +} + void PlacesItemModel::initializeAvailableDevices() { QString predicate("[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]" @@ -1106,7 +1110,7 @@ bool PlacesItemModel::equalBookmarkIdentifiers(const KBookmark& b1, const KBookm KUrl PlacesItemModel::createTimelineUrl(const KUrl& url) { - // TODO: Clarify with the Nepomuk-team whether it makes sense + // TODO: Clarify with the Baloo-team whether it makes sense // provide default-timeline-URLs like 'yesterday', 'this month' // and 'last month'. KUrl timelineUrl; @@ -1156,18 +1160,16 @@ KUrl PlacesItemModel::createSearchUrl(const KUrl& url) { KUrl searchUrl; -#ifdef HAVE_NEPOMUK +#ifdef HAVE_BALOO const QString path = url.pathOrUrl(); if (path.endsWith(QLatin1String("documents"))) { - searchUrl = searchUrlForTerm(Nepomuk2::Query::ResourceTypeTerm(Nepomuk2::Vocabulary::NFO::Document())); + searchUrl = searchUrlForType("Document"); } else if (path.endsWith(QLatin1String("images"))) { - searchUrl = searchUrlForTerm(Nepomuk2::Query::ResourceTypeTerm(Nepomuk2::Vocabulary::NFO::Image())); + searchUrl = searchUrlForType("Image"); } else if (path.endsWith(QLatin1String("audio"))) { - searchUrl = searchUrlForTerm(Nepomuk2::Query::ComparisonTerm(Nepomuk2::Vocabulary::NIE::mimeType(), - Nepomuk2::Query::LiteralTerm("audio"))); + searchUrl = searchUrlForType("Audio"); } else if (path.endsWith(QLatin1String("videos"))) { - searchUrl = searchUrlForTerm(Nepomuk2::Query::ComparisonTerm(Nepomuk2::Vocabulary::NIE::mimeType(), - Nepomuk2::Query::LiteralTerm("video"))); + searchUrl = searchUrlForType("Video"); } else { Q_ASSERT(false); } @@ -1178,10 +1180,13 @@ KUrl PlacesItemModel::createSearchUrl(const KUrl& url) return searchUrl; } -#ifdef HAVE_NEPOMUK -KUrl PlacesItemModel::searchUrlForTerm(const Nepomuk2::Query::Term& term) +#ifdef HAVE_BALOO +KUrl PlacesItemModel::searchUrlForType(const QString& type) { - const Nepomuk2::Query::FileQuery query(term); + Baloo::Query query; + query.addType("File"); + query.addType(type); + return query.toSearchUrl(); } #endif