From 502a347df60988919a1b64b759cd8736cc4efac7 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Thu, 16 Nov 2017 09:19:23 +0100 Subject: [PATCH] Also restore search mode when loading saved simple search data --- src/qtgui/rclm_saveload.cpp | 6 +++--- src/qtgui/ssearch_w.cpp | 5 ++++- src/qtgui/xmltosd.cpp | 18 +++++++++++++----- src/qtgui/xmltosd.h | 7 ++++--- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/qtgui/rclm_saveload.cpp b/src/qtgui/rclm_saveload.cpp index 90702ec0..0dd44ac3 100644 --- a/src/qtgui/rclm_saveload.cpp +++ b/src/qtgui/rclm_saveload.cpp @@ -115,14 +115,14 @@ void RclMain::loadSavedQuery() return; } - // Try to parse as SearchData - std::shared_ptr sd = xmlToSearchData(xml); + // Try to parse as advanced search SearchData + std::shared_ptr sd = xmlToSearchData(xml, false); if (sd) { showAdvSearchDialog(); asearchform->fromSearch(sd); return; } - + LOGDEB("loadSavedQuery: Not advanced search. Parsing as simple search\n"); // Try to parse as Simple Search SSearchDef sdef; if (xmlToSSearch(xml, sdef)) { diff --git a/src/qtgui/ssearch_w.cpp b/src/qtgui/ssearch_w.cpp index aa7bb01c..2d0c97c2 100644 --- a/src/qtgui/ssearch_w.cpp +++ b/src/qtgui/ssearch_w.cpp @@ -364,7 +364,10 @@ bool SSearch::fromXML(const SSearchDef& fxml) tr("Autophrase is unset but it was set for stored query")); } setSearchString(QString::fromUtf8(fxml.text.c_str())); - searchTypCMB->setCurrentIndex(prefs.ssearchTyp); + // We used to use prefs.ssearchTyp here. Not too sure why? + // Minimize user surprise factor ? Anyway it seems cleaner to + // restore the saved search type + searchTypCMB->setCurrentIndex(fxml.mode); return true; } diff --git a/src/qtgui/xmltosd.cpp b/src/qtgui/xmltosd.cpp index d2b26849..5b18ae0e 100644 --- a/src/qtgui/xmltosd.cpp +++ b/src/qtgui/xmltosd.cpp @@ -88,7 +88,7 @@ bool SDHXMLHandler::startElement(const QString & /* namespaceURI */, // either if type is absent, or if it's searchdata int idx = attrs.index("type"); if (idx >= 0 && attrs.value(idx).compare("searchdata")) { - LOGDEB("XMLTOSD: bad type\n"); + LOGDEB("XMLTOSD: bad type: " << qs2utf8s(attrs.value(idx)) << endl); return false; } resetTemps(); @@ -206,7 +206,8 @@ bool SDHXMLHandler::endElement(const QString & /* namespaceURI */, } -std::shared_ptr xmlToSearchData(const string& xml) +std::shared_ptr xmlToSearchData(const string& xml, + bool verbose) { SDHXMLHandler handler; QXmlSimpleReader reader; @@ -217,7 +218,9 @@ std::shared_ptr xmlToSearchData(const string& xml) xmlInputSource.setData(QString::fromUtf8(xml.c_str())); if (!reader.parse(xmlInputSource) || !handler.isvalid) { - LOGERR("xmlToSearchData: parse failed for [" << xml << "]\n"); + if (verbose) { + LOGERR("xmlToSearchData: parse failed for [" << xml << "]\n"); + } return std::shared_ptr(); } return handler.sd; @@ -271,8 +274,13 @@ bool SSHXMLHandler::startElement(const QString & /* namespaceURI */, if (qName == "SD") { // Simple search saved data has a type='ssearch' attribute. int idx = attrs.index("type"); - if (idx < 0 && attrs.value(idx).compare("ssearch")) { - LOGDEB("XMLTOSSS: bad type\n"); + if (idx < 0 || attrs.value(idx).compare("ssearch")) { + if (idx < 0) { + LOGDEB("XMLTOSSS: bad type\n"); + } else { + LOGDEB("XMLTOSSS: bad type: " << qs2utf8s(attrs.value(idx)) + << endl); + } return false; } resetTemps(); diff --git a/src/qtgui/xmltosd.h b/src/qtgui/xmltosd.h index 35d13e55..143ac89c 100644 --- a/src/qtgui/xmltosd.h +++ b/src/qtgui/xmltosd.h @@ -63,9 +63,10 @@ #include #include "searchdata.h" -// Parsing XML from advanced search history or saved advanced search to to -// SearchData structure: -std::shared_ptr xmlToSearchData(const string& xml); +// Parsing XML from advanced search history or saved advanced search into +// a SearchData structure: +std::shared_ptr xmlToSearchData(const string& xml, + bool complain = true); // Parsing XML from saved simple search to ssearch parameters struct SSearchDef {