The filenamesearch ioslave has been moved to kio-extras, remove it from Dolphin.

See commit 05689c462745edbaeebcfc63d456877746805451 in kio-extras
This commit is contained in:
Emmanuel Pescosta 2014-10-20 11:08:22 +02:00
parent bfdc5a44d2
commit 3c74d908de
4 changed files with 0 additions and 280 deletions

View file

@ -310,17 +310,6 @@ install(TARGETS kcm_dolphinnavigation DESTINATION ${PLUGIN_INSTALL_DIR} )
install(TARGETS kcm_dolphinservices DESTINATION ${PLUGIN_INSTALL_DIR} )
install(TARGETS kcm_dolphingeneral DESTINATION ${PLUGIN_INSTALL_DIR} )
#########################################
set(kio_search_PART_SRCS
search/filenamesearchprotocol.cpp)
add_library(kio_filenamesearch MODULE ${kio_search_PART_SRCS})
target_link_libraries(kio_filenamesearch KF5::KDELibs4Support)
install(TARGETS kio_filenamesearch DESTINATION ${PLUGIN_INSTALL_DIR})
########### install files ###############
install( PROGRAMS org.kde.dolphin.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} )
@ -333,7 +322,6 @@ install( FILES settings/dolphin_directoryviewpropertysettings.kcfg
DESTINATION ${KCFG_INSTALL_DIR} )
install( FILES dolphinui.rc DESTINATION ${CMAKE_INSTALL_KXMLGUI5DIR}/dolphin )
install( FILES dolphin.appdata.xml DESTINATION ${SHARE_INSTALL_PREFIX}/appdata )
install( FILES search/filenamesearch.protocol DESTINATION ${SERVICES_INSTALL_DIR} )
install( FILES settings/kcm/kcmdolphinviewmodes.desktop DESTINATION
${SERVICES_INSTALL_DIR} )
install( FILES settings/kcm/kcmdolphinnavigation.desktop DESTINATION ${SERVICES_INSTALL_DIR} )

View file

@ -1,17 +0,0 @@
[Protocol]
exec=kio_filenamesearch
protocol=filenamesearch
input=none
output=filesystem
reading=true
writing=false
deleting=true
linking=false
makedir=false
moving=false
listing=Name,Type,Size,Date,AccessDate,Access,Owner,Group,Link
source=false
Icon=edit-find
Class=:local
determineMimetypeFromExtension=false
maxInstances=10

View file

