diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/envfs.cpp | 28 | ||||
| -rw-r--r-- | src/organizer_en.ts | 20 | ||||
| -rw-r--r-- | src/plugincontainer.cpp | 10 | ||||
| -rw-r--r-- | src/stylesheets/Night Eyes.qss | 26 | ||||
| -rw-r--r-- | src/stylesheets/Transparent-Style-BOS.qss | 4 | ||||
| -rw-r--r-- | src/stylesheets/Transparent-Style-Skyrim.qss | 4 | ||||
| -rw-r--r-- | src/stylesheets/dark.qss | 6 | ||||
| -rw-r--r-- | src/stylesheets/dracula.qss | 10 | ||||
| -rw-r--r-- | src/stylesheets/skyrim.qss | 4 | ||||
| -rw-r--r-- | src/stylesheets/vs15 Dark-Green.qss | 6 | ||||
| -rw-r--r-- | src/stylesheets/vs15 Dark-Orange.qss | 6 | ||||
| -rw-r--r-- | src/stylesheets/vs15 Dark-Purple.qss | 6 | ||||
| -rw-r--r-- | src/stylesheets/vs15 Dark-Red.qss | 6 | ||||
| -rw-r--r-- | src/stylesheets/vs15 Dark-Yellow.qss | 6 | ||||
| -rw-r--r-- | src/stylesheets/vs15 Dark.qss | 6 | ||||
| -rw-r--r-- | src/version.rc | 4 |
16 files changed, 85 insertions, 67 deletions
diff --git a/src/envfs.cpp b/src/envfs.cpp index 9317eb70..dfea6598 100644 --- a/src/envfs.cpp +++ b/src/envfs.cpp @@ -232,8 +232,8 @@ void forEachEntryImpl( if (status < 0) { log::error( - "NtOpenFile() failed for '{}', {}", - toString(poa), formatSystemMessage(status)); + "failed to open directory '{}': {}", + toString(poa), formatNtMessage(status)); return; } @@ -264,8 +264,9 @@ void forEachEntryImpl( break; } else if (status < 0) { log::error( - "NtQueryDirectoryFile() failed for '{}', {}", - toString(poa), formatSystemMessage(status)); + "failed to read directory '{}': {}", + toString(poa), formatNtMessage(status)); + break; } @@ -321,6 +322,23 @@ void forEachEntryImpl( } } +std::wstring makeNtPath(const std::wstring& path) +{ + constexpr const wchar_t* nt_prefix = L"\\??\\"; + constexpr const wchar_t* nt_unc_prefix = L"\\??\\UNC\\"; + constexpr const wchar_t* share_prefix = L"\\\\"; + + if (path.starts_with(nt_prefix)) { + // already an nt path + return path; + } else if (path.starts_with(share_prefix)) { + // network shared need \??\UNC\ as a prefix + return nt_unc_prefix + path.substr(2); + } else { + // prepend the \??\ prefix + return nt_prefix + path; + } +} void DirectoryWalker::forEachEntry( const std::wstring& path, void* cx, @@ -335,7 +353,7 @@ void DirectoryWalker::forEachEntry( NtClose = (NtClose_type)::GetProcAddress(m.get(), "NtClose"); } - const std::wstring ntpath = std::wstring(L"\\??\\") + path; + const std::wstring ntpath = makeNtPath(path); UNICODE_STRING ObjectName = {}; ObjectName.Buffer = const_cast<wchar_t*>(ntpath.c_str()); diff --git a/src/organizer_en.ts b/src/organizer_en.ts index a113579c..b7c0eb1b 100644 --- a/src/organizer_en.ts +++ b/src/organizer_en.ts @@ -5781,48 +5781,48 @@ Continue?</source> <context> <name>PluginContainer</name> <message> - <location filename="plugincontainer.cpp" line="1006"/> + <location filename="plugincontainer.cpp" line="1016"/> <source>Plugin error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="plugincontainer.cpp" line="1007"/> + <location filename="plugincontainer.cpp" line="1017"/> <source>Mod Organizer failed to load the plugin '%1' last time it was started.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="plugincontainer.cpp" line="1010"/> + <location filename="plugincontainer.cpp" line="1020"/> <source>The plugin can be skipped for this session, blacklisted, or loaded normally, in which case it might fail again. Blacklisted plugins can be re-enabled later in the settings.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="plugincontainer.cpp" line="1015"/> + <location filename="plugincontainer.cpp" line="1025"/> <source>Skip this plugin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="plugincontainer.cpp" line="1016"/> + <location filename="plugincontainer.cpp" line="1026"/> <source>Blacklist this plugin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="plugincontainer.cpp" line="1017"/> + <location filename="plugincontainer.cpp" line="1027"/> <source>Load this plugin</source> <translation type="unfinished"></translation> </message> <message> - <location filename="plugincontainer.cpp" line="1114"/> + <location filename="plugincontainer.cpp" line="1124"/> <source>Some plugins could not be loaded</source> <translation type="unfinished"></translation> </message> <message> - <location filename="plugincontainer.cpp" line="1117"/> - <location filename="plugincontainer.cpp" line="1135"/> + <location filename="plugincontainer.cpp" line="1127"/> + <location filename="plugincontainer.cpp" line="1145"/> <source>Description missing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="plugincontainer.cpp" line="1126"/> + <location filename="plugincontainer.cpp" line="1136"/> <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source> <translation type="unfinished"></translation> </message> diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index c703a36a..93a66ece 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -952,6 +952,16 @@ void PluginContainer::reloadPlugin(QString const& filepath) void PluginContainer::unloadPlugins()
{
+ if (m_Organizer) {
+ // this will clear several structures that can hold on to pointers to
+ // plugins, as well as read the plugin blacklist from the ini file, which
+ // is used in loadPlugins() below to skip plugins
+ //
+ // note that the first thing loadPlugins() does is call unloadPlugins(),
+ // so this makes sure the blacklist is always available
+ m_Organizer->settings().plugins().clearPlugins();
+ }
+
bf::for_each(m_Plugins, [](auto& t) { t.second.clear(); });
bf::for_each(m_AccessPlugins, [](auto& t) { t.second.clear(); });
m_Requirements.clear();
diff --git a/src/stylesheets/Night Eyes.qss b/src/stylesheets/Night Eyes.qss index 135f0c09..78a5d443 100644 --- a/src/stylesheets/Night Eyes.qss +++ b/src/stylesheets/Night Eyes.qss @@ -635,53 +635,43 @@ QWidget#downloadTab QAbstractScrollArea background: #242424; } -DownloadListWidget QFrame, -DownloadListWidgetCompact, -DownloadListWidgetCompact QLabel +DownloadListView QFrame { /* an entry on the Downloads tab */ background: #141414; } -DownloadListWidget QFrame#frame +DownloadListView QFrame#frame { /* outer box of an entry on the Downloads tab */ border: 2px solid #141414; } -DownloadListWidget QLabel#installLabel +DownloadListView QLabel#installLabel { color: none; } -DownloadListWidget QFrame:clicked +DownloadListView QFrame:clicked { background: #242424; } /* compact downloads view */ -DownloadListWidgetCompact, -DownloadListWidgetCompact QLabel -{ - /* an entry on the Downloads tab */ - background: #141414; - padding: 4px; -} - -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 16px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } -DownloadListWidget::item:hover { +DownloadListView::item:hover { padding: 0px; } -DownloadListWidget::item:selected { +DownloadListView::item:selected { padding: 0px; } diff --git a/src/stylesheets/Transparent-Style-BOS.qss b/src/stylesheets/Transparent-Style-BOS.qss index 0b4ba23d..4812ca37 100644 --- a/src/stylesheets/Transparent-Style-BOS.qss +++ b/src/stylesheets/Transparent-Style-BOS.qss @@ -225,10 +225,10 @@ QHeaderView::down-arrow{ background-color:rgba(154,154,0,0.3); padding: 3px; } -/*#DownloadListWidget{ +/*#DownloadListView{ } */ - #DownloadListWidget{ + #DownloadListView{ outline: 1px solid #e8e8e8; border: 0px solid #9a9a00; } diff --git a/src/stylesheets/Transparent-Style-Skyrim.qss b/src/stylesheets/Transparent-Style-Skyrim.qss index cbc43033..97fb862b 100644 --- a/src/stylesheets/Transparent-Style-Skyrim.qss +++ b/src/stylesheets/Transparent-Style-Skyrim.qss @@ -225,10 +225,10 @@ QHeaderView::down-arrow{ background-color:rgba(154,154,0,0.3); padding: 3px; } -/*#DownloadListWidget{ +/*#DownloadListView{ } */ - #DownloadListWidget{ + #DownloadListView{ outline: 1px solid #e8e8e8; border: 0px solid #9a9a00; } diff --git a/src/stylesheets/dark.qss b/src/stylesheets/dark.qss index 1bf5c819..b7a185e5 100644 --- a/src/stylesheets/dark.qss +++ b/src/stylesheets/dark.qss @@ -374,15 +374,15 @@ QTreeView::branch:open:has-children:has-siblings image: url(:/stylesheet/branch-open.png);
}
-DownloadListWidget QLabel#installLabel {
+DownloadListView QLabel#installLabel {
color: none;
}
-DownloadListWidget[downloadView=standard]::item {
+DownloadListView[downloadView=standard]::item {
padding: 16px;
}
-DownloadListWidget[downloadView=compact]::item {
+DownloadListView[downloadView=compact]::item {
padding: 4px;
}
diff --git a/src/stylesheets/dracula.qss b/src/stylesheets/dracula.qss index 9beba52d..a3197f67 100644 --- a/src/stylesheets/dracula.qss +++ b/src/stylesheets/dracula.qss @@ -406,23 +406,23 @@ SaveGameInfoWidget { * Downloads */ - DownloadListWidget QLabel#installLabel { + DownloadListView QLabel#installLabel { color: none; } -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 16px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } -DownloadListWidget::item:hover { +DownloadListView::item:hover { padding: 0px; } -DownloadListWidget::item:selected { +DownloadListView::item:selected { padding: 0px; } diff --git a/src/stylesheets/skyrim.qss b/src/stylesheets/skyrim.qss index ffd42640..7006e09a 100644 --- a/src/stylesheets/skyrim.qss +++ b/src/stylesheets/skyrim.qss @@ -559,11 +559,11 @@ QProgressBar { QProgressBar::chunk { background: url(./skyrim/progress-bar-chunk.png) center center repeat-x qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #95BED9, stop:0.78781 #6EB9CE); } -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 15px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } diff --git a/src/stylesheets/vs15 Dark-Green.qss b/src/stylesheets/vs15 Dark-Green.qss index a4c6a2cc..65cba739 100644 --- a/src/stylesheets/vs15 Dark-Green.qss +++ b/src/stylesheets/vs15 Dark-Green.qss @@ -547,7 +547,7 @@ QHeaderView::up-arrow { image: url(./vs15/sort-asc.png); margin-bottom: -37px; } -DownloadListWidget QHeaderView::up-arrow { +DownloadListView QHeaderView::up-arrow { margin-bottom: -47px; } QHeaderView::down-arrow { @@ -621,11 +621,11 @@ QProgressBar { QProgressBar::chunk { background: #06B025; } -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 16px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } diff --git a/src/stylesheets/vs15 Dark-Orange.qss b/src/stylesheets/vs15 Dark-Orange.qss index c909d103..62bd4bb8 100644 --- a/src/stylesheets/vs15 Dark-Orange.qss +++ b/src/stylesheets/vs15 Dark-Orange.qss @@ -548,7 +548,7 @@ QHeaderView::up-arrow { image: url(./vs15/sort-asc.png); margin-bottom: -37px; } -DownloadListWidget QHeaderView::up-arrow { +DownloadListView QHeaderView::up-arrow { margin-bottom: -47px; } QHeaderView::down-arrow { @@ -622,11 +622,11 @@ QProgressBar { QProgressBar::chunk { background: #06B025; } -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 16px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } diff --git a/src/stylesheets/vs15 Dark-Purple.qss b/src/stylesheets/vs15 Dark-Purple.qss index 2cff0e06..4e28b1d5 100644 --- a/src/stylesheets/vs15 Dark-Purple.qss +++ b/src/stylesheets/vs15 Dark-Purple.qss @@ -548,7 +548,7 @@ QHeaderView::up-arrow { image: url(./vs15/sort-asc.png); margin-bottom: -37px; } -DownloadListWidget QHeaderView::up-arrow { +DownloadListView QHeaderView::up-arrow { margin-bottom: -47px; } QHeaderView::down-arrow { @@ -622,11 +622,11 @@ QProgressBar { QProgressBar::chunk { background: #06B025; } -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 16px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } diff --git a/src/stylesheets/vs15 Dark-Red.qss b/src/stylesheets/vs15 Dark-Red.qss index 2df39fc4..5faaf3a9 100644 --- a/src/stylesheets/vs15 Dark-Red.qss +++ b/src/stylesheets/vs15 Dark-Red.qss @@ -548,7 +548,7 @@ QHeaderView::up-arrow { image: url(./vs15/sort-asc.png); margin-bottom: -37px; } -DownloadListWidget QHeaderView::up-arrow { +DownloadListView QHeaderView::up-arrow { margin-bottom: -47px; } QHeaderView::down-arrow { @@ -622,11 +622,11 @@ QProgressBar { QProgressBar::chunk { background: #06B025; } -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 16px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } diff --git a/src/stylesheets/vs15 Dark-Yellow.qss b/src/stylesheets/vs15 Dark-Yellow.qss index 63688511..83610ea6 100644 --- a/src/stylesheets/vs15 Dark-Yellow.qss +++ b/src/stylesheets/vs15 Dark-Yellow.qss @@ -547,7 +547,7 @@ QHeaderView::up-arrow { image: url(./vs15/sort-asc.png); margin-bottom: -37px; } -DownloadListWidget QHeaderView::up-arrow { +DownloadListView QHeaderView::up-arrow { margin-bottom: -47px; } QHeaderView::down-arrow { @@ -621,11 +621,11 @@ QProgressBar { QProgressBar::chunk { background: #06B025; } -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 16px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } diff --git a/src/stylesheets/vs15 Dark.qss b/src/stylesheets/vs15 Dark.qss index af29a696..7368f230 100644 --- a/src/stylesheets/vs15 Dark.qss +++ b/src/stylesheets/vs15 Dark.qss @@ -547,7 +547,7 @@ QHeaderView::up-arrow { image: url(./vs15/sort-asc.png); margin-bottom: -37px; } -DownloadListWidget QHeaderView::up-arrow { +DownloadListView QHeaderView::up-arrow { margin-bottom: -47px; } QHeaderView::down-arrow { @@ -621,11 +621,11 @@ QProgressBar { QProgressBar::chunk { background: #06B025; } -DownloadListWidget[downloadView=standard]::item { +DownloadListView[downloadView=standard]::item { padding: 16px; } -DownloadListWidget[downloadView=compact]::item { +DownloadListView[downloadView=compact]::item { padding: 4px; } diff --git a/src/version.rc b/src/version.rc index a8b60111..216a3e2d 100644 --- a/src/version.rc +++ b/src/version.rc @@ -4,13 +4,13 @@ // Otherwise, if letters are used in VER_FILEVERSION_STR, uses the full MOBase::VersionInfo parser // Otherwise, uses the numbers from VER_FILEVERSION and sets the release type as pre-alpha #define VER_FILEVERSION 2,4,0 -#define VER_FILEVERSION_STR "2.4.0rc3\0" +#define VER_FILEVERSION_STR "2.4.0\0" VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_FILEVERSION FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -FILEFLAGS VS_FF_PRERELEASE +FILEFLAGS (0) FILEOS VOS__WINDOWS32 FILETYPE VFT_APP FILESUBTYPE (0) |
