diff --git a/resources/report/report.html b/resources/report/report.html index 98b3f3aa..e2a4cddf 100644 --- a/resources/report/report.html +++ b/resources/report/report.html @@ -29,6 +29,7 @@ + diff --git a/resources/report/script.js b/resources/report/script.js index 16a172f9..c36c8d6e 100644 --- a/resources/report/script.js +++ b/resources/report/script.js @@ -224,6 +224,7 @@ function processURLParams() { /* Fill report with data. */ document.getElementById('lootVersion').textContent = data.lootVersion; document.getElementById('masterlistRevision').textContent = data.masterlist.revision; + document.getElementById('masterlistDate').textContent = data.masterlist.date; document.getElementById('masterlistUpdating').textContent = data.masterlist.updaterEnabled; var generalMessagesList = document.getElementById('generalMessagesList'); for (var i = 0; i < data.globalMessages.length; ++i) { diff --git a/src/backend/generators.cpp b/src/backend/generators.cpp index 502ab49d..b4b37d7c 100644 --- a/src/backend/generators.cpp +++ b/src/backend/generators.cpp @@ -220,6 +220,7 @@ namespace loot { std::list& messages, const std::list& plugins, const std::string& masterlistVersion, + const std::string& masterlistDate, const bool masterlistUpdateEnabled) { YAML::Node oldDetails; @@ -253,7 +254,7 @@ namespace loot { yout << YAML::Key << "revision" << YAML::Value << masterlistVersion << YAML::Key << "date" - << YAML::Value << "" + << YAML::Value << masterlistDate << YAML::EndMap; if (!plugins.empty()) { @@ -313,6 +314,9 @@ namespace loot { << YAML::Key << "txtMasterlistRevision" << YAML::Value << boost::locale::translate("Masterlist Version").str() + << YAML::Key << "txtMasterlistDate" + << YAML::Value << boost::locale::translate("Masterlist Date").str() + << YAML::Key << "txtMasterlistUpdating" << YAML::Value << boost::locale::translate("Masterlist Updating").str() diff --git a/src/backend/generators.h b/src/backend/generators.h index d1ef053e..08e5c632 100644 --- a/src/backend/generators.h +++ b/src/backend/generators.h @@ -38,6 +38,7 @@ namespace loot { std::list& messages, const std::list& plugins, const std::string& masterlistVersion, + const std::string& masterlistDate, const bool masterlistUpdateEnabled); //Default settings file generation. diff --git a/src/backend/network.cpp b/src/backend/network.cpp index 81bc9dfa..534b48f0 100644 --- a/src/backend/network.cpp +++ b/src/backend/network.cpp @@ -154,7 +154,7 @@ namespace loot { } } - std::string UpdateMasterlist(Game& game, std::list& parsingErrors, std::list& plugins, std::list& messages) { + std::pair UpdateMasterlist(Game& game, std::list& parsingErrors, std::list& plugins, std::list& messages) { pointers_struct ptrs; BOOST_LOG_TRIVIAL(trace) << "Checking for a Git repository."; @@ -243,7 +243,7 @@ namespace loot { bool parsingFailed = false; unsigned int rollbacks = 0; - char revision[10]; + string revision, date; do { string filespec = "refs/remotes/origin/" + game.RepoBranch() + "~" + IntToString(rollbacks); BOOST_LOG_TRIVIAL(trace) << "Getting the Git object for the tree at " << filespec; @@ -253,7 +253,17 @@ namespace loot { const git_oid * oid = git_object_id(ptrs.obj); BOOST_LOG_TRIVIAL(trace) << "Generating hex string for Git object ID."; - git_oid_tostr(revision, 10, oid); + char sha1[10]; + git_oid_tostr(sha1, 10, oid); + revision = sha1; + + BOOST_LOG_TRIVIAL(trace) << "Getting date for Git object ID."; + handle_error(git_commit_lookup(&ptrs.commit, ptrs.repo, oid), ptrs); + git_time_t time = git_commit_time(ptrs.commit); + boost::locale::date_time dateTime(time); + stringstream out; + out << boost::locale::as::ftime("%Y-%m-%d") << dateTime; + date = out.str(); BOOST_LOG_TRIVIAL(trace) << "Recreating HEAD as a direct reference (overwriting it) to the desired revision."; handle_error(git_reference_create(&ptrs.ref, ptrs.repo, "HEAD", oid, 1), ptrs); @@ -265,8 +275,10 @@ namespace loot { BOOST_LOG_TRIVIAL(trace) << "Freeing pointers."; git_object_free(ptrs.obj); git_reference_free(ptrs.ref); + git_commit_free(ptrs.commit); ptrs.obj = NULL; ptrs.ref = NULL; + ptrs.commit = NULL; BOOST_LOG_TRIVIAL(trace) << "Testing masterlist parsing."; @@ -307,6 +319,6 @@ namespace loot { //Finally, free memory. ptrs.free(); - return string(revision); + return pair(revision, date); } } diff --git a/src/backend/network.h b/src/backend/network.h index a2446008..183f2a0a 100644 --- a/src/backend/network.h +++ b/src/backend/network.h @@ -33,7 +33,7 @@ namespace loot { - std::string UpdateMasterlist(Game& game, std::list& parsingErrors, std::list& plugins, std::list& messages); + std::pair UpdateMasterlist(Game& game, std::list& parsingErrors, std::list& plugins, std::list& messages); std::string GetMasterlistRevision(const Game& game); } diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 8693921a..bb292618 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -103,14 +103,16 @@ struct plugin_list_loader { }; struct masterlist_updater_parser { - masterlist_updater_parser(bool doUpdate, loot::Game& game, list& errors, list& plugins, list& messages, string& revision) : _doUpdate(doUpdate), _game(game), _errors(errors), _plugins(plugins), _messages(messages), _revision(revision) {} + masterlist_updater_parser(bool doUpdate, loot::Game& game, list& errors, list& plugins, list& messages, string& revision, string& date) : _doUpdate(doUpdate), _game(game), _errors(errors), _plugins(plugins), _messages(messages), _revision(revision), _date(date) {} void operator () () { if (_doUpdate) { BOOST_LOG_TRIVIAL(debug) << "Updating masterlist"; try { - _revision = UpdateMasterlist(_game, _errors, _plugins, _messages); + pair ret = UpdateMasterlist(_game, _errors, _plugins, _messages); + _revision = ret.first; + _date = ret.second; } catch (loot::error& e) { _plugins.clear(); _messages.clear(); @@ -171,6 +173,7 @@ struct masterlist_updater_parser { list& _plugins; list& _messages; string& _revision; + string& _date; }; bool LOOT::OnInit() { @@ -616,7 +619,7 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { list plugins; boost::thread_group group; loot::PluginGraph graph; - string revision; + string revision, date; wxProgressDialog *progDia = new wxProgressDialog(translate("LOOT: Working..."),translate("LOOT working..."), 1000, this, wxPD_APP_MODAL|wxPD_AUTO_HIDE|wxPD_ELAPSED_TIME); @@ -625,7 +628,7 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { /////////////////////////////////////////////////////// bool doUpdate = _settings["Update Masterlist"] && _settings["Update Masterlist"].as(); - masterlist_updater_parser mup(doUpdate, *_game, messages, mlist_plugins, mlist_messages, revision); + masterlist_updater_parser mup(doUpdate, *_game, messages, mlist_plugins, mlist_messages, revision, date); group.create_thread(mup); //First calculate the mean plugin size. Store it temporarily in a map to reduce filesystem lookups and file size recalculation. @@ -910,6 +913,7 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { messages, plugins, revision, + date, doUpdate); } catch (std::exception& e) { wxMessageBox(