From 41c4d414ba70c175b84e756edfd140a4d1f60b7d Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Fri, 31 Jan 2014 21:52:53 +0000 Subject: [PATCH 01/11] Fixed masterlist parsing error. --- src/backend/parsers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/parsers.h b/src/backend/parsers.h index 557a7830..488889bf 100644 --- a/src/backend/parsers.h +++ b/src/backend/parsers.h @@ -384,7 +384,7 @@ namespace boss { condition = function [qi::labels::_val = qi::labels::_1] - | ( qi::lit("not") > function ) [qi::labels::_val = !qi::labels::_1] + | ( qi::lit("not") > condition ) [qi::labels::_val = !qi::labels::_1] | ( '(' > expression > ')' ) [qi::labels::_val = qi::labels::_1] ; From 0d10f288a6f253153bc4f104ac76b189e48c8f91 Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Fri, 31 Jan 2014 22:22:05 +0000 Subject: [PATCH 02/11] Fixed issue #97. --- src/gui/settings.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 2fdff62c..add8c29f 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -222,6 +222,7 @@ void SettingsFrame::OnQuit(wxCommandEvent& event) { _settings["View Report Externally"] = reportViewBox->IsChecked(); + _games.clear(); for (size_t i=0,max=gamesList->GetItemCount(); i < max; ++i) { string name, folder, master, url, path, registry; unsigned int id; @@ -242,7 +243,7 @@ void SettingsFrame::OnQuit(wxCommandEvent& event) { else id = boss::g_game_fonv; - _games[i] = boss::Game(id, folder).SetDetails(name, master, url, path, registry); + _games.push_back(boss::Game(id, folder).SetDetails(name, master, url, path, registry)); } } From 84dd66ed8da122c5be680cd4bc6136d10d85f0b6 Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Sat, 1 Feb 2014 11:40:23 +0000 Subject: [PATCH 03/11] Fixed issue #96. --- src/backend/generators.h | 6 ------ src/backend/network.cpp | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/backend/generators.h b/src/backend/generators.h index b95dd3cf..eea067f8 100644 --- a/src/backend/generators.h +++ b/src/backend/generators.h @@ -560,12 +560,6 @@ namespace boss { AppendScripts(body); //PugiXML's save_file doesn't handle Unicode paths right (it can't open them right), so use a stream instead. - /* - if (!doc.save_file(file.c_str(), "\t", pugi::format_default | pugi::format_no_declaration | pugi::format_raw)) { - BOOST_LOG_TRIVIAL(error) << "Could not write BOSS report to: " << file; - throw boss::error(boss::error::path_write_fail, boost::locale::translate("Could not write BOSS report.").str()); - } - */ boost::filesystem::path outpath(file); boss::ofstream out(outpath); doc.save(out, "\t", pugi::format_default | pugi::format_no_declaration | pugi::format_raw); diff --git a/src/backend/network.cpp b/src/backend/network.cpp index c1b5c884..0b95eb95 100644 --- a/src/backend/network.cpp +++ b/src/backend/network.cpp @@ -310,7 +310,7 @@ namespace boss { //Roll back one revision if there's an error. BOOST_LOG_TRIVIAL(error) << "Masterlist parsing failed. Masterlist revision " + string(revision) + ": " + e.what(); - parsingErrors.push_back(boss::Message(boss::g_message_error, boost::locale::translate("Masterlist revision").str() + " " + string(revision) + ": " + e.what())); + parsingErrors.push_back(boss::Message(boss::g_message_error, boost::locale::translate("Masterlist revision").str() + " " + string(revision) + ": " + e.what() + " " + boost::locale::translate("Rolled back to the previous revision.").str())); } } while (parsingFailed); From eaa09220bd6b5a2adbc7a77564604a62141ce1c3 Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Sat, 1 Feb 2014 15:02:51 +0000 Subject: [PATCH 04/11] Backend changes for issue #99. This should be all the backend changes required. Reading/writing of new settings tested. Sorting works fine using default and other branches. If an invalid branch is given, a sensible error message is produced. Still need to update settings UI for editing the branch. --- src/backend/game.cpp | 29 ++++++++++++++++++++--------- src/backend/game.h | 9 ++++++--- src/backend/generators.h | 5 +++-- src/backend/network.cpp | 18 +++++++++--------- src/backend/parsers.h | 13 ++++++++----- 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/src/backend/game.cpp b/src/backend/game.cpp index acd010bb..1695479c 100644 --- a/src/backend/game.cpp +++ b/src/backend/game.cpp @@ -67,28 +67,32 @@ namespace boss { bossFolderName = "Oblivion"; _masterFile = "Oblivion.esm"; espm_settings = espm::Settings("tes4"); - _masterlistURL = "https://github.com/boss-developers/boss-oblivion.git"; + _repositoryURL = "https://github.com/boss-developers/boss-oblivion.git"; + _repositoryBranch = "gh-pages"; } else if (Id() == g_game_tes5) { _name = "TES V: Skyrim"; registryKey = "Software\\Bethesda Softworks\\Skyrim\\Installed Path"; bossFolderName = "Skyrim"; _masterFile = "Skyrim.esm"; espm_settings = espm::Settings("tes5"); - _masterlistURL = "https://github.com/boss-developers/boss-skyrim.git"; + _repositoryURL = "https://github.com/boss-developers/boss-skyrim.git"; + _repositoryBranch = "gh-pages"; } else if (Id() == g_game_fo3) { _name = "Fallout 3"; registryKey = "Software\\Bethesda Softworks\\Fallout3\\Installed Path"; bossFolderName = "Fallout3"; _masterFile = "Fallout3.esm"; espm_settings = espm::Settings("fo3"); - _masterlistURL = "https://github.com/boss-developers/boss-fallout3.git"; + _repositoryURL = "https://github.com/boss-developers/boss-fallout3.git"; + _repositoryBranch = "gh-pages"; } else if (Id() == g_game_fonv) { _name = "Fallout: New Vegas"; registryKey = "Software\\Bethesda Softworks\\FalloutNV\\Installed Path"; bossFolderName = "FalloutNV"; _masterFile = "FalloutNV.esm"; espm_settings = espm::Settings("fonv"); - _masterlistURL = "https://github.com/boss-developers/boss-fallout-new-vegas.git"; + _repositoryURL = "https://github.com/boss-developers/boss-fallout-new-vegas.git"; + _repositoryBranch = "gh-pages"; } else { BOOST_LOG_TRIVIAL(error) << "Invalid game ID supplied."; throw error(error::invalid_args, lc::translate("Invalid game ID supplied.").str()); @@ -99,7 +103,7 @@ namespace boss { } Game& Game::SetDetails(const std::string& name, const std::string& masterFile, - const std::string& url, const std::string& path, const std::string& registry) { + const std::string& repositoryURL, const std::string& repositoryBranch, const std::string& path, const std::string& registry) { BOOST_LOG_TRIVIAL(trace) << "Setting new details for game: " << _name; @@ -109,8 +113,11 @@ namespace boss { if (!masterFile.empty()) _masterFile = masterFile; - if (!url.empty()) - _masterlistURL = url; + if (!repositoryURL.empty()) + _repositoryURL = repositoryURL; + + if (!repositoryBranch.empty()) + _repositoryBranch = repositoryBranch; if (!path.empty()) gamePath = path; @@ -201,8 +208,12 @@ namespace boss { return registryKey; } - std::string Game::URL() const { - return _masterlistURL; + std::string Game::RepoURL() const { + return _repositoryURL; + } + + std::string Game::RepoBranch() const { + return _repositoryBranch; } fs::path Game::GamePath() const { diff --git a/src/backend/game.h b/src/backend/game.h index 387d6b3f..f7eccf83 100644 --- a/src/backend/game.h +++ b/src/backend/game.h @@ -47,7 +47,8 @@ namespace boss { Game(const unsigned int baseGameCode, const std::string& bossFolder = ""); Game& SetDetails(const std::string& name, const std::string& masterFile, - const std::string& url, const std::string& path, const std::string& registry); + const std::string& repositoryURL, const std::string& repositoryBranch, + const std::string& path, const std::string& registry); Game& SetPath(const std::string& path); //Used by API. Game& Init(); @@ -60,7 +61,8 @@ namespace boss { std::string FolderName() const; std::string Master() const; std::string RegistryKey() const; - std::string URL() const; + std::string RepoURL() const; + std::string RepoBranch() const; boost::filesystem::path GamePath() const; @@ -89,7 +91,8 @@ namespace boss { std::string registryKey; std::string bossFolderName; - std::string _masterlistURL; + std::string _repositoryURL; + std::string _repositoryBranch; boost::filesystem::path gamePath; //Path to the game's folder. boost::unordered_set activePlugins; //Holds lowercased strings. diff --git a/src/backend/generators.h b/src/backend/generators.h index eea067f8..5bd99b85 100644 --- a/src/backend/generators.h +++ b/src/backend/generators.h @@ -587,7 +587,7 @@ namespace boss { games.push_back(Game(g_game_tes5)); games.push_back(Game(g_game_fo3)); games.push_back(Game(g_game_fonv)); - games.push_back(Game(g_game_tes4, "Nehrim").SetDetails("Nehrim - At Fate's Edge", "Nehrim.esm", "https://github.com/boss-developers/boss-oblivion.git", "", "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Nehrim - At Fate's Edge_is1")); + games.push_back(Game(g_game_tes4, "Nehrim").SetDetails("Nehrim - At Fate's Edge", "Nehrim.esm", "https://github.com/boss-developers/boss-oblivion.git", "gh-pages", "", "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Nehrim - At Fate's Edge_is1")); root["Games"] = games; @@ -637,7 +637,8 @@ namespace YAML { << Key << "folder" << Value << rhs.FolderName() << Key << "name" << Value << rhs.Name() << Key << "master" << Value << rhs.Master() - << Key << "url" << Value << rhs.URL() + << Key << "repo" << Value << rhs.RepoURL() + << Key << "branch" << Value << rhs.RepoBranch() << Key << "path" << Value << rhs.GamePath().string() << Key << "registry" << Value << rhs.RegistryKey(); diff --git a/src/backend/network.cpp b/src/backend/network.cpp index 0b95eb95..a1ccb5eb 100644 --- a/src/backend/network.cpp +++ b/src/backend/network.cpp @@ -167,13 +167,13 @@ namespace boss { BOOST_LOG_TRIVIAL(trace) << "Checking to see if remote URL matches URL in settings."; - //Check if the URLs match. - BOOST_LOG_TRIVIAL(info) << "Remote URL given: " << game.URL(); + //Check if the repo URLs match. + BOOST_LOG_TRIVIAL(info) << "Remote URL given: " << game.RepoURL(); BOOST_LOG_TRIVIAL(info) << "Remote URL in repository settings: " << url; - if (url != game.URL()) { + if (url != game.RepoURL()) { BOOST_LOG_TRIVIAL(trace) << "URLs do not match, setting repository URL to URL in settings."; //The URLs don't match. Change the remote URL to match the one BOSS has. - handle_error(git_remote_set_url(ptrs.remote, game.URL().c_str()), ptrs); + handle_error(git_remote_set_url(ptrs.remote, game.RepoURL().c_str()), ptrs); //Now save change. handle_error(git_remote_save(ptrs.remote), ptrs); @@ -183,10 +183,10 @@ namespace boss { //Repository doesn't exist. Set up a repository. handle_error(git_repository_init(&ptrs.repo, game.MasterlistPath().parent_path().string().c_str(), false), ptrs); - BOOST_LOG_TRIVIAL(info) << "Setting the new repository's remote to: " << game.URL(); + BOOST_LOG_TRIVIAL(info) << "Setting the new repository's remote to: " << game.RepoURL(); //Now set the repository's remote. - handle_error(git_remote_create(&ptrs.remote, ptrs.repo, "origin", game.URL().c_str()), ptrs); + handle_error(git_remote_create(&ptrs.remote, ptrs.repo, "origin", game.RepoURL().c_str()), ptrs); BOOST_LOG_TRIVIAL(trace) << "Getting the repository config."; @@ -252,15 +252,15 @@ namespace boss { unsigned int rollbacks = 0; char revision[10]; do { - BOOST_LOG_TRIVIAL(trace) << "Getting the Git object for the tree at refs/remotes/origin/gh-pages~" << rollbacks << "."; + BOOST_LOG_TRIVIAL(trace) << "Getting the Git object for the tree at refs/remotes/origin/" << game.RepoBranch() << "~" << rollbacks << "."; //Get the commit hash so that we can report the revision if there is an error. - string filespec = "refs/remotes/origin/gh-pages~" + IntToString(rollbacks); + string filespec = "refs/remotes/origin/" + game.RepoBranch() + "~" + IntToString(rollbacks); git_object * mlistObj; handle_error(git_revparse_single(&ptrs.obj, ptrs.repo, filespec.c_str()), ptrs); - BOOST_LOG_TRIVIAL(trace) << "Checking out the tree at refs/remotes/origin/gh-pages~" << rollbacks << "."; + BOOST_LOG_TRIVIAL(trace) << "Checking out the tree at refs/remotes/origin/" << game.RepoBranch() << "~" << rollbacks << "."; //Now we can do the checkout. handle_error(git_checkout_tree(ptrs.repo, ptrs.obj, &opts), ptrs); diff --git a/src/backend/parsers.h b/src/backend/parsers.h index 488889bf..66fd8276 100644 --- a/src/backend/parsers.h +++ b/src/backend/parsers.h @@ -67,7 +67,8 @@ namespace YAML { node["name"] = rhs.Name(); node["folder"] = rhs.FolderName(); node["master"] = rhs.Master(); - node["url"] = rhs.URL(); + node["repo"] = rhs.RepoURL(); + node["branch"] = rhs.RepoBranch(); node["path"] = rhs.GamePath().string(); node["registry"] = rhs.RegistryKey(); @@ -89,19 +90,21 @@ namespace YAML { else return false; - std::string name, master, url, path, registry; + std::string name, master, repo, branch, path, registry; if (node["name"]) name = node["name"].as(); if (node["master"]) master = node["master"].as(); - if (node["url"]) - url = node["url"].as(); + if (node["repo"]) + repo = node["repo"].as(); + if (node["branch"]) + branch = node["branch"].as(); if (node["path"]) path = node["path"].as(); if (node["registry"]) registry = node["registry"].as(); - rhs.SetDetails(name, master, url, path, registry); + rhs.SetDetails(name, master, repo, branch, path, registry); return true; } From 1b617b99242865290f3f0ed8879793f2c244f1d7 Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Sat, 1 Feb 2014 15:14:15 +0000 Subject: [PATCH 05/11] UI changes for issue #99. That should be it. Tested and working for me. --- src/gui/settings.cpp | 60 +++++++++++++++++++++++++++----------------- src/gui/settings.h | 8 +++--- 2 files changed, 42 insertions(+), 26 deletions(-) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index add8c29f..7c84b458 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -68,7 +68,8 @@ SettingsFrame::SettingsFrame(wxWindow *parent, const wxString& title, YAML::Node gamesList->AppendColumn(translate("Base Game Type")); gamesList->AppendColumn(translate("BOSS Folder Name")); gamesList->AppendColumn(translate("Master File")); - gamesList->AppendColumn(translate("Online Masterlist URL")); + gamesList->AppendColumn(translate("Masterlist Repository URL")); + gamesList->AppendColumn(translate("Masterlist Repository Branch")); gamesList->AppendColumn(translate("Install Path")); gamesList->AppendColumn(translate("Install Path Registry Key")); @@ -180,9 +181,10 @@ void SettingsFrame::SetDefaultValues() { gamesList->SetItem(i, 1, FromUTF8(boss::Game(_games[i].Id()).FolderName())); gamesList->SetItem(i, 2, FromUTF8(_games[i].FolderName())); gamesList->SetItem(i, 3, FromUTF8(_games[i].Master())); - gamesList->SetItem(i, 4, FromUTF8(_games[i].URL())); - gamesList->SetItem(i, 5, FromUTF8(_games[i].GamePath().string())); - gamesList->SetItem(i, 6, FromUTF8(_games[i].RegistryKey())); + gamesList->SetItem(i, 4, FromUTF8(_games[i].RepoURL())); + gamesList->SetItem(i, 5, FromUTF8(_games[i].RepoBranch())); + gamesList->SetItem(i, 6, FromUTF8(_games[i].GamePath().string())); + gamesList->SetItem(i, 7, FromUTF8(_games[i].RegistryKey())); } addBtn->Enable(true); @@ -224,15 +226,16 @@ void SettingsFrame::OnQuit(wxCommandEvent& event) { _games.clear(); for (size_t i=0,max=gamesList->GetItemCount(); i < max; ++i) { - string name, folder, master, url, path, registry; + string name, folder, master, repo, branch, path, registry; unsigned int id; name = gamesList->GetItemText(i, 0).ToUTF8(); folder = gamesList->GetItemText(i, 2).ToUTF8(); master = gamesList->GetItemText(i, 3).ToUTF8(); - url = gamesList->GetItemText(i, 4).ToUTF8(); - path = gamesList->GetItemText(i, 5).ToUTF8(); - registry = gamesList->GetItemText(i, 6).ToUTF8(); + repo = gamesList->GetItemText(i, 4).ToUTF8(); + branch = gamesList->GetItemText(i, 5).ToUTF8(); + path = gamesList->GetItemText(i, 6).ToUTF8(); + registry = gamesList->GetItemText(i, 7).ToUTF8(); if (gamesList->GetItemText(i, 1).ToUTF8() == boss::Game(boss::g_game_tes4).FolderName()) id = boss::g_game_tes4; @@ -243,7 +246,7 @@ void SettingsFrame::OnQuit(wxCommandEvent& event) { else id = boss::g_game_fonv; - _games.push_back(boss::Game(id, folder).SetDetails(name, master, url, path, registry)); + _games.push_back(boss::Game(id, folder).SetDetails(name, master, repo, branch, path, registry)); } } @@ -306,9 +309,10 @@ void SettingsFrame::OnAddGame(wxCommandEvent& event) { gamesList->SetItem(i, 1, rowDialog->GetType().ToUTF8()); gamesList->SetItem(i, 2, rowDialog->GetFolderName()); gamesList->SetItem(i, 3, rowDialog->GetMaster()); - gamesList->SetItem(i, 4, rowDialog->GetURL()); - gamesList->SetItem(i, 5, rowDialog->GetPath()); - gamesList->SetItem(i, 6, rowDialog->GetRegistryKey()); + gamesList->SetItem(i, 4, rowDialog->GetRepoURL()); + gamesList->SetItem(i, 5, rowDialog->GetRepoBranch()); + gamesList->SetItem(i, 6, rowDialog->GetPath()); + gamesList->SetItem(i, 7, rowDialog->GetRegistryKey()); } } @@ -329,7 +333,7 @@ void SettingsFrame::OnEditGame(wxCommandEvent& event) { else stateNo = boss::g_game_fonv; - rowDialog->SetValues(stateNo, gamesList->GetItemText(i, 0), gamesList->GetItemText(i, 2), gamesList->GetItemText(i, 3), gamesList->GetItemText(i, 4), gamesList->GetItemText(i, 5), gamesList->GetItemText(i, 6)); + rowDialog->SetValues(stateNo, gamesList->GetItemText(i, 0), gamesList->GetItemText(i, 2), gamesList->GetItemText(i, 3), gamesList->GetItemText(i, 4), gamesList->GetItemText(i, 5), gamesList->GetItemText(i, 6), gamesList->GetItemText(i, 7)); if (rowDialog->ShowModal() == wxID_OK) { @@ -363,9 +367,10 @@ void SettingsFrame::OnEditGame(wxCommandEvent& event) { gamesList->SetItem(i, 1, rowDialog->GetType()); gamesList->SetItem(i, 2, rowDialog->GetFolderName()); gamesList->SetItem(i, 3, rowDialog->GetMaster()); - gamesList->SetItem(i, 4, rowDialog->GetURL()); - gamesList->SetItem(i, 5, rowDialog->GetPath()); - gamesList->SetItem(i, 6, rowDialog->GetRegistryKey()); + gamesList->SetItem(i, 4, rowDialog->GetRepoURL()); + gamesList->SetItem(i, 5, rowDialog->GetRepoBranch()); + gamesList->SetItem(i, 6, rowDialog->GetPath()); + gamesList->SetItem(i, 7, rowDialog->GetRegistryKey()); } } @@ -393,7 +398,8 @@ GameEditDialog::GameEditDialog(wxWindow *parent, const wxString& title) : wxDial _name = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0, wxTextValidator(wxFILTER_EMPTY)); _folderName = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0, wxTextValidator(wxFILTER_EMPTY)); _master = new wxTextCtrl(this, wxID_ANY); - _url = new wxTextCtrl(this, wxID_ANY); + _repo = new wxTextCtrl(this, wxID_ANY); + _branch = new wxTextCtrl(this, wxID_ANY); _path = new wxTextCtrl(this, wxID_ANY); _registry = new wxTextCtrl(this, wxID_ANY); @@ -421,8 +427,11 @@ GameEditDialog::GameEditDialog(wxWindow *parent, const wxString& title) : wxDial GridSizer->Add(new wxStaticText(this, wxID_ANY, translate("Master File:")), leftItem); GridSizer->Add(_master, rightItem); - GridSizer->Add(new wxStaticText(this, wxID_ANY, translate("Masterlist URL:")), leftItem); - GridSizer->Add(_url, rightItem); + GridSizer->Add(new wxStaticText(this, wxID_ANY, translate("Masterlist Repository URL:")), leftItem); + GridSizer->Add(_repo, rightItem); + + GridSizer->Add(new wxStaticText(this, wxID_ANY, translate("Masterlist Repository Branch:")), leftItem); + GridSizer->Add(_branch, rightItem); GridSizer->Add(new wxStaticText(this, wxID_ANY, translate("Install Path:")), leftItem); GridSizer->Add(_path, rightItem); @@ -449,7 +458,7 @@ GameEditDialog::GameEditDialog(wxWindow *parent, const wxString& title) : wxDial } void GameEditDialog::SetValues(unsigned int type, const wxString& name, const wxString& folderName, const wxString& master, - const wxString& url, const wxString& path, const wxString& registry) { + const wxString& repo, const wxString& branch, const wxString& path, const wxString& registry) { if (type == boss::g_game_tes4) _type->SetSelection(0); else if (type == boss::g_game_tes5) @@ -462,7 +471,8 @@ void GameEditDialog::SetValues(unsigned int type, const wxString& name, const wx _name->SetValue(name); _folderName->SetValue(folderName); _master->SetValue(master); - _url->SetValue(url); + _repo->SetValue(repo); + _branch->SetValue(branch); _path->SetValue(path); _registry->SetValue(registry); @@ -487,8 +497,12 @@ wxString GameEditDialog::GetMaster() const { return _master->GetValue(); } -wxString GameEditDialog::GetURL() const { - return _url->GetValue(); +wxString GameEditDialog::GetRepoURL() const { + return _repo->GetValue(); +} + +wxString GameEditDialog::GetRepoBranch() const { + return _branch->GetValue(); } wxString GameEditDialog::GetPath() const { diff --git a/src/gui/settings.h b/src/gui/settings.h index 8a0aff42..7483ba69 100644 --- a/src/gui/settings.h +++ b/src/gui/settings.h @@ -62,12 +62,13 @@ public: GameEditDialog(wxWindow *parent, const wxString& title); void SetValues(unsigned int type, const wxString& name, const wxString& folderName, const wxString& master, - const wxString& url, const wxString& path, const wxString& registry); + const wxString& repo, const wxString& branch, const wxString& path, const wxString& registry); wxString GetName() const; wxString GetType() const; wxString GetFolderName() const; wxString GetMaster() const; - wxString GetURL() const; + wxString GetRepoURL() const; + wxString GetRepoBranch() const; wxString GetPath() const; wxString GetRegistryKey() const; private: @@ -75,7 +76,8 @@ private: wxTextCtrl * _name; wxTextCtrl * _folderName; wxTextCtrl * _master; - wxTextCtrl * _url; + wxTextCtrl * _repo; + wxTextCtrl * _branch; wxTextCtrl * _path; wxTextCtrl * _registry; }; From 1c9b4691a5c4de7e2da7c39656f2d64dfc790640 Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Sat, 1 Feb 2014 16:39:45 +0000 Subject: [PATCH 06/11] Docs updates. Some HTML5 conformance fixes, some content changes to match recent code changes. --- docs/BOSS Metadata Syntax.html | 6 +++--- docs/BOSS Readme.html | 26 +++++++++++++++----------- docs/images/confirm.png | Bin 10969 -> 11853 bytes docs/images/editor.png | Bin 25909 -> 29958 bytes docs/images/settings.png | Bin 19757 -> 25279 bytes 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/docs/BOSS Metadata Syntax.html b/docs/BOSS Metadata Syntax.html index 0f1007f1..4f7a2860 100644 --- a/docs/BOSS Metadata Syntax.html +++ b/docs/BOSS Metadata Syntax.html @@ -105,7 +105,7 @@ h3{

Some important points that are more specific to how BOSS uses YAML:

    -
  • BOSS's support for YAML syntax is incomplete. A list of known limitations can be found here. The only major missing piece is support for merge keys (<<:). +
  • BOSS's support for YAML syntax is incomplete. A list of known limitations can be found here. The only major missing piece is support for merge keys (<<:).
  • Strings are case-sensitive, apart from file paths, regular expressions and checksums.

Some properties of file paths as used by BOSS: @@ -337,11 +337,11 @@ msg:

Examples: 'This [string](https://en.wikipedia.org/wiki/String_(computer_science)) contains a labelled hyperlink.' would be displayed as -

This string contains a labelled hyperlink.
+
This string contains a labelled hyperlink.

While 'This string (see: <https://en.wikipedia.org/wiki/String_(computer_science)>) contains an unlabelled hyperlink.' both get displayed as -

This string (see: https://en.wikipedia.org/wiki/String_(computer_science)) contains an unlabelled hyperlink.
+
This string (see: https://en.wikipedia.org/wiki/String_(computer_science)) contains an unlabelled hyperlink.

Condition Strings

Condition strings can be used to ensure that data is only acted on by BOSS under certain circumstances. They are very similar to boolean conditional expressions in programming languages such as Python, though more limited. Their EBNF grammar is: diff --git a/docs/BOSS Readme.html b/docs/BOSS Readme.html index b58e0c80..018ee1ba 100644 --- a/docs/BOSS Readme.html +++ b/docs/BOSS Readme.html @@ -160,10 +160,10 @@ Visual C++ Redistributable for Visual Studio 2013 (x86). BOSS can be install

Clicking the Sort Plugins button in the main window will begin the sorting process. -

Provided that masterlist updating is enabled and that an online masterlist URL is set, BOSS checks for updates to its masterlist and downloads any that are available. If there are any syntax errors in the latest masterlist (due to human error by its maintainers), the updater rolls back one version at a time until it finds a version that works. If any other errors are encountered, updating is cancelled. +

Provided that masterlist updating is enabled and that a masterlist repository URL is set, BOSS checks for updates to its masterlist and downloads any that are available. If there are any syntax errors in the latest masterlist (due to human error by its maintainers), the updater rolls back one version at a time until it finds a version that works. If any other errors are encountered, updating is cancelled.

During the sorting process, BOSS extracts information from each of the plugins installed in the game's Data folder and combines this information with any relevant metadata provided by the masterlist and userlist. It then uses the combined data to build a directed graph of all the interactions between all the installed plugins. A topological sort is then carried out on the graph to produce a list of plugins in their optimal load order, according to BOSS's criteria. If a cycle is detected (eg. A depends on B depends on A), then sorting is cancelled as it becomes impossible to generate a load order that satisfies all conditions. -

If successful, the calculated load order is then displayed in the dialog shown above, which allows the user to edit the load order before it is applied. Multiple plugins may be selected and moved at once. Plugins which are empty (ie. only contain a header record) are displayed in grey text, and plugins that are not empty and load BSAs are displayed in blue text. If OK button is clicked, it is then applied, and any edits made are recorded in the userlist for re-application when BOSS next sorts the game's plugins. If the Cancel button is clicked, then the load order and any edits made are discarded. +

If successful, the calculated load order is then displayed in the dialog shown above, which allows the user to edit the load order before it is applied. Multiple plugins may be selected and moved at once. Plugins which are empty (ie. only contain a header record) are displayed in grey text, and plugins that are not empty and load BSAs are displayed in blue text. If OK button is clicked, it is then applied, and any edits made are recorded in the userlist for re-application when BOSS next sorts the game's plugins. If the Cancel button is clicked, then the load order and any edits made are discarded.

BOSS then generates a report and displays it either in a new window or in your default browser, according to the value of the relevant setting. Any errors encountered during the sorting process will be displayed in this report, including those due to graph cycles, missing dependencies or installed incompatible plugins. See the next section for more information on the report.

BOSS is able to sort plugins ghosted by Wrye *ash, and can extract Bash Tags and version numbers from plugin descriptions. Provided that they have the Filter Bash Tag present in their description, BOSS can recognise filter patches and so avoid displaying unnecessary error messages for any of their masters that may be missing.

While reading very large plugins, such as the game's main master file, BOSS may appear to stop responding: this is not an issue. The time it takes for BOSS to sort your load order depends primarily on the size of the masterlist being used, the total size of the files in your load order, and the number of plugins in your load order. The first run is likely to be longer than subsequent runs as BOSS needs to download the full masterlist, rather than just the changes made by updates. In testing, it was found that sorting ~90 plugins with a total size of ~350 MB and a 5 MB masterlist takes around 15 seconds, though performance will vary with computer hardware. @@ -279,10 +279,13 @@ Visual C++ Redistributable for Visual Studio 2013 (x86). BOSS can be install

  • TES V: Skyrim
  • Fallout 3
  • Fallout: New Vegas -
      +
    BOSS Folder NameThe sub-folder which BOSS uses to store the game's files in. Each game must be given a unique sub-folder. Master FileThe game's main master file. This is specified as it must load before all other plugins. Note that Skyrim-based games will always load Skyrim.esm first, so this column must always be set to Skyrim.esm for such games. - Online Masterlist URLThe URL of the online masterlist that BOSS uses to update its local copy. If set to an empty string, masterlist updating will be skipped. + Masterlist Repository URLThe URL of the repository that BOSS uses to update its local copy of the masterlist. If set to an empty string, masterlist updating will be skipped. +

    + Masterlist repositories are Git repositories that are configured to allow unauthenticated read access and contain a masterlist file named masterlist.yaml in their root directory. The BOSS team maintains a set of official repositories for the games that BOSS supports by default. + Masterlist Repository BranchThe branch of the masterlist repository that BOSS should get masterlist updates from. Install PathThe path to the game's folder, in which the Data folder lies. Either this or a registry key must be supplied. Install Path Registry KeyThe registry key, in HKEY_LOCAL_MACHINE, that contains the install path of the game. This is used to obtain the install path if BOSS has no previous record of the game's install path, or BOSS's stored install path is invalid. Either this or an install path must be supplied. @@ -362,7 +365,7 @@ To translate the BOSS application:

    Credits

    -

    As BOSS is very much a community project, credit is due to a very large number of sources and people outside of the BOSS Development Team. Some people have gone out of their way and provided continuing, expert and detailed help - thank you very much! +

    As BOSS is very much a community project, credit is due to a very large number of sources and people outside of the BOSS Team. Some people have gone out of their way and provided continuing, expert and detailed help - thank you very much!

    In addition to the above data-related support, the following are credited with application-related support:

    • Dark Creations: For hosting BOSS's Bugzilla bug tracker that was used by v2 to collect anonymous unrecognised plugin reports. Particular thanks to its administrators Andalaybay and Xae for offering to host the tracker and helping to work around Firefox and Bugzilla bugs encountered. @@ -372,7 +375,6 @@ To translate the BOSS application:
    • Scharesoft: For the installer/uninstaller German translation.
    • Ysne58: For testing and keeping the thread links on BOSS's Nexus site pages up to date.
    • For testing and feedback prior to releases: The Beta Testing & Analysis Guild at TES Alliance, AndalayBay, dAb, dj2005, Dubiousness, hyno111, Invader, matter2003, NightStar, olminator, saebel, Telyn, wiz0floyd, wormheart, Zanderat and zone22. -

    BOSS is written in C++ and makes use of the Alphanum, Boost, libespm, libgit2, libloadorder, PugiXML, wxWidgets and yaml-cpp libraries. BOSS's reports are written in XHTML/CSS/Javascript and make use of Polyfill.js to provide Internet Explorer 8 compatibility. Copyright license information for all these may be found here. @@ -403,7 +405,7 @@ To translate the BOSS application:

    Members who have since left the project are credited below: -
    Ex-MemberAdminCodeContributed To Masterlist +
    Ex-MemberAdminCodeContributed To Masterlist
    OblivionSkyrimFallout 3Fallout: New Vegas
    AliTheLord @@ -437,8 +439,10 @@ To translate the BOSS application:

    License

    BOSS is distributed under the GNU General Public License v3.0, aside from the documentation, which is distributed under the GNU Free Documentation License v1.3. The full texts of the licenses are included with BOSS in the accompanying GNU GPL v3.txt and GNU FDL v1.3.txt files. -

    While the GPL license allows anyone to make derivative works of BOSS, the BOSS Development Team encourages those thinking of doing so to first discuss their reasoning for such an endevour with the Team. It may be that what the derivative work would do differently from BOSS itself is already planned for a future version of BOSS or would be happily integrated into BOSS by the Team, thus avoiding any extra effort by others. -

    The BOSS Team also appeals to the community to avoid the distribution and development of alternative masterlists, as this would only hamper the community effort to create one set of stores for load order information. Any issues with a masterlist are best brought to the attention of the BOSS Team so that we may remedy them ourselves. +

    While the GPL license allows anyone to make derivative works of BOSS, the BOSS Team encourages those thinking of doing so to first discuss their reasoning for such an endeavour with the Team. It may be that what the derivative work would do differently is already planned for a future version of BOSS or would be happily integrated into BOSS, thus avoiding any extra effort by others. + +

    BOSS has been specifically designed to prevent it being locked into the BOSS Team's official masterlist repositories. Nevertheless, the BOSS Team appeals to the community to avoid the distribution of unofficial masterlists, as this would only hamper the effort to create one set of stores for load order information. Any issues with a masterlist are best brought to the attention of the BOSS Team so that they may be remedied. +

    GNU Free Documentation License Version 1.3 Notice:

    Copyright (C) 2012-2013 WrinklyNinja
    Permission is granted to copy, distribute and/or modify this document @@ -515,7 +519,7 @@ There are three key pieces of information that are used to accurately describe a
    Masterlist updatingBOSS downloads a masterlist and inserts into it version information that is scraped from Google Code.BOSS uses Git to update masterlists, benefiting from a more robust mechanism with support for differential updates (reducing the amount of data that needs to be downloaded) and rolling back revisions in case of parsing errors.
    Masterlist structure & syntaxUses a custom file format.Uses YAML 1.2, with custom condition string syntax modelled after Python's condition expressions.
    Userlist structure & syntaxUses a custom file format, different from the masterlist format.Uses the same format and syntax as the masterlist. -
    Morrowind supportTechnically supports Morrowind, though its masterlist is near-empty.Does not support Morrowind. +
    Morrowind supportTechnically supports Morrowind, though its masterlist is near-empty.Does not support Morrowind. Morrowind mod users are advised to use mlox.
    BOSS file locationsAll BOSS's files are stored in the BOSS folder first installed.BOSS stores any files it creates (reports, masterlists, userlists, settings) in the %LOCALAPPDATA%\BOSS folder.
    Game selection on first run.BOSS asks the user to select a game from a list.BOSS selects the first game detected.
    File CRC calculationFile CRC calculation is optional.File CRC calculation is always-on, as it no longer presents any significant additional performance impact. @@ -554,7 +558,7 @@ There are three key pieces of information that are used to accurately describe a
    BOSS Log plugin submissionBOSS allows users to submit unrecognised plugins from the HTML BOSS Log.As there is no longer any such thing as an unrecognised plugin, the submission system has been removed.
    BOSS Log display customisationBOSS allows users to customise the colour scheme used by the BOSS Log.BOSS does not allow customisation of the colour scheme used by the BOSS report. However, the styling is now provided by a static stylesheet instead of being dynamically generated within the report every time BOSS is run, so this static stylesheet can be edited to achieve the same effect. -
    Command line interfaceBOSS provides a command line interface.BOSS does not provide a command line interface, as the greater need for user interaction makes it unweildy. +
    Command line interfaceBOSS provides a command line interface.BOSS does not provide a command line interface, as the greater need for user interaction makes it unwieldy.

    Version History

    diff --git a/docs/images/confirm.png b/docs/images/confirm.png index e6aba1a407e73ada05263782cd938a306f964452..83b16e4af3f36e22f8b0d837c12f155673a0aa31 100644 GIT binary patch literal 11853 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 C_{s!G&ewx8|(U^gOVS)$>b;V@9 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

    e;Wwogt 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 NCQnyCmvv4FO#t>qhdclP diff --git a/docs/images/settings.png b/docs/images/settings.png index 74b88767ff762cd2fa0bc5ea79af906a37ad6731..7c4131a47120924c74f80b9d9e3155b13307b93a 100644 GIT binary patch literal 25279 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 literal 19757 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 z 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 From a71f002bfdf3ebfaf0147b9cb4aa6ed2dc739e9a Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Sat, 1 Feb 2014 17:13:40 +0000 Subject: [PATCH 07/11] Fixed report validation issues. `X-UA-Compatible` is reported as invalid, but it's necessary for the built-in viewer to work. --- docs/BOSS Readme.html | 2 +- src/backend/generators.h | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/BOSS Readme.html b/docs/BOSS Readme.html index 018ee1ba..b7a292e7 100644 --- a/docs/BOSS Readme.html +++ b/docs/BOSS Readme.html @@ -376,7 +376,7 @@ To translate the BOSS application:

  • Ysne58: For testing and keeping the thread links on BOSS's Nexus site pages up to date.
  • For testing and feedback prior to releases: The Beta Testing & Analysis Guild at TES Alliance, AndalayBay, dAb, dj2005, Dubiousness, hyno111, Invader, matter2003, NightStar, olminator, saebel, Telyn, wiz0floyd, wormheart, Zanderat and zone22. -

    BOSS is written in C++ and makes use of the Alphanum, Boost, libespm, libgit2, libloadorder, PugiXML, wxWidgets and yaml-cpp libraries. BOSS's reports are written in XHTML/CSS/Javascript and make use of Polyfill.js to provide Internet Explorer 8 compatibility. Copyright license information for all these may be found here. +

    BOSS is written in C++ and makes use of the Alphanum, Boost, libespm, libgit2, libloadorder, PugiXML, wxWidgets and yaml-cpp libraries. BOSS's reports are written in HTML5/CSS3/Javascript and make use of Polyfill.js to provide Internet Explorer 8 compatibility. Copyright license information for all these may be found here.

    Project Members

    diff --git a/src/backend/generators.h b/src/backend/generators.h index 5bd99b85..b956f8d6 100644 --- a/src/backend/generators.h +++ b/src/backend/generators.h @@ -118,7 +118,7 @@ namespace boss { node = head.append_child(); node.set_name("meta"); node.append_attribute("http-equiv").set_value("X-UA-Compatible"); - node.append_attribute("content").set_value("IE=9"); + node.append_attribute("content").set_value("IE=edge"); node = head.append_child(); node.set_name("meta"); @@ -453,7 +453,7 @@ namespace boss { input.append_attribute("type").set_value("checkbox"); input.append_attribute("id").set_value("hideVersionNumbers"); input.append_attribute("data-class").set_value("version"); - input.text().set(boost::locale::translate("Hide Version Numbers").str().c_str()); + label.text().set(boost::locale::translate("Hide Version Numbers").str().c_str()); label = filters.append_child(); label.set_name("label"); @@ -462,7 +462,7 @@ namespace boss { input.append_attribute("type").set_value("checkbox"); input.append_attribute("id").set_value("hideCRCs"); input.append_attribute("data-class").set_value("crc"); - input.text().set(boost::locale::translate("Hide CRCs").str().c_str()); + label.text().set(boost::locale::translate("Hide CRCs").str().c_str()); label = filters.append_child(); label.set_name("label"); @@ -471,7 +471,7 @@ namespace boss { input.append_attribute("type").set_value("checkbox"); input.append_attribute("id").set_value("hideBashTags"); input.append_attribute("data-class").set_value("tag"); - input.text().set(boost::locale::translate("Hide Bash Tag Suggestions").str().c_str()); + label.text().set(boost::locale::translate("Hide Bash Tag Suggestions").str().c_str()); label = filters.append_child(); label.set_name("label"); @@ -479,7 +479,7 @@ namespace boss { input.set_name("input"); input.append_attribute("type").set_value("checkbox"); input.append_attribute("id").set_value("hideNotes"); - input.text().set(boost::locale::translate("Hide Notes").str().c_str()); + label.text().set(boost::locale::translate("Hide Notes").str().c_str()); label = filters.append_child(); label.set_name("label"); @@ -487,7 +487,7 @@ namespace boss { input.set_name("input"); input.append_attribute("type").set_value("checkbox"); input.append_attribute("id").set_value("hideDoNotCleanMessages"); - input.text().set(boost::locale::translate("Hide 'Do Not Clean' Messages").str().c_str()); + label.text().set(boost::locale::translate("Hide 'Do Not Clean' Messages").str().c_str()); label = filters.append_child(); label.set_name("label"); @@ -495,7 +495,7 @@ namespace boss { input.set_name("input"); input.append_attribute("type").set_value("checkbox"); input.append_attribute("id").set_value("hideAllPluginMessages"); - input.text().set(boost::locale::translate("Hide All Plugin Messages").str().c_str()); + label.text().set(boost::locale::translate("Hide All Plugin Messages").str().c_str()); label = filters.append_child(); label.set_name("label"); @@ -503,7 +503,7 @@ namespace boss { input.set_name("input"); input.append_attribute("type").set_value("checkbox"); input.append_attribute("id").set_value("hideMessagelessPlugins"); - input.text().set(boost::locale::translate("Hide Messageless Plugins").str().c_str()); + label.text().set(boost::locale::translate("Hide Messageless Plugins").str().c_str()); pugi::xml_node span; From bed172ecfd6cc125a7a78bd4b1a23e5911df9b75 Mon Sep 17 00:00:00 2001 From: TokcDK Date: Sat, 1 Feb 2014 09:15:58 -0800 Subject: [PATCH 08/11] updated russian translation (BOSS3 b9 still using old translation from b5) --- resources/l10n/ru/LC_MESSAGES/boss.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/resources/l10n/ru/LC_MESSAGES/boss.po b/resources/l10n/ru/LC_MESSAGES/boss.po index 93324afd..068db631 100644 --- a/resources/l10n/ru/LC_MESSAGES/boss.po +++ b/resources/l10n/ru/LC_MESSAGES/boss.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: BOSS v3.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-10-26 11:41-0000\n" -"PO-Revision-Date: 2014-01-27 15:05+0600\n" +"PO-Revision-Date: 2014-02-01 23:09+0600\n" "Last-Translator: \n" "Language-Team: Russian\n" "MIME-Version: 1.0\n" @@ -273,7 +273,7 @@ msgstr "BOSS: Добавить сообщение" #: gui/editor.cpp:443 msgid "Error: No content specified. Row will not be added." -msgstr "Ошибка: Не указано содержимое. Строка не будет добавлена." +msgstr "Ошибка: Не указано содержимое. Строка не будет добавлена." #: gui/editor.cpp:444 gui/editor.cpp:526 gui/editor.cpp:1122 #: gui/editor.cpp:1137 gui/main.cpp:164 gui/main.cpp:181 gui/main.cpp:194 @@ -573,10 +573,10 @@ msgid "" "load order it uses. A side-effect is that any subscribed Steam Workshop mods " "will be re-downloaded by Steam. Do you wish to continue?" msgstr "" -"Эта возможность предоставлена для того, чтобы моддеры, использующие Creation " -"Kit, могли установить там используемый ими порядок загрузки. Обратная " -"сторона этого то, что любые подписанные в Steam Workshop моды могут быть " -"заново загружены с помощью Steam. Вы желаете продолжить?" +"Эта возможность предоставлена для того, чтобы авторы модов, использующие " +"Creation Kit, могли установить там используемый ими порядок загрузки. " +"Обратная сторона этого то, что любые, подписанные в Steam Workshop моды, " +"могут быть заново загружены с помощью Steam. Вы желаете продолжить?" #: gui/main.cpp:961 msgid "BOSS: Warning" From a64d895ce0f7bd4a6af1f1413498699e124c17ab Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Sat, 1 Feb 2014 17:58:03 +0000 Subject: [PATCH 09/11] Fixed issue #100. --- src/backend/generators.h | 12 +++++++----- src/gui/main.cpp | 11 +++++------ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/backend/generators.h b/src/backend/generators.h index b956f8d6..c16fa49e 100644 --- a/src/backend/generators.h +++ b/src/backend/generators.h @@ -202,7 +202,7 @@ namespace boss { int messageNo, int warnNo, int errorNo, - const std::list& messages) { + std::list& messages) { BOOST_LOG_TRIVIAL(trace) << "Appending summary tab to BOSS report."; @@ -256,10 +256,12 @@ namespace boss { if (!hasChanged) { BOOST_LOG_TRIVIAL(info) << "No changes in the BOSS report details tab since the last run."; - pugi::xml_node note = summary.append_child(); + /*pugi::xml_node note = summary.append_child(); note.set_name("div"); note.append_attribute("id").set_value("noChanges"); note.text().set(boost::locale::translate("No change in details since last run.").str().c_str()); + */ + messages.push_front(boss::Message(boss::g_message_say, "There have been no changes in the Details tab since BOSS was last run.")); } if (!messages.empty()) { @@ -400,7 +402,7 @@ namespace boss { } xml_string_writer writer; - details.print(writer, "\t", pugi::format_default | pugi::format_no_declaration); + details.print(writer, "", pugi::format_default | pugi::format_no_declaration | pugi::format_raw); return writer.result != oldDetails; } @@ -409,7 +411,7 @@ namespace boss { const std::string& oldDetails, const std::string& masterlistVersion, bool masterlistUpdateEnabled, - const std::list& messages, + std::list& messages, const std::list& plugins, int& pluginMessageNo ) { @@ -538,7 +540,7 @@ namespace boss { } inline void GenerateReport(const boost::filesystem::path& file, - const std::list& messages, + std::list& messages, const std::list& plugins, const std::string& oldDetails, const std::string& masterlistVersion, diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 019e8bd1..93b17259 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -787,14 +787,13 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { if (pos1 != string::npos) { pos1 = oldDetails.find("
      ", pos1); if (pos1 != string::npos) { - 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); + size_t pos2 = oldDetails.find("
    ", pos1); + if (pos2 != string::npos) { + pos2 -= 6; // "
    " + oldDetails = oldDetails.substr(pos1, pos2 - pos1); + } } } - boost::replace_all(oldDetails, "\t\t\t\t", "\t"); - oldDetails += "\n"; } BOOST_LOG_TRIVIAL(debug) << "Generating report..."; From 97673a00b03c5bb1ce1aeb6a9333b08e37c0ab1b Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Sun, 2 Feb 2014 10:45:21 +0000 Subject: [PATCH 10/11] Bash Tag info was missing from readme. --- docs/BOSS Readme.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/BOSS Readme.html b/docs/BOSS Readme.html index b7a292e7..23e97020 100644 --- a/docs/BOSS Readme.html +++ b/docs/BOSS Readme.html @@ -180,7 +180,7 @@ Visual C++ Redistributable for Visual Studio 2013 (x86). BOSS can be install

    The report is comprised of three main sections:

    • The Summary tab gives information on the versions of BOSS and the masterlist used, whether masterlist updating is enabled, and breaks down the numbers of each message type in the Summary and Details tabs. It also notifies you if there have been no changes in the Details tab since you last ran BOSS for the same game. Finally, the Summary tab is also where any global messages supplied in the masterlist and any errors encountered during sorting are displayed. -
    • The Details tab lists the plugins BOSS sorted in their new load order, along with any messages BOSS has provided for them. BOSS will also display the plugin's CRC value and extract its version if found in the plugin's description field. +
    • The Details tab lists the plugins BOSS sorted in their new load order, along with any messages BOSS has provided for them. BOSS will also display the plugin's CRC value and extract its version if found in the plugin's description field. If BOSS suggests any Bash Tags to be added, they will be displayed in green text, while any Bash Tags to be removed will be displayed in red text.

    In addition, there are a few filters that can be used to selectively hide items in the Details tab. These filters are:

      From 4f17fa6e7ca9a7796217c6054501eeb06247804d Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Sun, 2 Feb 2014 11:04:00 +0000 Subject: [PATCH 11/11] Updated copyright dates. --- docs/BOSS Metadata Syntax.html | 4 ++-- docs/BOSS Readme.html | 6 +++--- src/api/api.cpp | 2 +- src/api/api.h | 2 +- src/archive.py | 22 ++++++++++++++++++++++ src/backend/error.h | 2 +- src/backend/game.cpp | 2 +- src/backend/game.h | 2 +- src/backend/generators.h | 2 +- src/backend/globals.cpp | 2 +- src/backend/globals.h | 2 +- src/backend/graph.cpp | 2 +- src/backend/graph.h | 2 +- src/backend/helpers.cpp | 2 +- src/backend/helpers.h | 2 +- src/backend/legacy-parser.h | 2 +- src/backend/metadata.cpp | 2 +- src/backend/metadata.h | 2 +- src/backend/network.cpp | 2 +- src/backend/network.h | 2 +- src/backend/parsers.h | 2 +- src/backend/streams.h | 2 +- src/converter.cpp | 2 +- src/gui/editor.cpp | 2 +- src/gui/editor.h | 2 +- src/gui/ids.cpp | 2 +- src/gui/ids.h | 2 +- src/gui/main.cpp | 4 ++-- src/gui/main.h | 2 +- src/gui/settings.cpp | 2 +- src/gui/settings.h | 2 +- src/gui/viewer.cpp | 2 +- src/gui/viewer.h | 2 +- src/installer.nsi | 10 +++++----- src/resource.rc | 2 +- 35 files changed, 64 insertions(+), 42 deletions(-) diff --git a/docs/BOSS Metadata Syntax.html b/docs/BOSS Metadata Syntax.html index 4f7a2860..a44ee270 100644 --- a/docs/BOSS Metadata Syntax.html +++ b/docs/BOSS Metadata Syntax.html @@ -49,7 +49,7 @@ h3{ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012–2013 WrinklyNinja + Copyright (C) 2012–2014 WrinklyNinja This file is part of BOSS. @@ -442,5 +442,5 @@ both get displayed as

      License

      This document is part of the BOSS documentation.
      -Copyright (C) 2012–2013 WrinklyNinja
      +Copyright (C) 2012—2014 WrinklyNinja
      See the file BOSS ReadMe.html for copying conditions. diff --git a/docs/BOSS Readme.html b/docs/BOSS Readme.html index 23e97020..a1c49bc1 100644 --- a/docs/BOSS Readme.html +++ b/docs/BOSS Readme.html @@ -63,7 +63,7 @@ h3{ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012–2013 WrinklyNinja + Copyright (C) 2012–2014 WrinklyNinja This file is part of BOSS. @@ -444,7 +444,7 @@ To translate the BOSS application:

      BOSS has been specifically designed to prevent it being locked into the BOSS Team's official masterlist repositories. Nevertheless, the BOSS Team appeals to the community to avoid the distribution of unofficial masterlists, as this would only hamper the effort to create one set of stores for load order information. Any issues with a masterlist are best brought to the attention of the BOSS Team so that they may be remedied.

      GNU Free Documentation License Version 1.3 Notice: -

      Copyright (C) 2012-2013 WrinklyNinja
      +
      Copyright (C) 2012—2014 WrinklyNinja
      Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; @@ -564,7 +564,7 @@ There are three key pieces of information that are used to accurately describe a

      Version History

      Only the history of version 3 is given, as changes prior to version 3 are irrelevant due to the complete redesign that occurred. The masterlists are updated far too frequently for their changes to be concisely recorded here, but a full history of changes to them may be viewed by browsing the GitHub repositories. -

      3.0.0 - Day Month 2013

      +

      3.0.0 - Day Month 2014

      diff --git a/src/api/api.cpp b/src/api/api.cpp index ba4a51c5..729663dc 100644 --- a/src/api/api.cpp +++ b/src/api/api.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/api/api.h b/src/api/api.h index 22a495d4..de15f72d 100644 --- a/src/api/api.h +++ b/src/api/api.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/archive.py b/src/archive.py index ad4e594b..418e9451 100644 --- a/src/archive.py +++ b/src/archive.py @@ -18,6 +18,28 @@ # docs/BOSS Metadata Syntax.html # docs/BOSS Readme.html +# BOSS +# +# A plugin load order optimiser for games that use the esp/esm plugin system. +# +# Copyright (C) 2013-2014 WrinklyNinja +# +# This file is part of BOSS. +# +# BOSS 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 3 of +# the License, or (at your option) any later version. +# +# BOSS is distributed in the hope that it will +# be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with BOSS. If not, see +# . + import sys import os import shutil diff --git a/src/backend/error.h b/src/backend/error.h index a51189f3..b8630e6d 100644 --- a/src/backend/error.h +++ b/src/backend/error.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/game.cpp b/src/backend/game.cpp index 1695479c..3b2d6558 100644 --- a/src/backend/game.cpp +++ b/src/backend/game.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/game.h b/src/backend/game.h index f7eccf83..5a02eaa8 100644 --- a/src/backend/game.h +++ b/src/backend/game.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/generators.h b/src/backend/generators.h index c16fa49e..93c1a2f0 100644 --- a/src/backend/generators.h +++ b/src/backend/generators.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/globals.cpp b/src/backend/globals.cpp index 5b70a498..566caf53 100644 --- a/src/backend/globals.cpp +++ b/src/backend/globals.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/globals.h b/src/backend/globals.h index 839ac388..63bf1ead 100644 --- a/src/backend/globals.h +++ b/src/backend/globals.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/graph.cpp b/src/backend/graph.cpp index e5cf3560..c847fa76 100644 --- a/src/backend/graph.cpp +++ b/src/backend/graph.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/graph.h b/src/backend/graph.h index fb757fb7..00d47a75 100644 --- a/src/backend/graph.h +++ b/src/backend/graph.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/helpers.cpp b/src/backend/helpers.cpp index c0ada1a0..e69a4f44 100644 --- a/src/backend/helpers.cpp +++ b/src/backend/helpers.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/helpers.h b/src/backend/helpers.h index 686e8009..7c5d8a8b 100644 --- a/src/backend/helpers.h +++ b/src/backend/helpers.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/legacy-parser.h b/src/backend/legacy-parser.h index 1f0744b1..42ab688e 100644 --- a/src/backend/legacy-parser.h +++ b/src/backend/legacy-parser.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/metadata.cpp b/src/backend/metadata.cpp index ac9797f0..a57f510d 100644 --- a/src/backend/metadata.cpp +++ b/src/backend/metadata.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/metadata.h b/src/backend/metadata.h index 0287bb52..e3b32d65 100644 --- a/src/backend/metadata.h +++ b/src/backend/metadata.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/network.cpp b/src/backend/network.cpp index a1ccb5eb..0015dbfb 100644 --- a/src/backend/network.cpp +++ b/src/backend/network.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/network.h b/src/backend/network.h index 6bf1639f..85e5380e 100644 --- a/src/backend/network.h +++ b/src/backend/network.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/parsers.h b/src/backend/parsers.h index 66fd8276..12457bc3 100644 --- a/src/backend/parsers.h +++ b/src/backend/parsers.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2012-2013 WrinklyNinja + Copyright (C) 2012-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/backend/streams.h b/src/backend/streams.h index 07921453..85c37999 100644 --- a/src/backend/streams.h +++ b/src/backend/streams.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/converter.cpp b/src/converter.cpp index 27f597ad..d76b2657 100644 --- a/src/converter.cpp +++ b/src/converter.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/editor.cpp b/src/gui/editor.cpp index f5875734..cda05a8a 100644 --- a/src/gui/editor.cpp +++ b/src/gui/editor.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/editor.h b/src/gui/editor.h index 6a07bef6..55f565b2 100644 --- a/src/gui/editor.h +++ b/src/gui/editor.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/ids.cpp b/src/gui/ids.cpp index edaf65cc..815365c7 100644 --- a/src/gui/ids.cpp +++ b/src/gui/ids.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/ids.h b/src/gui/ids.h index 3a01118f..5f9fe106 100644 --- a/src/gui/ids.h +++ b/src/gui/ids.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 93b17259..80a101d2 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. @@ -1075,7 +1075,7 @@ void Launcher::OnAbout(wxCommandEvent& event) { aboutInfo.SetName("BOSS"); aboutInfo.SetVersion(IntToString(g_version_major)+"."+IntToString(g_version_minor)+"."+IntToString(g_version_patch)); aboutInfo.SetDescription(translate("Load order optimisation for Oblivion, Skyrim, Fallout 3 and Fallout: New Vegas.")); - aboutInfo.SetCopyright("Copyright (C) 2009-2013 BOSS Development Team."); + aboutInfo.SetCopyright("Copyright (C) 2009-2014 BOSS Development Team."); aboutInfo.SetWebSite("http://boss-developers.github.io"); aboutInfo.SetLicence("This program is free software: you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" diff --git a/src/gui/main.h b/src/gui/main.h index d79a2720..f682cdd3 100644 --- a/src/gui/main.h +++ b/src/gui/main.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 7c84b458..2e51612b 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/settings.h b/src/gui/settings.h index 7483ba69..05f839b5 100644 --- a/src/gui/settings.h +++ b/src/gui/settings.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/viewer.cpp b/src/gui/viewer.cpp index 977633a8..19f166aa 100644 --- a/src/gui/viewer.cpp +++ b/src/gui/viewer.cpp @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/gui/viewer.h b/src/gui/viewer.h index aab30f78..8e21ad96 100644 --- a/src/gui/viewer.h +++ b/src/gui/viewer.h @@ -2,7 +2,7 @@ A plugin load order optimiser for games that use the esp/esm plugin system. - Copyright (C) 2013 WrinklyNinja + Copyright (C) 2013-2014 WrinklyNinja This file is part of BOSS. diff --git a/src/installer.nsi b/src/installer.nsi index 02e333f6..e1a9cfa6 100644 --- a/src/installer.nsi +++ b/src/installer.nsi @@ -133,7 +133,7 @@ FunctionEnd VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "BOSS" VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "BOSS Development Team" - VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© 2009-2013 BOSS Development Team" + VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© 2009-2014 BOSS Development Team" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Installer for BOSS 3.0.0" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "3.0.0" @@ -148,7 +148,7 @@ FunctionEnd VIAddVersionKey /LANG=${LANG_RUSSIAN} "ProductName" "BOSS" VIAddVersionKey /LANG=${LANG_RUSSIAN} "CompanyName" "BOSS Development Team" - VIAddVersionKey /LANG=${LANG_RUSSIAN} "LegalCopyright" "© 2009-2013 BOSS Development Team" + VIAddVersionKey /LANG=${LANG_RUSSIAN} "LegalCopyright" "© 2009-2014 BOSS Development Team" VIAddVersionKey /LANG=${LANG_RUSSIAN} "FileDescription" "Установщик для BOSS 3.0.0" VIAddVersionKey /LANG=${LANG_RUSSIAN} "FileVersion" "3.0.0" @@ -163,7 +163,7 @@ FunctionEnd ;VIAddVersionKey /LANG=${LANG_GERMAN} "ProductName" "BOSS" ;VIAddVersionKey /LANG=${LANG_GERMAN} "CompanyName" "BOSS Development Team" - ;VIAddVersionKey /LANG=${LANG_GERMAN} "LegalCopyright" "© 2009-2013 BOSS Development Team" + ;VIAddVersionKey /LANG=${LANG_GERMAN} "LegalCopyright" "© 2009-2014 BOSS Development Team" ;VIAddVersionKey /LANG=${LANG_GERMAN} "FileDescription" "Installer für BOSS 3.0.0" ;VIAddVersionKey /LANG=${LANG_GERMAN} "FileVersion" "3.0.0" @@ -178,7 +178,7 @@ FunctionEnd VIAddVersionKey /LANG=${LANG_SPANISH} "ProductName" "BOSS" VIAddVersionKey /LANG=${LANG_SPANISH} "CompanyName" "BOSS Development Team" - VIAddVersionKey /LANG=${LANG_SPANISH} "LegalCopyright" "© 2009-2013 BOSS Development Team" + VIAddVersionKey /LANG=${LANG_SPANISH} "LegalCopyright" "© 2009-2014 BOSS Development Team" VIAddVersionKey /LANG=${LANG_SPANISH} "FileDescription" "El instalador para BOSS 3.0.0" VIAddVersionKey /LANG=${LANG_SPANISH} "FileVersion" "3.0.0" @@ -193,7 +193,7 @@ FunctionEnd ;VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "ProductName" "BOSS" ;VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "CompanyName" "BOSS Development Team" - ;VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalCopyright" "© 2009-2013 BOSS Development Team" + ;VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalCopyright" "© 2009-2014 BOSS Development Team" ;VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileDescription" "BOSS 3.0.0安装包" ;VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileVersion" "3.0.0" diff --git a/src/resource.rc b/src/resource.rc index c7b84973..67fd7a22 100644 --- a/src/resource.rc +++ b/src/resource.rc @@ -10,7 +10,7 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileVersion", "3.0.0" - VALUE "LegalCopyright", "Copyright (C) 2013 WrinklyNinja" + VALUE "LegalCopyright", "Copyright (C) 2013-2014 WrinklyNinja" VALUE "ProductVersion", "3.0.0" END END