kde kioslave: fix for new wasaToRcl shared_ptr interface. Misc warnings suppression

This commit is contained in:
Jean-Francois Dockes 2020-12-28 14:20:33 +01:00
parent 3c7e3ccbc7
commit 663da54c04
7 changed files with 249 additions and 251 deletions

View File

@ -309,7 +309,7 @@ bool RecollProtocol::doSearch(const QueryDesc& qd)
char opt = qd.opt.isEmpty() ? 'l' : qd.opt.toUtf8().at(0); char opt = qd.opt.isEmpty() ? 'l' : qd.opt.toUtf8().at(0);
string qs = (const char *)qd.query.toUtf8(); string qs = (const char *)qd.query.toUtf8();
Rcl::SearchData *sd = 0; std::shared_ptr<Rcl::SearchData> sdata;
if (opt != 'l') { if (opt != 'l') {
Rcl::SearchDataClause *clp = 0; Rcl::SearchDataClause *clp = 0;
if (opt == 'f') { if (opt == 'f') {
@ -318,19 +318,18 @@ bool RecollProtocol::doSearch(const QueryDesc& qd)
clp = new Rcl::SearchDataClauseSimple(opt == 'o' ? Rcl::SCLT_OR : clp = new Rcl::SearchDataClauseSimple(opt == 'o' ? Rcl::SCLT_OR :
Rcl::SCLT_AND, qs); Rcl::SCLT_AND, qs);
} }
sd = new Rcl::SearchData(Rcl::SCLT_OR, m_stemlang); sdata = std::make_shared<Rcl::SearchData>(Rcl::SCLT_OR, m_stemlang);
if (sd && clp) if (sdata && clp)
sd->addClause(clp); sdata->addClause(clp);
} else { } else {
sd = wasaStringToRcl(o_rclconfig, m_stemlang, qs, m_reason); sdata = wasaStringToRcl(o_rclconfig, m_stemlang, qs, m_reason);
} }
if (!sd) { if (!sdata) {
m_reason = "Internal Error: cant build search"; m_reason = "Internal Error: cant build search";
error(KIO::ERR_SLAVE_DEFINED, m_reason.c_str()); error(KIO::ERR_SLAVE_DEFINED, m_reason.c_str());
return false; return false;
} }
std::shared_ptr<Rcl::SearchData> sdata(sd);
std::shared_ptr<Rcl::Query>query(new Rcl::Query(m_rcldb.get())); std::shared_ptr<Rcl::Query>query(new Rcl::Query(m_rcldb.get()));
query->setCollapseDuplicates(prefs.collapseDuplicates); query->setCollapseDuplicates(prefs.collapseDuplicates);
if (!query->setQuery(sdata)) { if (!query->setQuery(sdata)) {

View File

@ -34,7 +34,9 @@ Recoll configuration.
Recipe: Recipe:
- Make sure the KF5 core and KIO devel packages and cmake are installed. - Make sure the KF5 core and KIO devel packages and cmake are
installed. You probably need the kio-devel and extra-cmake-modules
packages.
- Extract the Recoll source. - Extract the Recoll source.

View File

@ -117,40 +117,40 @@ static const UDSEntry resultToUDSEntry(const Rcl::Doc& doc, int num)
// asked to access it // asked to access it
char cnum[30]; char cnum[30];
sprintf(cnum, "%04d", num); sprintf(cnum, "%04d", num);
entry.insert(KIO::UDSEntry::UDS_NAME, resultBaseName + cnum); entry.fastInsert(KIO::UDSEntry::UDS_NAME, resultBaseName + cnum);
// Display the real file name // Display the real file name
entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, url.fileName()); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, url.fileName());
/// A local file path if the ioslave display files sitting on the /// A local file path if the ioslave display files sitting on the
/// local filesystem (but in another hierarchy, e.g. settings:/ or /// local filesystem (but in another hierarchy, e.g. settings:/ or
/// remote:/) /// remote:/)
entry.insert(KIO::UDSEntry::UDS_LOCAL_PATH, url.path()); entry.fastInsert(KIO::UDSEntry::UDS_LOCAL_PATH, url.path());
/// This file is a shortcut or mount, pointing to an /// This file is a shortcut or mount, pointing to an
/// URL in a different hierarchy /// URL in a different hierarchy
/// @since 4.1 /// @since 4.1
// We should probably set this only if the scheme is not 'file' (e.g. // We should probably set this only if the scheme is not 'file' (e.g.
// from the web cache). // from the web cache).
entry.insert(KIO::UDSEntry::UDS_TARGET_URL, doc.url.c_str()); entry.fastInsert(KIO::UDSEntry::UDS_TARGET_URL, doc.url.c_str());
if (!doc.mimetype.compare("application/x-fsdirectory") || if (!doc.mimetype.compare("application/x-fsdirectory") ||
!doc.mimetype.compare("inode/directory")) { !doc.mimetype.compare("inode/directory")) {
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "inode/directory"); entry.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, "inode/directory");
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
} else { } else {
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, doc.mimetype.c_str()); entry.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, doc.mimetype.c_str());
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
} }
// For local files, supply the usual file stat information // For local files, supply the usual file stat information
struct stat info; struct stat info;
if (lstat(url.path().toUtf8(), &info) >= 0) { if (lstat(url.path().toUtf8(), &info) >= 0) {
entry.insert(KIO::UDSEntry::UDS_SIZE, info.st_size); entry.fastInsert(KIO::UDSEntry::UDS_SIZE, info.st_size);
entry.insert(KIO::UDSEntry::UDS_ACCESS, info.st_mode); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, info.st_mode);
entry.insert(KIO::UDSEntry::UDS_MODIFICATION_TIME, info.st_mtime); entry.fastInsert(KIO::UDSEntry::UDS_MODIFICATION_TIME, info.st_mtime);
entry.insert(KIO::UDSEntry::UDS_ACCESS_TIME, info.st_atime); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS_TIME, info.st_atime);
entry.insert(KIO::UDSEntry::UDS_CREATION_TIME, info.st_ctime); entry.fastInsert(KIO::UDSEntry::UDS_CREATION_TIME, info.st_ctime);
} }
return entry; return entry;
@ -161,23 +161,23 @@ static const UDSEntry resultToUDSEntry(const Rcl::Doc& doc, int num)
static void createRootEntry(KIO::UDSEntry& entry) static void createRootEntry(KIO::UDSEntry& entry)
{ {
entry.clear(); entry.clear();
entry.insert(KIO::UDSEntry::UDS_NAME, "."); entry.fastInsert(KIO::UDSEntry::UDS_NAME, ".");
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
entry.insert(KIO::UDSEntry::UDS_ACCESS, 0700); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, 0700);
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "inode/directory"); entry.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, "inode/directory");
} }
// Points to html query screen // Points to html query screen
static void createGoHomeEntry(KIO::UDSEntry& entry) static void createGoHomeEntry(KIO::UDSEntry& entry)
{ {
entry.clear(); entry.clear();
entry.insert(KIO::UDSEntry::UDS_NAME, "search.html"); entry.fastInsert(KIO::UDSEntry::UDS_NAME, "search.html");
entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, "Recoll search (click me)"); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, "Recoll search (click me)");
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
entry.insert(KIO::UDSEntry::UDS_TARGET_URL, "recoll:///search.html"); entry.fastInsert(KIO::UDSEntry::UDS_TARGET_URL, "recoll:///search.html");
entry.insert(KIO::UDSEntry::UDS_ACCESS, 0500); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, 0500);
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "text/html"); entry.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, "text/html");
entry.insert(KIO::UDSEntry::UDS_ICON_NAME, "recoll"); entry.fastInsert(KIO::UDSEntry::UDS_ICON_NAME, "recoll");
} }
// Points to help file // Points to help file
@ -187,14 +187,14 @@ static void createGoHelpEntry(KIO::UDSEntry& entry)
QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStandardPaths::locate(QStandardPaths::GenericDataLocation,
"kio_recoll/help.html"); "kio_recoll/help.html");
entry.clear(); entry.clear();
entry.insert(KIO::UDSEntry::UDS_NAME, "help"); entry.fastInsert(KIO::UDSEntry::UDS_NAME, "help");
entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, "Recoll help (click me first)"); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, "Recoll help (click me first)");
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
entry.insert(KIO::UDSEntry::UDS_TARGET_URL, QString("file://") + entry.fastInsert(KIO::UDSEntry::UDS_TARGET_URL, QString("file://") +
location); location);
entry.insert(KIO::UDSEntry::UDS_ACCESS, 0500); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, 0500);
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "text/html"); entry.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, "text/html");
entry.insert(KIO::UDSEntry::UDS_ICON_NAME, "help"); entry.fastInsert(KIO::UDSEntry::UDS_ICON_NAME, "help");
} }
// As far as I can see we only ever get this on '/' so why all the code? // As far as I can see we only ever get this on '/' so why all the code?
@ -205,8 +205,8 @@ void RecollProtocol::stat(const QUrl& url)
UrlIngester ingest(this, url); UrlIngester ingest(this, url);
KIO::UDSEntry entry; KIO::UDSEntry entry;
// entry.insert(KIO::UDSEntry::UDS_TARGET_URL, url.url()); // entry.fastInsert(KIO::UDSEntry::UDS_TARGET_URL, url.url());
// entry.insert(KIO::UDSEntry::UDS_URL, url.url()); // entry.fastInsert(KIO::UDSEntry::UDS_URL, url.url());
UrlIngester::RootEntryType rettp; UrlIngester::RootEntryType rettp;
QueryDesc qd; QueryDesc qd;
int num; int num;
@ -257,12 +257,12 @@ void RecollProtocol::stat(const QUrl& url)
if (m_alwaysdir || ingest.alwaysDir() || ingest.endSlashQuery()) { if (m_alwaysdir || ingest.alwaysDir() || ingest.endSlashQuery()) {
qDebug() << "RecollProtocol::stat: Directory type:"; qDebug() << "RecollProtocol::stat: Directory type:";
// Need to check no / in there // Need to check no / in there
entry.insert(KIO::UDSEntry::UDS_NAME, qd.query); entry.fastInsert(KIO::UDSEntry::UDS_NAME, qd.query);
entry.insert(KIO::UDSEntry::UDS_ACCESS, 0700); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, 0700);
entry.insert(KIO::UDSEntry::UDS_MODIFICATION_TIME, time(0)); entry.fastInsert(KIO::UDSEntry::UDS_MODIFICATION_TIME, time(0));
entry.insert(KIO::UDSEntry::UDS_CREATION_TIME, time(0)); entry.fastInsert(KIO::UDSEntry::UDS_CREATION_TIME, time(0));
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "inode/directory"); entry.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, "inode/directory");
} }
} else { } else {
qDebug() << "RecollProtocol::stat: none of the above ??"; qDebug() << "RecollProtocol::stat: none of the above ??";

View File

@ -191,16 +191,16 @@ void RecollProtocol::queryDetails()
QByteArray array; QByteArray array;
QTextStream os(&array, QIODevice::WriteOnly); QTextStream os(&array, QIODevice::WriteOnly);
os << "<html><head>" << endl; os << "<html><head>" << "\n";
os << "<meta http-equiv=\"Content-Type\" content=\"text/html;" os << "<meta http-equiv=\"Content-Type\" content=\"text/html;"
"charset=utf-8\">" << endl; "charset=utf-8\">" << "\n";
os << "<title>" << "Recoll query details" << "</title>\n" << endl; os << "<title>" << "Recoll query details" << "</title>\n" << "\n";
os << "</head>" << endl; os << "</head>" << "\n";
os << "<body><h3>Query details:</h3>" << endl; os << "<body><h3>Query details:</h3>" << "\n";
os << "<p>" << m_pager.queryDescription().c_str() << "</p>" << endl; os << "<p>" << m_pager.queryDescription().c_str() << "</p>" << "\n";
os << "<p><a href=\"" << makeQueryUrl(m_pager.pageNumber()).c_str() << os << "<p><a href=\"" << makeQueryUrl(m_pager.pageNumber()).c_str() <<
"\">Return to results</a>" << endl; "\">Return to results</a>" << "\n";
os << "</body></html>" << endl; os << "</body></html>" << "\n";
data(array); data(array);
} }
@ -210,7 +210,7 @@ public:
: m_name(nm) { : m_name(nm) {
} }
virtual string header() { virtual string header() override {
if (m_inputhtml) { if (m_inputhtml) {
return cstr_null; return cstr_null;
} else { } else {
@ -222,11 +222,11 @@ public:
} }
} }
virtual string startMatch(unsigned int) { virtual string startMatch(unsigned int) override {
return string("<font color=\"blue\">"); return string("<font color=\"blue\">");
} }
virtual string endMatch() { virtual string endMatch() override {
return string("</font>"); return string("</font>");
} }
@ -266,14 +266,14 @@ void RecollProtocol::showPreview(const Rcl::Doc& idoc)
it != otextlist.end(); it++) { it != otextlist.end(); it++) {
os << (*it).c_str(); os << (*it).c_str();
} }
os << "</body></html>" << endl; os << "</body></html>" << "\n";
data(array); data(array);
} }
void RecollProtocol::htmlDoSearch(const QueryDesc& qd) void RecollProtocol::htmlDoSearch(const QueryDesc& qd)
{ {
qDebug() << "q" << qd.query << "option" << qd.opt << "page" << qd.page << qDebug() << "q" << qd.query << "option" << qd.opt << "page" << qd.page <<
"isdet" << qd.isDetReq << endl; "isdet" << qd.isDetReq << "\n";
mimeType("text/html"); mimeType("text/html");

View File

@ -312,7 +312,7 @@ bool RecollProtocol::doSearch(const QueryDesc& qd)
char opt = qd.opt.isEmpty() ? 'l' : qd.opt.toUtf8().at(0); char opt = qd.opt.isEmpty() ? 'l' : qd.opt.toUtf8().at(0);
string qs = (const char *)qd.query.toUtf8(); string qs = (const char *)qd.query.toUtf8();
Rcl::SearchData *sd = 0; std::shared_ptr<Rcl::SearchData> sdata;
if (opt != 'l') { if (opt != 'l') {
Rcl::SearchDataClause *clp = 0; Rcl::SearchDataClause *clp = 0;
if (opt == 'f') { if (opt == 'f') {
@ -321,20 +321,19 @@ bool RecollProtocol::doSearch(const QueryDesc& qd)
clp = new Rcl::SearchDataClauseSimple(opt == 'o' ? Rcl::SCLT_OR : clp = new Rcl::SearchDataClauseSimple(opt == 'o' ? Rcl::SCLT_OR :
Rcl::SCLT_AND, qs); Rcl::SCLT_AND, qs);
} }
sd = new Rcl::SearchData(Rcl::SCLT_OR, m_stemlang); sdata = std::make_shared<Rcl::SearchData>(Rcl::SCLT_OR, m_stemlang);
if (sd && clp) { if (sdata && clp) {
sd->addClause(clp); sdata->addClause(clp);
} }
} else { } else {
sd = wasaStringToRcl(o_rclconfig, m_stemlang, qs, m_reason); sdata = wasaStringToRcl(o_rclconfig, m_stemlang, qs, m_reason);
} }
if (!sd) { if (!sdata) {
m_reason = "Internal Error: cant build search"; m_reason = "Internal Error: cant build search";
error(KIO::ERR_SLAVE_DEFINED, u8s2qs(m_reason)); error(KIO::ERR_SLAVE_DEFINED, u8s2qs(m_reason));
return false; return false;
} }
std::shared_ptr<Rcl::SearchData> sdata(sd);
std::shared_ptr<Rcl::Query>query(new Rcl::Query(m_rcldb.get())); std::shared_ptr<Rcl::Query>query(new Rcl::Query(m_rcldb.get()));
query->setCollapseDuplicates(prefs.collapseDuplicates); query->setCollapseDuplicates(prefs.collapseDuplicates);
if (!query->setQuery(sdata)) { if (!query->setQuery(sdata)) {

View File

@ -40,15 +40,15 @@ public:
m_parent = proto; m_parent = proto;
} }
virtual bool append(const std::string& data); virtual bool append(const std::string& data) override;
virtual bool append(const std::string& data, int, const Rcl::Doc&) { virtual bool append(const std::string& data, int, const Rcl::Doc&) override {
return append(data); return append(data);
} }
virtual std::string detailsLink(); virtual std::string detailsLink() override;
virtual const std::string& parFormat(); virtual const std::string& parFormat() override;
virtual std::string nextUrl(); virtual std::string nextUrl() override;
virtual std::string prevUrl(); virtual std::string prevUrl() override;
virtual std::string pageTop(); virtual std::string pageTop() override;
private: private:
RecollProtocol *m_parent; RecollProtocol *m_parent;
@ -151,12 +151,12 @@ class RecollProtocol : public KIO::SlaveBase {
public: public:
RecollProtocol(const QByteArray& pool, const QByteArray& app); RecollProtocol(const QByteArray& pool, const QByteArray& app);
virtual ~RecollProtocol(); virtual ~RecollProtocol();
virtual void mimetype(const QUrl& url); virtual void mimetype(const QUrl& url) override;
virtual void get(const QUrl& url); virtual void get(const QUrl& url) override;
// The directory mode is not available with KDE 4.0, I could find // The directory mode is not available with KDE 4.0, I could find
// no way to avoid crashing kdirmodel // no way to avoid crashing kdirmodel
virtual void stat(const QUrl& url); virtual void stat(const QUrl& url) override;
virtual void listDir(const QUrl& url); virtual void listDir(const QUrl& url) override;
static RclConfig *o_rclconfig; static RclConfig *o_rclconfig;

View File

@ -119,21 +119,19 @@ PHP_METHOD(Query, query)
} }
pRclDb->setAbstractParams(-1, maxchars, ctxwords); pRclDb->setAbstractParams(-1, maxchars, ctxwords);
Rcl::SearchData *sd = 0;
// jf: the original implementation built an AND clause. It would // jf: the original implementation built an AND clause. It would
// be nice to offer an option, but the next best thing is to // be nice to offer an option, but the next best thing is to
// default to the query language // default to the query language
sd = wasaStringToRcl(rclconfig, "english", qs, reason); auto sdata = wasaStringToRcl(rclconfig, "english", qs, reason);
if (!sd) { if (!sdata) {
cerr << "Query string interpretation failed: " << reason << endl; cerr << "Query string interpretation failed: " << reason << endl;
RETURN_BOOL(false); RETURN_BOOL(false);
} }
std::shared_ptr<Rcl::SearchData> rq(sd);
Rcl::Query *pRclQuery = new Rcl::Query(pRclDb); Rcl::Query *pRclQuery = new Rcl::Query(pRclDb);
pRclQuery->setQuery(rq); pRclQuery->setQuery(sdata);
query_object *obj = (query_object *)zend_object_store_get_object(getThis() TSRMLS_CC); query_object *obj = (query_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
obj->pRclQuery = pRclQuery; obj->pRclQuery = pRclQuery;