Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
Choose a Base Repository
Choose a Head Repository
This comparison is big! We’re only showing the most recent 250 commits
Commits on Aug 08, 2017
Commits on Aug 11, 2017
Update CEF to v3.3112.1656.g9ec3e42
I.e. Chromium 60.
Commits on Sep 12, 2017
Added Japanese Translation & Language (#822)
Added Japanese translation of loot.po and the installer.
Commits on Sep 13, 2017
Commits on Sep 15, 2017
Merge pull request #824 from kuroko137/pull-request
minor fixes for japanese translation
Commits on Sep 16, 2017
Commits on Nov 03, 2017
Don't depend on LOOT API's encoding conversion helpers
They're fairly trivial and aren't worth making the API messy over a bit
of duplicate code, so now they can be removed from the API.
Fix hidden "Jump to General Information" tooltip
This seems to have been broken by the update to Polymer v2.
Remove all YAML::Node usage from MetadataQuery
Separate getting data from serialising it.
Rename globalMessages -> generalMessages
To match what they're called by the LOOT API.
Reorganise source files for clarity
- Separate CEF-based classes out from independent classes.
- Move the different request types into a subdirectory.
Parse JS -> C++ requests using Protobuf
Protocol Buffers allows deserialisation code, including
objects that own the deserialised data, to be generated from
schema files, so that the deserialisation no longer depends
on the LOOT API's yaml-cpp implementation details. While
Protocol Buffers is a lot more complex than necessary for
parsing JSON, it provides the opportunity to later simplify
and switch to using the binary encoding (though this
complicates usage in JS), and to potentially reuse the same
schemas in the LOOT API, abstracting out the implementation to
some degree.

Protocol Buffers is treated as an external dependency (like
Boost) because it takes a while to build, it's easier to cache
on CI this way.

This also replaces the YAML output of Copy Content with JSON,
which is a relatively minor change as the feature is more of a
dump of what's in the UI than anything that's meant to be truly
human-readable.

The #undef ERROR lines are to avoid macro name collision
between CEF and Protobuf. It's also necessary to link to the
C++ runtime statically on AppVeyor, as Protobuf links
statically and the others don't seem to care.

This also reverts commit 414e830.
The CMake Travis includes by default doesn't detect Protobuf
correctly, so go back to using a more recent release of CMake.

The added pthread linkage on Linux is necessary to have builds
pass on Travis, though it's unclear why.
Update the LOOT API to v0.12.0
Significant changes include:
- Support for light master (.esl) plugins
- LOOT API logging is now written to the same file as LOOT log messages
- SimpleMessage now has a condition field
- The loot/yaml/* and loot/windows_encoding_converters.h headers are no
  longer public
- Uses the Rust libloadorder and esplugin (replacing libespm) libraries
Update Copy Load Order output to for light masters
They all get given indexes of 255/FE and a new third column gives the decimal light master index of active light masters (so the first active light master is 0, the second is 1, etc.).
Display new icon on card for light masters
Don't display the master icon if a plugin is a light master, even if the master flag is set, as it's meaningless.
Display special ESL load order index in sidebar
Sidebar load order indices now don't count light masters, except for the
indices of light masters, which are FE followed by the index only
counting other light masters.
Add messages for risky light master usage
- Add a general warning message for if the user has 255 normal plugins
and at least one light master active, as this can cause records to get
overwritten.
- Add a general error message for if the user has an ESL that depends
on a non-master plugin, as this will cause the non-master plugin to get
loaded as a master, but any of its dependencies won't.
Commits on Nov 06, 2017
Compare release/build dates during update check
Switch GitHub API libraries so that short SHAs can be used to get commit dates. It adds two GitHub API calls so rate-limiting will occur more quickly, but hardcoding the build date would only cut out one call.
Commits on Nov 13, 2017
Commits on Nov 19, 2017
Add support for loading settings from a TOML file
Using the latest master branch commit of cpptoml because there
hasn't been a release of a version that compiles on Windows, but
despite that the library seems to be relatively popular...
Switch from YAML to TOML for settings file format
This removes the yaml-cpp dependency, but is a backwards-incompatible change.
Commits on Nov 20, 2017
Commits on Nov 24, 2017
Show light master indices as hex triplets
This is a more meaningful representation, as the full FEXXX value are the first five digits of the plugins' FormIDs, though the triplets may be 'noisy' as it's unlikely the first digit will be anything other than zero.
Commits on Nov 25, 2017
Autoformat JS code with Prettier
Also update ESLint and its configs and plugins, and fix anything ESLint reported that couldn't be autofixed.
Commits on Nov 26, 2017
Commits on Nov 30, 2017
Commits on Dec 02, 2017
Commits on Dec 03, 2017
Commits on Dec 10, 2017
Make installer build failures fail the overall build
$LastExitCode is blank after running idpsetup-1.5.1.exe for some
reason, so hopefully $? will be sufficient.
Commits on Dec 12, 2017
Use nlohmann/json for C++<-> JS messaging
Protobuf is too heavy to be worth it, as I don't think I'll adopt
it for the LOOT API, so the re-use efficiency isn't there.

CMake 3.6+ is needed for DOWNLOAD_NO_EXTRACT in ExternalProject_Add,
and use a valid query body in the query tests.
Commits on Dec 16, 2017
Commits on Dec 17, 2017
Merge pull request #856 from kuroko137/dev
minor fixes for japanese translation
Commits on Dec 24, 2017
Don't error for light master .esp files
They can have other .esp files as masters without causing unexpected load order movement.
Commits on Dec 26, 2017
Commits on Dec 28, 2017
Log Chromium console messages in LOOTDebugLog.txt
The callback doesn't distinguish between console.log and console.error output, so choosing logging levels is a bit rough. I previously thought that console errors would be logged to CEFDebugLog.txt, but this doesn't appear to be the case (any more?).
Commits on Feb 02, 2018
Make games' local data paths configurable
Adds a local_path config variable for games. This is like the
--game-appdata-path CLI parameter but on a per-game basis. The
default value of an empty string means libloadorder (via the LOOT
API) will determine the path.

Add a column to the GUI game settings table so local_path values
are preserved, but hide it because the table is already too full.
Remove --game-appdata-path CLI parameter
Now that game's appdata paths can be configured individually, there's no need for a global override.
Commits on Feb 04, 2018
Commits on Feb 05, 2018
Update documentation
Add Fallout 4 VR mentions and a couple of missing Skyrim SE mentions and update credits with the missing Japanese translator and an updated list of libraries.
Commits on Feb 07, 2018
Commits on Feb 08, 2018
Commits on Feb 09, 2018
Flush log buffer after every statement
Presumablty not great for performance, but that's not the priority when
debug logging is enabled.
Commits on Feb 10, 2018
Commits on Feb 12, 2018
Commits on Feb 17, 2018
Remove Bitcoin donation links
This whole bitcoin thing has gotten out of hand, and I'd now rather
not be a part of it.
Add specific message for sorting errors mentioning plugins.txt
It's by far the most common cause of issues filed, so adding detail to
help users seems like a good idea.
Commits on Feb 18, 2018
Commits on Feb 22, 2018
Commits on Feb 23, 2018
Update release notes and documentation
With Windows 7 TLS 1.2 note. I decided not to add making the Registry
edits to the installer as they go hand-in-hand with an update the
installer can't ensure is installed.
Commits on Mar 01, 2018
Commits on Mar 03, 2018
Convert editable-table element to ES2015 module
Keep the rows as separate templates though.
Turn initialise.js into an ES2015 module
Currently relies on globals set externally, like the element modules.
Convert updateExists.js to an ES2015 module
It currently depends on a global GitHub object as the github-api library
isn't available as an ES2015 module.
Convert translator.js to an ES2015 module
It's got implicit dependencies on jed and jed-gettext-parser, which
aren't available as ES2015 modules.
Convert events.js to an ES2015 module
It depends on a lot of globals, these will be turned into imports or otherwise
handled later.
Convert dom.js to an ES2015 module
game.js expects loot.DOM to exist and can't have it as a UMD dependency
as loot.DOM doesn't exist when game.js loads. There's also a dependency on filters.js
that could fail when filters.js was loaded after game.js.
Commits on Mar 04, 2018
Update ESLint config and fix most warnings
The remaining warnings are due to 'should' being undefined in the
(broken) tests.
Convert JS unit tests to run using Jest
It's a batteries-included approach to running tests in Node. It's
apparently not possible to test ES2015 modules in the browser with
CLI reporting, so this is the next best thing.
Commits on Mar 07, 2018
Use webpack to bundle JS modules and CSS
This partially replaces the build_ui.js script, which is still
needed for resolving Bower dependencies, i.e. non-module JS and
HTML imports.

The dependencies installed through NPM are now 'imported' using
ES2015 module syntax, as though they aren't ES2015 modules,
webpack is able to resolve them correctly.
Run JS linting on Appveyor
Now that there are no false positives, linting can be a passing
condition.
Commits on Mar 10, 2018
Commits on Mar 14, 2018
Commits on Mar 19, 2018
Commits on Apr 03, 2018
Fix paper-dialog-scrollable divider styling
The top divider could get hidden by content in the scrollable region.
Update LOOT API to v0.13.0
- Load load order state separately from loading plugins / sorting,
  and display an error message if it fails.
- Add backend support for groups.
Remove priority metadata handling
With support for groups implemented, priority support can now be
dropped.
Commits on Apr 07, 2018
Commits on Apr 08, 2018
Create ICO from SVG using svg_to_ico
It's a small tool I wrote that shouldn't have the same availability
issues that imagemagick has on Chocolatey.
Allow AppVeyor to overwrite binaries on Bintray
This is useful if re-running builds that failed after the Bintray
deployment.
Fix UI Bash Tag suggestion handling
Fixes #928, at some point the JSON structure of tag objects changed and the UI
code wasn't updated.
Commits on Apr 09, 2018
Commits on Apr 15, 2018
Commits on Apr 21, 2018
Use Fetch API instead of XHR
Some users occasionally report "Cannot read property 'status' of
undefined" errors, and the only place a 'status' property occurs is when
making a request for translation data, so replace the XHR implementation
with a simpler use of the Fetch API, which is less likely to contain an
edge case that trips some people up.
Commits on Apr 22, 2018
Fix undefined onQuit JS function called from C++
Also move it and showProgress into the window.loot object as crude
namespacing.
Provide full path to plugins.txt in sorting error message
It's not the actual path, because LOOT doesn't know it. Instead it's the
path assuming that LOOT's folder for the game and the game's
own folder have the same name (which they do for all currently-supported
games). There are edge cases where this may be wrong, e.g. Oblivion
allows plugins.txt to be in the game's install directory.

Given that it's just a suggestion and plugins.txt may not be the actual
cause, it's not worth exposing this path through libloadorder and the
LOOT API.
Commits on Apr 30, 2018
Commits on May 02, 2018
Improve display of Bash Tag suggestions
- Style tags that are already in the plugin description with silver text
- Only show removal suggestions for tags that are already in the plugin
  description
- Don't show tags that are suggested for both addition and removal.
- Show current, addition and removal tags inline with padding between

Closes #932.
Commits on May 23, 2018
Fix exception checking for LOOT updates when offline
The github-api library doesn't handle failed requests properly, use the
official GitHub API JS client instead (I thought it was Node.js-only).
Commits on May 24, 2018
Commits on May 25, 2018
Commits on May 27, 2018
Commits on Jun 01, 2018
Update docs for the groups editor
The page image is outdated, but that should be updated closer to release
in case I make more changes to the editor design.
Tweak groups editor UI
Replace the descriptive text with a link to the docs, and free up more
space for the graph.
Open relevant docs page from groups editor link
Instead of just opening the docs index, open the groups editor page.
Commits on Jun 02, 2018
Commits on Jun 03, 2018
Commits on Jun 29, 2018
Allow for failure to get cached data for a plugin
Cancelling sorting and turning the conflicting filter off removes
from the GUI any plugins that are no longer cached.
Commits on Jun 30, 2018
Commits on Aug 05, 2018
Commits on Aug 06, 2018
Commits on Aug 08, 2018
Commits on Aug 09, 2018
Display a warning for each invalid plugin removed from display
Fully loading plugins will remove any that have valid headers but are
invalid later in the file, this displays a warning message for each such
plugin.
Commits on Aug 10, 2018
Don't display plugins as ESMs if they're ESLs
All `.esl` files get both the ESL and ESM flag set by the (FO4 & SSE)
game engine, but it is possible set the ESL plugin flag on non-`.esl`
files, e.g., on otherwise regular `.esp` files. An ESL flagged `.esp`
file is *not* considered an ESM as well though, so just because a plugin
has `data.isLightMaster` set doesn't mean that it should also be
considered as `.isMaster`.

Both the `data.isMaster` and `.isLightMaster` derive from esplugin (via
loot-api), which is already clever enough to automatically set flags based on
file extension, so this "or"/`||` check is already superfluous anyway.

Fixes #990
Merge pull request #991 from loot/issue-990-fix-plugin-card-master-logic
Issue #990: Don't display plugins as ESMs if they're ESLs
Commits on Aug 12, 2018
Re-encrypt Bintray and GitHub auth tokens
Using the values encrypted by AppVeyor when I'm logged in as myself for
the LOOT account.
Commits on Aug 23, 2018
Commits on Aug 28, 2018
Commits on Sep 05, 2018
Update cpptoml to v0.1.0
First tagged release, supports TOML v0.5.0.
Update CEF to v3.3440.1806.g65046b7
Based on Chromium 68.
Commits on Sep 09, 2018
Fix running LOOT from outside its executable's directory
Don't rely on the current working directory being the executable's directory.
Commits on Sep 10, 2018
Merge pull request #1008 from loot/https
Update various links/URLs to HTTPS instead of HTTP.
Commits on Sep 11, 2018
Fix update check when latest release is not on first page of tags
Also give a better error message if it's somehow completely missing.
Commits on Sep 14, 2018
Update to Polymer 3
The ellipticaljs/paper-autocomplete element hasn't been updated
for Polymer 3. There is no Polymer 3 equivalent available, so it
will be reimplemented separately. Until then editable tables don't
work.
Reimplement autocomplete element
The third-party paper-autocomplete element LOOT was using hasn't been
updated to support Polymer 3 yet, so this reimplements it by wrapping
a React autosuggest element.

This might be more work than porting the Polymer element, but I want to
pivot away from Polymer towards React, so this was a good experiment
in doing that.
Target Chrome 68 when running Babel
LOOT uses Chromium 68, so target it to avoid unnecessary code
transforms that would require additional polyfill dependencies.
Commits on Sep 21, 2018
Commits on Sep 22, 2018
Commits on Sep 24, 2018
Commits on Sep 25, 2018
Commits on Sep 26, 2018
Commits on Sep 27, 2018
Don't delete old Bintray versions with no auth
The auth credentials are not available in pull requests, so don't try running the script without them.
Merge pull request #1022 from loot/greenkeeper/initial
Add Greenkeeper badge 🌴
Commits on Sep 28, 2018
Commits on Sep 30, 2018
Showing with 24,502 additions and 10,867 deletions.
  1. +15 −0 .clang-format
  2. +0 −31 .eslintrc.yml
  3. +4 −1 .gitignore
  4. +18 −16 .travis.yml
  5. +99 −97 CMakeLists.txt
  6. +3 −8 CONTRIBUTING.md
  7. +5 −5 README.md
  8. +27 −29 appveyor.yml
  9. +0 −40 bower.json
  10. +325 −0 docs/app/changelog.rst
  11. +9 −8 docs/app/credits.rst
  12. +1 −1 docs/app/introduction.rst
  13. +138 −0 docs/app/usage/groups_editor.rst
  14. +1 −1 docs/app/usage/initialisation.rst
  15. +10 −3 docs/app/usage/main.rst
  16. +2 −3 docs/app/usage/{editor.rst → plugin_editor.rst}
  17. +3 −1 docs/app/usage/settings.rst
  18. +2 −2 docs/conf.py
  19. BIN docs/images/groups_editor.png
  20. BIN docs/images/main.png
  21. BIN docs/images/settings.png
  22. +2 −1 docs/index.rst
  23. +25 −0 docs/licenses/BSD License (github-api).txt
  24. +18 −0 docs/licenses/MIT License (cpptoml).txt
  25. +49 −0 docs/licenses/MIT License (lodash).txt
  26. +21 −0 docs/licenses/MIT License (nlohmann json).txt
  27. +21 −0 docs/licenses/MIT License (spdlog).txt
  28. +43 −5 docs/licenses/texts.rst
  29. +0 −35 karma.conf.js
  30. +145 −17 package.json
  31. +1,523 −811 resources/l10n/da/LC_MESSAGES/loot.po
  32. +846 −0 resources/l10n/ja/LC_MESSAGES/loot.po
  33. +343 −323 resources/l10n/ru/LC_MESSAGES/loot.po
  34. +2 −2 resources/l10n/sv/LC_MESSAGES/loot.po
  35. +306 −239 resources/l10n/template.pot
  36. +404 −373 resources/l10n/zh_CN/LC_MESSAGES/loot.po
  37. +2 −2 resources/ui/css/dark-theme.css
  38. +10 −1 scripts/appveyor/build_installer.ps1
  39. +1 −1 scripts/appveyor/update_masterlist_branches.ps1
  40. +44 −41 scripts/archive.js
  41. +0 −121 scripts/build_ui.js
  42. +0 −25 scripts/cmake/configure_cef.cmake
  43. +0 −32 scripts/create_ico.js
  44. +32 −12 scripts/get_roboto_files.js
  45. +17 −1 scripts/git/pre-commit
  46. +7 −7 scripts/helpers.js
  47. +13 −9 scripts/installer.iss
  48. +5 −14 scripts/potomo.js
  49. +12 −12 scripts/set_version_number.js
  50. +2 −2 scripts/travis/loot.bintray.json
  51. +30 −23 src/gui/{ → cef}/loot_app.cpp
  52. +13 −10 src/gui/{ → cef}/loot_app.h
  53. +271 −0 src/gui/cef/loot_handler.cpp
  54. +27 −15 src/gui/{ → cef}/loot_handler.h
  55. +34 −27 src/gui/{ → cef}/loot_scheme_handler_factory.cpp
  56. +7 −6 src/gui/{ → cef}/loot_scheme_handler_factory.h
  57. +105 −0 src/gui/cef/query/derived_plugin_metadata.h
  58. +402 −0 src/gui/cef/query/json.h
  59. +98 −0 src/gui/cef/query/query.h
  60. +70 −73 src/gui/{ → cef/query}/query_handler.cpp
  61. +4 −4 src/gui/{ → cef/query}/query_handler.h
  62. +16 −6 src/gui/{query → cef/query/types}/apply_sort_query.h
  63. +2 −2 src/gui/{query → cef/query/types}/cancel_find_query.h
  64. +23 −17 src/gui/{query → cef/query/types}/cancel_sort_query.h
  65. +8 −9 src/gui/{query → cef/query/types}/change_game_query.h
  66. +21 −15 src/gui/{query → cef/query/types}/clear_all_metadata_query.h
  67. +10 −13 src/gui/{query → cef/query/types}/clear_plugin_metadata_query.h
  68. +26 −14 src/gui/{query → cef/query/types}/clipboard_query.h
  69. +66 −0 src/gui/cef/query/types/close_settings_query.h
  70. +10 −14 src/gui/{query → cef/query/types}/copy_content_query.h
  71. +85 −0 src/gui/cef/query/types/copy_load_order_query.h
  72. +22 −20 src/gui/{query → cef/query/types}/copy_metadata_query.h
  73. +2 −2 src/gui/{query → cef/query/types}/discard_unapplied_changes_query.h
  74. +117 −0 src/gui/cef/query/types/editor_closed_query.h
  75. +2 −2 src/gui/{query → cef/query/types}/editor_opened_query.h
  76. +42 −29 src/gui/{query → cef/query/types}/get_conflicting_plugins_query.h
  77. +75 −0 src/gui/cef/query/types/get_game_data_query.h
  78. +22 −12 src/gui/{query → cef/query/types}/get_game_types_query.h
  79. +10 −4 src/gui/{query → cef/query/types}/get_init_errors_query.h
  80. +14 −9 src/gui/{query → cef/query/types}/get_installed_games_query.h
  81. +31 −22 src/gui/{query → cef/query/types}/get_languages_query.h
  82. +23 −5 src/gui/{query → cef/query/types}/get_settings_query.h
  83. +17 −8 src/gui/{query → cef/query/types}/get_version_query.h
  84. +234 −0 src/gui/cef/query/types/metadata_query.h
  85. +7 −4 src/gui/{query → cef/query/types}/open_log_location_query.h
  86. +27 −5 src/gui/{query → cef/query/types}/open_readme_query.h
  87. +2 −2 src/gui/{query → cef/query/types}/redate_plugins_query.h
  88. +9 −6 src/gui/{query → cef/query/types}/save_filter_state_query.h
  89. +22 −12 src/gui/{query/close_settings_query.h → cef/query/types/save_user_groups_query.h}
  90. +43 −38 src/gui/{query → cef/query/types}/sort_plugins_query.h
  91. +68 −0 src/gui/cef/query/types/update_masterlist_query.h
  92. +44 −35 src/gui/{ → cef}/window_delegate.cpp
  93. +3 −2 src/gui/{ → cef}/window_delegate.h
  94. +0 −119 src/gui/editor_message.h
  95. +37 −16 src/gui/helpers.cpp
  96. +7 −1 src/gui/helpers.h
  97. +110 −5 src/gui/html/css/style.css
  98. +31 −2 src/gui/html/css/typography.css
  99. +134 −0 src/gui/html/elements/editable-table-rows.js
  100. +0 −369 src/gui/html/elements/editable-table.html
  101. +236 −0 src/gui/html/elements/editable-table.js
  102. +13 −8 src/gui/html/elements/{loot-custom-icons.html → loot-custom-icons.js}
  103. +0 −81 src/gui/html/elements/loot-dropdown-menu.html
  104. +80 −0 src/gui/html/elements/loot-dropdown-menu.js
  105. +342 −0 src/gui/html/elements/loot-groups-editor.js
  106. +0 −30 src/gui/html/elements/loot-menu.html
  107. +37 −0 src/gui/html/elements/loot-menu.js
  108. +0 −102 src/gui/html/elements/loot-message-dialog.html
  109. +115 −0 src/gui/html/elements/loot-message-dialog.js
  110. +0 −279 src/gui/html/elements/loot-plugin-card.html
  111. +315 −0 src/gui/html/elements/loot-plugin-card.js
  112. +0 −437 src/gui/html/elements/loot-plugin-editor.html
  113. +399 −0 src/gui/html/elements/loot-plugin-editor.js
  114. +0 −199 src/gui/html/elements/loot-plugin-item.html
  115. +237 −0 src/gui/html/elements/loot-plugin-item.js
  116. +0 −174 src/gui/html/elements/loot-search-toolbar.html
  117. +188 −0 src/gui/html/elements/loot-search-toolbar.js
  118. +164 −0 src/gui/html/elements/paper-autocomplete.jsx
  119. +205 −138 src/gui/html/index.html
  120. +58 −0 src/gui/html/js/app.js
  121. +31 −43 src/gui/html/js/dialog.js
  122. +311 −246 src/gui/html/js/dom.js
  123. +481 −287 src/gui/html/js/events.js
  124. +59 −49 src/gui/html/js/filters.js
  125. +210 −121 src/gui/html/js/game.js
  126. +46 −0 src/gui/html/js/group.js
  127. +9 −15 src/gui/html/js/handlePromiseError.js
  128. +373 −199 src/gui/html/js/initialise.js
  129. +410 −372 src/gui/html/js/plugin.js
  130. +5 −18 src/gui/html/js/query.js
  131. +36 −45 src/gui/html/js/state.js
  132. +685 −375 src/gui/html/js/translateStaticText.js
  133. +25 −41 src/gui/html/js/translator.js
  134. +84 −46 src/gui/html/js/updateExists.js
  135. +0 −8 src/gui/html/polymer-settings.html
  136. +0 −178 src/gui/loot_handler.cpp
  137. +83 −68 src/gui/main.cpp
  138. +0 −74 src/gui/query/copy_load_order_query.h
  139. +0 −169 src/gui/query/editor_closed_query.h
  140. +0 −154 src/gui/query/get_game_data_query.h
  141. +0 −72 src/gui/query/json.h
  142. +0 −177 src/gui/query/metadata_query.h
  143. +0 −57 src/gui/query/query.h
  144. +0 −112 src/gui/query/update_masterlist_query.h
  145. +1 −1 src/gui/resource.h
  146. +5 −5 src/gui/resource.rc
  147. +516 −156 src/gui/state/game.cpp
  148. +36 −13 src/gui/state/game.h
  149. +1 −1 src/gui/state/game_detection_error.h
  150. +40 −54 src/gui/state/game_settings.cpp
  151. +12 −71 src/gui/state/game_settings.h
  152. +39 −0 src/gui/state/logging.h
  153. +62 −27 src/gui/state/loot_paths.cpp
  154. +3 −3 src/gui/state/loot_paths.h
  155. +304 −163 src/gui/state/loot_settings.cpp
  156. +14 −7 src/gui/state/loot_settings.h
  157. +209 −124 src/gui/state/loot_state.cpp
  158. +15 −4 src/gui/state/loot_state.h
  159. +3 −3 src/gui/version.cpp.in
  160. +1 −1 src/gui/version.h
  161. +0 −96 src/gui/yaml_simple_message_helpers.h
  162. +116 −82 src/tests/common_game_test_fixture.h
  163. +0 −52 src/tests/gui/html/elements/test_editable-table.html
  164. +0 −19 src/tests/gui/html/elements/test_loot-custom-icons.html
  165. +0 −42 src/tests/gui/html/elements/test_loot-dropdown-menu.html
  166. +0 −19 src/tests/gui/html/elements/test_loot-menu.html
  167. +0 −34 src/tests/gui/html/elements/test_loot-message-dialog.html
  168. +0 −81 src/tests/gui/html/elements/test_loot-plugin-card.html
  169. +0 −37 src/tests/gui/html/elements/test_loot-plugin-editor.html
  170. +0 −18 src/tests/gui/html/elements/test_loot-plugin-item.html
  171. +0 −81 src/tests/gui/html/elements/test_loot-search-toolbar.html
  172. +0 −20 src/tests/gui/html/js/mock_dom.js
  173. +0 −38 src/tests/gui/html/js/mock_octokat.js
  174. +123 −120 src/tests/gui/html/js/test_filters.js
  175. +427 −313 src/tests/gui/html/js/test_game.js
  176. +133 −0 src/tests/gui/html/js/test_group.js
  177. +757 −589 src/tests/gui/html/js/test_plugin.js
  178. +37 −20 src/tests/gui/html/js/test_query.js
  179. +163 −149 src/tests/gui/html/js/test_state.js
  180. +67 −80 src/tests/gui/html/js/test_translator.js
  181. +146 −54 src/tests/gui/html/js/test_updateExists.js
  182. +3 −8 src/tests/gui/main.cpp
  183. +23 −116 src/tests/gui/state/game_settings_test.h
  184. +545 −174 src/tests/gui/state/game_test.h
  185. +18 −9 src/tests/gui/state/loot_paths_test.h
  186. +255 −272 src/tests/gui/state/loot_settings_test.h
  187. +10 −4 src/tests/gui/state/loot_state_test.h
  188. +20 −24 src/tests/printers.h
  189. +65 −0 webpack.config.js
  190. +8,058 −0 yarn.lock
View
@@ -0,0 +1,15 @@
---
Language: Cpp
BasedOnStyle: Google
AccessModifierOffset: -2
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortIfStatementsOnASingleLine: false
BinPackArguments: false
BinPackParameters: false
BreakConstructorInitializers: AfterColon
ConstructorInitializerAllOnOneLineOrOnePerLine: true
FixNamespaceComments: false
SpaceAfterTemplateKeyword: false
Standard: Cpp11
...
View

This file was deleted.

Oops, something went wrong.
View
@@ -44,11 +44,14 @@ Thumbs.db
# Other #
#########
.vscode/
*.user
*.suo
*.sdf
*.opensdf
build
*.mo
bower_components
node_modules
*.pb.h
*.pb.cc
coverage/
View
@@ -8,6 +8,8 @@ addons:
- ubuntu-toolchain-r-test # ppa:ubuntu-toolchain-r/test
packages:
- libbz2-dev
- libhttp-parser-dev
- libssh2-1-dev
- libssl-dev
- gcc-5
- g++-5
@@ -19,48 +21,48 @@ addons:
- libxss-dev
- libasound2-dev
- libxtst-dev
# Scripting dependencies
- imagemagick
cache:
directories:
- $TRAVIS_BUILD_DIR/node_modules
- $TRAVIS_BUILD_DIR/bower_components
- $HOME/boost_1_61_0/boost
- $HOME/boost_1_61_0/stage/lib
- $HOME/boost_1_67_0/boost
- $HOME/boost_1_67_0/stage/lib
yarn: true
before_install:
- nvm install 8
- curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.3.2
- export PATH=$HOME/.yarn/bin:$PATH
install:
# Use GCC 5.
- if [ "$CXX" = "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi
- export CXXFLAGS="-fPIC" CFLAGS="-fPIC"
# Install the latest stable Node.js. The default Node.js version is too old
# for some of the JavaScript syntax used.
- npm install -g nvm
- nvm install node
# Install Node.js dependencies
- npm install
- yarn install
# Add local binary path to PATH
- export PATH="./node_modules/.bin:$PATH"
# Install runtime dependencies using Bower
- bower install
# Install Boost
- wget https://raw.githubusercontent.com/WrinklyNinja/ci-scripts/1.0.0/install_boost.py
- python install_boost.py --directory ~ --boost-version 1.61.0 atomic chrono date_time filesystem iostreams locale log regex system thread
- python install_boost.py --directory ~ --boost-version 1.67.0 filesystem locale system
# Install packages for generating documentation
- pip install --user sphinx sphinx_rtd_theme
- pip install --user -r docs/requirements.txt
# Add sphinx-build to PATH
- export PATH="$HOME/.local/bin:$PATH"
# Get CMake (version available in repositories is too old, needs to be 3.1+)
- wget --no-check-certificate https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz
- tar -xzf cmake-3.7.2-Linux-x86_64.tar.gz
- export PATH=$PWD/cmake-3.7.2-Linux-x86_64/bin:$PATH
- wget https://github.com/WrinklyNinja/svg_to_ico/releases/download/0.1.0/svg_to_ico.tar.xz
- tar -xJf svg_to_ico.tar.xz
before_script:
- mkdir build
- node scripts/create_ico.js
- ./svg_to_ico -i resources/icon.svg -o build/icon/icon.ico
# Move into the cloned LOOT repo build path.
- cd build
# Link dynamically to the C++ standard library runtime.
- cmake .. -DBOOST_ROOT=~/boost_1_61_0
- cmake .. -DBOOST_ROOT=~/boost_1_67_0
script:
- make all
View

Large diffs are not rendered by default.

Oops, something went wrong.
View
@@ -66,17 +66,17 @@ Some strings to be translated may contain special characters. Different types of
If you're adding a new translation, LOOT's source code must be updated to recognise it. You can do this yourself and include the changes in your translation's pull request if you wish. The files and functions which must be updated are given below.
* The [LOOT API](https://github.com/loot/loot-api) must be updated to support the language, see its CONTRIBUTING.md for details.
* In [get_languages_query.h](src/gui/cef/query/get_languages_query.h), add the language's ISO code and name to the map returned by `getLanguages()`.
* In [archive.js](scripts/archive.js), add the language folder to the list returned by `getLanguageFolders()`.
* In [installer.iss](scripts/installer.iss), add an entry for your language's translation file to the `[Files]` section.
## Code Style
LOOT's JavaScript uses a slightly tweaked version of the Airbnb style, and can be automatically linted by ESLint, so isn't covered here.
LOOT's JavaScript code style is codified by the included ESLint configuration, which is based off the Airbnb and Prettier rules.
### C++ Code Style
The [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) is used as the base, with deviations as listed below.
The [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) is used as the base, with deviations as listed below. Formatting style is codified in the repository's `.clang-format` file, but is not enforced.
#### C++ Features
@@ -91,8 +91,3 @@ The [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html)
* Constant, enumerator and variable names should use `camelCase` or `underscore_separators`, but they should be consistent within the same scope.
* Function names should use `PascalCase` or `camelCase`, but they should be consistent within the same scope.
#### Formatting
* Line length doesn't matter.
* `public`, `protected` and `private` keywords should not be indented within a class declaration.
View
@@ -2,11 +2,11 @@
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/loot/loot?branch=dev&svg=true)](https://ci.appveyor.com/project/WrinklyNinja/loot)
[![Travis Build Status](https://travis-ci.org/loot/loot.svg?branch=dev)](https://travis-ci.org/loot/loot)
[![Documentation Status](https://readthedocs.org/projects/loot/badge/?version=latest)](http://loot.readthedocs.io/en/latest/?badge=latest)
[![Documentation Status](https://readthedocs.org/projects/loot/badge/?version=latest)](https://loot.readthedocs.io/en/latest/?badge=latest) [![Greenkeeper badge](https://badges.greenkeeper.io/loot/loot.svg)](https://greenkeeper.io/)
## Introduction
LOOT is a plugin load order optimisation tool for TES IV: Oblivion, TES V: Skyrim, TES V: Skyrim Special Edition, Fallout 3, Fallout: New Vegas and Fallout 4. It is designed to assist mod users in avoiding detrimental conflicts, by automatically calculating a load order that satisfies all plugin dependencies and maximises each plugin's impact on the user's game.
LOOT is a plugin load order optimisation tool for TES IV: Oblivion, TES V: Skyrim, TES V: Skyrim Special Edition, Skyrim VR, Fallout 3, Fallout: New Vegas, Fallout 4 and Fallout 4 VR. It is designed to assist mod users in avoiding detrimental conflicts, by automatically calculating a load order that satisfies all plugin dependencies and maximises each plugin's impact on the user's game.
LOOT also provides some load order error checking, including checks for requirements, incompatibilities and cyclic dependencies. In addition, it provides a large number of plugin-specific usage notes, bug warnings and Bash Tag suggestions.
@@ -16,7 +16,7 @@ LOOT is intended to make using mods easier, and mod users should still possess a
## Downloads
Releases are hosted on [GitHub](https://github.com/loot/loot/releases), and snapshot builds are available on [Bintray](https://bintray.com/wrinklyninja/loot). The snapshot build archives are named like so:
Releases are hosted on [GitHub](https://github.com/loot/loot/releases), and snapshot builds are available on [Bintray](https://bintray.com/loot/snapshots/loot). The snapshot build archives are named like so:
```
loot_<last tag>-<revisions since tag>-g<short revision ID>_<branch>.7z
@@ -50,7 +50,7 @@ You may also need to set `BOOST_ROOT` if CMake cannot find Boost.
### Rebuilding the HTML UI
The GUI's HTML file is automatically built when building the LOOT GUI binary, but it can also be built by running `node scripts/build_ui.js` from the repository root.
The GUI's HTML file is automatically built when building the LOOT GUI binary, but it can also be built by running `yarn build` from the repository root.
## Building The Documentation
@@ -67,4 +67,4 @@ Packaging scripts are provided for creating an installer on Windows and compress
Run the `scripts/installer.iss` [Inno Setup](http://www.jrsoftware.org/isinfo.php) script to build an installer executable in the `build` folder. The script requires the [Inno Download Plugin](https://bitbucket.org/mitrich_k/inno-download-plugin) to be installed. If the unofficial Korean and Simplified Chinese Inno Setup translation files are installed alongside the official translation files, then the installer script will also offer those language options. If they are not found, the installer will be built without them.
The archive packaging script requires [Git](https://git-scm.com/), and on Windows it also requires [7-Zip](http://7-zip.org), while on Linux it requires `tar` and `xz`. It can be run using `node scripts/archive.js`, and creates an archive for LOOT in the `build` folder. The archives are named as described in the Downloads section above.
The archive packaging script requires [Git](https://git-scm.com/), and on Windows it also requires [7-Zip](https://www.7-zip.org/), while on Linux it requires `tar` and `xz`. It can be run using `node scripts/archive.js`, and creates an archive for LOOT in the `build` folder. The archives are named as described in the Downloads section above.
View
@@ -6,54 +6,53 @@ configuration: Release
cache:
- node_modules
- bower_components
- C:\projects\boost_1_61_0\boost
- C:\projects\boost_1_61_0\stage\32\lib
- "%LOCALAPPDATA%\\Yarn"
environment:
github_auth_token:
secure: V1GojGQfrAiQtUWtNNXfm3samiH+1yNF5UYhkn8B8mbif20IGTGWNlBS9E4S0SUC
secure: yDqT5l/e5MntbW99V6+MHlfFgNv+UIogFfeyUVqtFk5lFRB/dAraLLwKCLl6y+DH
bintray_auth_token:
secure: fBQJmUDK/EgEUWjjbo6bWcitczeFTJZT4OZ3ZZ4FoUT6soBsTWPQJnr8YEVMFhGP
secure: PgsEA6TjHVf718zMnK7J/fT1hUAVNKBeWhpYgYaeCyeZk37VT4Ics6j7+B7ElLEr
install:
- choco install -y InnoSetup imagemagick.tool
- python -m pip install sphinx sphinx_rtd_theme
- npm install
- .\node_modules\.bin\bower install
- ps: (New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/WrinklyNinja/ci-scripts/1.1.0/install_boost.py', "$env:APPVEYOR_BUILD_FOLDER\install_boost.py")
- ps: (New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/WrinklyNinja/ci-scripts/1.2.0/delete_old_bintray_versions.py', "$env:APPVEYOR_BUILD_FOLDER\delete_old_bintray_versions.py")
- ps: python $env:APPVEYOR_BUILD_FOLDER\install_boost.py -d C:\projects -b 1.61.0 -a 32 atomic chrono date_time filesystem iostreams locale log regex system thread
- ps: Install-Product node LTS
- python -m pip install -r docs/requirements.txt
- yarn install
- ps: (New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/WrinklyNinja/ci-scripts/2.0.0/delete_old_bintray_versions.py', "$env:APPVEYOR_BUILD_FOLDER\delete_old_bintray_versions.py")
- ps: (New-Object Net.WebClient).DownloadFile('https://github.com/WrinklyNinja/svg_to_ico/releases/download/0.1.0/svg_to_ico.7z', "$env:APPVEYOR_BUILD_FOLDER\svg_to_ico.7z")
- 7z e -y svg_to_ico.7z
before_build:
- cd %APPVEYOR_BUILD_FOLDER%
- ps: mkdir build
- set PATH=C:\ProgramData\chocolatey\lib\imagemagick.tool\tools;%PATH%;C:\Program Files\Inkscape
- node scripts\create_ico.js
- .\svg_to_ico.exe -i resources\icon.svg -o build\icon\icon.ico
- cd build
- cmake .. -G "Visual Studio 14 2015" -DBOOST_ROOT="C:/projects/boost_1_61_0" -DBOOST_LIBRARYDIR="C:/projects/boost_1_61_0/stage/32/lib"
- cmake .. -G "Visual Studio 14 2015" -DBOOST_ROOT="C:\Libraries\boost_1_67_0" -DBOOST_LIBRARYDIR="C:\Libraries\boost_1_67_0\lib32-msvc-14.0" -DMSVC_STATIC_RUNTIME=ON
build:
verbosity: minimal
project: '$(APPVEYOR_BUILD_FOLDER)\build\LOOT.sln'
test_script:
- cd %APPVEYOR_BUILD_FOLDER%
- npm test
- yarn lint
- yarn test
- cd %APPVEYOR_BUILD_FOLDER%\build\%CONFIGURATION%
- .\loot_gui_tests.exe --gtest_output=xml:loot_gui_tests.xml
after_test:
- cd %APPVEYOR_BUILD_FOLDER%
- C:\Python27\Scripts\sphinx-build -b html docs build\docs\html
- ps: $env:GIT_DESCRIBE = ((git describe --tags --long --abbrev=7) | Out-String) -replace "`n|`r", ""
- ps: $env:LOOT_VERSION = "${env:GIT_DESCRIBE}_$env:APPVEYOR_REPO_BRANCH" -replace '[/<>"|]', '-'
- ps: $env:PATH = "$env:PATH;C:\cygwin\bin\"
- node scripts\potomo.js
- ps: scripts\appveyor\build_installer.ps1
- node scripts\archive.js
artifacts:
- path: build\loot_$(GIT_DESCRIBE)_$(APPVEYOR_REPO_BRANCH).7z
- path: build\loot_$(LOOT_VERSION).7z
name: LOOT
- path: build\LOOT Installer.exe
name: installer
@@ -62,34 +61,33 @@ deploy:
- provider: BinTray
username: wrinklyninja
api_key:
secure: fBQJmUDK/EgEUWjjbo6bWcitczeFTJZT4OZ3ZZ4FoUT6soBsTWPQJnr8YEVMFhGP
subject: wrinklyninja
repo: loot
secure: PgsEA6TjHVf718zMnK7J/fT1hUAVNKBeWhpYgYaeCyeZk37VT4Ics6j7+B7ElLEr
subject: loot
repo: snapshots
package: loot
version: $(GIT_DESCRIBE)_$(APPVEYOR_REPO_BRANCH)
version: $(LOOT_VERSION)
publish: true
override: true
artifact: LOOT
- provider: GitHub
tag: $(APPVEYOR_REPO_TAG_NAME)
release: LOOT v$(APPVEYOR_REPO_TAG_NAME)
description: |
Requires Windows 7 or later and the [MSVC 2015 x86 redistributable](https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe), and [7-Zip](http://www.7-zip.org/) to extract the archives.
## Change Logs
- [Application](https://loot.readthedocs.io/en/$(APPVEYOR_REPO_TAG_NAME)/app/changelog.html)
*Note: The files below with `tar.xz` extensions contain Linux binaries. They won't work on Windows computers.*
Requires Windows 7 or later and the [MSVC 2015 x86 redistributable](https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe), and [7-Zip](https://www.7-zip.org/) to extract the archives. The list of changes can be found [here](https://loot.readthedocs.io/en/$(APPVEYOR_REPO_TAG_NAME)/app/changelog.html).
auth_token:
secure: V1GojGQfrAiQtUWtNNXfm3samiH+1yNF5UYhkn8B8mbif20IGTGWNlBS9E4S0SUC
secure: yDqT5l/e5MntbW99V6+MHlfFgNv+UIogFfeyUVqtFk5lFRB/dAraLLwKCLl6y+DH
artifact: LOOT,installer
draft: false
force_update: true
on:
appveyor_repo_tag: true
on_success:
- ps: python "$env:APPVEYOR_BUILD_FOLDER\delete_old_bintray_versions.py" -o loot -g loot -u wrinklyninja -b loot -p loot -t $env:bintray_auth_token -a $env:github_auth_token -n 30
- ps: |
if ($env:bintray_auth_token -And $env:github_auth_token) {
python "$env:APPVEYOR_BUILD_FOLDER\delete_old_bintray_versions.py" -g loot/loot -b loot/snapshots/loot -u wrinklyninja -k $env:bintray_auth_token -t $env:github_auth_token -n 30
}
- ps: scripts\appveyor\update_masterlist_branches.ps1
on_finish:
View

This file was deleted.

Oops, something went wrong.
Oops, something went wrong.

Showing you all comments on commits in this comparison.

@WrinklyNinja

This comment has been minimized.

Show comment
Hide comment
@WrinklyNinja

WrinklyNinja Feb 4, 2018

Member

Merged this too early, I meant to release LOOT API v0.12.3 first...

Member

WrinklyNinja commented on f7a89d8 Feb 4, 2018

Merged this too early, I meant to release LOOT API v0.12.3 first...

@LegionS1970

This comment has been minimized.

Show comment
Hide comment
@LegionS1970

LegionS1970 Feb 25, 2018

[12:37:15.682390] [warning]: Chromium console message: Styling master document from stylesheets defined in HTML Imports is deprecated, and is planned to be removed in M65, around March 2018. Please refer to https://goo.gl/EGXzpw for possible migration paths.
[12:37:15.808367] [warning]: Blocking load of resource at https://fonts.googleapis.com/css?family=Roboto+Mono:400,700|Roboto:400,300,300italic,400italic,500,500italic,700,700italic
[12:37:17.698015] [warning]: No masterlist present
[12:39:51.149187] [error]: Exception while executing query: Git operation failed. Details: -1; unsupported URL protocol: libgit2 error
[12:39:51.150164] [error]: Chromium console message from http://loot/ui/js/handlePromiseError.js at line 14: Error: О нет, что-то пошло не так! Дополнительную информацию можно узнать в файле LOOTDebugLog.txt (можно получить доступ к нему через главное меню).
at onFailure (http://loot/ui/js/query.js:43:16)

No master list is found. It is not possible to update it. It is not possible to sort the files.

LegionS1970 commented on 62ca11c Feb 25, 2018

[12:37:15.682390] [warning]: Chromium console message: Styling master document from stylesheets defined in HTML Imports is deprecated, and is planned to be removed in M65, around March 2018. Please refer to https://goo.gl/EGXzpw for possible migration paths.
[12:37:15.808367] [warning]: Blocking load of resource at https://fonts.googleapis.com/css?family=Roboto+Mono:400,700|Roboto:400,300,300italic,400italic,500,500italic,700,700italic
[12:37:17.698015] [warning]: No masterlist present
[12:39:51.149187] [error]: Exception while executing query: Git operation failed. Details: -1; unsupported URL protocol: libgit2 error
[12:39:51.150164] [error]: Chromium console message from http://loot/ui/js/handlePromiseError.js at line 14: Error: О нет, что-то пошло не так! Дополнительную информацию можно узнать в файле LOOTDebugLog.txt (можно получить доступ к нему через главное меню).
at onFailure (http://loot/ui/js/query.js:43:16)

No master list is found. It is not possible to update it. It is not possible to sort the files.

@WrinklyNinja

This comment has been minimized.

Show comment
Hide comment
@WrinklyNinja

WrinklyNinja Feb 25, 2018

Member

File an issue then, don't comment on commits.

Member

WrinklyNinja commented on 62ca11c Feb 25, 2018

File an issue then, don't comment on commits.

@Freso

This comment has been minimized.

Show comment
Hide comment
@Freso

Freso Aug 10, 2018

Member

This commit seems to have broken AppVeyor: it says it is "Unauthorized" for delete_old_bintray_versions.py. I'm guessing there's an API key or something that needs refreshing, but I don't have access to the AppVeyor setup.

Member

Freso commented on 9cab67a Aug 10, 2018

This commit seems to have broken AppVeyor: it says it is "Unauthorized" for delete_old_bintray_versions.py. I'm guessing there's an API key or something that needs refreshing, but I don't have access to the AppVeyor setup.

@WrinklyNinja

This comment has been minimized.

Show comment
Hide comment
@WrinklyNinja

WrinklyNinja Aug 10, 2018

Member

I've filed loot/loot.github.io#68 for that issue.

Member

WrinklyNinja commented on 9cab67a Aug 10, 2018

I've filed loot/loot.github.io#68 for that issue.