subs | string list | ✗ | A list of strings to be substituted into the message content string. The content string must use numbered specifiers (%1%, %2%, etc.), where the numbers correspond to the position of the substitution string in this list to use, to denote where these strings are to be substituted.
-LOOT supports formatting of messages using GitHub Flavored Markdown. Support is provided by the Marked library (v0.3). Strings that get substituted into messages, such as file display names and dirty info utility strings, also support the same formatting options.
+ LOOT supports formatting of messages using GitHub Flavored Markdown. Support is provided by the Marked library (v0.3). Strings that get substituted into messages, such as file display names and cleaning data utility strings, also support the same formatting options.
LOOT handles messages and languages as follows:
- If a message's
content value is a string, the message will use the string as its content if displayed.
@@ -427,27 +427,26 @@ Note: A newer version of this plugin is availab
name: 'Unofficial Skyrim Patch on Steam Workshop'
-Dirty Info Data Structure
-This structure holds information on which versions of a plugin are dirty, and how many identical-to-master records, deleted records and deleted navmeshes (if applicable) it contains. Dirty info is given as a key-value map.
+ Cleaning Data Structure
+This structure holds information on which versions of a plugin are dirty or clean, and if dirty, how many identical-to-master records, deleted records and deleted navmeshes (if applicable) it contains. Cleaning data is given as a key-value map.
| Key Name | Value Type | Required | Notes
|
- crc | hexadecimal integer | ✓ | The CRC-32 checksum of the dirty plugin, before cleaning. LOOT displays the CRCs of installed plugins in its report. The 8-character CRC should be preceded by 0x so that it is correctly interpreted.
- | util | string | ✓ | The utility that should be used to clean the plugin.
- | itm | integer | ✗ | The number of identical-to-master records reported for the dirty plugin. If the number is unknown, this field should not be supplied. If the number is known and zero, this field should be supplied.
- | udr | integer | ✗ | The number of undeleted records reported for the dirty plugin. If the number is unknown, this field should not be supplied. If the number is known and zero, this field should be supplied.
- | nav | integer | ✗ | The number of deleted navmeshes reported for the dirty plugin. If the number is unknown, this field should not be supplied. If the number is known and zero, this field should be supplied.
+ | crc | hexadecimal integer | ✓ | The CRC-32 checksum of the plugin. If the plugin is dirty, this needs to be the CRC of the plugin before before cleaning. LOOT displays the CRCs of installed plugins in its report. The 8-character CRC should be preceded by 0x so that it is correctly interpreted.
+ | util | string | ✓ | The utility that should be or that was used to clean the plugin.
+ | itm | integer | ✗ | The number of identical-to-master records reported for the dirty plugin. If the number is unknown or zero, this field should not be supplied.
+ | udr | integer | ✗ | The number of undeleted records reported for the dirty plugin. If the number is unknown or zero, this field should not be supplied.
+ | nav | integer | ✗ | The number of deleted navmeshes reported for the dirty plugin. If the number is unknown or zero, this field should not be supplied.
|
Equality
-Two location data structures are equal if the values of their crc keys are identical.
+ Two cleaning data structures are equal if the values of their crc keys are identical.
Examples
crc: 0x3DF62ABC
util: '[TES5Edit](http://www.creationkit.com/TES5Edit_Cleaning_Guide_-_TES5Edit)'
itm: 4
udr: 160
-nav: 0
@@ -471,7 +470,8 @@ nav: 0
msg | message list | ✗ | The messages attached to this plugin. The messages will be displayed in the order that they are listed.
| tag | tag set | ✗ | An unordered set of Bash Tags suggested for this plugin. If a Bash Tag is suggested for both addition and removal, the latter will override the former when the list is evaluated.
| url | location set | ✗ | An unordered set of locations for this plugin. If the same version can be found at multiple locations, only one location should be recorded. This metadata is not currently used by LOOT.
- | dirty | dirty info set | ✗ | An unordered set of dirty info structures for this plugin. Plugin entries with regular expression filenames must not contain dirty info.
+ | dirty | cleaning data set | ✗ | An unordered set of cleaning data structures for this plugin, identifying dirty plugins. Plugin entries with regular expression filenames must not contain cleaning data.
+ | clean | cleaning data set | ✗ | An unordered set of cleaning data structures for this plugin, identifying clean plugins. Plugin entries with regular expression filenames must not contain cleaning data. The itm, udr and nav fields are unused in this context, as they're assumed to be zero.
Equality
@@ -495,7 +495,8 @@ nav: 0
| msg | Merged. If B's message list contains an item that is equal to one already present in A's message list, B's item is discarded.
| tag | Merged.If B's tag set contains an item that is equal to one already present in A's tag set, B's item is discarded.
| url | Merged. If B's location set contains an item that is equal to one already present in A's location set, B's item is discarded.
- | dirty | Merged.If B's dirty info set contains an item that is equal to one already present in A's dirty info set, B's item is discarded.
+ | dirty | Merged.If B's dirty data set contain an item that is equal to one already present in A's dirty data set, B's item is discarded.
+ | clean | Merged.If B's clean data set contain an item that is equal to one already present in A's clean data set, B's item is discarded.
Examples
diff --git a/resources/l10n/template.pot b/resources/l10n/template.pot
index 91866a7b..499d2b74 100644
--- a/resources/l10n/template.pot
+++ b/resources/l10n/template.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LOOT 0.9.2\n"
"Report-Msgid-Bugs-To: https://github.com/loot/loot/issues\n"
-"POT-Creation-Date: 2016-08-06 16:31+0100\n"
+"POT-Creation-Date: 2016-08-06 16:32+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -66,7 +66,7 @@ msgstr ""
msgid "The load order has been copied to the clipboard."
msgstr ""
-#: src/gui/html/js/events.js:263 src/gui/html/js/translateStaticText.js:182
+#: src/gui/html/js/events.js:263 src/gui/html/js/translateStaticText.js:195
msgid "Quit"
msgstr ""
@@ -87,7 +87,7 @@ msgid "N/A"
msgstr ""
#: src/gui/html/js/handlePromiseError.js:15
-#: src/gui/html/js/translateStaticText.js:111
+#: src/gui/html/js/translateStaticText.js:115
msgid "Error"
msgstr ""
@@ -96,7 +96,7 @@ msgid "Active Plugin"
msgstr ""
#: src/gui/html/js/translateStaticText.js:18
-#: src/gui/html/js/translateStaticText.js:251
+#: src/gui/html/js/translateStaticText.js:264
msgid "Master File"
msgstr ""
@@ -109,7 +109,7 @@ msgid "Loads Archive"
msgstr ""
#: src/gui/html/js/translateStaticText.js:21
-#: src/gui/html/js/translateStaticText.js:85
+#: src/gui/html/js/translateStaticText.js:89
msgid "Has User Metadata"
msgstr ""
@@ -130,7 +130,7 @@ msgid "Enable Edits"
msgstr ""
#: src/gui/html/js/translateStaticText.js:33
-#: src/gui/html/js/translateStaticText.js:84
+#: src/gui/html/js/translateStaticText.js:88
msgid "Global Priority"
msgstr ""
@@ -169,411 +169,420 @@ msgid "Bash Tags"
msgstr ""
#: src/gui/html/js/translateStaticText.js:43
-msgid "Dirty Info"
+msgid "Dirty Plugin Info"
msgstr ""
#: src/gui/html/js/translateStaticText.js:44
-msgid "Locations"
+msgid "Clean Plugin Info"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:46
-#: src/gui/html/js/translateStaticText.js:50
-#: src/gui/html/js/translateStaticText.js:54
-msgid "Filename"
+#: src/gui/html/js/translateStaticText.js:45
+msgid "Locations"
msgstr ""
#: src/gui/html/js/translateStaticText.js:47
#: src/gui/html/js/translateStaticText.js:51
#: src/gui/html/js/translateStaticText.js:55
-msgid "Display Name"
+msgid "Filename"
msgstr ""
#: src/gui/html/js/translateStaticText.js:48
#: src/gui/html/js/translateStaticText.js:52
#: src/gui/html/js/translateStaticText.js:56
-#: src/gui/html/js/translateStaticText.js:60
-#: src/gui/html/js/translateStaticText.js:65
+msgid "Display Name"
+msgstr ""
+
+#: src/gui/html/js/translateStaticText.js:49
+#: src/gui/html/js/translateStaticText.js:53
+#: src/gui/html/js/translateStaticText.js:57
+#: src/gui/html/js/translateStaticText.js:61
+#: src/gui/html/js/translateStaticText.js:66
msgid "Condition"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:58
+#: src/gui/html/js/translateStaticText.js:59
msgid "Type"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:59
+#: src/gui/html/js/translateStaticText.js:60
msgid "Content"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:61
-#: src/gui/html/js/translateStaticText.js:239
+#: src/gui/html/js/translateStaticText.js:62
+#: src/gui/html/js/translateStaticText.js:252
msgid "Language"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:63
+#: src/gui/html/js/translateStaticText.js:64
msgid "Add/Remove"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:64
+#: src/gui/html/js/translateStaticText.js:65
msgid "Bash Tag"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:67
+#: src/gui/html/js/translateStaticText.js:68
+#: src/gui/html/js/translateStaticText.js:74
msgid "CRC"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:68
+#: src/gui/html/js/translateStaticText.js:69
msgid "ITM Count"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:69
+#: src/gui/html/js/translateStaticText.js:70
msgid "Deleted References"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:70
+#: src/gui/html/js/translateStaticText.js:71
msgid "Deleted Navmeshes"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:71
+#: src/gui/html/js/translateStaticText.js:72
+#: src/gui/html/js/translateStaticText.js:75
msgid "Cleaning Utility"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:73
+#: src/gui/html/js/translateStaticText.js:77
msgid "URL"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:74
-#: src/gui/html/js/translateStaticText.js:248
+#: src/gui/html/js/translateStaticText.js:78
+#: src/gui/html/js/translateStaticText.js:261
msgid "Name"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:76
+#: src/gui/html/js/translateStaticText.js:80
msgid "Save Metadata"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:77
-#: src/gui/html/js/translateStaticText.js:94
-#: src/gui/html/js/translateStaticText.js:169
-#: src/gui/html/js/translateStaticText.js:262
+#: src/gui/html/js/translateStaticText.js:81
+#: src/gui/html/js/translateStaticText.js:98
+#: src/gui/html/js/translateStaticText.js:182
+#: src/gui/html/js/translateStaticText.js:275
msgid "Cancel"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:86
+#: src/gui/html/js/translateStaticText.js:90
msgid "Editor Is Open"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:93
-#: src/gui/html/js/translateStaticText.js:276
+#: src/gui/html/js/translateStaticText.js:97
+#: src/gui/html/js/translateStaticText.js:289
msgid "OK"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:101
+#: src/gui/html/js/translateStaticText.js:105
msgid "A filename is required."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:102
-#: src/gui/html/js/translateStaticText.js:113
-#: src/gui/html/js/translateStaticText.js:123
-#: src/gui/html/js/translateStaticText.js:135
-#: src/gui/html/js/translateStaticText.js:143
-#: src/gui/html/js/translateStaticText.js:152
+#: src/gui/html/js/translateStaticText.js:106
+#: src/gui/html/js/translateStaticText.js:117
+#: src/gui/html/js/translateStaticText.js:127
+#: src/gui/html/js/translateStaticText.js:139
+#: src/gui/html/js/translateStaticText.js:148
+#: src/gui/html/js/translateStaticText.js:156
+#: src/gui/html/js/translateStaticText.js:165
msgid "Delete Row"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:109
+#: src/gui/html/js/translateStaticText.js:113
msgid "Note"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:110
+#: src/gui/html/js/translateStaticText.js:114
msgid "Warning"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:112
+#: src/gui/html/js/translateStaticText.js:116
msgid "A content string is required."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:120
+#: src/gui/html/js/translateStaticText.js:124
msgid "Add"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:121
+#: src/gui/html/js/translateStaticText.js:125
msgid "Remove"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:122
-#: src/gui/html/js/translateStaticText.js:150
+#: src/gui/html/js/translateStaticText.js:126
+#: src/gui/html/js/translateStaticText.js:163
msgid "A name is required."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:130
+#: src/gui/html/js/translateStaticText.js:134
+#: src/gui/html/js/translateStaticText.js:146
msgid "A CRC is required."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:131
-#: src/gui/html/js/translateStaticText.js:132
-#: src/gui/html/js/translateStaticText.js:133
+#: src/gui/html/js/translateStaticText.js:135
+#: src/gui/html/js/translateStaticText.js:136
+#: src/gui/html/js/translateStaticText.js:137
msgid "Values must be integers."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:134
+#: src/gui/html/js/translateStaticText.js:138
+#: src/gui/html/js/translateStaticText.js:147
msgid "A utility name is required."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:142
+#: src/gui/html/js/translateStaticText.js:155
msgid "A link is required."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:151
+#: src/gui/html/js/translateStaticText.js:164
msgid "A folder is required."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:159
-#: src/gui/html/js/translateStaticText.js:259
+#: src/gui/html/js/translateStaticText.js:172
+#: src/gui/html/js/translateStaticText.js:272
msgid "Add New Row"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:165
+#: src/gui/html/js/translateStaticText.js:178
msgid "Jump To General Information"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:166
+#: src/gui/html/js/translateStaticText.js:179
msgid "Sort Plugins"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:167
+#: src/gui/html/js/translateStaticText.js:180
msgid "Update Masterlist"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:168
-#: src/gui/html/js/translateStaticText.js:261
+#: src/gui/html/js/translateStaticText.js:181
+#: src/gui/html/js/translateStaticText.js:274
msgid "Apply"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:170
+#: src/gui/html/js/translateStaticText.js:183
msgid "Search Cards"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:173
+#: src/gui/html/js/translateStaticText.js:186
msgid "Redate Plugins"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:174
+#: src/gui/html/js/translateStaticText.js:187
msgid "Open Debug Log Location"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:175
+#: src/gui/html/js/translateStaticText.js:188
msgid "Clear All User Metadata"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:176
+#: src/gui/html/js/translateStaticText.js:189
msgid "Copy Load Order"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:177
+#: src/gui/html/js/translateStaticText.js:190
msgid "Copy Content"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:178
+#: src/gui/html/js/translateStaticText.js:191
msgid "Refresh Content"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:179
+#: src/gui/html/js/translateStaticText.js:192
msgid "View Documentation"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:180
+#: src/gui/html/js/translateStaticText.js:193
msgid "About"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:181
-#: src/gui/html/js/translateStaticText.js:231
+#: src/gui/html/js/translateStaticText.js:194
+#: src/gui/html/js/translateStaticText.js:244
msgid "Settings"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:185
+#: src/gui/html/js/translateStaticText.js:198
msgid "Search cards"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:190
+#: src/gui/html/js/translateStaticText.js:203
msgid "Plugins"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:191
+#: src/gui/html/js/translateStaticText.js:204
msgid "Filters"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:192
+#: src/gui/html/js/translateStaticText.js:205
msgid "Press Enter or click outside the input to set the filter."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:193
+#: src/gui/html/js/translateStaticText.js:206
msgid "Show only plugins with cards that contain"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:194
+#: src/gui/html/js/translateStaticText.js:207
msgid "No text specified"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:197
+#: src/gui/html/js/translateStaticText.js:210
msgid "Hide version numbers"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:198
+#: src/gui/html/js/translateStaticText.js:211
msgid "Hide CRCs"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:199
+#: src/gui/html/js/translateStaticText.js:212
msgid "Hide Bash Tags"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:200
+#: src/gui/html/js/translateStaticText.js:213
msgid "Hide notes"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:201
+#: src/gui/html/js/translateStaticText.js:214
msgid "Hide 'Do not clean' messages"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:202
+#: src/gui/html/js/translateStaticText.js:215
msgid "Hide all plugin messages"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:203
+#: src/gui/html/js/translateStaticText.js:216
msgid "Hide inactive plugins"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:204
+#: src/gui/html/js/translateStaticText.js:217
msgid "Hide messageless plugins"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:207
+#: src/gui/html/js/translateStaticText.js:220
msgid "Show only conflicting plugins for"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:208
+#: src/gui/html/js/translateStaticText.js:221
msgid "No plugin selected"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:212
+#: src/gui/html/js/translateStaticText.js:225
msgid "Hidden plugins:"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:213
+#: src/gui/html/js/translateStaticText.js:226
msgid "Hidden messages:"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:218
+#: src/gui/html/js/translateStaticText.js:231
msgid "General Information"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:219
+#: src/gui/html/js/translateStaticText.js:232
msgid "Masterlist Revision"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:220
+#: src/gui/html/js/translateStaticText.js:233
msgid "Masterlist Date"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:221
+#: src/gui/html/js/translateStaticText.js:234
msgid "Warnings"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:222
+#: src/gui/html/js/translateStaticText.js:235
msgid "Errors"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:223
+#: src/gui/html/js/translateStaticText.js:236
msgid "Total Messages"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:224
+#: src/gui/html/js/translateStaticText.js:237
msgid "Active Plugins"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:225
+#: src/gui/html/js/translateStaticText.js:238
msgid "Dirty Plugins"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:226
+#: src/gui/html/js/translateStaticText.js:239
msgid "Total Plugins"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:234
+#: src/gui/html/js/translateStaticText.js:247
msgid "Default Game"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:235
+#: src/gui/html/js/translateStaticText.js:248
msgid "Autodetect"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:240
+#: src/gui/html/js/translateStaticText.js:253
msgid "Language changes will be applied after LOOT is restarted."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:242
+#: src/gui/html/js/translateStaticText.js:255
msgid "Enable debug logging"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:243
+#: src/gui/html/js/translateStaticText.js:256
msgid "The output is logged to the LOOTDebugLog.txt file."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:245
+#: src/gui/html/js/translateStaticText.js:258
msgid "Update masterlist before sorting"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:249
+#: src/gui/html/js/translateStaticText.js:262
msgid "Base Game"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:250
+#: src/gui/html/js/translateStaticText.js:263
msgid "LOOT Folder"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:252
+#: src/gui/html/js/translateStaticText.js:265
msgid "Masterlist Repository URL"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:253
+#: src/gui/html/js/translateStaticText.js:266
msgid "Masterlist Repository Branch"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:254
+#: src/gui/html/js/translateStaticText.js:267
msgid "Install Path"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:255
+#: src/gui/html/js/translateStaticText.js:268
msgid "Install Path Registry Key"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:268
+#: src/gui/html/js/translateStaticText.js:281
msgid "First-Time Tips"
msgstr ""
-#: src/gui/html/js/translateStaticText.js:270
+#: src/gui/html/js/translateStaticText.js:283
msgid ""
"CRCs are only displayed after plugins have been loaded, either by conflict "
"filtering, or by sorting."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:271
+#: src/gui/html/js/translateStaticText.js:284
msgid ""
"Double-click a plugin in the sidebar to quickly open it in the metadata "
"editor."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:272
+#: src/gui/html/js/translateStaticText.js:285
msgid ""
"Plugins can be drag and dropped from the sidebar into the metadata editor's "
"\"load after\", \"requirements\" and \"incompatibility\" tables."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:273
+#: src/gui/html/js/translateStaticText.js:286
msgid ""
"Some features are disabled while the metadata editor is open, or while there "
"is a sorted load order that has not been applied or discarded."
msgstr ""
-#: src/gui/html/js/translateStaticText.js:274
+#: src/gui/html/js/translateStaticText.js:287
msgid ""
"Many interface elements have tooltips. If you don't know what something is, "
"try hovering your mouse over it to find out. Otherwise, LOOT's documentation "
@@ -598,14 +607,14 @@ msgstr ""
msgid "Failed to apply plugin metadata. Details: %1%"
msgstr ""
-#: src/gui/query_handler.cpp:596
+#: src/gui/query_handler.cpp:598
msgid ""
"An error occurred while parsing the masterlist: %1%. This probably happened "
"because an update to LOOT changed its metadata syntax support. Try updating "
"your masterlist to resolve the error."
msgstr ""
-#: src/gui/query_handler.cpp:611
+#: src/gui/query_handler.cpp:613
msgid ""
"An error occurred while parsing the userlist: %1%. This probably happened "
"because an update to LOOT changed its metadata syntax support. Your user "
@@ -621,33 +630,33 @@ msgid ""
"[LOOT's website](https://loot.github.io/)."
msgstr ""
-#: src/gui/query_handler.cpp:719 src/gui/query_handler.cpp:722
+#: src/gui/query_handler.cpp:723 src/gui/query_handler.cpp:726
msgid "Failed to get game data. Details: %1%"
msgstr ""
-#: src/gui/query_handler.cpp:803 src/gui/query_handler.cpp:806
+#: src/gui/query_handler.cpp:808 src/gui/query_handler.cpp:811
msgid "Failed to update the masterlist. Details: %1%"
msgstr ""
-#: src/gui/query_handler.cpp:845
+#: src/gui/query_handler.cpp:850
msgid "Loading plugin contents..."
msgstr ""
-#: src/gui/query_handler.cpp:849
+#: src/gui/query_handler.cpp:854
msgid "Sorting load order..."
msgstr ""
-#: src/gui/query_handler.cpp:906
+#: src/gui/query_handler.cpp:911
msgid "Failed to sort plugins. Details: %1%"
msgstr ""
-#: src/gui/query_handler.cpp:936
+#: src/gui/query_handler.cpp:941
msgid ""
"A global message contains a condition that could not be evaluated. Details: "
"%1%"
msgstr ""
-#: src/gui/query_handler.cpp:958 src/backend/plugin/plugin_sorter.cpp:216
+#: src/gui/query_handler.cpp:963 src/backend/plugin/plugin_sorter.cpp:216
msgid "\"%1%\" contains a condition that could not be evaluated. Details: %2%"
msgstr ""
diff --git a/src/backend/metadata/plugin_metadata.cpp b/src/backend/metadata/plugin_metadata.cpp
index 754d05cc..49e7175d 100644
--- a/src/backend/metadata/plugin_metadata.cpp
+++ b/src/backend/metadata/plugin_metadata.cpp
@@ -82,6 +82,7 @@ void PluginMetadata::MergeMetadata(const PluginMetadata& plugin) {
messages_.insert(end(messages_), begin(plugin.messages_), end(plugin.messages_));
dirtyInfo_.insert(begin(plugin.dirtyInfo_), end(plugin.dirtyInfo_));
+ cleanInfo_.insert(begin(plugin.cleanInfo_), end(plugin.cleanInfo_));
locations_.insert(begin(plugin.locations_), end(plugin.locations_));
return;
@@ -152,6 +153,14 @@ PluginMetadata PluginMetadata::DiffMetadata(const PluginMetadata& plugin) const
inserter(dirtDiff, begin(dirtDiff)));
p.DirtyInfo(dirtDiff);
+ set cleanDiff;
+ set_symmetric_difference(begin(cleanInfo_),
+ end(cleanInfo_),
+ begin(plugin.cleanInfo_),
+ end(plugin.cleanInfo_),
+ inserter(cleanDiff, begin(cleanDiff)));
+ p.CleanInfo(cleanDiff);
+
set locationsDiff;
set_symmetric_difference(begin(locations_),
end(locations_),
@@ -222,6 +231,14 @@ PluginMetadata PluginMetadata::NewMetadata(const PluginMetadata& plugin) const {
inserter(dirtDiff, begin(dirtDiff)));
p.DirtyInfo(dirtDiff);
+ set cleanDiff;
+ set_difference(begin(cleanInfo_),
+ end(cleanInfo_),
+ begin(plugin.cleanInfo_),
+ end(plugin.cleanInfo_),
+ inserter(cleanDiff, begin(cleanDiff)));
+ p.CleanInfo(cleanDiff);
+
set locationsDiff;
set_difference(begin(locations_),
end(locations_),
@@ -277,6 +294,10 @@ std::set PluginMetadata::DirtyInfo() const {
return dirtyInfo_;
}
+std::set PluginMetadata::CleanInfo() const {
+ return cleanInfo_;
+}
+
std::set PluginMetadata::Locations() const {
return locations_;
}
@@ -324,6 +345,10 @@ void PluginMetadata::DirtyInfo(const std::set& dirtyInfo) {
dirtyInfo_ = dirtyInfo;
}
+void PluginMetadata::CleanInfo(const std::set& info) {
+ cleanInfo_ = info;
+}
+
void PluginMetadata::Locations(const std::set& locations) {
locations_ = locations;
}
@@ -364,22 +389,37 @@ PluginMetadata& PluginMetadata::EvalAllConditions(Game& game, const Language::Co
++it;
}
- if (IsRegexPlugin()) // Remove any dirty metadata from a regex plugin.
+ if (IsRegexPlugin()) { // Remove any dirty metadata from a regex plugin.
dirtyInfo_.clear();
- else {
+ cleanInfo_.clear();
+ } else {
for (auto it = dirtyInfo_.begin(); it != dirtyInfo_.end();) {
if (!it->EvalCondition(game, name_))
dirtyInfo_.erase(it++);
else
++it;
}
+ for (auto it = cleanInfo_.begin(); it != cleanInfo_.end();) {
+ if (!it->EvalCondition(game, name_))
+ cleanInfo_.erase(it++);
+ else
+ ++it;
+ }
}
return *this;
}
bool PluginMetadata::HasNameOnly() const {
- return !IsPriorityExplicit() && loadAfter_.empty() && requirements_.empty() && incompatibilities_.empty() && messages_.empty() && tags_.empty() && dirtyInfo_.empty() && locations_.empty();
+ return !IsPriorityExplicit()
+ && loadAfter_.empty()
+ && requirements_.empty()
+ && incompatibilities_.empty()
+ && messages_.empty()
+ && tags_.empty()
+ && dirtyInfo_.empty()
+ && cleanInfo_.empty()
+ && locations_.empty();
}
bool PluginMetadata::IsRegexPlugin() const {
@@ -457,6 +497,9 @@ Emitter& operator << (Emitter& out, const loot::PluginMetadata& rhs) {
if (!rhs.DirtyInfo().empty())
out << Key << "dirty" << Value << rhs.DirtyInfo();
+ if (!rhs.CleanInfo().empty())
+ out << Key << "clean" << Value << rhs.CleanInfo();
+
if (!rhs.Locations().empty())
out << Key << "url" << Value << rhs.Locations();
diff --git a/src/backend/metadata/plugin_metadata.h b/src/backend/metadata/plugin_metadata.h
index 3ef83ce5..cb75fcdc 100644
--- a/src/backend/metadata/plugin_metadata.h
+++ b/src/backend/metadata/plugin_metadata.h
@@ -76,6 +76,7 @@ public:
std::list Messages() const;
std::set Tags() const;
std::set DirtyInfo() const;
+ std::set CleanInfo() const;
std::set Locations() const;
void Enabled(const bool enabled);
@@ -88,6 +89,7 @@ public:
void Messages(const std::list& messages);
void Tags(const std::set& tags);
void DirtyInfo(const std::set& info);
+ void CleanInfo(const std::set& info);
void Locations(const std::set& locations);
PluginMetadata& EvalAllConditions(Game& game, const Language::Code language);
@@ -116,6 +118,7 @@ private:
std::set requirements_;
std::set incompatibilities_;
std::set dirtyInfo_;
+ std::set cleanInfo_;
std::set locations_;
};
}
@@ -154,6 +157,8 @@ struct convert {
node["tag"] = rhs.Tags();
if (!rhs.DirtyInfo().empty())
node["dirty"] = rhs.DirtyInfo();
+ if (!rhs.CleanInfo().empty())
+ node["clean"] = rhs.CleanInfo();
if (!rhs.Locations().empty())
node["url"] = rhs.Locations();
@@ -188,23 +193,29 @@ struct convert {
}
if (node["after"])
- rhs.LoadAfter(node["after"].as< std::set >());
+ rhs.LoadAfter(node["after"].as>());
if (node["req"])
- rhs.Reqs(node["req"].as< std::set >());
+ rhs.Reqs(node["req"].as>());
if (node["inc"])
- rhs.Incs(node["inc"].as< std::set >());
+ rhs.Incs(node["inc"].as>());
if (node["msg"])
- rhs.Messages(node["msg"].as< std::list >());
+ rhs.Messages(node["msg"].as>());
if (node["tag"])
- rhs.Tags(node["tag"].as< std::set >());
+ rhs.Tags(node["tag"].as>());
if (node["dirty"]) {
if (rhs.IsRegexPlugin())
throw RepresentationException(node.Mark(), "bad conversion: 'dirty' key must not be present in a regex 'plugin metadata' object");
else
- rhs.DirtyInfo(node["dirty"].as< std::set >());
+ rhs.DirtyInfo(node["dirty"].as>());
+ }
+ if (node["clean"]) {
+ if (rhs.IsRegexPlugin())
+ throw RepresentationException(node.Mark(), "bad conversion: 'clean' key must not be present in a regex 'plugin metadata' object");
+ else
+ rhs.CleanInfo(node["clean"].as>());
}
if (node["url"])
- rhs.Locations(node["url"].as< std::set >());
+ rhs.Locations(node["url"].as>());
return true;
}
diff --git a/src/gui/html/elements/editable-table.html b/src/gui/html/elements/editable-table.html
index acfc5191..aff63031 100644
--- a/src/gui/html/elements/editable-table.html
+++ b/src/gui/html/elements/editable-table.html
@@ -81,6 +81,18 @@
|
+
+
+ |
+ |
+
+
+
+ Delete Row
+
+ |
+
+
|
diff --git a/src/gui/html/elements/loot-plugin-card.html b/src/gui/html/elements/loot-plugin-card.html
index f0eb8f8e..e15ad469 100644
--- a/src/gui/html/elements/loot-plugin-card.html
+++ b/src/gui/html/elements/loot-plugin-card.html
@@ -110,6 +110,8 @@
Empty Plugin
Loads Archive
+
+
Has User Metadata
|