You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeio-locate/src/locater.cpp

132 lines
4.1 KiB

/***************************************************************************
* tdeio-locate: KDE I/O Slave for the locate command *
* *
* Copyright (C) 2005 by Tobi Vollebregt *
* tobivollebregt@gmail.com *
* *
* Thanks to Google's Summer Of Code Program! *
* *
* Copyright (C) 2004 by Armin Straub *
* linux@arminstraub.de *
* *
* This program was initially written by Michael Schuerig. *
* Although I have completely rewritten it, most ideas are adopted *
* from his original work. *
* *
* Copyright (C) 2002 by Michael Schuerig *
* michael@schuerig.de *
* *
* *
* 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. *
***************************************************************************/
#include <tqtextcodec.h>
#include <kdebug.h>
#include <kstandarddirs.h>
#include "locater.h"
Locater::Locater(TQObject *parent, const char *name)
: TQObject(parent, name), m_process(TQTextCodec::codecForLocale())
{
DEBUGSTR << "Locater::Locater" << endl;
connect(&m_process, TQT_SIGNAL(processExited(TDEProcess*)),
this, TQT_SLOT(finished(TDEProcess*)));
connect(&m_process, TQT_SIGNAL(readReady(KProcIO*)),
this, TQT_SLOT(gotOutput(KProcIO*)));
setupLocate();
}
Locater::~Locater()
{
DEBUGSTR << "Locater::~Locater" << endl;
}
void Locater::setupLocate(const TQString& binary, const TQString& additionalArguments)
{
DEBUGSTR << "Locater::setupLocate(" << binary << ", " << additionalArguments << ")" << endl;
// Automatically choose the correct binary if not specified.
if (binary.isEmpty()) {
if (!TDEStandardDirs::findExe("slocate").isNull()) {
m_binary = "slocate";
} else if (!TDEStandardDirs::findExe("rlocate").isNull()) {
m_binary = "rlocate";
} else {
m_binary = "locate";
}
DEBUGSTR << "Using binary:" << m_binary << endl;
} else {
m_binary = binary;
}
m_additionalArguments = additionalArguments;
m_binaryExists = TDEStandardDirs::findExe(m_binary) != TQString();
}
bool Locater::locate(const TQString& pattern, bool ignoreCase, bool regExp)
{
DEBUGSTR << "Locater::locate(" << pattern << "," << ignoreCase << "," << regExp << ")" << endl;
m_process.resetAll();
m_process << m_binary;
if (!m_additionalArguments.isEmpty()) {
m_process << m_additionalArguments;
}
if (ignoreCase) {
// m_process << "--ignore-case";
m_process << "-i";
}
if (regExp) {
m_process << "-r";
}
m_process << pattern;
return m_process.start(TDEProcess::Block, false);
}
void Locater::stop()
{
DEBUGSTR << "Locater::stop()" << endl;
m_process.kill();
emit finished();
}
void Locater::gotOutput(KProcIO* /*proc*/)
{
//DEBUGSTR << "Locater::gotOutput" << endl;
TQStringList items;
TQString line;
while (m_process.readln(line) != -1) {
//DEBUGSTR << "OUTPUT>> '" << line << "'" << endl;
items << line;
}
emit found(items);
}
void Locater::finished(TDEProcess* /*proc*/)
{
DEBUGSTR << "Locater::finished" << endl;
emit finished();
}
#include "locater.moc"