diff --git a/docs/BOSS Metadata Syntax.html b/docs/BOSS Metadata Syntax.html index 0f1007f1..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. @@ -105,7 +105,7 @@ h3{

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

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: @@ -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 b58e0c80..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. @@ -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. @@ -180,7 +180,7 @@ Visual C++ Redistributable for Visual Studio 2013 (x86). BOSS can be install

The report is comprised of three main sections:

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

-

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

@@ -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,10 +439,12 @@ 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
+
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; @@ -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,13 +558,13 @@ 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

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/docs/images/confirm.png b/docs/images/confirm.png index e6aba1a4..83b16e4a 100644 Binary files a/docs/images/confirm.png and b/docs/images/confirm.png differ diff --git a/docs/images/editor.png b/docs/images/editor.png index 0e191006..39c1461c 100644 Binary files a/docs/images/editor.png and b/docs/images/editor.png differ diff --git a/docs/images/settings.png b/docs/images/settings.png index 74b88767..7c4131a4 100644 Binary files a/docs/images/settings.png and b/docs/images/settings.png differ 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" diff --git a/src/api/api.cpp b/src/api/api.cpp index 5ae289c3..113f97a9 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 acd010bb..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. @@ -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..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. @@ -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 b95dd3cf..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. @@ -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"); @@ -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 ) { @@ -453,7 +455,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 +464,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 +473,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 +481,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 +489,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 +497,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 +505,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; @@ -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, @@ -560,12 +562,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); @@ -593,7 +589,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; @@ -643,7 +639,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/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 c1b5c884..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. @@ -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); @@ -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); 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 557a7830..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. @@ -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; } @@ -384,7 +387,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] ; 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 019e8bd1..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. @@ -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..."; @@ -1076,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 2fdff62c..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. @@ -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); @@ -222,16 +224,18 @@ 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; + 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; @@ -242,7 +246,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, repo, branch, path, registry)); } } @@ -305,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()); } } @@ -328,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) { @@ -362,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()); } } @@ -392,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); @@ -420,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); @@ -448,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) @@ -461,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); @@ -486,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..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. @@ -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; }; 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