From 017a8ab1a58c91d109db5f19d21fa86bf8422e4b Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Wed, 5 Jun 2013 16:34:09 +0100 Subject: [PATCH] Implemented issue #5, tweaked Bash Tag message string. --- src/backend/generators.h | 32 ++++++++++++++++++++++---------- src/gui/main.cpp | 27 +++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/backend/generators.h b/src/backend/generators.h index 3184d989..245b0141 100644 --- a/src/backend/generators.h +++ b/src/backend/generators.h @@ -36,6 +36,14 @@ namespace boss { + struct xml_string_writer: pugi::xml_writer { + std::string result; + + virtual void write(const void* data, size_t size) { + result += std::string(static_cast(data), size); + } + }; + inline void WriteMessage(pugi::xml_node& listItem, unsigned int type, std::string content) { if (type == MESSAGE_SAY) @@ -238,7 +246,7 @@ namespace boss { else cell.text().set("Disabled"); - if (hasChanged) { + if (!hasChanged) { pugi::xml_node note = summary.append_child(); note.set_name("div"); note.append_attribute("id").set_value("noChanges"); @@ -276,7 +284,7 @@ namespace boss { cell.text().set(IntToString(errorNo).c_str()); } - inline void AppendDetails(pugi::xml_node& main, const std::list& plugins, int& messageNo, int& warnNo, int& errorNo) { + inline bool AppendDetails(pugi::xml_node& main, const std::list& plugins, int& messageNo, int& warnNo, int& errorNo, const std::string& oldDetails) { pugi::xml_node details = main.append_child(); details.set_name("div"); @@ -317,9 +325,9 @@ namespace boss { remove += ", " + jt->Name(); } if (!add.empty()) - content += "Bash Tags suggested for addition are " + add.substr(2) + ". "; + content += "Add " + add.substr(2) + ". "; if (!remove.empty()) - content += "Bash Tags suggested for removal are " + remove.substr(2) + ". "; + content += "Remove " + remove.substr(2) + ". "; messages.push_back(Message(MESSAGE_TAG, content)); //Special type just for tag suggestions. } @@ -327,11 +335,15 @@ namespace boss { messageNo += messages.size(); } } - + + xml_string_writer writer; + details.print(writer, "\t", pugi::format_default | pugi::format_no_declaration); + + return writer.result != oldDetails; } inline void AppendMain(pugi::xml_node& body, - bool hasChanged, + const std::string& oldDetails, const std::string& masterlistVersion, bool masterlistUpdateEnabled, const std::list& messages, @@ -352,7 +364,7 @@ namespace boss { div.text().set("The BOSS Report requires Javascript to be enabled in order to function."); int messageNo=0, warnNo=0, errorNo=0; - AppendDetails(main, plugins, messageNo, warnNo, errorNo); + bool hasChanged = AppendDetails(main, plugins, messageNo, warnNo, errorNo, oldDetails); pluginMessageNo = messageNo; AppendSummary(main, hasChanged, masterlistVersion, masterlistUpdateEnabled, messageNo, warnNo, errorNo, messages); @@ -449,9 +461,9 @@ namespace boss { inline void GenerateReport(const std::string& file, const std::list& messages, const std::list& plugins, + const std::string& oldDetails, const std::string& masterlistVersion, - const bool masterlistUpdateEnabled, - const bool hasChanged) { + const bool masterlistUpdateEnabled) { pugi::xml_document doc; @@ -463,7 +475,7 @@ namespace boss { AppendNav(body); int messageNo=0; - AppendMain(body, hasChanged, masterlistVersion, masterlistUpdateEnabled, messages, plugins, messageNo); + AppendMain(body, oldDetails, masterlistVersion, masterlistUpdateEnabled, messages, plugins, messageNo); AppendFilters(body, messageNo, plugins.size()); diff --git a/src/gui/main.cpp b/src/gui/main.cpp index f67239b4..26066e2e 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -533,13 +533,36 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { out << "Generating report..." << endl; + //Read the details section of the previous report, if it exists. + string oldDetails; + if (fs::exists(_game.ReportPath().string())) { + //Read the whole file in. + ifstream in(_game.ReportPath().string().c_str(), ios::binary); + in.seekg(0, std::ios::end); + oldDetails.resize(in.tellg()); + in.seekg(0, std::ios::beg); + in.read(&oldDetails[0], oldDetails.size()); + in.close(); + + //Slim down to only the details section. + size_t pos1 = oldDetails.find("
", pos1); + size_t pos2 = oldDetails.find("
", pos1); + pos2 = oldDetails.rfind("", pos2) - 3; //Remove the 3 tabs preceding the closing tag. + + oldDetails = oldDetails.substr(pos1, pos2 - pos1); + boost::replace_all(oldDetails, "\t\t\t\t", "\t"); + oldDetails += "\n"; + } + + try { GenerateReport(_game.ReportPath().string(), messages, plugins, + oldDetails, "4030 (2020-13-13)", - _settings["Update Masterlist"].as(), - true); + _settings["Update Masterlist"].as()); } catch (boss::error& e) { wxMessageBox( FromUTF8(format(loc::translate("Error: %1%")) % e.what()),