@ -1,192 +0,0 @@
/***************************************************************************
* Copyright (C) 2010 by Peter Penz <peter.penz19@gmail.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include "filenamesearchprotocol.h"
#include <KComponentData>
#include <KDirLister>
#include <KFileItem>
#include <KIO/NetAccess>
#include <KIO/Job>
#include <KUrl>
#include <kdemacros.h>
#include <ktemporaryfile.h>
#include <QCoreApplication>
#include <QEventLoop>
#include <QRegExp>
FileNameSearchProtocol::FileNameSearchProtocol( const QByteArray &pool, const QByteArray &app ) :
SlaveBase("search", pool, app),
m_checkContent(false),
m_regExp(0),
m_iteratedDirs()
{
}
FileNameSearchProtocol::~FileNameSearchProtocol()
{
cleanup();
}
void FileNameSearchProtocol::listDir(const QUrl& url)
{
cleanup();
const QString search = url.queryItemValue("search");
if (!search.isEmpty()) {
m_regExp = new QRegExp(search, Qt::CaseInsensitive, QRegExp::Wildcard);
}
m_checkContent = false;
const QString checkContent = url.queryItemValue("checkContent");
if (checkContent == QLatin1String("yes")) {
m_checkContent = true;
}
const QString urlString = url.queryItemValue("url");
searchDirectory(KUrl(urlString));
cleanup();
finished();
}
void FileNameSearchProtocol::searchDirectory(const KUrl& directory)
{
if (directory.path() == QLatin1String("/proc")) {
// Don't try to iterate the /proc directory of Linux
return;
}
// Get all items of the directory
KDirLister *dirLister = new KDirLister();
dirLister->setDelayedMimeTypes(false);
dirLister->setAutoErrorHandlingEnabled(false, 0);
dirLister->openUrl(directory);
QEventLoop eventLoop;
QObject::connect(dirLister, static_cast<void(KDirLister::*)()>(&KDirLister::canceled), &eventLoop, &QEventLoop::quit);
QObject::connect(dirLister, static_cast<void(KDirLister::*)()>(&KDirLister::completed), &eventLoop, &QEventLoop::quit);
eventLoop.exec();
// Visualize all items that match the search pattern
QList<KUrl> pendingDirs;
const KFileItemList items = dirLister->items();
foreach (const KFileItem& item, items) {
bool addItem = false;
if (!m_regExp || item.name().contains(*m_regExp)) {
addItem = true;
} else if (m_checkContent && item.determineMimeType().inherits(QLatin1String("text/plain"))) {
addItem = contentContainsPattern(item.url());
}
if (addItem) {
KIO::UDSEntry entry = item.entry();
entry.insert(KIO::UDSEntry::UDS_URL, item.url().url() );
listEntry(entry,false);
}
if (item.isDir()) {
if (item.isLink()) {
// Assure that no endless searching is done in directories that
// have already been iterated.
const KUrl linkDest(item.url(), item.linkDest());
if (!m_iteratedDirs.contains(linkDest.path())) {
pendingDirs.append(linkDest);
}
} else {
pendingDirs.append(item.url());
}
}
}
listEntry(KIO::UDSEntry(), true);
m_iteratedDirs.insert(directory.path());
delete dirLister;
dirLister = 0;
// Recursively iterate all sub directories
foreach (const KUrl& pendingDir, pendingDirs) {
searchDirectory(pendingDir);
}
}
bool FileNameSearchProtocol::contentContainsPattern(const KUrl& fileName) const
{
Q_ASSERT(m_regExp);
QString path;
KTemporaryFile tempFile;
if (fileName.isLocalFile()) {
path = fileName.path();
} else if (tempFile.open()) {
KIO::Job* getJob = KIO::file_copy(fileName,
tempFile.fileName(),
-1,
KIO::Overwrite | KIO::HideProgressInfo);
if (!KIO::NetAccess::synchronousRun(getJob, 0)) {
// The non-local file could not be downloaded
return false;
}
path = tempFile.fileName();
} else {
// No temporary file could be created for downloading non-local files
return false;
}
QFile file(path);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
QTextStream in(&file);
while (!in.atEnd()) {
const QString line = in.readLine();
if (line.contains(*m_regExp)) {
return true;
}
}
return false;
}
void FileNameSearchProtocol::cleanup()
{
delete m_regExp;
m_regExp = 0;
m_iteratedDirs.clear();
}
extern "C" int KDE_EXPORT kdemain( int argc, char **argv )
{
KComponentData instance("kio_search");
QCoreApplication app(argc, argv);
if (argc != 4) {
fprintf(stderr, "Usage: kio_filenamesearch protocol domain-socket1 domain-socket2\n");
exit(-1);
}
FileNameSearchProtocol slave(argv[2], argv[3]);
slave.dispatchLoop();
return 0;
}

View file

@ -1,59 +0,0 @@
/***************************************************************************
* Copyright (C) 2010 by Peter Penz <peter.penz19@gmail.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#ifndef FILENAMESEARCHPROTOCOL_H
#define FILENAMESEARCHPROTOCOL_H
#include <kio/slavebase.h>
class KUrl;
class QRegExp;
/**
* @brief Lists files where the filename matches do a given query.
*
* The query is defined as part of the "search" query item of the URL.
* The directory where the searching is started is defined in the "url" query
* item. If the query item "checkContent" is set to "yes", all files with
* a text MIME type will be checked for the content.
*/
class FileNameSearchProtocol : public KIO::SlaveBase {
public:
FileNameSearchProtocol(const QByteArray& pool, const QByteArray& app);
virtual ~FileNameSearchProtocol();
virtual void listDir(const QUrl& url) Q_DECL_OVERRIDE;
private:
void searchDirectory(const KUrl& directory);
/**
* @return True, if the pattern m_searchPattern is part of
* the file \a fileName.
*/
bool contentContainsPattern(const KUrl& fileName) const;
void cleanup();
bool m_checkContent;
QRegExp* m_regExp;
QSet<QString> m_iteratedDirs;
};
#endif