diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Plasma DocTools Runner Notifications NotifyConfig Su NewStuff Wallet IdleTime Declarative I18n KCMUtils TextWidgets KDELibs4Support Crash GlobalAccel - DBusAddons Wayland CoreAddons People ActivitiesStats) + DBusAddons Wayland CoreAddons People ActivitiesStats Activities) find_package(KDED CONFIG REQUIRED) find_package(KF5NetworkManagerQt ${KF5_MIN_VERSION}) @@ -77,11 +77,6 @@ set_package_properties(Phonon4Qt5 PROPERTIES DESCRIPTION "Qt-based audio library" TYPE REQUIRED) -find_package(KF5Activities ${KF5_MIN_VERSION}) -set_package_properties(KF5Activities PROPERTIES DESCRIPTION "management of Plasma activities" - TYPE OPTIONAL - PURPOSE "Needed by activity related plasmoids." - ) find_package(ZLIB) set_package_properties(ZLIB PROPERTIES DESCRIPTION "Support for gzip compressed files and data streams" diff --git a/runners/recentdocuments/CMakeLists.txt b/runners/recentdocuments/CMakeLists.txt --- a/runners/recentdocuments/CMakeLists.txt +++ b/runners/recentdocuments/CMakeLists.txt @@ -10,6 +10,8 @@ KF5::KIOCore KF5::KIOWidgets KF5::I18n + KF5::Activities + KF5::ActivitiesStats KF5::Runner ) diff --git a/runners/recentdocuments/recentdocuments.h b/runners/recentdocuments/recentdocuments.h --- a/runners/recentdocuments/recentdocuments.h +++ b/runners/recentdocuments/recentdocuments.h @@ -37,12 +37,6 @@ private Q_SLOTS: QList actionsForMatch(const Plasma::QueryMatch &match) override; QMimeData * mimeDataForMatch(const Plasma::QueryMatch &match) override; - - private Q_SLOTS: - void loadRecentDocuments(); - - private: - QStringList m_recentdocuments; }; diff --git a/runners/recentdocuments/recentdocuments.cpp b/runners/recentdocuments/recentdocuments.cpp --- a/runners/recentdocuments/recentdocuments.cpp +++ b/runners/recentdocuments/recentdocuments.cpp @@ -23,13 +23,18 @@ #include #include -#include -#include -#include #include -#include #include #include +#include +#include + +#include +#include +#include + +using namespace KActivities::Stats; +using namespace KActivities::Stats::Terms; K_EXPORT_PLASMA_RUNNER(recentdocuments, RecentDocuments) @@ -40,13 +45,7 @@ { Q_UNUSED(args); setObjectName( QStringLiteral("Recent Documents" )); - loadRecentDocuments(); - // listen for changes to the list of recent documents - KDirWatch *recentDocWatch = new KDirWatch(this); - recentDocWatch->addDir(KRecentDocument::recentDocumentDirectory(), KDirWatch::WatchFiles); - connect(recentDocWatch, &KDirWatch::created, this, &RecentDocuments::loadRecentDocuments); - connect(recentDocWatch, &KDirWatch::deleted, this, &RecentDocuments::loadRecentDocuments); - connect(recentDocWatch, &KDirWatch::dirty, this, &RecentDocuments::loadRecentDocuments); + addSyntax(Plasma::RunnerSyntax(QStringLiteral(":q:"), i18n("Looks for documents recently used with names matching :q:."))); addAction(s_openParentDirId, QIcon::fromTheme(QStringLiteral("document-open-folder")), i18n("Open Containing Folder")); @@ -56,78 +55,64 @@ { } -void RecentDocuments::loadRecentDocuments() -{ - m_recentdocuments = KRecentDocument::recentDocuments(); -} - - void RecentDocuments::match(Plasma::RunnerContext &context) { - if (m_recentdocuments.isEmpty()) { + if (!context.isValid()) { return; } const QString term = context.query(); - if (term.length() < 3) { - return; - } - const QString homePath = QDir::homePath(); + auto query = UsedResources + | Activity::current() + | Order::RecentlyUsedFirst + | Agent::any() + | Url("/*/" + term + "*") + | Limit(30); - // avoid duplicates - QSet knownUrls; - - for (const QString &document : qAsConst(m_recentdocuments)) { - if (!context.isValid()) { - return; - } + const auto result = new ResultModel(query); - if (document.contains(term, Qt::CaseInsensitive)) { - KDesktopFile config(document); + for (int i = 0; i < result->rowCount(); i++) { + const auto index = result->index(i, 0); - const QUrl url = QUrl(config.readUrl()); - if (knownUrls.contains(url)) { - continue; - } + const auto url = QUrl::fromUserInput(result->data(index, ResultModel::ResourceRole).toString()); + const auto name = result->data(index, ResultModel::TitleRole).toString(); - knownUrls.insert(url); + Plasma::QueryMatch match(this); - Plasma::QueryMatch match(this); + auto relevance = 0.5; + match.setType(Plasma::QueryMatch::PossibleMatch); + if (url.fileName() == term) { + relevance = 1.0; + match.setType(Plasma::QueryMatch::ExactMatch); + } else if(url.fileName().startsWith(term)) { + relevance = 0.9; match.setType(Plasma::QueryMatch::PossibleMatch); - match.setRelevance(1.0); - match.setIconName(config.readIcon()); - match.setData(url); - match.setText(config.readName()); - - QUrl folderUrl = url.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash); - if (folderUrl.isLocalFile()) { - QString folderPath = folderUrl.toLocalFile(); - if (folderPath.startsWith(homePath)) { - folderPath.replace(0, homePath.length(), QStringLiteral("~")); - } - match.setSubtext(folderPath); - } else { - match.setSubtext(folderUrl.toDisplayString()); - } - - context.addMatch(match); } + match.setIconName(KIO::iconNameForUrl(url)); + match.setRelevance(relevance); + match.setData(QVariant(url)); + match.setText(name); + + QString destUrlString = KShell::tildeCollapse(url.adjusted(QUrl::RemoveFilename).path()); + match.setSubtext(destUrlString); + + context.addMatch(match); } } void RecentDocuments::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match) { Q_UNUSED(context) - const QString url = match.data().toString(); + const QUrl url = match.data().toUrl(); - if (match.selectedAction() && match.selectedAction() == action(s_openParentDirId)) { - KIO::highlightInFileManager({QUrl(url)}); + if (match.selectedAction() == action(s_openParentDirId)) { + KIO::highlightInFileManager({url}); return; } - auto run = new KRun(QUrl(url), nullptr); + auto run = new KRun(url, nullptr); run->setRunExecutables(false); } @@ -137,7 +122,9 @@ QList actions; - if (QUrl(match.data().toString()).isLocalFile()) { + const QUrl url = match.data().toUrl(); + + if (url.isLocalFile()) { actions << action(s_openParentDirId); } @@ -147,7 +134,7 @@ QMimeData * RecentDocuments::mimeDataForMatch(const Plasma::QueryMatch& match) { QMimeData *result = new QMimeData(); - result->setText(match.data().toString()); + result->setUrls({match.data().toUrl()}); return result; }