Compare commits

...
889 Commits
Author SHA1 Message Date
isanae 41249036e5 Merge pull request #1194 from isanae/die-after-dump
Die after dumping
2020-08-13 14:42:19 -04:00
isanae d69289e081 always call the previous terminate handler, which should abort
without it, execution just resumes and dumps are created endlessly
2020-08-13 14:40:35 -04:00
isanae 0adf8a9f1b Merge pull request #1182 from AnyOldName3/dont-speak-ill-of-the-dead
Don't use reference as class member
2020-08-07 22:45:51 -04:00
AnyOldName3 05d03eec68 Don't use reference as class member
This particular QString was only ever constructed from a temporary,
so it was literally never going to work. We only hadn't noticed this
earlier as no one had tried using the mod repository bridge from a
plugin before (which is fairly bad given that three people have
theoretically tested it while working on its Python bindings in the
past).
2020-08-08 00:17:14 +01:00
isanae 592fa73104 Merge pull request #1176 from isanae/2.3.1-fixes
2.3.1 fixes
2020-08-01 11:11:41 -04:00
isanae 64ba6cae1e revert font scaling:
- users report low quality splash screen
 - sticking with qt's default is better in the long run
 - can still use the environment variable

revert network timer:
 - users report error in log every second
 - was a blind fix anyway, can't reliably reproduce it
2020-08-01 11:03:09 -04:00
isanae f71accc1ad bump to 2.3.1 2020-07-31 11:09:20 -04:00
isanae 44332c778d possible fix for "Network access is disabled"
start a timer and change NotAccessible back to UnknownAccessibility
2020-07-31 11:08:32 -04:00
isanae 6a1d57fe0c fixed bad font scaling 2020-07-31 10:01:00 -04:00
isanae 777229f28f added startSafeThread() to get core dumps for threads other than the main thread
added terminate handler
2020-07-31 09:56:19 -04:00
isanae 2eeaa0e31a fixed warning when trying to get the file type of files without extensions 2020-07-31 09:17:22 -04:00
Al 9d3281fd58 Update game-support-request.md 2020-07-29 16:59:32 +02:00
Al 1a468d66db Update game-support-request.md 2020-07-29 16:58:18 +02:00
Al 19fe01b60d Update issue templates 2020-07-29 16:57:31 +02:00
Al b6fac68b32 Update game-support-request.md 2020-07-29 16:53:57 +02:00
Al 50d883079e Update game-support-request.md 2020-07-29 16:53:22 +02:00
Al e379610805 Update game-support-request.md 2020-07-29 16:52:27 +02:00
Al 6dc736ca37 Update game-support-request.md 2020-07-29 16:50:00 +02:00
Al 7791ea0bd5 Create game-support-request.md 2020-07-29 16:47:43 +02:00
isanae e34a9e7315 Merge pull request #1172 from isanae/remove-prerelease
Chang release type to 0
2020-07-28 20:15:42 -04:00
isanae 4d546ea262 changed release type to 0 2020-07-28 20:15:12 -04:00
isanae 2ca7c1c9ea Merge pull request #1171 from isanae/bump-2.3
Bump to 2.3
2020-07-28 18:35:38 -04:00
isanae 4b0ba5c579 bumped to 2.3 2020-07-28 18:33:55 -04:00
isanae 7a10a74766 Merge pull request #1162 from isanae/bump-2.3rc2
Bump to 2.3rc2
2020-07-21 19:08:56 -04:00
isanae 7db0841a22 bumped to 2.3rc2
updated translations
2020-07-21 19:07:26 -04:00
isanae 2c082d6a3b Merge pull request #1161 from isanae/2.3rc2-fixes
2.3rc2 fixes (wip)
2020-07-21 18:13:42 -04:00
isanae a965a9dc41 added confirmation for sorting, some users click it by mistake 2020-07-20 20:05:15 -04:00
isanae 82cc488a18 conflict model didn't change persistent indexes when sorting 2020-07-20 20:01:46 -04:00
isanae 4adfeac9b7 shift+ and ctrl+double-click in mod list will now only open one mod instead of the whole selection
since these modifiers are also used for selecting, this is too error prone and users have reported opening a crapload of tabs in their browser or explorer windows
2020-07-20 19:26:33 -04:00
isanae c7a90f9506 added turkish translator 2020-07-20 19:09:12 -04:00
isanae 80645bacc1 Merge pull request #1160 from isanae/filetree-bugs
Filetree bugs and improvements
2020-07-20 19:07:58 -04:00
isanae 0c7265be4f only sort once at the end when fully loading for search
temporarily disable filtering completely when fully loading instead of just disabling recursive filtering, this could close already expanded nodes if their parent directories didn't match
2020-07-20 19:02:14 -04:00
isanae 6c4e237d4b fixed crash because items were sorted while being expanded
when expanding all or updating the tree, only sort once at the end
cache file types
2020-07-19 16:48:31 -04:00
isanae d32250597a Merge pull request #1154 from isanae/bump-2.3rc1
Bump to 2.3 rc1
2020-07-14 14:52:29 -04:00
isanae bd113a9502 bumped to 2.3 rc1 2020-07-14 14:50:56 -04:00
isanae 4fc61c7cd4 Merge pull request #1152 from isanae/small-fixes
Small fixes
2020-07-10 15:55:13 -04:00
isanae 315776799f don't translate new names 2020-07-10 15:51:06 -04:00
isanae 287e285afa added a bunch more osd checks
added warnings for paths in documents and downloads
2020-07-10 15:47:44 -04:00
isanae 285d0bfc79 loot exit code in hex 2020-07-10 15:33:00 -04:00
isanae 55451956c4 added VT_UI1 for productState 2020-07-10 15:31:08 -04:00
isanae cf01fa955c resize data tab columns when migrating from < 2.3 so the new columns are visible 2020-07-10 15:20:01 -04:00
isanae e0db7177b4 added hidden validation_timeouts setting 2020-07-10 15:04:54 -04:00
isanae 97dd16a87a don't log old nexus username and password
they're not supposed to be in the INI anymore, but the migration code looks broken and some users still have them
2020-07-10 14:54:02 -04:00
isanae b0fb203742 typo 2020-07-10 14:50:56 -04:00
isanae a2c630af24 added names to the about dialog 2020-07-10 14:50:46 -04:00
isanae 69b86b206b Merge pull request #1151 from isanae/data-tab-filter-slow
Slow search in data tab
2020-07-10 14:03:37 -04:00
isanae 16c7cc5605 fixed ensureFullyLoaded() taking forever because it was queuing all the sorts unnecessarily 2020-07-10 13:58:58 -04:00
isanae c8e1d62af0 Merge pull request #1150 from isanae/ts
updated translations
2020-07-10 12:21:44 -04:00
isanae 4a18791c2e updated translations 2020-07-10 12:12:31 -04:00
AL 732be7d38d Show .toml files in the "Text Files" modInfoDialog tab. 2020-06-24 15:52:20 +02:00
AL e4372b4570 Add a dash between the managed game and "Mod Organizer" to distinguish app name. 2020-06-24 15:50:55 +02:00
isanae 4ae95e21ad Merge pull request #1135 from Holt59/new-iorganizer-callbacks
Update for new organizer callbacks.
2020-06-16 15:39:59 -04:00
Mikaël Capelle 8c410aff33 Clean notification of userInterfaceInitialized between MainWindow and OrganizerCore. 2020-06-16 21:30:24 +02:00
Al 7d553557a6 Update issue-report.md 2020-06-16 15:20:15 +02:00
Al 72a992da68 Update issue-report.md 2020-06-16 15:19:49 +02:00
Mikaël Capelle 331fcad9f3 Remove unecessary default constructor call. 2020-06-16 12:47:50 +02:00
Mikaël Capelle f8bb349b3e Move userInterfaceInitialized notification at the end of the first show event. 2020-06-16 12:47:36 +02:00
Mikaël Capelle f66cf4ad99 Update for new organizer callbacks. 2020-06-15 22:47:21 +02:00
Al 4b92ba40be Merge pull request #1132 from Holt59/fix-getloadorder
Update following change to getLoadOrder() in game_features.
2020-06-14 15:59:35 -07:00
Mikaël Capelle eb1ca18ed8 Update following change to getLoadOrder() in game_features. 2020-06-14 15:33:16 +02:00
Al 92639dae7a Merge pull request #1131 from Holt59/allow-plugins-to-fix-filetree
Update following ModDataChecker change.
2020-06-14 05:48:49 -07:00
Mikaël Capelle 0ad3bbbdfa Update following ModDataChecker change. 2020-06-13 23:48:52 +02:00
AL 517749901d Version bump 2020-06-13 21:37:35 +02:00
Al 4606162eb4 Merge pull request #1127 from Holt59/fix-crash-archive-extraction
Fix archive extraction due to infinite QProgressDialog::setValue recursion
2020-06-12 10:59:08 -07:00
Al 628b56144d Merge pull request #1124 from Holt59/fix-unloading-of-plugins
Manually unload plugins to avoid issue with automatic unloading.
2020-06-11 11:54:07 -07:00
Mikaël Capelle a64ff3c7bb Add Qt bug report in comment and use while() instead of do { } while();. 2020-06-11 20:25:22 +02:00
Mikaël Capelle a769bc0061 Add comment explaining the usage of the QEventLoop. 2020-06-11 20:12:39 +02:00
Mikaël Capelle 93b1cea0d3 Rollback to using QProcessEvents but use WaitForMoreEvents. 2020-06-11 20:09:00 +02:00
Mikaël Capelle 26c7cd4f22 Disconnect signal after extraction to avoid calling them on destroyed widgets. 2020-06-11 18:33:44 +02:00
Al 297cb8320f Merge pull request #1123 from Holt59/fix-right-tabs-refresh
Fix refresh events of tabs in the right panel when some tabs are hidden.
2020-06-11 04:29:23 -07:00
Mikaël Capelle 5d0b6b0eab Manually unload plugins to avoid issue with automatic unloading. 2020-06-11 13:23:03 +02:00
Mikaël Capelle bb2dc9bd01 Avoid using indexOf everywhere. 2020-06-11 12:55:59 +02:00
Mikaël Capelle d0d795d12d Fix refresh events of tabs in the right panel when some tabs are hidden. 2020-06-11 12:46:09 +02:00
AL 2285ed32af Version bump to 2.3.0alpha10 2020-06-10 15:41:23 +02:00
Al 054af144fc Merge pull request #1120 from Holt59/hide-unused-tabs
Hide plugins and archives tabs when features are missing.
2020-06-09 13:16:42 -07:00
Mikaël Capelle af723f4297 Hide plugins and archives tabs when features are missing. 2020-06-09 22:08:03 +02:00
Al da66cb4917 Merge pull request #1118 from Al12rs/nexus_requests_leak
Fix consecutive mod update checks checking some mods again
2020-06-09 07:34:45 -07:00
AL a565472b82 Mark mods with orphaned nexus ids as checked to avoid repeated requests. 2020-06-09 15:54:36 +02:00
AL d164c17958 Fix consecutive mod update checks checking some mods again..
by correctly setting the last nexus update timestamp on a missed case.
2020-06-09 15:53:26 +02:00
Al b548fd37e4 Merge pull request #1117 from Holt59/iinstallmanager-silent-extraction
Add silent parameter to extraction methods of IInstallationManager.
2020-06-09 05:52:48 -07:00
Mikaël Capelle dfdf396149 Add silent parameter to extraction methods of IInstallationManager. 2020-06-09 13:43:02 +02:00
Al e13ca4bead Merge pull request #1115 from Al12rs/fix_problems_button
Fix problems button not updating on startup in some cases.
2020-06-08 14:37:31 -07:00
AL 210cd42395 Fix problems button not updating on startup in some cases.
Mainwindow wasn't guaranteed to exist after first directory structure refresh was complete so there was no mainwindow slot triggered to check for problems.
Added a proper problems check in the mainwindow constructor.
2020-06-08 23:26:02 +02:00
Al 29893868dc Merge pull request #1114 from Holt59/iorganizer-findfiles-glob
Add findFiles overload with glob patterns.
2020-06-08 12:04:54 -07:00
Mikaël Capelle 1aedff5c60 Add documentation for the support globbing features. 2020-06-08 20:53:05 +02:00
Mikaël Capelle 0d873719eb Replace QString::fromStdWString by ToQString. 2020-06-08 20:51:11 +02:00
Mikaël Capelle 56f6e5504b Fix & placement. 2020-06-08 20:34:32 +02:00
Mikaël Capelle 13d79f3cbe Add findFiles overload with glob patterns. 2020-06-08 18:37:05 +02:00
Al 4e0d47868a Merge pull request #1113 from Al12rs/bettr_wait_on_events
Use QEventLoop instead of manually calling ProcessEvents
2020-06-08 06:58:16 -07:00
AL 67ae37d614 Use QEventLoop instead of manually spinning calling ProcessEvents in a while with a sleep. 2020-06-07 22:01:30 +02:00
Al ec5a78cefa Merge pull request #1112 from Al12rs/updateProblemsButton
Move Problems Checks on a thread and avoid redundant calls
2020-06-07 12:21:41 -07:00
AL 6d7c086685 Change time measurement to not include lock wait time. 2020-06-07 21:06:33 +02:00
AL d845fe9a74 Make checks that occur at the same time not return immediately to avoid issues with stuff that might need to rely on check completion. 2020-06-07 18:51:02 +02:00
AL d1c42e69c1 Make even the last direct call to checkForProblemsImpl use the async version. 2020-06-07 17:44:06 +02:00
AL 0dc66e7ff4 Avoid executing Problems checks concurrently.
Reduce timer to 500ms.
Make other calls also scheduled.
2020-06-07 16:42:18 +02:00
AL 2b4c0288b4 Make a couple more calls async since there is no good reason not to. 2020-06-07 14:32:54 +02:00
AL 66690bd176 Fix comment on checkForProblems() 2020-06-07 14:32:08 +02:00
AL 30605e8381 Make m_NumberOfProblems atomic 2020-06-07 14:31:32 +02:00
Al 8b667fe69a Merge pull request #1109 from Holt59/set-plugin-setting-signal
Add IOrganizer signal when a plugin setting is changed.
2020-06-07 03:45:42 -07:00
Al bf055e8048 Merge pull request #1101 from Holt59/archive-lib-modification
Archive lib refactoring
2020-06-07 03:44:05 -07:00
AL a30ec0018b * Change the diagnoseUpdate() signals to collapse into a single async call in case of multiple signals in short time span.
* Make mainwindow constructor and show() use updateProblemsButton() to just update the problems icon without performing checks.

* Make directory refreshed schedule a problems check since it can overlap with other invocations.

* Make changing translation not trigger checks at all.

* Make changing style only update the icon instead of also performing the check.

* Make MainWindow ctor, MainWindow::show()and MainWindow::resetActionIcons() just update the icon without actually performing a check.

* Make clearing overwrite checkForProblems synchronously. Same before opening the notifications window and after closing it.
2020-06-06 23:13:14 +02:00
AL 1497685ea5 Make checkForProblems update local variable with the problem count,
Make updateProblemsButton just update the ui using that variable (no heavy operation)
Add checkForProblemsAsync to perform the heavy checks in another thread.
2020-06-06 18:08:30 +02:00
Mikaël Capelle 0ad56591fd Fix order of operations to avoid deadlock with event loop. 2020-06-06 13:40:38 +02:00
Mikaël Capelle e49ce3ed21 Use QEventLoop to process events when extracting instead of manual loop with processEvents. 2020-06-05 20:36:35 +02:00
Mikaël Capelle 8fa905cde6 Update to follow changes in FileData from archive. 2020-06-05 17:50:26 +02:00
Mikaël Capelle 093fddda37 Add IOrganizer signal when a plugin setting is changed. 2020-06-05 16:47:49 +02:00
Mikaël Capelle b7a559c75c Update following archive callback changes. 2020-06-02 23:30:03 +02:00
Mikaël Capelle b8a1365dac Update after change to CreateArchive. Remove unused archive handler from self-updater. 2020-06-02 12:40:46 +02:00
Al 226b2b1843 Merge pull request #1098 from Holt59/install-manager-improvements
Installation manager improvements
2020-06-01 13:56:26 -07:00
Mikaël Capelle 30361186c1 Update installation manager after namespace changes in archive. 2020-06-01 21:48:52 +02:00
Mikaël Capelle 2c20a4115d Fix opening and extraction of archives with passwords and/or encrypted filenames. 2020-06-01 21:06:52 +02:00
Mikaël Capelle af0c0dc33e Correct handling of 7z errors. 2020-06-01 17:40:15 +02:00
Mikaël Capelle 046af63dd5 Remove non-used declarations. Move queryPassword to lambda. 2020-06-01 17:14:30 +02:00
Mikaël Capelle 4b1b897a14 Use a single extractFiles() method and avoir member variables when not needed. 2020-06-01 17:12:20 +02:00
Mikaël Capelle 70fe708474 Remove usage of QString in FileData following archive change. 2020-06-01 14:55:19 +02:00
Mikaël Capelle f442f5da51 Modification following 'archive' update. 2020-06-01 13:58:46 +02:00
Mikaël Capelle 926267faa0 Fix issue with progress dialog disapearing too soon during installation. 2020-05-31 00:31:29 +02:00
Mikaël Capelle 0b3e3ab590 Set the parent widget properly in installation manager. 2020-05-30 21:44:40 +02:00
Mikaël Capelle 1dc98e3af2 Small update to installation manager following uibase changes. 2020-05-30 21:32:04 +02:00
Mikaël Capelle e9595ec91a Fix comment in installation manager. 2020-05-30 17:49:46 +02:00
Mikaël Capelle 3f768ae53a Implement createFile() for the installation manager. 2020-05-30 15:00:10 +02:00
Mikaël Capelle 21296a6459 Allow creation of file using addFile() in ArchiveFileTree. 2020-05-30 14:59:38 +02:00
Chris Djali a92fdeb400 Add correct link to CMake Common to readme 2020-05-29 16:16:56 +01:00
Chris Djali 25b6f5dd8d Add CMake Common link to readme 2020-05-29 16:15:34 +01:00
isanae da35955d6c Merge pull request #1092 from Holt59/mod-data-content
Use ModDataContent feature from GamePlugin
2020-05-28 23:42:53 -04:00
Mikaël Capelle 0a5790b333 Add icon for FO4 material (courtesy of @twizz0r). 2020-05-28 21:58:59 +02:00
Mikaël Capelle 78143598db Remove space. 2020-05-28 19:51:20 +02:00
Mikaël Capelle 7f42698f4c Change auto& to const auto&. 2020-05-28 19:50:39 +02:00
Mikaël Capelle d2b7a1a321 Expose ModDataContentHolder from OrganizerCore instead of vector of Content. 2020-05-28 19:48:21 +02:00
Mikaël Capelle 4791569790 Ignore filter-only content when sorting. 2020-05-27 22:46:03 +02:00
Mikaël Capelle 700c5fb16c Store contents as a set instead of a vector. 2020-05-27 22:45:42 +02:00
Mikaël Capelle 6f22a77cda Do not show Content with isOnlyForFilter() in the column. 2020-05-27 22:01:36 +02:00
Mikaël Capelle 9c3ddb53c9 Fix sorting for the Content column. 2020-05-27 21:29:17 +02:00
Mikaël Capelle 70f1e8bdf6 Make ModInfo::getContents() pure virtual. 2020-05-27 14:58:32 +02:00
Mikaël Capelle c31c79c61d Add temporary icon for material content. 2020-05-27 14:56:49 +02:00
Mikaël Capelle 7c7631d409 Replace usage of MakeVector with initializer lists. 2020-05-26 20:20:47 +02:00
AL 652d3ab054 Fix modlist scrolling to wrong location after filter refresh in some cases.
If the currently selected column wasn't the Name column it would scroll to the first modnamee that matched the currently selected column contents (like scrolling to a mod called Audio overhaul after assigning Audio category to another mod).
2020-05-26 15:36:40 +02:00
Mikaël Capelle 36b81b4a7c Use ModDataContent to display the tooltip in the header. 2020-05-25 20:17:21 +02:00
Mikaël Capelle cf1bbdd13e Switch to using the ModDataContent feature from the game plugin. 2020-05-25 19:54:15 +02:00
isanae a721347fd1 Merge pull request #1079 from Holt59/moinfo-improvements
ModInfo improvements
2020-05-25 13:48:45 -04:00
Mikaël Capelle 9212a7d2e9 Use hasSuffix() where needed. 2020-05-25 18:27:49 +02:00
Mikaël Capelle 09e75d14e5 Fix comment for prefetch(). 2020-05-25 17:59:07 +02:00
Mikaël Capelle c5bbf7360c Fix suffix comparison for SKSE DLLs. 2020-05-25 17:58:58 +02:00
Mikaël Capelle 03fc2b0dc2 Update ModInfo classes following MemoizedLocked changes. 2020-05-25 17:57:07 +02:00
Mikaël Capelle 86f516953d Update MemoizedLock to allow more flexible callable. 2020-05-25 17:56:45 +02:00
Mikaël Capelle e7afedaebe Remove useless calls to diskContentModified(). 2020-05-25 17:50:49 +02:00
Mikaël Capelle 238e233c18 Use memoization for file tree, contents and validity of ModInfo. 2020-05-24 23:33:21 +02:00
Mikaël Capelle 0aac4f3291 Add MemoizedLocked. 2020-05-24 23:32:47 +02:00
Mikaël Capelle b352aa53e0 Add thread_utils to CMakeList.txt. 2020-05-24 23:31:34 +02:00
Mikaël Capelle 4d8b5aaae8 Remove old comment. 2020-05-24 15:35:35 +02:00
Mikaël Capelle a67a99acb7 Force lower case comparison for extensions in getContents(). 2020-05-24 15:35:09 +02:00
Mikaël Capelle a62bf7aa12 Fix typo in getContents(). 2020-05-24 15:21:08 +02:00
Mikaël Capelle 4bcb92fc47 Use a more generic 'prefetch' method instead of isValid(). 2020-05-24 14:49:51 +02:00
Mikaël Capelle 001e44fec4 Minor cleaning. 2020-05-24 14:40:44 +02:00
Mikaël Capelle ff4fbbdc5f Switch from ThreadPool to a simpler thread map for containers. 2020-05-24 14:39:39 +02:00
Mikaël Capelle 73248d9e40 Use the refresh_thread_count setting for ModInfo::updateFromDisc. 2020-05-24 13:36:16 +02:00
Mikaël Capelle a284c64dc1 Update file tree in parallel when loading from disk. 2020-05-24 13:28:00 +02:00
Mikaël Capelle 9fb639a00e Update ModInfo to use a single file tree for all content-related operations. 2020-05-24 13:27:40 +02:00
Al 08ae9db2fd Merge pull request #1076 from Holt59/moddatachecker
Use the ModDataChecker feature to check mod validity
2020-05-23 14:19:54 -07:00
Mikaël Capelle 6374845a28 Bump to 2.3.0a9 and update copyright to 2020. 2020-05-23 23:09:20 +02:00
isanae 20649ec027 Fix issues with very slow refresh time for large root data directories. 2020-05-23 23:08:33 +02:00
Mikaël Capelle fceca422db Add comment about lazy-populating the QDirFileTree. 2020-05-23 22:21:38 +02:00
Mikaël Capelle 5f794fec2c Remove time() method from FileTreeEntry. 2020-05-23 21:45:57 +02:00
Mikaël Capelle 2652ed1209 Update QDirFileTree to hide implementation and allow querying time through QFileInfo. 2020-05-23 18:40:21 +02:00
Mikaël Capelle 7b973d5f10 Remove header that has been removed from uibase. 2020-05-23 17:33:16 +02:00
Mikaël Capelle 064ef4cfeb Update IFileTree implementations following uibase changes. 2020-05-23 17:33:01 +02:00
Mikaël Capelle ee995b8df5 Remove include that has been removed from uibase. 2020-05-23 17:09:20 +02:00
Mikaël Capelle ee7438827e Switch to ModDataChecker for testing mod validity. 2020-05-22 15:50:50 +02:00
Mikaël Capelle 5fc66d8793 Move m_GamePlugin up into ModInfoWithConflictInfo. 2020-05-22 15:27:19 +02:00
Mikaël Capelle c0035ada02 Add QDirFileTree implementation. 2020-05-22 13:49:51 +02:00
Al e618afa5d1 Merge pull request #1075 from Holt59/bump-to-2.3.0a8
Bump version to 2.3.0 alpha 8.
2020-05-22 01:27:16 +02:00
Mikaël Capelle 736fc28b12 Bump version to 2.3.0 alpha 8. 2020-05-22 00:00:41 +02:00
Al 5f00213b8a Merge pull request #1074 from IsmayilMirzali/add_open_logs
Add option to open logs folder
2020-05-20 23:48:19 +02:00
IsmayilMirzali f31a74a6a8 Add option to open logs folder 2020-05-21 00:44:34 +03:00
Al b7110cba2d Merge pull request #1066 from Holt59/new-filetree
Update for the new file tree implementation and minor fixes
2020-05-20 13:05:02 +02:00
isanae c214b67ae7 Merge pull request #1073 from Holt59/fix-missing-junction-plugins
Fix issue with plugins in junction mods not being activated.
2020-05-20 06:55:01 -04:00
Mikaël Capelle 89db02eb94 Fix issue with plugins in junction mods not being activated. 2020-05-20 12:53:36 +02:00
Mikaël Capelle c391c2b584 Rollback to setGameName instead of setGamePlugin for mod interface. 2020-05-19 18:00:12 +02:00
Mikaël Capelle 04698417a9 Add implementation of clone() and doClone() for the archive filetree. 2020-05-16 14:00:24 +02:00
Mikaël Capelle 0a3dade905 Update after const_cast removal in uibase. 2020-05-12 19:32:31 +02:00
Mikaël Capelle 572fa7050f Minor comment updates. 2020-05-08 21:43:27 +02:00
Mikaël Capelle b2bd13e3db Fix another issue with some archives not being loading properly. 2020-05-07 22:09:40 +02:00
Mikaël Capelle 411b73e0aa Fix issue with some archives not being extracted correctly. 2020-05-07 19:18:58 +02:00
Mikaël Capelle f405a51bf6 Override astree() in ArchiveFileTreeImpl to avoid VS warnings. 2020-05-07 16:22:07 +02:00
Mikaël Capelle ff990c7743 Fix issue with getColor() not being overriden properly. 2020-05-07 12:17:27 +02:00
Mikaël Capelle 5a90eecc21 Fix issue with mods not being checked properly and overwrite not having the right priority. 2020-05-07 12:16:33 +02:00
Mikaël Capelle 068e12bbb2 Move to the new filetree for the installation manager. 2020-05-07 12:16:33 +02:00
Mikaël Capelle 40c433580f Update ModInfo classes to handle plugin game and clean some declarations. 2020-05-07 12:16:33 +02:00
Mikaël Capelle cd2b7683b7 Avoid using GamePlugins when not provided by the game plugin. 2020-05-07 12:16:32 +02:00
AL 14d1ea87f9 Fix separator colors not working right due to missing brackets. 2020-05-07 01:57:58 +02:00
isanae 2860447dce Merge pull request #1064 from isanae/cmakefile-appveyor-fix
Appveyor fix for new cmake files
2020-04-30 18:43:05 -04:00
isanae 8ef7db6a4c appveyor does not build modorganizer in its standard location, so use DEPENDENCIES_DIR to find cmake_common 2020-04-30 18:42:02 -04:00
Al 4b265a5cd3 Merge pull request #1063 from Al12rs/mod_colors
Mod colors
2020-04-30 15:57:42 +02:00
AL bdd1e97d4f Add modinfodialog Notes Tab color selector. 2020-04-29 22:13:09 +02:00
AL 4d67365600 Only show color context menu for mods when right clicking on Notes column. 2020-04-29 17:04:25 +02:00
AL 312af10f4f Allow coloring notes field. 2020-04-29 16:49:12 +02:00
isanae 9945beabf1 Merge pull request #1061 from isanae/new-cmakefiles
New cmakefiles
2020-04-26 02:54:00 -04:00
isanae ca9c953d6a moved a few projects to requires_project() 2020-04-25 00:19:25 -04:00
isanae bbfec30539 now using new common cmakefiles
fixed includes because shared/ isn't in the path anymore
removed unused modeltest files
2020-04-23 21:00:00 -04:00
AL 530bade5f7 Allow resizing and maximizing the Loot sort report dialog. 2020-04-18 21:25:00 +02:00
isanae a2f550ee33 Merge pull request #1057 from isanae/warning-fixes
Fixed warnings about Q_OBJECT and thousand separators
2020-04-18 04:54:10 -04:00
isanae b91dbba734 fixed warnings about Q_OBJECT and thousand separators
had to move some classes to header files
2020-04-18 04:53:14 -04:00
isanae c47ab23f95 Merge pull request #1055 from isanae/sysdir-opt
Fix for getOptionalKnownFolder()
2020-04-17 11:08:14 -04:00
isanae 2c1331e3e5 getOptionalKnownFolder() returns a string now 2020-04-17 11:06:08 -04:00
isanae 855650215f Merge pull request #1054 from isanae/bunch-of-fixes
Bunch of fixes
2020-04-17 10:31:47 -04:00
isanae 21166f820b bumped to alpha 7 2020-04-17 10:25:42 -04:00
isanae 47867d427f fixed crash when switching to an instance with a lower refresh thread count
fixed rare race condition when waking up handle closer threads
2020-04-17 10:23:10 -04:00
isanae f43c11497d added game, instance and profile to status bar 2020-04-17 10:01:33 -04:00
isanae 014df88aa8 typo 2020-04-17 09:44:28 -04:00
isanae 960afe9ea5 log command line 2020-04-17 09:43:58 -04:00
isanae e11ca50a57 update available log is now info instead of debug
added AV warning when a game plugin is no longer available
2020-04-17 09:31:59 -04:00
isanae d49f038d5d silenced a few annoying logs 2020-04-17 09:30:16 -04:00
isanae 77d292727b sanity checks: added nahimicmsiosd.dll, specialk64.dll and mactype64.dll 2020-04-17 09:27:17 -04:00
isanae 52c7a6a181 added directory checks for desktop and onedrive 2020-04-17 09:14:24 -04:00
isanae 3b0fbebc6a dump a bunch of counts for mods when selecting a profile 2020-04-17 09:06:41 -04:00
Al ff912b5f61 Merge pull request #1053 from Al12rs/fix_no_inis
Fix crash when game plugin does not provide any ini files.
2020-04-17 14:30:41 +02:00
isanae d7ceadeae1 hook ctrl+f and escape directly on widgets instead of on the main window to allow other widgets to use the same shortcuts, like the FilterWidget 2020-04-17 08:19:22 -04:00
AL 89ee58de38 Fix crash when game plugin does not provide any ini files. 2020-04-17 13:49:26 +02:00
isanae 15e04d4fe8 fixed typo 2020-04-17 07:24:12 -04:00
isanae 4275cadf13 changed first validation timeout back to 10s, a lot of people report that 5s is too short 2020-04-17 07:24:02 -04:00
isanae 333a0c3c16 removed some debug logging 2020-04-17 07:23:28 -04:00
isanae 4621c27164 Merge pull request #1052 from isanae/filetree-crash-fixes
File tree crashes
2020-04-17 07:06:38 -04:00
isanae 0faa5d6995 fixed crashes and empty items in the file tree
sorting and removing items have to be queued since they corrupt various internal structures in Qt when done during layout
2020-04-17 06:58:21 -04:00
AL 502e752b0a Fix inconsistent Explore menu option naming. Used Visual Studio standard. 2020-04-02 14:29:40 +02:00
AL a4ed20295f Fix "Failed to setup data paths" loop by showing the choose instance dialog for next startup.
This could sometimes happen if users changed a drive letter or removed a drive with one of the Mo2 paths on it making Mo2 error on startup. Only fix was to manually edit the modorganizer.ini file or manually deleting the instance. This allows users to create or use other instances even if that particular instance still needs manual fixing.
2020-03-30 22:10:15 +02:00
AL aab5a120ff Imrpoved mod already exist dialog when installing. 2020-03-19 20:43:53 +01:00
AL 57be0f0db6 Fix and improve NexusID detection during installation for Install Mod button. 2020-03-13 22:48:02 +01:00
Al 7683dc205d Fix timestamp formatting for appveyor 2020-03-01 13:53:53 +01:00
AL 979889edfe Made all lists uniform row heights for performance and alternate row color 2020-02-29 15:02:15 +01:00
AL 99ac2c0e9a Fixed comboboxes and tooltip lagginess due to bad animations. 2020-02-29 15:01:26 +01:00
AL 5e83ecf8c4 New appveyor complete build configuration. 2020-02-29 14:23:14 +01:00
Chris Bessent 6f11e3d741 Revert "Hacky fix to installation progress dialog flashing"
This reverts commit 42e5c33a32.
2020-02-28 12:12:54 -07:00
Al a44100ada1 Merge pull request #1021 from Al12rs/log_changes
Various UI changes:
2020-02-27 11:02:34 +01:00
AL c2e2be8ff7 Cleanup previous filterList code 2020-02-26 19:34:33 +01:00
AL c4b95bad65 Removed "State" header from filterlist.
Allow lower vertical sizes for loglist.
Fixed alignments and size of various elements.
2020-02-26 19:24:15 +01:00
AL c1554d1c3f Added checkbox icons for filterlist state 2020-02-26 19:22:15 +01:00
AL 60437644e4 Enabled icons for all log level line.
Added new icon for Debug level.
Moved icons after timestamp.
2020-02-26 19:20:56 +01:00
AL 0a6c7dce97 Allow log to be reduced in size to a greater extent. 2020-02-26 14:50:19 +01:00
Al 756056fcc3 Merge pull request #1019 from Al12rs/context_menu_delay_fix
Fix context menu rendering delay and and general crappiness.
2020-02-26 14:47:33 +01:00
AL 87fcb7cf9e Fix context menu rendering delay and and general crappiness.
This affected users that had the windows "Fade or slide menus into view" option enabled. Qt's implementation of these effects sucks
2020-02-25 17:13:03 +01:00
AL 8bf4cd3b27 Fix random <br> in Alternate Game icon tooltip 2020-02-25 17:07:14 +01:00
Al a6d3ab75c0 Merge pull request #1018 from Al12rs/remove_flashing_widgets
Fixed widgets flashing during Mo2 startup,
2020-02-25 17:05:33 +01:00
AL 85f4ca3870 Fixed widgets flashing during Mo2 startup,
they were caused by some code I can't even make sense of that I left over. My bad...
2020-02-25 14:06:53 +01:00
Al f02aa15fc5 Merge pull request #1017 from Al12rs/filterwidget_updates
Filterwidget updates
2020-02-25 14:02:49 +01:00
AL 22f8698e0b Moved filters back to the bottom 2020-02-23 22:11:18 +01:00
AL 5208bf5251 Set filterwidget delay for the data tab to avoid typing stutter 2020-02-23 14:22:46 +01:00
AL e6cd3d026d Add option to filterwidget to keep selection in view 2020-02-23 02:32:51 +01:00
AL e5688ecea3 Fix crashing on Nexus descriptions that are missing BBCode closing brackets. 2020-02-22 14:48:59 +01:00
Chris Bessent 6107883829 Merge pull request #1006 from LostDragonist/master
Hacky fix to installation progress dialog flashing
2020-02-21 02:13:06 -07:00
Chris Bessent 42e5c33a32 Hacky fix to installation progress dialog flashing 2020-02-21 01:59:49 -07:00
isanae 21904f6214 Merge pull request #1005 from isanae/missing-categories
Missing categories
2020-02-19 03:40:26 -05:00
isanae 13a622e6cd categories were loaded too late 2020-02-18 21:06:04 -05:00
isanae d41d57fe07 Merge pull request #1004 from isanae/timings
More timings
2020-02-18 18:15:35 -05:00
isanae f9ad6d9709 timing for refreshBSAList and updateProblemsButton 2020-02-18 18:13:23 -05:00
isanae 75cd8b3bab added more timings
missed fileregisterfwd.h in cmake list
2020-02-18 18:09:03 -05:00
isanae e749b20726 Merge pull request #1003 from isanae/file-list-improvements
Refresh optimizations
2020-02-18 17:32:11 -05:00
isanae a28bd45c0b changed FileRegister to a deque instead 2020-02-18 17:25:06 -05:00
isanae d7ad9dcc19 removed copy/pasted qt copyright 2020-02-18 17:25:06 -05:00
isanae f7d7c4465b bumped to alpha 6 2020-02-18 17:25:05 -05:00
isanae d3fe9ff1fa moved TimeThis to uibase
fixed progress bar
2020-02-18 17:25:05 -05:00
isanae 528fa988b5 error handling for last modified time 2020-02-18 17:25:05 -05:00
isanae 5e569d0107 re-enabled archive parsing 2020-02-18 17:25:05 -05:00
isanae dbb3f5117a removed directoryrefresher.h from organizercore.h 2020-02-18 17:25:05 -05:00
isanae 777d822f13 cleanup, typedefs 2020-02-18 17:25:05 -05:00
isanae bbd9bb1fd9 hide version.aps 2020-02-18 17:25:05 -05:00
isanae b1cf498924 split directoryentry
made classes noncopyable, fixed a few unintended copies
2020-02-18 17:25:04 -05:00
isanae 88ef053000 error checking in dump()
removed a bunch of "{} saved" in the logs
2020-02-18 17:25:04 -05:00
isanae 9eeaa88cf5 fixed sorting 2020-02-18 17:25:04 -05:00
isanae 82106134cb added natvis 2020-02-18 17:25:04 -05:00
isanae 4a74102736 moved dump() to DirectoryEntry
static functions instead of lambdas
2020-02-18 17:25:04 -05:00
isanae 75359bc9c2 fixed crash when disabling mod 2020-02-18 17:25:04 -05:00
isanae fb3fbd3421 removed lastAccessed from FileEntry, not used
FileRegister keeps a vector instead of a map
2020-02-18 17:25:03 -05:00
isanae 567fe019ac removed some unnecessary counters
delete old structure in thread
2020-02-18 17:25:03 -05:00
isanae c8fc7abade thread-safe OriginConnection
ThreadPool now keeps threads running
keep ModThreads around so avoid reallocating buffers
2020-02-18 17:25:03 -05:00
isanae 763a5d6c08 more instrumentation
tighter mutexes, required thread-safe FileEntry
2020-02-18 17:25:03 -05:00
isanae 29244f3328 thread-safe directory entry 2020-02-18 17:25:03 -05:00
isanae d082a91ad6 faster getSubDirectory() for env::Directory, added lcname
instrumentation
2020-02-18 17:25:03 -05:00
isanae 7860e927a7 removed dead insertFile()
avoided a few string copies
lowercase filename in thread
2020-02-18 17:25:03 -05:00
isanae 3423b0a593 threaded refresher 2020-02-18 17:25:02 -05:00
isanae 6ee4285588 close handles in thread 2020-02-18 17:23:48 -05:00
isanae c1cf760337 don't lowercase twice 2020-02-18 17:23:48 -05:00
isanae 3a65665d36 wstring_view when possible
first implementation of NtQueryDirectoryFile
2020-02-18 17:23:48 -05:00
isanae 3db95eb404 customizable columns for mod and plugin lists 2020-02-18 17:23:48 -05:00
isanae 0c62a26e09 customizable columns for file tree 2020-02-18 17:23:47 -05:00
isanae 177dc6b320 shift+right-click selects items 2020-02-18 17:23:47 -05:00
isanae 7eae9b5dd4 localized warning when file doesn't exist for shell menu 2020-02-18 17:23:47 -05:00
isanae 7c2952b83c fixed stylesheets for "valid-filter" property 2020-02-18 17:23:47 -05:00
isanae f9f31c57dc added support for FilterWidget regexes 2020-02-18 17:23:47 -05:00
isanae b5c0b2b0a2 updated stylesheets for new "filtered" property on lists with FilterWidget 2020-02-18 17:23:47 -05:00
isanae 8c2814c9dc Merge pull request #1000 from Al12rs/startup_performance
Startup performance
2020-02-18 17:22:29 -05:00
Al cfb05d72be Merge pull request #998 from Al12rs/warnings
Change Qtime to QElapsedtimer in some palaces to remove the warnings.
2020-02-17 13:22:13 +01:00
AL 8e3ab9fb66 Cleanup commented code 2020-02-17 11:00:27 +01:00
AL 5043a930ce Add setting to disable splash since it can cause load time increase
use_spash=true by default. It's not exposed to the ui for now.
2020-02-17 03:26:47 +01:00
AL 112f91357e Reduce overhead introduced by splashscreen
by not letting it wait on the mainwindow and instead immediately close
2020-02-17 02:34:56 +01:00
AL 29b331817c Remove duplicated updateFromDisc() call during refresh
comment mentioned that it was needed but it was very old and testing would suggest this is no longer the case.
2020-02-17 02:11:42 +01:00
AL edc7f3d5b2 Avoid refreshing when setting downloads supported extensions as it only happens during init. 2020-02-16 15:54:41 +01:00
AL c02fbe89c7 Allow not refreshing downloads when setting their folder, for example during init. 2020-02-16 15:54:40 +01:00
AL e33d0f9d35 Avoid updating the downloadView when it hasn't even been initialized. 2020-02-16 15:54:40 +01:00
AL c4059f0dfe Avoid refreshing the profile again when initializing the pforilebox 2020-02-16 15:54:40 +01:00
AL 60c86e7cee Move modInfo loadFromDisc to it's own function 2020-02-16 15:53:24 +01:00
AL 423db56781 Change Qtime to QElapsedtimer in some palaces to remove the warnings. 2020-02-15 23:02:49 +01:00
Al 86c5b64ab5 Merge pull request #997 from Al12rs/custom_url_overwrite_fix
Avoid overwriting existing URL values when replacing a mod if new val…
2020-02-14 14:01:58 +01:00
AL 460e015e96 Avoid overwriting existing URL values when replacing a mod if new value is empty. 2020-02-14 13:43:22 +01:00
Al 2af0698484 Merge pull request #991 from Al12rs/remember_last_modinfo_tab
Always remember last opened ModInfoDialog tab.
2020-02-14 13:35:20 +01:00
Al d2af089a14 Merge pull request #992 from Al12rs/version_check_for_optional_files
Avoid getting the general mod version for optional and miscellaneous …
2020-02-14 13:35:08 +01:00
isanae 1f1f99f253 Merge pull request #994 from isanae/generic-file-list
New file tree
2020-02-09 08:52:03 -05:00
isanae 3a80685189 don't sort items when they're not expanded 2020-02-08 21:38:01 -05:00
isanae d0c16e60d7 just disable recursive filtering when fully loading
switching models clears persistent indexes and collapses everything
2020-02-07 14:02:00 -05:00
isanae 2b0a720863 fixed sorting not emitting layout events and fixing persistent indexes 2020-02-07 13:39:35 -05:00
isanae 1c8c1bb89b fixed data tab not refreshing after "restarting" MO
larger default size for filename column
fixed sorting in descending order by default
2020-02-07 11:40:26 -05:00
isanae 9c2fc69405 sort on demand 2020-02-07 11:26:11 -05:00
isanae 41e6189be4 disconnect any proxies when fully loading
disable model when resetting, enable it back after the directory refresh so the tree doesn't appear in a weird state in between
2020-02-07 10:52:49 -05:00
isanae 49a1e234ef item activation
removed a bunch of unnecessary QObject qualifiers
2020-02-07 09:24:54 -05:00
isanae 6b97e2185f bump to alpha5 2020-02-07 08:28:59 -05:00
isanae fe76e6518b Merge branch 'master' of https://github.com/ModOrganizer2/modorganizer into generic-file-list 2020-02-07 08:06:08 -05:00
AL a120a36e11 Avoid getting the general mod version for optional and miscellaneous files,
as those usually have their own version unbound to the main one.
2020-02-06 16:24:47 +01:00
isanae e6fe832b4f don't refresh the data tab every time the index changes 2020-02-05 22:00:47 -05:00
isanae 593ed64f86 filter on filename column only because loading the meta for every file takes forever
some small optimizations when enabling mods
2020-02-05 21:55:52 -05:00
isanae b7e51b65e8 removed bad minimum column width in the data tab
fixed crash in log when restart MO
2020-02-05 20:37:18 -05:00
isanae 03ee407c34 fixed LogModel not being thread safe
optimizations:
- create BrowserDialog on demand
- scroll to bottom of log in a timer, coalesces fast logging
- disabled md5 of dlls
2020-02-05 20:23:53 -05:00
isanae ea0429342a harmonized widgets in the tabs, fixed styles 2020-02-05 19:11:49 -05:00
isanae 34b022a229 fixed warning when comparing empty strings
filter in data tab
fixed some bad iterators when removing rows
fixed empty directories not being marked as such when refreshing
always sort directories first even when reversing the sort order
fixed children not being sorted
fixed errors about file sizes for directories
remember state of checkboxes in data tab
2020-02-05 16:21:41 -05:00
Al 718c2a56f9 Merge pull request #990 from Al12rs/shift_visit_website
Allow Shift-double click on modlist to open Nexus or custom URL as fa…
2020-02-05 16:28:14 +01:00
Al 6ab940892f Merge pull request #989 from Al12rs/more_text_types
Add support for other text file types to Text Files modinfo tab
2020-02-05 16:28:01 +01:00
AL 3079f84954 Always remember last opened ModInfoDialog tab.
Don't reopen saved tab if mainwindow requested specific tab.
2020-02-05 16:26:44 +01:00
AL ebd71dd053 Remove .cfg from INI Files tab as it's in Text Files tab now. 2020-02-04 15:04:37 +01:00
isanae 6f10702349 case insensitive checks for mohidden extension (lost in rebase) 2020-02-04 03:36:34 -05:00
isanae 2f3b9f9a9e skip files from archives for the shell menu 2020-02-04 03:33:23 -05:00
isanae d14488d2f7 update tree items when origins change 2020-02-04 03:33:23 -05:00
isanae 47d1826f55 hidden unique_ptr into FileTreeItem
refactored pruning
don't show shell menu for directories
added collapse all in context menu
2020-02-04 03:33:23 -05:00
isanae 97b91b5fe5 prune empty directories 2020-02-04 03:33:23 -05:00
isanae 34bc2191e6 don't get meta for fields that are not used
show compressed file size if available
remember file sizes for files in archives
2020-02-04 03:33:22 -05:00
isanae 85a9f810a0 moved refresh and checkboxes to the top 2020-02-04 03:33:22 -05:00
isanae c6c01f86c6 sort 2020-02-04 03:33:22 -05:00
isanae 7c98635edc filetype and last modified columns 2020-02-04 03:33:22 -05:00
isanae a55a69e6ac file size column 2020-02-04 03:33:22 -05:00
isanae 412165fcfb show file counts when there are discrepancies 2020-02-04 03:33:22 -05:00
isanae 2a0e78e3cf fixed bad path for alternate origins
finished ShellMenuCollection, had to split a bunch of things
2020-02-04 03:33:22 -05:00
isanae 6005da6187 ShellMenuCollection, events not processed yet 2020-02-04 03:33:21 -05:00
isanae a7a406e553 preparing for multiple origins shell menus
split exec() from createMenu()
2020-02-04 03:33:21 -05:00
isanae 0f6205bea5 dummy menu for files in multiple directories 2020-02-04 03:33:21 -05:00
isanae d0be8a0d3b ShellMenu class 2020-02-04 03:33:21 -05:00
isanae e3211683fd shell menu for multiple files 2020-02-04 03:33:21 -05:00
isanae abdf98bbfe status bar messages 2020-02-04 03:33:21 -05:00
isanae dd4bd5b17d shift+right click for shell menu 2020-02-04 03:33:21 -05:00
isanae 2d4216a4f0 icons 2020-02-04 03:33:20 -05:00
isanae 0f3c01425d font, tooltip and foreground 2020-02-04 03:33:20 -05:00
isanae 3bc1a4a067 createDirectoryItem() and createFileItem() 2020-02-04 03:33:20 -05:00
isanae f49643075a moved a bunch of duplicate stuff in a new class Range 2020-02-04 03:33:20 -05:00
isanae 7c4d3c6fb9 refactored removeDisappearingFiles() to just check for directories in the main loop 2020-02-04 03:33:20 -05:00
isanae 9c9de680c6 faster parent() and indexFromItem() with index guess
implemented files
2020-02-04 03:33:20 -05:00
isanae 8e3a360cd4 implemented fetchMore() and update for subdirectories
don't refresh tree on active, it's taken care of by fetchMore()
2020-02-04 03:33:20 -05:00
isanae bb9a4600bb rewriting FileTreeModel, implemented add/remove folders in root 2020-02-04 03:33:19 -05:00
isanae 08188830a3 removed LEAK_TRACE stuff
refactored DirectoryEntry for lookup maps
filetreemodel: made ensureLoaded() a no-op while refreshing, faster processing for removing rows
2020-02-04 03:33:19 -05:00
isanae aa63bffd35 missing toStdString() from merge 2020-02-04 03:33:19 -05:00
isanae ee03c23290 refactoring: moved member functions in the same order as the header 2020-02-04 03:33:19 -05:00
isanae 1c07f8ddda refactoring: whitespace, newlines, auto, removed commented out code 2020-02-04 03:33:19 -05:00
isanae 6da813a633 refactoring: whitespace and newlines 2020-02-04 03:33:19 -05:00
isanae 2be531470d renamed ToLower() to avoid confusion with in-place vs copy
pre-hashed file lookup in DirectoryEntry
2020-02-04 03:33:19 -05:00
isanae 0a908c4962 added a map for directories in DirectoryEntry
more optimizations for filetree
2020-02-04 03:33:18 -05:00
isanae 72394faa75 some optimizations to avoid case conversions and memory allocations 2020-02-04 03:33:18 -05:00
isanae 2d276cad0b put expensive logging in an optional function 2020-02-04 03:33:18 -05:00
isanae a7051df5da split item and model 2020-02-04 03:33:18 -05:00
isanae e0c605be1d initial implementation for updating file tree, buggy 2020-02-04 03:33:18 -05:00
isanae 219bd59a21 removed dead stuff 2020-02-04 03:33:18 -05:00
isanae f27a73b123 implemented dump to file
fixed duplicate module notifications not being skipped
2020-02-04 03:33:18 -05:00
isanae 2f07eb51c1 implemented explore origin, open mod info, hide and unhide 2020-02-04 03:33:17 -05:00
isanae 8bcf8cde3c hide spacers on statusbar when the progress bar is not visible
always show menu items, added status tips
2020-02-04 03:33:17 -05:00
isanae 87868e1b22 added a few missing consts
removed incorrect assert about an empty game edition
added FileTree to wrap a QTreeView and a FileTreeModel, moved some context menu actions over
2020-02-04 03:33:17 -05:00
isanae b6e91484ba split IconFetcher 2020-02-04 03:33:17 -05:00
isanae c5f98f9756 now prunes empty directories
handles archives and conflicts checkboxes
2020-02-04 03:33:17 -05:00
isanae d3e9abddaf tooltips, archive names 2020-02-04 03:33:17 -05:00
isanae de29b6a5a8 IconFetcher 2020-02-04 03:33:17 -05:00
isanae efdc3eb14f load items on demand 2020-02-04 03:33:17 -05:00
isanae a4624f239f split FileTreeModel, initial implementation, some stuff is broken 2020-02-04 03:33:16 -05:00
isanae e8027bfeaa moved main window classes to their own filter 2020-02-04 03:33:16 -05:00
isanae 7e748d15c9 split data tab
removed a bunch of undefined functions in MainWindow
2020-02-04 03:33:16 -05:00
AL 46319decd1 Allow Shift-double click on modlist to open Nexus or custom URL as fall-back. 2020-02-04 03:36:51 +01:00
AL d6d613f071 Add support for other text file types to Text Files modinfo tab 2020-02-04 02:43:29 +01:00
AL e9da5b4fad Version bump and update translations 2020-02-02 01:55:52 +01:00
Al c058721056 Merge pull request #988 from Al12rs/move_filter_widget
Moved filterWidget and eventFilter to ui base
2020-02-01 23:33:52 +01:00
AL 17cfba60a7 Fix Mobase namespace for filterwidget 2020-02-01 22:36:33 +01:00
AL 326c9130c4 Moved filterWidget and eventFilter to ui base 2020-02-01 21:28:14 +01:00
AL 9c8412a051 Change tooltip of Category column to say "Primary" 2020-01-31 23:04:34 +01:00
Al 0bc2a50440 Merge pull request #987 from IsmayilMirzali/master
Add more context menu options for mod backups
2020-01-28 23:08:24 +01:00
IsmayilMirzali 11f3a8caf5 Add seperators for mod backup context menu 2020-01-28 22:20:23 +02:00
IsmayilMirzali 28d449c026 Add more context menu options for mod backups 2020-01-28 00:51:44 +02:00
Chris Bessent 4963c278fe Don't allow foreign mods or overwrite for overriding overwrite 2020-01-26 18:26:03 -07:00
AL 6214cf3923 Fix CSV exporting of primary category.
#450
2020-01-26 20:19:15 +01:00
AL 6019e12ea5 Fixed file structure not being kept when drag and dropping files.
Fix #981
2020-01-23 17:17:03 +01:00
AL ade9cfb603 Bump bersion for dev build 3 2020-01-22 23:45:57 +01:00
Al 6305f6e2e9 Merge pull request #980 from Al12rs/context-menu-fix
Fixed missing context menu on general conflicts tab.
2020-01-22 23:09:57 +01:00
Al eacbe101f1 Merge pull request #979 from Al12rs/hidden-files-flag
Add Restore hidden files option and clean up hidden files code
2020-01-22 23:09:45 +01:00
Al 5af018d18a Renamed underscores function name to pascal case 2020-01-21 01:54:44 +01:00
Al 2217d9c575 Removed missed line 2020-01-21 01:49:22 +01:00
Al 123f9f408b Fixed missing context menu on general conflicts tab.
Was due to the new FilterWidget adding a QSortProxy and the selection had to be translated to the underlying model.
Normalized use of FilderWidget on the Advanced Conflicts tab.
2020-01-21 01:24:29 +01:00
Al 7c55ae3a22 Add "Restore hidden files" context menu option to modlist.
Recursively restores all hidden files in the mod or mods if more than one is selected.
2020-01-20 19:46:03 +01:00
Al 61b64d9431 Make hidden files extension checks case insensitive 2020-01-20 19:41:09 +01:00
Al 3e98a6e5bf Use ModInfo::s_HideExt instead of ".mohidden" directly 2020-01-20 19:38:08 +01:00
Al 84678a3a28 Merge pull request #978 from Al12rs/hidden-files-flag
Also check for .mohidden directories for HiddenFiles flag.
2020-01-19 20:34:02 +01:00
Al 304ca8066f Also check for .mohidden directories for HiddenFiles flag. 2020-01-19 16:32:32 +01:00
Al 7d11492ac2 Revert "Fix "Explore virtual folder" not being translatable"
This reverts commit de1bae9d92.
2020-01-19 12:52:22 +01:00
Al de1bae9d92 Fix "Explore virtual folder" not being translatable 2020-01-19 12:33:00 +01:00
Al a41c74bc5c Merge pull request #973 from Al12rs/hidden-files-flag
Added text filters for general conflicts lists
2020-01-16 21:30:26 +01:00
Al 58f3596028 Added text filters for general conflicts lists 2020-01-15 20:01:23 +01:00
Al a12e56f977 Bump version for 2.3.0 alpha 2 2020-01-15 12:04:25 +01:00
Al 5aad5eb8a2 Merge pull request #970 from Al12rs/hidden-files-flag
Hidden files flag
2020-01-15 11:59:13 +01:00
Silarn 0c2289b6f9 modsSortedByProfilePriority should return the internal name of the mod 2020-01-14 20:19:42 -06:00
Al f65121b8bc Fix some more tabs 2020-01-14 22:18:03 +01:00
Al 7579e42577 Fix incorrect tabs 2020-01-14 22:02:52 +01:00
Al 6b75741139 Add has hidden files filter for modlist. 2020-01-14 21:12:21 +01:00
Al a5d0cb8b5d Add icon for hidden files flag 2020-01-14 20:56:15 +01:00
Al 39f36ca27a Added ModInfo::FLAG_HIDDEN_FILES and check in modinfowithconflictinfo 2020-01-14 20:55:34 +01:00
Chris Bessent 3fb21b74a9 Merge pull request #969 from ModOrganizer2/2_2_2
Pull in 2.2.2.1 changes
2020-01-13 22:41:40 -07:00
Chris Bessent 6c6734fcf4 Set version for new instances 2020-01-12 14:35:40 -07:00
Chris Bessent 9fc7a1bf85 Fix downloading files that have no file name
Somehow some mods on the Nexus have no file name in certain API
responses.  Previously, MO assumed the last part of the URL is
the file name.  This worked until the Nexus started adding URL
query stuff to the URL (?md5=xxx).

Now, strip out all the URL query stuff to get a valid file name.
2020-01-11 09:24:23 -07:00
Chris Bessent 3cfa7bbe74 Don't ask for the game when there's only one game 2020-01-10 17:18:45 -07:00
Chris Bessent 08410deece Use the old query info logic when MD5 query is ambiguous
An author accidentally uploaded a mod's files to a different mod.
This resulted in querying info finding the wrong mod/file.
2020-01-10 17:18:45 -07:00
Chris Bessent 07e5ce1e0e Merge pull request #967 from Al12rs/master
Fixed log timestamp size for bigger font.
2020-01-10 08:41:10 -07:00
AL c5b809b486 Fixed log timestamp size for bigger font. 2020-01-10 16:07:58 +01:00
Chris Bessent ae22b41f96 Update version to 2.2.2.1 2020-01-09 19:01:42 -07:00
AL 85bb3dfbde Updated translations
(cherry picked from commit 62a6b1ce5e)
2020-01-09 18:43:12 -07:00
AL da441e2b71 Add headers with tooltips to Filter view.
(cherry picked from commit 3c6804c502)
2020-01-09 18:43:11 -07:00
AL 340b2e766f List all categories flatly in filters view as nestled ones would otherwise not be accessible.
(cherry picked from commit 734bd0ed20)
2020-01-09 18:43:11 -07:00
Al b9ff5cc7dc Merge pull request #961 from Al12rs/filter-fix
Nestled categories in filters missing fix
2020-01-09 12:34:42 +01:00
AL 62a6b1ce5e Updated translations 2020-01-09 02:09:28 +01:00
AL 3c6804c502 Add headers with tooltips to Filter view. 2020-01-09 02:02:24 +01:00
AL 734bd0ed20 List all categories flatly in filters view as nestled ones would otherwise not be accessible. 2020-01-09 02:00:50 +01:00
Jeremy Rimpo f37ec77b26 Merge pull request #959 from ModOrganizer2/qt-5-14
Qt 5 14
2020-01-07 11:55:13 -06:00
Chris Bessent dfa600996c Merge pull request #954 from ModOrganizer2/Develop
Stage for release 2.2.2
2020-01-06 05:17:01 -07:00
Chris Bessent d1a788dfad Merge branch 'master' into Develop 2020-01-06 05:16:02 -07:00
isanae 076d11292f Merge pull request #958 from isanae/dracula-background-color
Dracula theme fix for redrawing the images tab
2020-01-06 04:37:37 -05:00
isanae 72e99f7c5c changed widget background color to opaque, fixes redrawing problems in the images tab 2020-01-06 04:34:43 -05:00
LostDragonist 19a20159a5 Fix the API counter not being translated 2020-01-01 21:38:18 -07:00
Chris Bessent 4d6cee82f4 Update version to 2.2.2rc7 2020-01-01 12:05:26 -07:00
Silarn 81abbacd67 Update manifest for 5.14 dlls 2019-12-31 02:53:58 -06:00
Silarn d259a0e1fa Migrate obsoleted qVariantFromValue 2019-12-31 02:49:15 -06:00
isanae 57b049b6d7 Merge pull request #953 from isanae/rc6-fixes
rc6 fixes
2019-12-29 07:30:07 -05:00
isanae 52cc3a41c7 refresh after manually unlocking the ui
fixed nexus connect button staying as "cancel" in case of errors
fixed logging of duplicate dll loading
bumped to rc6
2019-12-29 07:16:09 -05:00
Silarn dc6653e100 Fix conflict filter 2019-12-19 10:52:45 -06:00
isanae e797640a00 Merge pull request #945 from isanae/w7-wait-fix
Windows 7 wait fix
2019-12-18 17:25:05 -05:00
isanae 31cd5531d0 windows 7 doesn't play well with job objects, so just wait on individual handles
fixed getProcessTreeFromProcess() not behaving like getProcessTreeFromJob()
2019-12-18 17:21:52 -05:00
isanae c2d23bb34a Merge pull request #943 from isanae/bump-rc5
Bumped to rc5
2019-12-17 15:15:27 -05:00
isanae 932d321956 bumped to rc5
added reedts to contributors
2019-12-17 15:14:23 -05:00
isanae a4a0e59d8c Merge pull request #942 from isanae/lock-fixes
Lock fixes
2019-12-17 07:47:29 -05:00
isanae 2c7e0e7cb4 Merge pull request #941 from isanae/loot-errors
Loot errors
2019-12-17 06:35:10 -05:00
isanae ca6f9990c6 added text in when running loot
stop indeterminate progress bar on errors
add errors and warnings to report
2019-12-17 06:32:08 -05:00
isanae 05231eab45 temporary fix to keep MO locked for all processes when closing
save main window settings in closeEvent()
2019-12-15 22:35:02 -05:00
isanae f3c5cebb6e fixed exiting before QThread joins when pressing the X twice 2019-12-15 21:56:50 -05:00
isanae dcf88361d4 don't display the overlay on dialog boxes
handle non-modal windows too
fixed crash when closing an overlayed dialog
2019-12-15 21:54:27 -05:00
Silarn c9d33dad46 Allow content tooltip to translate 2019-12-14 19:05:42 -06:00
Chris Djali 9f54f554f5 Add Script Extender Plugin Checker to main readme 2019-12-15 00:52:36 +00:00
Silarn 51e3e078be Fix problem with translated unmanaged mods and origin names
- (Also adds translatable strings to directoryentry.cpp)
2019-12-14 18:11:57 -06:00
Silarn fde5fa2797 Streamline manual install fix, bump RC 2019-12-14 14:12:00 -06:00
isanae a912be4c6b Merge pull request #939 from isanae/data-root-activate
Double-click on root item in the Data tab
2019-12-14 13:52:08 -05:00
isanae 7af0e164f7 don't activate the root data item 2019-12-14 13:49:26 -05:00
LostDragonist 4c7b626e77 Fix requesting a manual install 2019-12-14 06:52:34 -07:00
Silarn db59ebdba0 Fix tutorial targets 2019-12-14 02:23:40 -06:00
Al 99fe545ff4 Merge pull request #937 from ModOrganizer2/filetree_doubleclick_fix
Filetree double-click fix
2019-12-13 13:43:37 +01:00
Al 909e8254f7 Avoid opening folders in explorer when double-clicking on them in the filetree.
As a side effect Enter and Return no longer do anything on folders either.
2019-12-13 13:36:12 +01:00
isanae 8cf24923bb Merge pull request #936 from isanae/rc3-fixes
rc3 fixes
2019-12-12 22:50:01 -05:00
isanae 0f67ee4fcd bumped to rc3 2019-12-12 15:07:02 -05:00
isanae 26158687a8 added SS3DevProps.dll to checks 2019-12-12 14:51:42 -05:00
isanae c3c1183308 fixed alt colors in saves list for dark.qss
translated some sanity checks warnings
fixed filter list not refreshing selection correctly
2019-12-12 14:47:35 -05:00
Silarn 1d0b202ee6 Check the enum 2019-12-11 14:28:42 -06:00
Silarn 19bb86a870 Update installer status handling 2019-12-11 14:02:33 -06:00
Silarn 5a266b8e26 When cancelling a fomod extraction, don't generate an error. 2019-12-11 12:06:36 -06:00
Silarn 2001f26757 Rework filter labels to separate bracket from translation 2019-12-10 15:25:31 -06:00
Silarn 923e514b0f Change the modinfo image preview button to a toolbutton 2019-12-10 14:56:56 -06:00
isanae 29d16f879d Merge pull request #935 from isanae/default-window-size
Set default window size to 1300x800
2019-12-09 13:28:38 -05:00
isanae 930087ea92 set default window size to 1300x800 2019-12-09 13:25:04 -05:00
isanae 1769d3c1a5 Merge pull request #934 from isanae/revert-conflicts-column
Revert conflicts column compatibility code
2019-12-09 13:13:16 -05:00
isanae 8d9a62a87d moved the conflicts column back to its proper position in the enum
removed unnecessary compat code
2019-12-09 13:08:58 -05:00
isanae b9fd1092c6 Merge pull request #933 from isanae/conflicts-position-on-reset
Move the conflicts column when resetting geometries
2019-12-09 12:53:29 -05:00
Al 292cee7f6a Update readme.md 2019-12-09 18:35:51 +01:00
isanae ea6c793ce6 move the conflicts column when resetting geometries 2019-12-09 12:32:17 -05:00
isanae 2cf33e59eb Merge pull request #932 from isanae/mod-list-columns-reset
Incorrect column sizes in mod list when resetting geometries
2019-12-09 11:47:40 -05:00
isanae e1d6f6380d use paintEvent() to allow interactive resize because showEvent() is too early
bumped to rc2
2019-12-09 11:40:54 -05:00
isanae 8cf3c4a367 Merge pull request #931 from isanae/double-click-unhooked
Double click unhooked
2019-12-09 10:12:12 -05:00
isanae 37891f29ca removed dead setDefaultActivationActionForFile() 2019-12-09 10:10:41 -05:00
isanae 2bc544509c disable run hooked in filetree when mod is disabled 2019-12-09 10:07:11 -05:00
isanae 5521b12fb3 data tab: run exes unhooked by default 2019-12-09 09:52:29 -05:00
isanae 852afd1263 filetree tab: run exes unhooked by default 2019-12-09 09:34:18 -05:00
Silarn 44084bfa41 Rework column insertion to move to the intended position post-facto 2019-12-08 20:48:14 -06:00
Al a4db0db94f Add alternatingRowColors to saves and data tab. 2019-12-09 01:17:27 +01:00
Al 27c05cebd5 Change compact size for the conflicts column to be shorter since there are less flags here. 2019-12-09 00:56:10 +01:00
Silarn df54f972ff Rework logic to parse by visual index 2019-12-08 16:16:10 -06:00
Al 8c3a3e8257 Changed default behavior for "Open Previews on double click" to true
since it's probably the most desirable option.
2019-12-08 21:05:58 +01:00
isanae c9049bb072 conflicts tab: run exes unhooked by default 2019-12-08 11:33:03 -05:00
Silarn 2c59d13be6 Update transifex location 2019-12-07 19:31:20 -06:00
LostDragonist f18e4db4fb Add Xahtax as a German translator 2019-12-07 14:30:35 -07:00
isanae 31fe42a1da Merge pull request #928 from isanae/bump-rc1
Bumped to RC1
2019-12-07 04:51:28 -05:00
isanae 9d8861d92b bumped to rc1 2019-12-07 04:47:28 -05:00
LostDragonist fbe0e8008a Do not translate isa's name 2019-12-07 02:12:39 -07:00
LostDragonist eb55bea357 Move isa to lead developers 2019-12-07 02:08:57 -07:00
isanae 931fd78284 Merge pull request #927 from isanae/clickBlank
Remove unused on_clickBlankButton_clicked()
2019-12-07 02:30:17 -05:00
isanae 267985a62d removed unused on_clickBlankButton_clicked() 2019-12-07 02:29:39 -05:00
Silarn d13ea08be8 Fix mistakenly added modinfo tab ID 2019-12-06 23:18:37 -06:00
Silarn b3331ef2c0 Separate conflict flags and render them in separate columns 2019-12-06 23:12:18 -06:00
LostDragonist d42bca5bc0 Merge pull request #925 from LostDragonist/Develop
Add source game column to the download list
2019-12-06 15:49:27 -07:00
LostDragonist 2c5603092a Add source game column to the download list 2019-12-06 12:40:41 -07:00
isanae 5327974825 Merge pull request #922 from isanae/open-folders-order
Move logs back to the bottom of the list
2019-12-04 21:54:48 -05:00
isanae 317730054d moved logs back to the bottom of the list, they're not game related 2019-12-04 21:53:41 -05:00
isanae d3be45e79e Merge pull request #921 from isanae/6788-stylesheets
Deleted 6788 stylesheets, they're now dependencies in umbrella
2019-12-04 16:32:28 -05:00
isanae dd28b85ad0 deleted 6788 stylesheets, they're now dependencies in umbrella 2019-12-04 15:42:13 -05:00
isanae 9b8488fad3 Merge pull request #920 from isanae/double-click-previews
Double click previews
2019-12-04 13:30:46 -05:00
isanae 91b95d00a6 implemented previews on double-click for the data and conflicts tabs 2019-12-04 13:24:31 -05:00
isanae a0fa896e68 added open previews on double-click option
implemented for filetree
2019-12-04 13:23:02 -05:00
isanae b209a8e47f Merge pull request #919 from isanae/explore-stylesheets
Explore stylesheets
2019-12-04 13:22:29 -05:00
isanae dd6f0fed10 added explore button in the settings to open stylesheets folder
added stylesheets folder to the open folders button
moved "Open MO2 Logs folder" up to be with instance folders, removed "MO2" in the name
2019-12-04 12:00:54 -05:00
isanae 00adf2b551 Merge pull request #918 from isanae/filters-keyboard-nav
Keyboard nav for filter list, alternating row colors
2019-12-04 11:46:13 -05:00
isanae e263d3049a keyboard nav for filter list, alternating row colors 2019-12-04 11:43:36 -05:00
isanae 472aa02068 Merge pull request #917 from isanae/download-crash
Crash when starting multiple downloads with dialog boxes opened
2019-12-02 17:11:23 -05:00
isanae 8fb970faa3 fixed crash when starting multiple downloads with dialog boxes opened
fixed download manager dialog boxes not having a parent
2019-12-02 16:59:30 -05:00
isanae 3d434856ae Merge pull request #916 from isanae/tracked-filter
added "tracked on nexus" filter
2019-12-02 15:35:01 -05:00
isanae 2de015815c added "tracked on nexus" filter 2019-12-02 15:34:29 -05:00
isanae d5a4077a43 Merge pull request #915 from isanae/lock-hook-shell
Lock, hook, shell
2019-12-02 15:29:23 -05:00
isanae 3b78e436db double-click now opens files for the data tab, filetree and conflict lists 2019-12-02 15:18:55 -05:00
isanae 48fd9fd080 added "open with vfs" to the data tab
uniform order for file context menus
2019-12-02 14:50:01 -05:00
isanae 47b767ef2f added "open with vfs" to filetree 2019-12-02 14:36:09 -05:00
isanae d4172dc5f8 added "open with vfs" option to conflicts tab 2019-12-02 13:51:46 -05:00
isanae 2b4d792976 don't show the lock overlay for processes that are not hooked
starting exe from filetree is now hooked
usvfs progress dialog now on top of dialogs
2019-12-02 11:06:10 -05:00
isanae eabca00c35 Merge pull request #913 from isanae/negative-filters
Negative filters
2019-12-02 10:43:52 -05:00
isanae 3c25117fe1 three modes for separators, save state
renamed enumerators
2019-12-02 10:41:52 -05:00
isanae d2073ef2bd made all categories positive
fixed context menu sometimes appearing
2019-11-30 05:37:34 -05:00
isanae 7f4fce35f9 fixed separators option being used even without filters
changed filter list to use tristate items without selection
2019-11-30 05:23:22 -05:00
isanae 38d56ef831 fixed setting selection when checking for updates 2019-11-30 04:04:40 -05:00
isanae f080e2e25d always enable clear filter button, made it so it also removes not flags
removed "deselect filters" context menu, redundant
disable not flag menu items without selection
2019-11-30 03:39:12 -05:00
isanae 507d29a0fc fixed bad label for content categories 2019-11-30 03:29:54 -05:00
isanae a38d1723bf removed redundant categories now that there's a not filter
disabled collapsing for filter, there's already a button to hide it
2019-11-30 03:21:23 -05:00
isanae f463c54943 added context menu items so set/unset inverted flag 2019-11-30 03:02:11 -05:00
isanae ed14d5510d implemented not flag
moved stuff to CriteriaItem
fixed jumbled names in getSpecialCategoryName()
2019-11-30 02:20:18 -05:00
isanae e99dfe153c renamed filters to criteria
merged categories and content, they can be distinguished using the type
added a not flag for criteria, not used yet
2019-11-30 01:53:09 -05:00
isanae 93318a1474 moved all remaining filter stuff to FilterList
renamed some widgets
2019-11-29 23:50:33 -05:00
isanae 4bbdbb000f split filter list 2019-11-27 19:14:37 -05:00
isanae 8ea346183f renamed "Categories" frame to "Filters" 2019-11-27 17:53:26 -05:00
isanae 06bb9870dd fixed tooltips 2019-11-27 17:45:52 -05:00
isanae 9134ae6111 implemented not filter 2019-11-27 17:41:04 -05:00
isanae 17452071c9 added separators filter
changed notendorsed filter to include anything else than true
2019-11-27 17:30:30 -05:00
isanae ecaf75c453 refactored matching into one function instead of repeating them for OR and AND 2019-11-27 17:14:44 -05:00
isanae d5e38fca6b added not filter, not functional yet
fixed no mods being displayed for OR with no conditions
2019-11-27 17:05:20 -05:00
isanae fb3c15094f Merge pull request #911 from isanae/relative-path-in-exe
Allow relative paths for binaries in the executables settings
2019-11-27 16:39:27 -05:00
isanae d47fc5c973 allow relative paths for binaries in the executables settings
added SSAudioOSD.dll to checks
2019-11-27 16:37:58 -05:00
isanae aab91226b8 Merge pull request #910 from isanae/system-dir-checks
Added checks on startup for directories in program files
2019-11-27 16:06:03 -05:00
isanae 05759c4abc added checks on startup for directories in program files 2019-11-27 16:03:42 -05:00
isanae 23bfe4e9ff Merge pull request #909 from isanae/change-category-crash
Fix crash when changing categories on mods while a filter is selected
2019-11-27 15:16:58 -05:00
isanae 7f2d0e6722 fix crash when changing categories on mods when the "no categories" filter is selected 2019-11-27 15:15:27 -05:00
isanae 454c550b15 Merge pull request #908 from isanae/translate-link
Added transifex link in the settings
2019-11-27 14:24:14 -05:00
isanae 376f835edd added transifex link in the settings 2019-11-27 14:23:11 -05:00
isanae e18afba893 Merge pull request #907 from isanae/link-colors
Link colors
2019-11-27 14:19:20 -05:00
isanae 70e66802a2 changed labels that have links to new LinkLabel, removed hardcoded colors
changed the link colors on dark themes to something saner
2019-11-27 14:10:50 -05:00
isanae 892a19bfc6 Merge pull request #906 from isanae/various-fixes
Collection of small fixes
2019-11-27 12:45:55 -05:00
isanae 21cddd0ad3 changed mod name of unmanaged files from "data" to "<Unmanaged>" in the data tab and for the root item in the archives tab
log error when trying to open mod info for a managed file but the mod isn't found
2019-11-27 12:05:11 -05:00
isanae a5bd29f111 only default sort file trees if no setting was saved 2019-11-27 11:25:53 -05:00
isanae 146360542d Merge pull request #905 from isanae/cwd-fix
Fix zedit not starting
2019-11-27 10:30:02 -05:00
isanae a87874497a cwd was MO instead of binary if non was specified in the exe settings 2019-11-26 16:04:21 -05:00
isanae 9519bd6219 added open mod info to data tab context menu 2019-11-26 10:31:26 -05:00
isanae b8e1a45840 sortable filetree, remember settings 2019-11-26 10:05:48 -05:00
isanae f85478a5b4 fix sort in overwrite, remember settings
remove useless header in archives list
2019-11-26 10:00:37 -05:00
isanae 4db719a3bb don't log EPT_S_NOT_REGISTERED errors, treat it as firewall disabled 2019-11-26 09:19:36 -05:00
isanae c65fbcdb37 ignore some instance folders like "cache" and "qtwebengine" 2019-11-26 09:07:43 -05:00
isanae cde6137ca5 added loot to missing files check 2019-11-26 08:59:15 -05:00
isanae 9194bfa16b added option to hide confirmation when switching instances 2019-11-26 08:59:04 -05:00
isanae c3068ce50a added rivatuner to sanity checks
now also checks modules loaded after startup
fixed crash on w7 when checking some modules
2019-11-26 08:39:22 -05:00
isanae 2c2c47c215 log new modules being loaded after startup 2019-11-26 07:06:20 -05:00
isanae 08bf03854d removed useless logging about servers 2019-11-26 06:27:56 -05:00
isanae 637188a58b don't log md5 for any system file 2019-11-26 06:21:16 -05:00
isanae 7e1403dd28 simplified security products: don't log guids, remove duplicate entries 2019-11-26 06:18:13 -05:00
isanae e67381b4b8 log timezone 2019-11-26 06:14:13 -05:00
isanae 255f96ce7e only log crash dumps message on startup 2019-11-26 05:47:11 -05:00
isanae e845126e09 Merge pull request #904 from isanae/lock-job
Use a Job to capture all child processes
2019-11-26 04:57:20 -05:00
isanae 5fb785acee bumped to 2.2.2-alpha8 2019-11-26 04:05:11 -05:00
isanae 42fb0c6bfc ignore loot reports about disabled plugins 2019-11-26 03:50:15 -05:00
isanae a99dd1d6eb fixed timing crash when trying to update the lock ui after it was closed 2019-11-26 03:36:24 -05:00
isanae 2527d6aa87 switched to using a job object to monitor for processes so child processes can also be captured 2019-11-26 03:30:44 -05:00
isanae 36c6dfd5b8 Merge pull request #903 from isanae/loot-w7-fix
Fixes for windows 7
2019-11-25 09:28:09 -05:00
isanae bec1120693 removed calls to GetOverlappedResultEx() and SetThreadDescription(), not available on windows 7
bumped to alpha7.1
2019-11-25 09:26:46 -05:00
isanae 7380747ca9 Merge pull request #902 from isanae/loot-broom
Use the broom icon for dirty plugins
2019-11-25 05:35:37 -05:00
isanae 78ee23220f bumped to 2.2.2alpha7
use the broom icon for dirty plugins
better handling of failing to spawn loot
2019-11-25 05:31:28 -05:00
isanae 765c9667de Merge pull request #901 from isanae/loot-rework
Loot rework
2019-11-25 04:01:32 -05:00
isanae f1b621d0ba save/restore state for loot dialog 2019-11-25 03:34:51 -05:00
isanae bd191f3a71 now passes --language to lootcli 2019-11-25 03:28:27 -05:00
isanae 23e917df45 switched to overlapped io so lootcli can still be terminated even if it's not writing anything to stdout 2019-11-25 03:08:27 -05:00
isanae 0c69619dbe switched to named pipes 2019-11-25 02:10:59 -05:00
isanae 0e45044dbd fixed cancel button
debug logs, some cleanup
2019-11-25 00:47:45 -05:00
isanae 48fcf9521f removed max-width, larger dialog
removed messages in output now that there's a full report
2019-11-24 23:47:59 -05:00
isanae 64304a6368 tweaked css, finished markdown report
copy markdown.html to resources/
2019-11-24 23:23:15 -05:00
isanae 70ee786102 changed loot report to webengine with markdown support 2019-11-24 22:19:23 -05:00
isanae cd876a0f9f split loot dialog, added ui file 2019-11-24 20:11:50 -05:00
isanae f5476531ae basic html loot report 2019-11-24 19:39:26 -05:00
isanae 54b18e8815 added loot info to tooltip 2019-11-23 23:54:19 -05:00
isanae 3728db1527 removed m_ prefix from struct members
some refactoring, whitespace
2019-11-23 22:56:17 -05:00
isanae 3a085212c9 added loot report to the plugin list, not used yet
split PluginList::data() into individual functions
disabled loot message processing, will use report instead
2019-11-23 22:35:08 -05:00
isanae 5c9de17b63 rewrite of json report parsing
added json.h with some utilities
2019-11-23 22:08:53 -05:00
LostDragonist 5f165b80e8 Merge pull request #897 from LostDragonist/Develop
Sort the files when presenting them during querying info
2019-11-23 17:56:15 -07:00
LostDragonist d649a86195 Sort the files when presenting them during querying info 2019-11-23 17:53:31 -07:00
isanae 237825f5b6 emit logs for general messages
handle new json output file
2019-11-22 09:14:02 -05:00
isanae 0faf628e92 open json report button 2019-11-22 08:26:29 -05:00
isanae d05df3bb7c cancel/close button 2019-11-22 08:01:07 -05:00
isanae 8fcaea9de3 added loot log level option 2019-11-22 07:44:09 -05:00
Silarn 981c1b7739 Move all Qt deployment to main MO project 2019-11-19 14:42:50 -06:00
isanae 2b5747c19d handles changes in lootcli for a more formal communication protocol 2019-11-18 17:04:01 -05:00
isanae 27dadd0164 <li> in tooltip for information messages
rewrote json output file handling to check for errors
2019-11-18 13:32:33 -05:00
isanae 1b6dc5e0a0 moved things around 2019-11-18 11:15:09 -05:00
isanae d686a61a7a removed unused job stuff
don't emit error when the process terminates because it's cancelled
2019-11-16 23:05:24 -05:00
isanae b8eab5d248 threaded loot 2019-11-16 22:25:55 -05:00
isanae 9688f37bbe added loot output 2019-11-16 20:47:30 -05:00
isanae 272cb51483 added LootDialog, more flexible than QProgressDialog 2019-11-16 20:34:55 -05:00
isanae 838446e262 split loot stuff to loot.h/cpp, no changes in functionality 2019-11-16 19:41:17 -05:00
isanae d6c3bad01a Merge pull request #887 from isanae/spawning-and-waiting
Spawning, waiting and locking
2019-11-11 14:14:01 -05:00
isanae decd5c1828 renamed lockwidget files to uilocker 2019-11-06 07:45:04 -05:00
isanae 4f84565085 renamed LockWidget to UILocker
lock interface up to two processes
2019-11-06 07:45:03 -05:00
isanae 8f40ec0bdc threaded wait for process 2019-11-06 07:45:03 -05:00
isanae 96cc662b18 lock widget now moves between dialogs and the main window when closing dialogs 2019-11-06 07:45:03 -05:00
isanae 642ddacab8 moved LockWidget back to OrganizerCore to support having multiple locks active
moved the ui out of LockWidget into LockInterface
added LockWidget::Session to manage multi locks
2019-11-06 07:45:02 -05:00
isanae 3d0197fa5e comments 2019-11-06 07:45:02 -05:00
isanae ada2ac0cb5 removed redundant checkBinary(), which used to check for non existing binaries, that's handled when spawning
removed useless checkEnvironment(), which checked for EventLog
removed CREATE_BREAKAWAY_FROM_JOB from CreateProcess() calls, didn't do anything
fixed setFromFileOrExecutable() when running just a filename that's not an executable name
split run()
fixed lock widget being disabled when running without a ui
2019-11-06 07:45:02 -05:00
isanae 72dd230cdc removed unused files
fixed handle leak when starting steam
2019-11-06 07:45:01 -05:00
isanae 719a2f20b4 refresh ui after running an exe from 1) an external message, and 2) the data tab 2019-11-06 07:45:01 -05:00
isanae 7db5f93884 removed unused SpawnedProcess
lock widget now interprets closing the dialog as a forced unlock
2019-11-06 07:45:00 -05:00
isanae 7ebd4debee added a ForceWait flag to bypass disabled locking
merged a bunch of unnecessary functions in ProcessRunner
2019-11-06 07:45:00 -05:00
isanae 9ff8a471aa added waitForAllUSVFSProcesses() wrapper in OrganizerCore, the fact that it's in ProcessRunner is a bit of a hack 2019-11-06 07:45:00 -05:00
isanae d72e94a92f added attachToProcess(), made waitForApplication() private
changed OrganizerProxy::startApplication() so it _doesn't_ wait for completion, which is its original behaviour
2019-11-06 07:44:59 -05:00
isanae a88f9dd9a7 removed runExecutableOrExecutableFile()
log the actual spawning and requests to start as well as wait from plugins
raise the lock widget when it's a dialog
2019-11-06 07:44:59 -05:00
isanae b855754c97 removed runShortcut()
changed lock widget text when running without a ui
2019-11-06 07:44:58 -05:00
isanae 2c3079c1dc removed runExecutable() 2019-11-06 07:44:58 -05:00
isanae c8e101e19e removed runExecutableFile()
turns out on_startButton_clicked() had redundant code
2019-11-06 07:44:58 -05:00
isanae 0cea4833eb explicit refresh parameter for setWaitForCompletion(), some parts of the ui will crash if things refresh unexpectedly
removed runFile()
fixed crash when unlocking if some widgets were destroyed in the meantime
lock widget will now pick the active window and disable all top levels
2019-11-06 07:44:57 -05:00
isanae db0b92776b added lockwidget to replace all the other dialogs
rewrote ProcessRunner to have a bunch of setters and then a run()
fixed bad exit code when waiting on a process that's already completed
removed lock()/unlock() from main window, ProcessRunner is in charge of that now
2019-11-06 07:44:57 -05:00
isanae 2aa70de49e return failure if the user has unlocked in waitForApplication() 2019-11-06 07:44:56 -05:00
isanae f2cc71779f always wait until completion in waitForApplication(), regardless of lock setting 2019-11-06 07:44:56 -05:00
isanae b5a5ea1b4d recheck the process tree if the current process is not that interesting 2019-11-06 07:44:56 -05:00
isanae b05cbeed90 refactored waiting into waitForProcesses() 2019-11-06 07:44:55 -05:00
isanae 4d269c2e1a split to processrunner
added IUserInterface::qtWidget()
put back IUserInterface in OrganizerCore now that there's a way to get the widget
2019-11-06 07:44:55 -05:00
isanae 8c72077feb replaced uilock by a progress callback in spawn
waiting for process now gets the whole process tree to find an interesting process
2019-11-06 07:44:54 -05:00
isanae 18b438cf27 split to getRunningUSVFSProcesses()
simplified waitForAllUSVFSProcesses() to always get the list of running processes after one process completes
2019-11-06 07:44:54 -05:00
isanae bff5a22f48 spawning an executable now only waits for that particular process
added waitForAllUSVFSProcesses() to OrganizerCore, used when closing MO
2019-11-06 07:44:54 -05:00
isanae 8f24f6298f wait for executable when opening files 2019-11-06 07:44:53 -05:00
isanae 4e8dcc5157 moved findJavaInstallation() and getFileExecutionContext() to spawn
fixed env::get() returning garbage after value
2019-11-06 07:44:53 -05:00
isanae b60f2aa786 renamed startApplication() to runExecutableOrExecutableFile() 2019-11-06 07:42:57 -05:00
isanae e43500eaf5 renamed runExecutable() to runExecutablefile()
added runExecutable() for Executable class, also used by runShortcut()
2019-11-06 07:42:57 -05:00
isanae 4fb79cae45 renamed executeFileVirtualized() to runFile()
renamed spawnBinary() to runExecutable()
renamed spawnBinaryDirect() to spawnAndWait()
2019-11-06 07:42:56 -05:00
isanae 74631ae88e merged spawnBinaryDirect() and spawnBinaryProcess() 2019-11-06 07:42:56 -05:00
isanae d91580cc26 initial Spawner and SpawnedProcess
added steam app id to spawn parameters
removed threadHandle, unused
moved most of the stuff from OrganizerCore::spawnBinaryProcess() to Spawner
replaced m_UserInterface by m_MainWindow
2019-11-06 07:42:56 -05:00
isanae 7b3c5dcbb3 Merge pull request #885 from isanae/usvfs-parameters-mutex
Crash dump path and toString()
2019-11-06 06:36:11 -05:00
isanae 33f5b59bee added crash dump path to parameters, if a mechanism to customize it is ever created
moved toString() for log level and dump type to usvfs, which needs them for logging
2019-11-01 10:14:17 -04:00
isanae aa582ab376 Merge pull request #884 from isanae/failed-to-receive-fix
Fix for "failed to receive data from secondary instance"
2019-10-31 09:09:00 -04:00
isanae a523a0b21b make sure all the data is sent before disconnecting
don't fail if waitForReadyRead() returns false but there's data available
2019-10-31 09:06:09 -04:00
LostDragonist 70b966dc0e Improve automatic naming of new executables
When using the "Add from file..." option, the extension will be removed.
E.g., "zEdit 1.2.3.exe" will be shortened to "zEdit 1.2.3".

When using the "Add empty" option and subsequently browsing for a binary,
the complete base name will be used instead of just the base name.  E.g.,
"zEdit 1.2.3.exe" will be shorted to "zEdit 1.2.3" instead of "zEdit 1".

When using the "Add as Executable" option of the data tab, the complete
base name will be used instead of just the base name.  E.g.,
"zEdit 1.2.3.exe" will be shorted to "zEdit 1.2.3" instead of "zEdit 1".
2019-10-22 23:32:28 -05:00
LostDragonist 741893c735 Update version to 2.2.2alpha5 2019-10-19 20:46:22 -05:00
Silarn 77a9c64fda Add button in modinfo image preview to use preview plugin dialog
- Disabled if no compatible preview is found
- Now renders an image for unsupported formats instructing the user
2019-10-19 02:35:33 -05:00
LostDragonist d255be54a0 Merge pull request #878 from LostDragonist/Develop
Remove mention of 32-bit Java
2019-10-18 19:07:06 -05:00
LostDragonist 09450f744b Remove mention of 32-bit Java
MO doesn't really care about which version of Java is installed.
Saying that 32-bit Java is required is misleading.
2019-10-18 19:06:11 -05:00
LostDragonist 133dc3b7a3 Merge pull request #876 from LostDragonist/Develop
Improve selection of mod ID when querying info
2019-10-18 19:00:48 -05:00
LostDragonist e3629c193a Improve selection of mod ID when querying info
The mod ID selection was fairly unreliable when the mod author decided
to use certain values in the mod name or filename.  A filename of
"K-9 - Armor-1-2-3" would automatically set the mod ID to 9 with no
chance for the user to correct it.  Other filenames would only present
2 choices of mod ID to the user, neither being correct.

The primary intent of this change is to present the user with all the
numbers found in the filename as options for the mod ID.  This should
allow the correct mod ID to be easily chosen in all cases.
2019-10-18 14:55:33 -05:00
LostDragonist a8d329a510 Merge pull request #872 from LostDragonist/Develop
Only flag plugins as light if the game supports light plugins
2019-10-15 16:26:53 -05:00
LostDragonist c0afb8c673 Only flag plugins as light if the game supports light plugins 2019-10-15 16:24:10 -05:00
isanae ca7aba129e Merge pull request #870 from isanae/clone-fix
Fixed exe cloning
2019-10-14 08:57:07 -04:00
isanae 20c7b2f498 title wasn't always trimmed, did all sorts of weird things 2019-10-14 04:45:46 -04:00
isanae 6c881c8502 Merge pull request #869 from isanae/loot-fix
Fixed loot not being hooked, bumped to alpha 4.1
2019-10-12 19:12:56 -04:00
isanae 0b480089c3 fixed loot not being hooked
bumped to alpha 4.1
2019-10-12 19:11:46 -04:00
isanae 56ae2bc24d Merge pull request #866 from isanae/new-usvfs-parameters
Uses new usvfsParameters, also updates spawn delay
2019-10-11 09:30:46 -04:00
isanae b7d83a30de Merge pull request #867 from isanae/missing-boss-button
Fixed missing sort button
2019-10-10 11:57:25 -04:00
isanae 1aa3e1f96c visible property was false 2019-10-10 11:48:41 -04:00
isanae 324fa12a2d uses new usvfsParameters, also updates spawn delay 2019-10-10 10:25:46 -04:00
isanae 168fc950f9 Merge pull request #863 from isanae/executables-fixes
Executables fixes
2019-10-10 06:12:07 -04:00
isanae 0f5ecb8b78 Merge pull request #864 from isanae/show-usvfs-version
Added usvfs version in log and about dialog
2019-10-10 06:10:19 -04:00
isanae dfb3020f89 added usvfs version in log and about dialog 2019-10-09 01:38:53 -04:00
isanae c01e80a651 Merge pull request #858 from isanae/proper-exit
Proper exit procedure
2019-10-08 23:24:53 -04:00
isanae 4d3495b3fb theme fixes for QToolButton with a menu 2019-10-08 23:17:48 -04:00
isanae 21f55da7d3 added hide flag to executables 2019-10-08 23:03:45 -04:00
isanae de48d430ec fixed tab order
fixed list items being selected, but not focused, which broke keyboard nav
2019-10-08 19:55:44 -04:00
isanae 0ea975248b remove separators and backups from mod list in the edit executables dialog 2019-10-08 19:38:56 -04:00
isanae 52db7e8c7d initial selection in the edit executables dialog from main window 2019-10-08 19:20:08 -04:00
isanae 8bc84a1513 remove whitespace from executable names
add from binary, clone
2019-10-08 19:08:55 -04:00
isanae b4f5c17898 disallow empty titles 2019-10-07 07:41:13 -04:00
isanae 94b40b328b Merge pull request #859 from isanae/usvfs-delay-parameter
Added spawn delay setting, not exposed
2019-10-07 07:13:27 -04:00
isanae a082c029b2 added spawn delay setting, not exposed 2019-10-07 07:04:56 -04:00
isanae 3d97b0efd0 added ExitModOrganizer(), used instead of qApp->exit()
reset geometry uses TaskDialog
moved restart code for the settings dialog to MainWindow
fixed settings sometimes not being saved when restarting
don't log "crash dumps present" every time the settings dialog is closed
2019-10-07 04:27:53 -04:00
isanae 4dbd541286 Merge pull request #857 from isanae/auth-warnings
Some warnings on authentication
2019-10-07 03:28:36 -04:00
isanae f10e91528b remaining requests can be 0 if not logged in, would show incorrect throttling message
validation dialog could pop even if logged in
typos in comments
2019-10-07 03:26:20 -04:00
isanae 96c3193256 Merge pull request #856 from isanae/profile-settings-fix
Removed some ambiguous overloads for settings
2019-10-07 02:32:56 -04:00
isanae 85f1635d2d Merge pull request #855 from isanae/context-menu-log-toggle
Log toggle in context menu
2019-10-07 02:31:42 -04:00
isanae 7fae2fb9f1 Merge pull request #854 from isanae/categories-collapse-fix
Categories panel collapsing
2019-10-07 02:31:07 -04:00
isanae 97d58a17bd Merge pull request #853 from isanae/validation-progress-dialog-fixes
Validation progress dialog fixes
2019-10-07 02:28:34 -04:00
isanae c9e8e71b93 removed some ambiguous overloads for settings 2019-10-07 02:23:28 -04:00
isanae ef993a693c stop reusing the view menu, just create a new context menu with the right stuff in it 2019-10-05 14:36:07 -04:00
isanae c28d435ed4 showEvent() is called for stuff like minimizing and restoring the window, don't re-read settings for that 2019-10-05 14:17:04 -04:00
isanae 925dbcba87 at least put one message in the list when opening the dialog to avoid having an empty widget 2019-10-05 13:52:04 -04:00
isanae e7cc4774e1 don't show the progress dialog on startup until after the first failure 2019-10-05 13:47:11 -04:00
isanae 8269ac1b48 rework of the nexus key validator to allow multiple attempts before failing 2019-10-05 13:36:27 -04:00
isanae fc909d4b2e implemented cancel button on progress dialog
fixed crash when exiting MO because the dialog is destroyed in atexit(), way after Qt is gone
2019-10-05 10:41:23 -04:00
isanae 3fe54c8431 now using ui file for validation progress dialog
moved elapsed timer to NexusKeyValidator, progress dialog now just shows what the validator is doing, which allows for hiding and showing it at any time
recreate the dialog when the parent changes, avoids theme errors
2019-10-05 10:11:55 -04:00
isanae 73556ad084 Merge pull request #852 from isanae/symlinks-log-only
Symlinks warning
2019-10-05 08:55:25 -04:00
isanae 76df854483 only log a warning for symlinks instead of exiting MO
added logs: when dmp files are present, for portable instances, and the ini path
clear the log widget when switching instances
2019-10-05 08:53:31 -04:00
isanae 605b669bed Merge pull request #851 from isanae/api-visible-at-startup
Check the api setting on startup to hide it if needed
2019-10-05 08:33:07 -04:00
isanae 4921d2a0dd Merge pull request #850 from isanae/blocked-files
Blocked files
2019-10-05 08:33:01 -04:00
isanae c4d96ed8cf check the api setting on startup to hide it if needed 2019-10-05 08:30:58 -04:00
isanae 93423f6351 don't log "(no guid"), happens all the time for the windows firewall 2019-10-05 08:21:59 -04:00
isanae 1467cb9955 sanity checks: comments, more debug logging 2019-10-05 08:11:12 -04:00
isanae 897d315359 fixes for VS preview: missing namespace, missing setting() with two parameters 2019-10-05 07:38:14 -04:00
isanae 1dc3962199 changed some of blocked files logging 2019-10-05 07:05:47 -04:00
isanae 633ef81972 moved checks to sanitychecks.cpp
added check for blocked files, only logs
2019-10-05 07:05:47 -04:00
Al 8aa298b606 Merge pull request #849 from Al12rs/more-filters
Added "No valid game data" and "No Nexus ID" filters as per #295
2019-10-04 22:17:01 +02:00
Al e427dbae55 Merge pull request #847 from isanae/file-renamer-errors
FileRenamer error messages
2019-10-04 22:16:39 +02:00
Al 73541c9bb4 Merge pull request #846 from isanae/tr-archive-errors
Made extraction errors translatable
2019-10-04 22:16:17 +02:00
Al 0ff1da60b1 Merge pull request #845 from isanae/plugin-tooltips
Tooltips in plugin list
2019-10-04 22:15:49 +02:00
Al 49e19c8185 Added "No valid game data" and "No Nexus ID" filters as per #295 2019-10-04 17:18:06 +02:00
isanae daa0b4b339 forgot one tr() 2019-10-04 10:47:42 -04:00
isanae c4dd23abb7 added error messages to FileRenamer and a few more
fixes for shell functions changing names
2019-10-04 09:40:37 -04:00
isanae 88ff7bb372 made extraction errors translatable 2019-10-04 07:45:59 -04:00
isanae c17b0829dc emblemes -> emblems 2019-10-04 07:14:30 -04:00
isanae 27aec50c25 added tooltip for flags, reworded those copy/pasted from the mod list 2019-10-04 07:11:50 -04:00
isanae 2fe50f2ff3 Merge pull request #842 from isanae/dialog-settings
Dialog settings
2019-10-04 06:30:15 -04:00
isanae 239cfbe685 explicit tab order, seems to fix hang when switching tabs 2019-10-04 06:29:23 -04:00
Al e6a47bf8b7 Preemptively bump version to alpha build 3 so I don't forget next time. 2019-10-03 01:20:38 +02:00
isanae 75941afd34 fixed checkboxes not being set when opening the settings dialog 2019-10-02 18:28:31 -04:00
Al 17ebbc30c5 Set Plugins tab as default tab again after last commit. 2019-10-02 23:35:51 +02:00
Al b389161077 Made categories section (filters) resizable via a splitter. Correctly handled hiding and unhiding as well as saving the state between sessions. 2019-10-02 23:06:35 +02:00
Jeremy Rimpo ae55d08041 Capitalize the org name 2019-10-01 14:32:46 -05:00
Chris Djali de8b2883ed Add link to new DDS preview plugin 2019-10-01 12:58:40 +01:00
LostDragonist 8e3af100f9 Fix help text for optional ESP deactivate button 2019-09-28 17:01:42 -05:00
LostDragonist a7afc1664c Merge pull request #844 from LostDragonist/Develop
Fix md5 hashing for large download files
2019-09-28 08:13:42 -05:00
LostDragonist 4fe267b6b4 Fix md5 hashing for large download files
Previously, the md5 hashing was broken for download files larger
than about 2GB.  This was due to the maximum size of a QByteArray.
The hashing was broken up into 10MB chunks to correct this issue.

Additionally, a progress bar was added as hashing large files would
lock up the GUI.
2019-09-28 08:11:29 -05:00
isanae ec48a6d796 a few comments for ColorTable 2019-09-27 15:26:00 -04:00
isanae 51d664d76c moved color stuff to ColorTable, now shows sample text and icons 2019-09-27 15:20:02 -04:00
isanae 5d74bd3789 refactored addLanguages() a bit
changed some of the tooltips
2019-09-25 19:32:53 -04:00
isanae 8237a1c47f use QStyleFactory to get default styles instead of hardcoding them
don't display extensions in style combobox
2019-09-25 18:39:37 -04:00
isanae 01b2a8201d replaced color buttons by a QTableWidget 2019-09-25 18:24:08 -04:00
isanae 088f27fe48 changed the layout of the general settings tab
added option to disable checking for updates
removed online check, just try it and see
2019-09-23 19:10:19 -04:00
isanae 200b5283eb added center dialogs option
moved download list options to their own group box
renamed confusing "Download Meta Information" to "Show Meta Information"
2019-09-23 18:21:39 -04:00
isanae 829124d8b8 ensure windows are on screen 2019-09-23 17:52:46 -04:00
Al d0099f577e Changed label of executable dialog to be more clear about application icons. 2019-09-23 17:40:09 +02:00
isanae 5044a6cd2c Merge pull request #839 from isanae/even-more-logging
Even more logging
2019-09-22 15:14:53 -04:00
isanae c1a5f2ef73 refactored getSecurityProductsFromWMI() to stop using a lambda
security products now only need a guid, handles failures better
2019-09-21 21:27:45 -04:00
isanae 2feaed68b4 missing period 2019-09-20 01:19:01 -04:00
isanae b455659114 registry details when steam fails to start
typos
2019-09-20 00:45:22 -04:00
isanae 54871e7b56 added details to blacklist dialog 2019-09-19 17:14:09 -04:00
isanae 94b0c46342 TaskDialog for blacklisted, with button to change the blacklist 2019-09-19 17:10:30 -04:00
isanae cbfd3692ce TaskDialog for event log not running 2019-09-19 16:41:36 -04:00
isanae f92e2c376d TaskDialog for restarting as admin for steam
added a parent widget parameter to a bunch of places
fixed paths still getting changed even if folders can't be created
made private the member variables that were temporarily public during rework
2019-09-19 16:27:41 -04:00
isanae 9bac57e3e8 steam confirmation now using TaskDialog
fixed dialog choices not remembering files
2019-09-19 15:03:03 -04:00
isanae a5db7ed864 added Settings::isExecutableBlacklisted()
moved blacklisted confirmation to dialogs
2019-09-19 11:23:21 -04:00
isanae 8bc67a86d6 moved event log warning to dialogs 2019-09-19 11:17:52 -04:00
isanae c1ab18b614 moved the content of checkService() to env::getService(), refactored it 2019-09-19 11:14:14 -04:00
isanae c50722100c removed helper.h and helper.cpp, merged into spawn 2019-09-19 10:11:56 -04:00
isanae c603681115 moved helper stuff to spawn so it can reuse error handling
removed unused helper::init()
removed logging when deleting a credential that doesn't exist, happens all the time
2019-09-19 10:07:52 -04:00
LostDragonist f69559fe0b Update version to 2.2.2alpha1 2019-09-18 15:31:43 -05:00
LostDragonist 7f857711ce Merge pull request #837 from LostDragonist/Develop
Add translation to "New Executable"
2019-09-17 00:21:48 -05:00
LostDragonist ea20335240 Add translation to "New Executable" 2019-09-17 00:19:12 -05:00
LostDragonist 795d47e6ab Merge pull request #836 from LostDragonist/Develop
Automatically fill in the name of new executables
2019-09-17 00:08:58 -05:00
LostDragonist 1fec9da2d3 Automatically fill in the name of new executables
When the binary browse button is used to select a binary, this
will use the binary name to fill in the executable name if the
previous executable name stated with "New Executable".
2019-09-17 00:08:11 -05:00
LostDragonist 11bf4499c0 Merge pull request #835 from LostDragonist/Develop
Add placeholder text to notification dialog
2019-09-16 18:12:50 -05:00
LostDragonist 0ecac8f4c4 Add placeholder text to notification dialog
A lot of new users miss the fact you can click on a notification
to get more details about that notification.  This directs them
to click on stuff.
2019-09-16 16:45:11 -05:00
LostDragonist 0d6eb8bd4c Merge pull request #831 from LostDragonist/portable_lock
Add portable lock feature
2019-09-16 16:32:37 -05:00
isanae 09b95e3943 moved all spawn dialogs into a namespace
starting steam with spawn() instead of QProcess
dialogs for bad steam registry key and failure
refactored credentials code, added logging
add environment variables to env
2019-09-13 15:15:18 -04:00
isanae b867b0bccd refactored steam handling 2019-09-12 03:49:17 -04:00
isanae ac6bc5fd01 testForSteam() now uses env to get processes
moved processes from env.cpp to envmodule.cpp, merged what crash dumps did with what was in testForSteam()
2019-09-12 02:45:03 -04:00
isanae bf3d752780 made SpawnParameters public, changed to Qt types
removed 'suspended', not used
2019-09-12 01:48:48 -04:00
isanae 971cecf343 split spawnBinaryProcess() into spawn, no changes 2019-09-12 01:09:40 -04:00
isanae 0015a12cf8 rewritten spawn() to use std::wstring instead of manual buffers
error dialogs now use TaskDialog with more user-friendly text
2019-09-11 23:36:13 -04:00
isanae 06218502ed fixes for ExpanderWidget
removed dead code in MainWindow
2019-09-11 23:34:54 -04:00
isanae 09f98576e8 added env::getFileSecurity()
Environment gets stuff on demand
2019-09-11 23:33:23 -04:00
isanae 9c59c739d4 moved ExpanderWidget to uibase 2019-09-11 23:32:32 -04:00
LostDragonist 4d9c1db885 Add portable lock feature
If the file "portable.txt" is present in the application directory,
MO will force itself to be launched as a portable instance.  The
change game button and menu item are hidden to prevent the user
from changing out of the portable instance.
2019-09-11 11:45:32 -05:00
isanae 61956802b1 now logs in utc, added year to avoid confusion 2019-09-09 04:24:12 -04:00
isanae 635c0b7a06 log line and line number when there's an error with the locked order file 2019-09-09 03:24:09 -04:00
isanae 12e1a91e4f log desktop geometry
log more info on game plugin
2019-09-09 01:32:12 -04:00
isanae e08e605c85 added missing include guards
log free space on drives involved in paths
2019-09-09 01:32:12 -04:00
isanae 99fdbb2539 Merge pull request #830 from isanae/settings-interface
Settings interface
2019-09-09 01:25:01 -04:00
isanae d863e62c6e really remove ask_for_nexuspw, the 2.2.0 update code was using the wrong section 2019-09-08 08:09:38 -04:00
isanae da212968ca change the old servers map while processing updates instead of on-demand
statusbar_visible is not used anymore
2019-09-08 03:10:43 -04:00
isanae 4df40baea6 clean up old settings when updating 2019-09-08 01:23:17 -04:00
isanae c9397c3909 more documentation for settings
removed unused automaticLoginEnabled()
2019-09-08 00:53:10 -04:00
isanae 2a2af36a38 documentation for settings
renamed some PluginSettings members and moved them around
2019-09-08 00:27:45 -04:00
isanae 7f0fa1069f don't log widget and geometry setting changes
fixed mod info dialog tab order using different settings for read and write
mod info dialog now doesn't complain when no tab order exists in the settings
only remove section when the array is larger, prevents logging changes when nothing actually changed
2019-09-02 16:09:31 -04:00
isanae 209c27c7a2 only remove section when the array is larger, prevents logging changes when nothing actually changed
changed back section names that were originally lowercase, arrays end up in two different sections
2019-09-02 15:47:21 -04:00
isanae 3757aa3f53 split into settingsutilities 2019-09-02 15:07:35 -04:00
isanae e9dba260cb split settings into a bunch of classes
removed "get" from the getters that had it
2019-09-02 14:52:02 -04:00
isanae ec3fb7b350 removed duplicate useProxy()
use dedicated functions to set, get or remove settings, allows for logging
2019-09-02 12:56:50 -04:00
isanae 57bef2ab8d removed directinterface 2019-09-02 09:38:21 -04:00
isanae ca2a7da3f6 moved workarounds to settings 2019-09-02 09:35:11 -04:00
isanae a174d4a2aa moved plugins to settings 2019-09-02 09:22:45 -04:00
isanae 8708265f69 moved setting paths to Settings 2019-08-26 04:52:15 -04:00
isanae 2eee72da68 moved code for byte sizes and speed to uibase
added scoped classes for QSettings groups and arrays
servers logged on startup
2019-08-26 04:21:06 -04:00
isanae c42e5fb2fe changed total speed and count to a list of the last 5 downloads
existing servers now merged when retrieving the download links
download manager doesn't store the servers any more, queries the settings every time
2019-08-26 03:01:55 -04:00
isanae 896d80d02c server settings converted to array instead of byte array map
moved cleanup to ServerList
2019-08-26 01:31:56 -04:00
isanae aff3ee8fcf moved preferred servers into ServerList 2019-08-26 01:07:03 -04:00
isanae 36dbb4bad7 ServerList instead of a QList of ServerInfo
changed preferred to an int
moved all server settings to Settings
2019-08-26 00:48:25 -04:00
isanae 7395fbb754 made ServerInfo a class
moved server functions together in Settings
2019-08-26 00:21:41 -04:00
isanae b1687380c5 moved more nexus stuff to settings
settings tab remembered
2019-08-26 00:01:07 -04:00
isanae 4f1b15f0a1 changed crash dump type to use enum instead of int
added ColorSettings
settings dialog general and diag tabs don't use qsettings anymore
removed logging of setting changes, will be added back to Settings class
2019-08-24 16:07:07 -04:00
isanae baa32b99f5 finished moving mod info dialog directinterface to settings 2019-08-24 13:10:50 -04:00
isanae 0f712305c8 added settings for QTabWidget, checkable QAbstractButton and ExpanderWidget
removed directInterface() from mod info conflicts
2019-08-24 13:04:10 -04:00
isanae 2ffad7edf2 made member variables in SettingsTab private, added accessors
SettingsDialog now uses GeometrySaver
2019-08-17 13:20:53 -04:00
isanae dfa15218f3 passes callbacks to QuestionBoxMemory so it doesn't access the ini directly
fixed selected executable being empty after closing the edit dialog
put backup_install inside Settings
2019-08-17 12:42:27 -04:00
isanae 7cc5f22052 put tutorials in the settings
finished moving endorsement to settings
2019-08-17 08:27:13 -04:00
isanae d9cb15f1d1 put endorsement state and first start in settings 2019-08-17 07:42:37 -04:00
isanae 965eccb328 merged DockFixer into GeometrySettings
added combobox index to settings
2019-08-16 10:29:42 -04:00
isanae 0374291a34 StatusBar now inherits from QStatusBar to handle hide/show events
merged settings into saveVisibility() and restoreVisibility()
call MainWindow::storeSettings() earlier so widget visibility is still valid
2019-08-16 09:00:31 -04:00
isanae a5cb39aaf4 moved all geometry save, restore and reset to GeometrySettings
changed reset button in settings to restart immediately
2019-08-16 08:02:14 -04:00
isanae 3f487a5a6c merged toolbars into restoreToolbars() and saveToolbars()
added centerOnMainWindowMonitor(), now also used by validation dialog
added overloads for splitter, used by main splitter
fixed saveState() for QMainWindow calling the wrong function
2019-08-16 07:03:52 -04:00
isanae 799ddb1b24 added GeometrySaver
removed widget-specific functions in GeometrySettings, now using generic functions in Settings
removed some unused member variables in MainWindow
2019-08-16 06:03:05 -04:00
isanae 73626b2979 Merge pull request #817 from erri120/patch-1
Updated string of the hideAPICounterBox
2019-08-15 03:52:37 -04:00
erri120 3ca0a9fe1e Updated string of the hideAPICounterBox
The api counter box is in the bottom right corner since the last update. This change reflects that.
2019-08-14 15:38:31 +00:00
isanae 4d4f25d177 moved getting and setting executables to Settings 2019-08-05 13:10:21 -04:00
isanae ab14a8bac3 moved recent directories to Settings
use global cache variable instead of an instance inside a function
2019-08-04 07:51:12 -04:00
isanae 89415ca5c3 moved geometry handling to PreviewDialog
fixed dialogs not having a parent
2019-08-04 07:32:12 -04:00
isanae 4c6ccb3845 geo already saved by ListDialog 2019-08-04 07:20:30 -04:00
isanae ea3840a39d removed registerWidgetState(), was used just for header list headers, now saved and restored directly 2019-08-04 07:14:06 -04:00
isanae f387a670d1 moved mod list stuff to setupModList(), no changes 2019-08-04 06:58:15 -04:00
isanae 3d86f150ca moved geometry handling to ProblemsDialog and CategoriesDialog 2019-08-04 06:30:37 -04:00
isanae 61ad96cb54 moved geometry handling to ListDialog 2019-08-04 06:09:48 -04:00
isanae 37502f3884 removed convertVariant(), turns out value() does it
separator colors to settings
2019-08-04 06:09:48 -04:00
isanae cc3a16c6e9 moved geometry handling to mod info and overwrite dialogs 2019-08-04 06:09:48 -04:00
isanae 7eed0450e8 moved geometry handling to ProfilesDialog 2019-08-04 06:09:48 -04:00
isanae e40245abf4 moved geometry handling to EditExecutablesDialog itself 2019-08-04 06:09:48 -04:00
isanae e4418b95fa moved settings updates to Settings::processUpdates() 2019-08-04 06:09:48 -04:00
isanae 07f1ac7a96 split into GeometrySettings
removed most of storeSettings() from OrganizerCore: QSettings handles saving by itself, no need for that
removed topLevelSplitter from ui, unused since the log widget is in a dock
removed QSettings from MainWindow::readSettings()
replaced return values for some of the new getters in Settings to std::optional
2019-08-04 06:09:48 -04:00
isanae b6b01a52db removed mentions of QSettings from main.cpp
added necessary member functions in Settings
2019-08-04 06:09:47 -04:00
isanae a7df11a31d Merge pull request #808 from isanae/settings-rework
Settings rework
2019-08-03 09:31:19 -04:00
Jeremy Rimpo 80dd9222f3 Merge pull request #809 from isanae/logging-fixes
Logging fixes
2019-08-02 13:36:32 -05:00
isanae 5e98855847 create log directory sooner to handle creating new instances
reset the log file in case MO is restarted and the previously selected instance is deleted
switched back to single `mo_interface.log` file
2019-08-02 07:01:06 -04:00
isanae 712c8687c2 changed old whatsthis for prerelease
apparently, QFontMetrics::width() is deprecated
2019-08-02 05:33:57 -04:00
isanae 4099efcb5b rebased to new logging 2019-08-02 03:06:59 -04:00
isanae ee43c40598 removed obsolete load mechanisms 2019-08-02 03:06:59 -04:00
isanae a05862aaa1 cleaned up includes
removed commented out code
reordered member functions in Settings
2019-08-02 03:06:59 -04:00
isanae 107b396902 moved tabs to SettingsDialog
removed Settings::query(), main window now deals with SettingsDialog directly
2019-08-02 03:06:59 -04:00
isanae e8d7930eda split diagnostics tab
fixed log and crash dump directory links in label not working
2019-08-02 03:06:59 -04:00
isanae e4dcdb01ac split workarounds tab 2019-08-02 03:06:59 -04:00
isanae 55eafd62dd split plugins tab 2019-08-02 03:06:58 -04:00
isanae d91d0caba5 removed incorrect warning that steam password is unencrypted
split steam tab
2019-08-02 03:06:58 -04:00
isanae af95b3b863 renamed tab classes, clashing with mod info dialog
split nexus tab
2019-08-02 03:06:58 -04:00
isanae 0a5ce34b1a split paths tab 2019-08-02 03:06:58 -04:00
isanae 6b5c9675ae moved SettingsTab out of Settings
split general tab
2019-08-02 03:06:58 -04:00
Jeremy Rimpo cff526415d Merge pull request #807 from isanae/logging-rework
Logging rework
2019-08-02 01:49:33 -05:00
Jeremy Rimpo bdf45aea69 Merge pull request #806 from ModOrganizer2/qt-5.13
Qt 5.13
2019-08-02 00:33:02 -05:00
isanae e4cf2c314d missing bracket 2019-08-01 22:50:42 -04:00
isanae 9aa7a5a366 renamed log actions 2019-07-22 07:39:53 -04:00
isanae 6f1a8f5b7a added clear option to log list 2019-07-22 07:39:53 -04:00
isanae 3c7712a32d moved setLogLevel() to OrganizerCore
moved context menu to LogList
2019-07-22 07:39:53 -04:00
isanae 5304d52f93 removed some useless logging
initializing usvfs logging now logs strings for log level and crash dump type
2019-07-22 07:39:53 -04:00
isanae f49efd6d44 replaced formatSystemMessageQ() with formatSystemMessage()
replaced windowsErrorString() with formatSystemMessage()
2019-07-22 07:39:52 -04:00
isanae b3d0ddb0b7 changed qDebug() to log::debug()
removed some commented out logging
2019-07-22 07:39:52 -04:00
isanae e071dfdfaa changed qCritical() to log::error()
removed now unused vlog()
2019-07-22 07:36:38 -04:00
isanae aae6d6a5aa replaced qWarning() 2019-07-22 07:34:53 -04:00
isanae f13f5e21c4 replaced qInfo() with log::info() 2019-07-22 07:33:38 -04:00
isanae d8760ed8ad refactored Metrics and Display, no change in functionality 2019-07-22 07:33:38 -04:00
isanae b2a1e1391f split env 2019-07-22 07:33:38 -04:00
isanae f95479b981 log guid for security products 2019-07-22 07:33:38 -04:00
isanae c84240b759 only display "inactive" for security products 2019-07-22 07:33:38 -04:00
isanae 20ac714bf8 fixed bad compare for nahimic
log displays on startup
2019-07-22 07:33:38 -04:00
isanae 2ef32d1230 moved environment dump to member function
added check for nahimic
2019-07-22 07:33:38 -04:00
isanae 35ae099d3f check for files likely to be eaten by an AV on startup 2019-07-22 07:33:38 -04:00
isanae eb190380e3 dump executables on startup 2019-07-22 07:33:38 -04:00
isanae 28c46eed91 reversed log level menu actions to fit settings combobox
replaced qWarnings() and qCritical()
2019-07-22 07:33:38 -04:00
isanae 3bf7717c0a moved Settings out of OrganizerCore so it can be created by itself to access settings early
set log level on startup
replaced more qDebug()
2019-07-22 07:33:38 -04:00
isanae 4dfaa363c0 logging initialized early, log file set later
replaced a few qDebug()
2019-07-22 07:33:38 -04:00
isanae ad77e315f5 moved Console to util 2019-07-22 07:33:38 -04:00
isanae bca6283311 use log::Levels instead of ints
create log level combobox in code, set selected index based on value instead
added log level to context menu in log list
2019-07-22 07:33:37 -04:00
isanae d1b4dec8ad moved setup to new LogList class 2019-07-22 07:33:37 -04:00
isanae 6217f910f0 renamed logbuffer files to loglist 2019-07-22 07:33:37 -04:00
isanae 54d98e2917 removed unused or redundant stuff in error_report.h
renamed log() to vlog() for now
extracted console creation to Console class
rewrote LogBuffer to work with logging from uibase, renamed to LogModel
added fmt dependency
2019-07-22 07:33:37 -04:00
isanae bc9f286bce moved the log to a dock widget
added a menu item in the view menu for it
2019-07-22 07:32:56 -04:00
Jeremy Rimpo 1f1b838c2b Merge pull request #796 from isanae/login-progress-dialog
Nexus login progress dialog and Nexus settings
2019-07-22 01:02:21 -05:00
isanae 2d78957c3d changed message when opening browser 2019-07-14 17:20:53 -04:00
isanae b69b3e5e47 removed already commented out code:
don't resend the guid and token, nexus never answers with the api key, just create a new request every time
2019-07-12 03:24:05 -04:00
isanae 45daaec7aa removed useless flags, they were only used by settings 2019-07-12 03:09:03 -04:00
isanae 45f0a9e78a nexus info and stats in settings
cleaned up double logging for github
reset validation progress dialog parent just before the main window dies
removed unused APIStats from APIUserAccount, added isValid()
2019-07-12 02:46:31 -04:00
isanae be1ee2a97c refactored state messages 2019-07-11 05:49:12 -04:00
isanae 226372dba2 api key validator in settings 2019-07-11 05:33:35 -04:00
isanae c0a52bc1ca extracted api key validator from NXMAccessManager
api key now part of ApiUserAccount
2019-07-11 05:06:42 -04:00
isanae ad29525e98 moved NexusSSOLogin to nxmaccessmanager
added logs for manual key validation, will need to rewrite a few things
2019-07-11 02:31:59 -04:00
isanae 5e5681709a reworked the nexus connection panel
moved most of the stuff into a new NexusSSOLogin class
2019-07-11 01:55:31 -04:00
isanae f44663d795 handle context menu on pending downloads 2019-07-10 21:43:31 -04:00
isanae fa66028161 dialog should be on the heap, gets deleted by the main window 2019-07-10 20:45:37 -04:00
isanae d9003f9e54 made ValidationProgressDialog a QDialog to handle close events
allow hiding dialog and make it appear again if needed
don't use an event loop in validated(), it causes all sorts of problems because it can be reentrant if another logged in action is done while the dialog is visible
2019-07-10 20:45:37 -04:00
isanae 89d0528a00 progress dialog now shows elapsed time in progress bar 2019-07-10 20:45:37 -04:00
isanae ea7ad772bb moved progress dialog to its own class 2019-07-10 20:45:37 -04:00
isanae c38e864c92 set the progress dialog's parent to main window as soon as it's available 2019-07-10 20:45:37 -04:00
isanae 724945ab33 removed useless validationFailed() callback in MainWindow
moved the log that was in it to organizer core
2019-07-10 20:45:37 -04:00
Silarn 2b213fe7ce Merge branch 'Develop' into qt-5.13 2019-07-08 13:22:25 -05:00
Silarn d2a8890e74 Merge branch 'Develop' into qt-5.13 2019-07-05 18:40:03 -05:00
Silarn 5feff2f997 Merge remote-tracking branch 'origin/Develop' into qt-5.13 2019-07-05 16:28:33 -05:00
Silarn 9a795c3ce9 Merge remote-tracking branch 'origin/Develop' into qt-5.13 2019-07-04 23:14:39 -05:00
Silarn 7879ea2c62 Fix issue if widget isn't on a window 2019-07-04 15:09:49 -05:00
Silarn ccc0653ca1 Merge branch 'Develop' into qt-5.13 2019-07-03 21:29:22 -05:00
Silarn 3a2f056e8a More refactoring 2019-07-03 14:12:38 -05:00
Silarn aa9a1fc07f Refactor obsolete methods 2019-07-03 13:04:27 -05:00
369 changed files with 39880 additions and 33224 deletions
@@ -0,0 +1,27 @@
---
name: Game support Request
about: Request support for a new game
title: Add support for game [GAME NAME]
labels: 'additional games support, Feature Request, area: mo2 game plugins'
assignees: ''
---
**This template is useful to add basic support using https://github.com/ModOrganizer2/modorganizer-basic_games.**
**If you are vaguely familiar with programming you can try following the instructions on that link to get something working yourself. If you have trouble with that please fill in this template.**
**Please provide the following information for the game (remove the optional lines you do not use):**
- **Name:** Name of the game
- **Short name:** Name of the game in Nexus URL (e.g. skyrimse for Skyrim SE).
- **Nexus ID [optional]:** ID of the game on Nexus (you can usually find this in Nexus URL).
- **Executable:** Name of the main executable for the game (relative to the game folder).
- **Launcher [optional]:** Name of the game launcher (relative to the game folder).
- **Data path:** Path to the data folder of the game (relative to the game folder).
- **Documents path:** Path to folder containing INI files, etc., for the game (usually under "My Games", or the game folder itself).
- **Saves directory [optional]:** Path to the folder containing save games (this default to the path above).
- **Save extension [optional]:** Extension of the saves
- **Steam ID [optional]:** ID of the game on Steam (if the game is on Steam).
**Provide additional details regarding the game that could be required for the plugin.**
+3 -2
View File
@@ -28,10 +28,11 @@ If necessary, describe the problem you have been experiencing with more details
## Link to Mod Organizer logs:
To access the log files you can press the Open folder icon over the modlist and select "Open MO2 Logs folder". You should close MO2 before sending or examining the logs as they are finished writing only after the program is closed.
Right click on the log window at the bottom of MO2, set log level to debug, restart Mo2 and reproduce the problem.
To access the log files you can press the Open folder icon over the modlist and select "Open MO2 Logs folder".
### USVFS:
Create a [GIST](https://gist.github.com) which is a paste of your USVFS logs, and link them here.
Create a [GIST](https://gist.github.com) which is a paste of your latest USVFS log, and link them here.
Do _NOT_ paste your full USVFS logs here, as it will make this issue very long and hard to read!
If you are reporting a bug, _always_ include the USVFS logs!
+1
View File
@@ -13,3 +13,4 @@ edit
/*std*.log
/*build
/src/version.aps
+16 -29
View File
@@ -1,33 +1,20 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.16)
ADD_COMPILE_OPTIONS($<$<CXX_COMPILER_ID:MSVC>:/MP> $<$<CXX_COMPILER_ID:MSVC>:$<$<CONFIG:RELEASE>:/O2>> $<$<CXX_COMPILER_ID:MSVC>:$<$<CONFIG:RELWITHDEBINFO>:/O2>>)
project(organizer)
set(project_type exe)
set(executable_name ModOrganizer)
set(enable_warnings OFF)
PROJECT(organizer)
# sets ModOrganizer as StartUp Project in Visual Studio
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY VS_STARTUP_PROJECT "ModOrganizer")
set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
set(CMAKE_INSTALL_MESSAGE NEVER)
SET(DEPENDENCIES_DIR CACHE PATH "")
# hint to find qt in dependencies path
LIST(APPEND CMAKE_PREFIX_PATH ${QT_ROOT}/lib/cmake)
LIST(APPEND CMAKE_PREFIX_PATH ${LZ4_ROOT}/dll)
ADD_SUBDIRECTORY(src)
set(vcxproj_user_file "${CMAKE_CURRENT_BINARY_DIR}/INSTALL.vcxproj.user")
if(NOT EXISTS ${vcxproj_user_file})
FILE(WRITE ${vcxproj_user_file}
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n"
"<PropertyGroup>\n"
"<LocalDebuggerWorkingDirectory>${CMAKE_INSTALL_PREFIX}/bin</LocalDebuggerWorkingDirectory>\n"
"<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>"
"<LocalDebuggerCommand>${CMAKE_INSTALL_PREFIX}/bin/ModOrganizer.exe</LocalDebuggerCommand>\n"
"</PropertyGroup>\n"
"</Project>\n")
# appveyor does not build modorganizer in its standard location, so use
# DEPENDENCIES_DIR to find cmake_common
if(DEFINED DEPENDENCIES_DIR)
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/project.cmake)
else()
include(../cmake_common/project.cmake)
endif()
INSTALL(FILES dump_running_process.bat DESTINATION bin)
set(additional_translations ${uibase_path}/src)
add_subdirectory(src)
install(FILES dump_running_process.bat DESTINATION bin)
+56 -19
View File
@@ -1,32 +1,69 @@
version: 1.0.{build}
version: dev-appveyor{build}
skip_branch_with_pr: true
image: Visual Studio 2019
init:
- ps: >-
# define build version depending on nightly or normal build
if($env:APPVEYOR_SCHEDULED_BUILD -eq 'True'){
$timestamp= Get-Date -Format "ddMMyyyy-HHmm"
Update-AppveyorBuild -Version "$($env:MO_VERSION)$($env:VER_STUB_NIGHTLY)$timestamp"
} else {
Update-AppveyorBuild -Version "$($env:MO_VERSION)$($env:VER_STUB_NORMAL)$($env:APPVEYOR_BUILD_NUMBER)"
}
Write-Host Build version set to: $env:APPVEYOR_BUILD_VERSION
environment:
WEBHOOK_URL:
secure: gOKbXaZM9ImtMD5XrYITvdyZUW/az082G9OIN1EC1VYoNNsKROB4s6VsQiL6qbLNLc4XQhc8Y9DhdU9Hfh49vhypcjUEQmMsENxnp+1hYMJctTqIYDunVSd767eez5wz6rKHqk+XOHmg5gyVNCV9u4DVcCZJSVe4UTKn1lc47H0=
build:
parallel: true
secure: gOKbXaZM9ImtMD5XrYITvdyZUW/az082G9OIN1EC1VaKiI9iefpxhBavJ6Al6CzIZvQ+3pxnLqjmNgA7cDc22wcj2kB4hSG5qhbTI8wGa8jLQ5L65nuRZ3vrIqghBz9G3GLglgZkg6eqH9r3Kqc6UzcpCGzxxPOqm550nRcIiUU=
MO_VERSION: 2.3.0
VER_STUB_NORMAL: dev-appveyor
VER_STUB_NIGHTLY: dev-nightly-
build_script:
- cmd: >-
git clone --depth=1 --branch=%APPVEYOR_REPO_BRANCH% https://github.com/ModOrganizer2/modorganizer-umbrella.git c:\projects\modorganizer-umbrella 2> $null
REM Maintenance comments:
REM APPVEYOR_BUILD_FOLDER= "c:\projects\modorganizer-slug"
REM -Need to update py3 version used to invoke unimake.py once in a while.
REM -Need update MO_VERSION env variable after each release.
REM -Always clones umbrella master
REM -Will checkout all the branches matching the one that triggered the build on the main repo.
REM End comments.
git clone --depth=1 https://github.com/ModOrganizer2/modorganizer-umbrella.git c:\projects\modorganizer-umbrella 2> $null
mkdir %APPVEYOR_BUILD_FOLDER%\modorganizer-build -type directory
mkdir c:\projects\modorganizer-build -type directory
cd c:\projects\modorganizer-umbrella
C:\Python37-x64\python.exe unimake.py -d c:\projects\modorganizer-build -s Appveyor_Build=True %APPVEYOR_PROJECT_NAME%
C:\Python38-x64\python.exe unimake.py -d %APPVEYOR_BUILD_FOLDER%\modorganizer-build -s Appveyor_Build=True -s Feature_Branch=%APPVEYOR_REPO_BRANCH% -s override_build_version=%APPVEYOR_BUILD_VERSION%
test: off
artifacts:
- path: build\src\ModOrganizer.exe
name: modorganizer_exe
- path: build\src\ModOrganizer.pdb
name: modorganizer_pdb
- path: '\modorganizer-build\install\bin'
name: Mod.Organizer-$(APPVEYOR_BUILD_VERSION)
- path: '\modorganizer-build\install\pdb'
name: PDBs-Mod.Organizer-$(APPVEYOR_BUILD_VERSION)
deploy: off
on_success:
- ps: Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
- ps: Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
- ps: ./send.ps1 success $env:WEBHOOK_URL
- ps: >-
Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
./send.ps1 success $env:WEBHOOK_URL
on_failure:
- ps: Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
- ps: Push-AppveyorArtifact ${env:APPVEYOR_BUILD_FOLDER}\stdout.log
- ps: Push-AppveyorArtifact ${env:APPVEYOR_BUILD_FOLDER}\stderr.log
- ps: Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
- ps: ./send.ps1 failure $env:WEBHOOK_URL
- ps: >-
Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
./send.ps1 failure $env:WEBHOOK_URL
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="FileTreeItem"><DisplayString>{{
file={m_wsFile}
dir={m_isDirectory}
origin={m_originID}
flags={m_flags.i}
loaded={m_loaded}
expanded={m_expanded}
}}</DisplayString></Type>
</AutoVisualizer>
+42 -37
View File
@@ -1,4 +1,4 @@
[![Build status](https://ci.appveyor.com/api/projects/status/23qmd9rufv9vpmg7?svg=true)](https://ci.appveyor.com/project/Modorganizer2/modorganizer)
[![Build status](https://ci.appveyor.com/api/projects/status/hxenwxmpaob5xung?svg=true)](https://ci.appveyor.com/project/ModOrganizer2/modorganizer-736bd)
# Mod Organizer
@@ -43,44 +43,49 @@ MO2 consists of multiple repositories on github. The Umbrella project will downl
Here is a complete list:
* https://github.com/LePresidente/cpython-1
* https://github.com/Modorganizer2/githubpp
* https://github.com/Modorganizer2/modorganizer
* https://github.com/Modorganizer2/modorganizer-archive
* https://github.com/Modorganizer2/modorganizer-bsatk
* https://github.com/Modorganizer2/modorganizer-bsa_extractor
* https://github.com/Modorganizer2/modorganizer-check_fnis
* https://github.com/Modorganizer2/modorganizer-diagnose_basic
* https://github.com/Modorganizer2/modorganizer-esptk
* https://github.com/ModOrganizer2/cmake_common
* https://github.com/ModOrganizer2/githubpp
* https://github.com/ModOrganizer2/modorganizer
* https://github.com/ModOrganizer2/modorganizer-archive
* https://github.com/ModOrganizer2/modorganizer-bsatk
* https://github.com/ModOrganizer2/modorganizer-bsa_extractor
* https://github.com/ModOrganizer2/modorganizer-check_fnis
* https://github.com/ModOrganizer2/modorganizer-diagnose_basic
* https://github.com/ModOrganizer2/modorganizer-esptk
* https://github.com/ModOrganizer2/modorganizer-fnistool
* https://github.com/Modorganizer2/modorganizer-helper
* https://github.com/Modorganizer2/modorganizer-game_fallout3
* https://github.com/Modorganizer2/modorganizer-game_fallout4
* https://github.com/Modorganizer2/modorganizer-game_fallout4vr
* https://github.com/Modorganizer2/modorganizer-game_falloutnv
* https://github.com/Modorganizer2/modorganizer-game_features
* https://github.com/Modorganizer2/modorganizer-game_gamebryo
* https://github.com/Modorganizer2/modorganizer-game_morrowind
* https://github.com/Modorganizer2/modorganizer-game_oblivion
* https://github.com/Modorganizer2/modorganizer-game_skyrim
* https://github.com/Modorganizer2/modorganizer-game_skyrimSE
* https://github.com/ModOrganizer2/modorganizer-helper
* https://github.com/ModOrganizer2/modorganizer-game_enderal
* https://github.com/ModOrganizer2/modorganizer-game_fallout3
* https://github.com/ModOrganizer2/modorganizer-game_fallout4
* https://github.com/ModOrganizer2/modorganizer-game_fallout4vr
* https://github.com/ModOrganizer2/modorganizer-game_falloutnv
* https://github.com/ModOrganizer2/modorganizer-game_features
* https://github.com/ModOrganizer2/modorganizer-game_gamebryo
* https://github.com/ModOrganizer2/modorganizer-game_morrowind
* https://github.com/ModOrganizer2/modorganizer-game_oblivion
* https://github.com/ModOrganizer2/modorganizer-game_skyrim
* https://github.com/ModOrganizer2/modorganizer-game_skyrimSE
* https://github.com/ModOrganizer2/modorganizer-game_skyrimVR
* https://github.com/Modorganizer2/modorganizer-game_ttw
* https://github.com/Modorganizer2/modorganizer-installer_bain
* https://github.com/Modorganizer2/modorganizer-installer_bundle
* https://github.com/Modorganizer2/modorganizer-installer_fomod
* https://github.com/Modorganizer2/modorganizer-installer_manual
* https://github.com/Modorganizer2/modorganizer-installer_ncc
* https://github.com/Modorganizer2/modorganizer-installer_quick
* https://github.com/Modorganizer2/modorganizer-lootcli
* https://github.com/Modorganizer2/modorganizer-NCC
* https://github.com/Modorganizer2/modorganizer-nxmhandler
* https://github.com/Modorganizer2/modorganizer-plugin_python
* https://github.com/Modorganizer2/modorganizer-preview_base
* https://github.com/Modorganizer2/modorganizer-tool_configurator
* https://github.com/Modorganizer2/modorganizer-tool_inibakery
* https://github.com/Modorganizer2/modorganizer-uibase
* https://github.com/Modorganizer2/usvfs
* https://github.com/ModOrganizer2/modorganizer-game_ttw
* https://github.com/ModOrganizer2/modorganizer-installer_bain
* https://github.com/ModOrganizer2/modorganizer-installer_bundle
* https://github.com/ModOrganizer2/modorganizer-installer_fomod
* https://github.com/ModOrganizer2/modorganizer-installer_manual
* https://github.com/ModOrganizer2/modorganizer-installer_ncc
* https://github.com/ModOrganizer2/modorganizer-installer_quick
* https://github.com/ModOrganizer2/modorganizer-lootcli
* https://github.com/ModOrganizer2/modorganizer-NCC
* https://github.com/ModOrganizer2/modorganizer-nxmhandler
* https://github.com/ModOrganizer2/modorganizer-plugin_python
* https://github.com/ModOrganizer2/modorganizer-preview_base
* https://github.com/ModOrganizer2/modorganizer-preview_dds
* https://github.com/ModOrganizer2/modorganizer-form43_checker
* https://github.com/ModOrganizer2/modorganizer-script_extender_plugin_checker
* https://github.com/ModOrganizer2/modorganizer-tool_configurator
* https://github.com/ModOrganizer2/modorganizer-tool_inibakery
* https://github.com/ModOrganizer2/modorganizer-uibase
* https://github.com/ModOrganizer2/usvfs
### Unused Repositories
* https://github.com/Modorganizer2/modorganizer-hookdll
* https://github.com/ModOrganizer2/modorganizer-hookdll
* https://github.com/TanninOne/modorganizer-tool_nmmimport
+93 -485
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -20,6 +20,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "aboutdialog.h"
#include "ui_aboutdialog.h"
#include "shared/util.h"
#include <utility.h>
#include <QApplication>
@@ -85,6 +86,8 @@ AboutDialog::AboutDialog(const QString &version, QWidget *parent)
ui->revisionLabel->setText(ui->revisionLabel->text() + " unknown");
#endif
ui->usvfsLabel->setText(ui->usvfsLabel->text() + " " + MOShared::getUsvfsVersionString());
ui->licenseText->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
}
+51 -7
View File
@@ -104,6 +104,13 @@
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="usvfsLabel">
<property name="text">
<string>usvfs:</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
@@ -151,9 +158,9 @@
</spacer>
</item>
<item>
<widget class="QLabel" name="sourceText">
<widget class="LinkLabel" name="sourceText">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Source code can be found at &lt;a href=&quot;https://github.com/ModOrganizer2/modorganizer&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#007af4;&quot;&gt;GitHub&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Source code can be found at &lt;a href=&quot;https://github.com/ModOrganizer2/modorganizer&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
@@ -208,6 +215,11 @@
<string notr="true">LostDragonist</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">isa</string>
</property>
</item>
</widget>
</item>
</layout>
@@ -234,11 +246,6 @@
<string notr="true">erasmux</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">isanae</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Project579</string>
@@ -249,6 +256,11 @@
<string notr="true">przester</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Holt59</string>
</property>
</item>
</widget>
</item>
</layout>
@@ -320,6 +332,11 @@
<string notr="true">pndrev (German)</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Xahtax (German)</string>
</property>
</item>
<item>
<property name="text">
<string>yohru (Japanese)</string>
@@ -378,6 +395,11 @@
<string>Nubbie (Swedish)</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Hakan &quot;Nyks45&quot; Albayrak (Turkish)</string>
</property>
</item>
<item>
<property name="text">
<string>...and all other contributors!</string>
@@ -417,6 +439,11 @@
<string notr="true">DoubleYou</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Drew Warwick</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">deathneko11</string>
@@ -462,6 +489,16 @@
<string notr="true">outdatedtv</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">PurpleFez</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">reedts</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">Schilduin</string>
@@ -529,6 +566,13 @@
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>LinkLabel</class>
<extends>QLabel</extends>
<header location="global">linklabel.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="resources.qrc"/>
</resources>
+1 -1
View File
@@ -53,7 +53,7 @@ public:
/**
* @brief get a list of mods that the user chose to activate
*
*
* @note This can of ocurse only be called after the dialog has been displayed
*
* @return set< QString > the mods to activate
+34 -1
View File
@@ -1,10 +1,37 @@
#include "apiuseraccount.h"
QString localizedUserAccountType(APIUserAccountTypes t)
{
switch (t)
{
case APIUserAccountTypes::Regular:
return QObject::tr("Regular");
case APIUserAccountTypes::Premium:
return QObject::tr("Premium");
case APIUserAccountTypes::None: // fall-through
default:
return QObject::tr("None");
}
}
APIUserAccount::APIUserAccount()
: m_type(APIUserAccountTypes::None)
{
}
bool APIUserAccount::isValid() const
{
return !m_key.isEmpty();
}
const QString& APIUserAccount::apiKey() const
{
return m_key;
}
const QString& APIUserAccount::id() const
{
return m_id;
@@ -25,6 +52,12 @@ const APILimits& APIUserAccount::limits() const
return m_limits;
}
APIUserAccount& APIUserAccount::apiKey(const QString& key)
{
m_key = key;
return *this;
}
APIUserAccount& APIUserAccount::id(const QString& id)
{
m_id = id;
@@ -63,5 +96,5 @@ bool APIUserAccount::shouldThrottle() const
bool APIUserAccount::exhausted() const
{
return (remainingRequests() <= 0);
return isValid() && (remainingRequests() <= 0);
}
+22 -5
View File
@@ -18,6 +18,8 @@ enum class APIUserAccountTypes
Premium
};
QString localizedUserAccountType(APIUserAccountTypes t);
/**
* current limits imposed on the user account
@@ -49,17 +51,28 @@ struct APIStats
/**
* represents a user account on the mod provier website
* represents a user account on the mod provider website
*/
class APIUserAccount
{
public:
// when the number of remanining requests is under this number, further
// when the number of remaining requests is under this number, further
// requests will be throttled by avoiding non-critical ones
static const int ThrottleThreshold = 200;
APIUserAccount();
/**
* whether the user is logged in
*/
bool isValid() const;
/**
* api key
*/
const QString& apiKey() const;
/**
* user id
*/
@@ -81,6 +94,11 @@ public:
const APILimits& limits() const;
/**
* sets the api key
*/
APIUserAccount& apiKey(const QString& key);
/**
* sets the user id
*/
@@ -92,7 +110,7 @@ public:
APIUserAccount& name(const QString& name);
/**
* sets the acount type
* sets the account type
*/
APIUserAccount& type(APIUserAccountTypes type);
@@ -120,10 +138,9 @@ public:
bool exhausted() const;
private:
QString m_id, m_name;
QString m_key, m_id, m_name;
APIUserAccountTypes m_type;
APILimits m_limits;
APIStats m_stats;
};
#endif // APIUSERACCOUNT_H
+260
View File
@@ -0,0 +1,260 @@
/*
Copyright (C) MO2 Team. All rights reserved.
This file is part of Mod Organizer.
Mod Organizer 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.
Mod Organizer 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 Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
// For QObject::tr:
#include <QObject>
#include "archivefiletree.h"
#include "log.h"
using namespace MOBase;
/**
* We use custom file entries to store the index.
*/
class ArchiveFileEntry : public virtual FileTreeEntry {
public:
/**
* @brief Create a new entry.
*
* @param parent The tree containing this entry.
* @param name The name of this entry.
* @param index The index of the entry in the archive.
*/
ArchiveFileEntry(std::shared_ptr<const IFileTree> parent, QString name, int index) :
FileTreeEntry(parent, name), m_Index(index) {
}
virtual std::shared_ptr<FileTreeEntry> clone() const override {
return std::make_shared<ArchiveFileEntry>(nullptr, name(), m_Index);
}
// No private since we are in an implementation file:
const int m_Index;
};
/**
*
*/
class ArchiveFileTreeImpl: public virtual ArchiveFileTree, public virtual ArchiveFileEntry {
public:
using File = std::tuple<QStringList, bool, int>;
public: // Public for make_shared (but not accessible by other since not exposed in .h):
ArchiveFileTreeImpl(std::shared_ptr<const IFileTree> parent, QString name, int index, std::vector<File> files)
: FileTreeEntry(parent, name), ArchiveFileEntry(parent, name, index), IFileTree(), m_Files(std::move(files)) { }
public: // Override to avoid VS warnings:
virtual std::shared_ptr<IFileTree> astree() override {
return IFileTree::astree();
}
virtual std::shared_ptr<const IFileTree> astree() const override {
return IFileTree::astree();
}
protected:
virtual std::shared_ptr<FileTreeEntry> clone() const override {
return IFileTree::clone();
}
public: // Overrides:
/**
*
*/
static void mapToArchive(IFileTree const& tree, QString path, std::vector<FileData*> const& data)
{
if (path.length() > 0) {
// when using a long windows path (starting with \\?\) we apparently can have redundant
// . components in the path. This wasn't a problem with "regular" path names.
if (path == ".") {
path.clear();
}
else {
path.append("\\");
}
}
for (auto const& entry : tree) {
if (entry->isDir()) {
const ArchiveFileTreeImpl& archiveEntry = dynamic_cast<const ArchiveFileTreeImpl&>(*entry);
QString tmp = path + archiveEntry.name();
if (archiveEntry.m_Index != -1) {
data[archiveEntry.m_Index]->addOutputFilePath(tmp.toStdWString());
}
mapToArchive(*archiveEntry.astree(), tmp, data);
}
else {
const ArchiveFileEntry& archiveFileEntry = dynamic_cast<const ArchiveFileEntry&>(*entry);
if (archiveFileEntry.m_Index != -1) {
data[archiveFileEntry.m_Index]->addOutputFilePath((path + archiveFileEntry.name()).toStdWString());
}
}
}
}
/**
*
*/
void mapToArchive(Archive &archive) const override {
mapToArchive(*this, "", archive.getFileList());
}
protected:
/**
* Overriding makeDirectory and makeFile to create file tree or file entry with index -1.
*
*/
virtual std::shared_ptr<IFileTree> makeDirectory(
std::shared_ptr<const IFileTree> parent, QString name) const override {
return std::make_shared<ArchiveFileTreeImpl>(parent, name, -1, std::vector<File>{});
}
virtual std::shared_ptr<FileTreeEntry> makeFile(
std::shared_ptr<const IFileTree> parent, QString name) const override {
return std::make_shared<ArchiveFileEntry>(parent, name, -1);
}
virtual bool doPopulate(std::shared_ptr<const IFileTree> parent, std::vector<std::shared_ptr<FileTreeEntry>>& entries) const override {
// Sort by name:
std::sort(std::begin(m_Files), std::end(m_Files),
[](const auto& a, const auto& b) {
return std::get<0>(a)[0].compare(std::get<0>(b)[0], Qt::CaseInsensitive) < 0; });
// We know that the files are sorted:
QString currentName = "";
int currentIndex = -1;
std::vector<File> currentFiles;
for (auto& p : m_Files) {
// At the start or if we have reset, just retrieve the current name:
if (currentName == "") {
currentName = std::get<0>(p)[0];
}
// If the name is different, we need to create a directory from what we have
// accumulated:
if (currentName != std::get<0>(p)[0]) {
// We may or may not have an index here, it depends on the type of archive (some archives list
// intermediate non-empty folders, some don't):
entries.push_back(std::make_shared<ArchiveFileTreeImpl>(parent, currentName, currentIndex, std::move(currentFiles)));
currentFiles.clear(); // Back to a valid state.
// Reset the index:
currentIndex = -1;
}
// We can always override the current name:
currentName = std::get<0>(p)[0];
// If the current path contains only one components:
if (std::get<0>(p).size() == 1) {
// If it is not a directory, then it is a file in directly under this tree:
if (!std::get<1>(p)) {
entries.push_back(
std::make_shared<ArchiveFileEntry>(parent, currentName, std::get<2>(p)));
currentName = "";
}
else {
// Otherwize, it is the actual "file" corresponding to the directory we are listing, so we can retrieve
// the index here:
currentIndex = std::get<2>(p);
}
}
else {
currentFiles.push_back({
QStringList(std::get<0>(p).begin() + 1, std::get<0>(p).end()), std::get<1>(p), std::get<2>(p)
});
}
}
if (currentName != "") {
entries.push_back(std::make_shared<ArchiveFileTreeImpl>(parent, currentName, currentIndex, std::move(currentFiles)));
}
// Let the parent class sort the entries:
return false;
}
virtual std::shared_ptr<IFileTree> doClone() const override {
return std::make_shared<ArchiveFileTreeImpl>(nullptr, name(), m_Index, m_Files);
}
private:
mutable std::vector<File> m_Files;
};
std::shared_ptr<ArchiveFileTree> ArchiveFileTree::makeTree(Archive const& archive)
{
auto const& data = archive.getFileList();
std::vector<ArchiveFileTreeImpl::File> files;
files.reserve(data.size());
for (size_t i = 0; i < data.size(); ++i) {
files.push_back(std::make_tuple(
QString::fromStdWString(data[i]->getArchiveFilePath()).replace("\\", "/").split("/", Qt::SkipEmptyParts),
data[i]->isDirectory(),
(int) i));
}
auto tree = std::make_shared<ArchiveFileTreeImpl>(nullptr, "", -1, std::move(files));
return tree;
}
/**
* @brief Recursive function for the ArchiveFileTree::mapToArchive method. Need a template
* here because iterators from a vector of entries are not exactly the same as the iterators
* returned by a IFileTree.
*
*/
template <class It>
void mapToArchive(std::vector<FileData*> const& data, It begin, It end) {
for (auto it = begin; it != end; ++it) {
auto entry = *it;
auto* aentry = dynamic_cast<const ArchiveFileEntry*>(entry.get());
if (aentry->m_Index != -1) {
data[aentry->m_Index]->addOutputFilePath(aentry->path().toStdWString());
}
if (entry->isDir()) {
auto tree = entry->astree();
mapToArchive(data, tree->begin(), tree->end());
}
}
}
void ArchiveFileTree::mapToArchive(Archive &archive, std::vector<std::shared_ptr<const FileTreeEntry>> const& entries) {
::mapToArchive(archive.getFileList(), entries.cbegin(), entries.cend());
}
+72
View File
@@ -0,0 +1,72 @@
/*
Copyright (C) MO2 Team. All rights reserved.
This file is part of Mod Organizer.
Mod Organizer 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.
Mod Organizer 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 Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ARCHIVEFILENETRY_H
#define ARCHIVEFILENTRY_H
#include "archive.h"
#include "ifiletree.h"
/**
*
*/
class ArchiveFileTree: public virtual MOBase::IFileTree {
public:
/**
* @brief Create a new file tree representing the given archive.
*
* @param archive Archive to represent by the file tree.
*
* @return a file tree representing the given archive.
*/
static std::shared_ptr<ArchiveFileTree> makeTree(Archive const& archive);
/**
* @brief Update the given archive to reflect change in this tree.
*
* This method disables files that have been removed from the file
* tree and move the ones that have been moved.
*
* @param archive The archive to update. Must be the one used to
* create the tree.
*/
virtual void mapToArchive(Archive &archive) const = 0;
/**
* @brief Update the given archive to prepare for the extraction
* of the given entries.
*
* This method "enables" files that correspond to the given entry.
*
* @param archive The archive to update. Must be the one used to
* create the tree.
* @param entries List of entries to mark for extraction. All the entries must
* come from a tree created with the given archive.
*/
static void mapToArchive(Archive &archive, std::vector<std::shared_ptr<const FileTreeEntry>> const& entries);
protected:
using IFileTree::IFileTree;
};
#endif
+12 -6
View File
@@ -18,13 +18,13 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
#include "bbcode.h"
#include <log.h>
#include <QRegExp>
#include <map>
namespace BBCode {
namespace log = MOBase::log;
class BBCodeMap {
@@ -88,7 +88,7 @@ public:
return temp.replace(tagIter->second.first, QString("<font style=\"color: #%1;\">%2</font>").arg(color, content));
}
} else {
qWarning("don't know how to deal with tag %s", qUtf8Printable(tagName));
log::warn("don't know how to deal with tag {}", tagName);
}
} else {
if (tagName == "*") {
@@ -99,8 +99,7 @@ public:
} else {
// expression doesn't match. either the input string is invalid
// or the expression is
qWarning("%s doesn't match the expression for %s",
qUtf8Printable(temp), qUtf8Printable(tagName));
log::warn("{} doesn't match the expression for {}", temp, tagName);
length = 0;
return QString();
}
@@ -247,7 +246,14 @@ QString convertToHTML(const QString &inputParam)
if ((pos < (input.size() - 1)) && (input.at(pos + 1) == '/')) {
// skip invalid end tag
int tagEnd = input.indexOf(']', pos) + 1;
pos = tagEnd;
if (tagEnd == 0) {
//no closing tag found
//move the pos up one so that the opening bracket is ignored next iteration
pos++;
}
else {
pos = tagEnd;
}
} else {
// convert the tag and content if necessary
int length = -1;
+12 -11
View File
@@ -24,9 +24,10 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "messagedialog.h"
#include "report.h"
#include "persistentcookiejar.h"
#include "settings.h"
#include <utility.h>
#include "settings.h"
#include <log.h>
#include <QWebEngineSettings>
#include <QNetworkCookieJar>
@@ -35,9 +36,9 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QInputDialog>
#include <QWebEngineHistory>
#include <QDir>
#include <QDesktopWidget>
#include <QKeyEvent>
using namespace MOBase;
BrowserDialog::BrowserDialog(QWidget *parent)
@@ -48,7 +49,7 @@ BrowserDialog::BrowserDialog(QWidget *parent)
ui->setupUi(this);
m_AccessManager->setCookieJar(new PersistentCookieJar(
QDir::fromNativeSeparators(Settings::instance().getCacheDirectory() + "/cookies.dat")));
QDir::fromNativeSeparators(Settings::instance().paths().cache() + "/cookies.dat")));
Qt::WindowFlags flags = windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint;
Qt::WindowFlags helpFlag = Qt::WindowContextHelpButtonHint;
@@ -71,7 +72,7 @@ BrowserDialog::~BrowserDialog()
void BrowserDialog::closeEvent(QCloseEvent *event)
{
// m_AccessManager->showCookies();
Settings::instance().geometry().saveGeometry(this);
QDialog::closeEvent(event);
}
@@ -125,6 +126,7 @@ void BrowserDialog::urlChanged(const QUrl &url)
void BrowserDialog::openUrl(const QUrl &url)
{
if (isHidden()) {
Settings::instance().geometry().restoreGeometry(this);
show();
}
openInNewTab(url);
@@ -138,9 +140,8 @@ void BrowserDialog::maximizeWidth()
int contentWidth = getCurrentView()->page()->contentsSize().width();
QDesktopWidget screen;
int currentScreen = screen.screenNumber(this);
int screenWidth = screen.screenGeometry(currentScreen).size().width();
QScreen* screen = this->window()->windowHandle()->screen();
int screenWidth = screen->geometry().size().width();
int targetWidth = std::min<int>(std::max<int>(viewportWidth, contentWidth) + frameWidth, screenWidth);
this->resize(targetWidth, height());
@@ -192,12 +193,12 @@ void BrowserDialog::unsupportedContent(QNetworkReply *reply)
try {
QWebEnginePage *page = qobject_cast<QWebEnginePage*>(sender());
if (page == nullptr) {
qCritical("sender not a page");
log::error("sender not a page");
return;
}
BrowserView *view = qobject_cast<BrowserView*>(page->view());
if (view == nullptr) {
qCritical("no view?");
log::error("no view?");
return;
}
@@ -206,14 +207,14 @@ void BrowserDialog::unsupportedContent(QNetworkReply *reply)
if (isVisible()) {
MessageDialog::showMessage(tr("failed to start download"), this);
}
qCritical("exception downloading unsupported content: %s", e.what());
log::error("exception downloading unsupported content: {}", e.what());
}
}
void BrowserDialog::downloadRequested(const QNetworkRequest &request)
{
qCritical("download request %s ignored", request.url().toString().toUtf8().constData());
log::error("download request {} ignored", request.url().toString());
}
+103 -66
View File
@@ -21,6 +21,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <utility.h>
#include <report.h>
#include <log.h>
#include <QObject>
#include <QFile>
@@ -61,8 +62,9 @@ void CategoryFactory::loadCategories()
++lineNum;
QList<QByteArray> cells = line.split('|');
if (cells.count() != 4) {
qCritical("invalid category line %d: %s (%d cells)",
lineNum, line.constData(), cells.count());
log::error(
"invalid category line {}: {} ({} cells)",
lineNum, line.constData(), cells.count());
} else {
std::vector<int> nexusIDs;
if (cells[2].length() > 0) {
@@ -72,7 +74,7 @@ void CategoryFactory::loadCategories()
bool ok = false;
int temp = iter->toInt(&ok);
if (!ok) {
qCritical("invalid category id %s", iter->constData());
log::error("invalid category id {}", iter->constData());
}
nexusIDs.push_back(temp);
}
@@ -82,8 +84,7 @@ void CategoryFactory::loadCategories()
int id = cells[0].toInt(&cell0Ok);
int parentID = cells[3].trimmed().toInt(&cell3Ok);
if (!cell0Ok || !cell3Ok) {
qCritical("invalid category line %d: %s",
lineNum, line.constData());
log::error("invalid category line {}: {}", lineNum, line.constData());
}
addCategory(id, QString::fromUtf8(cells[1].constData()), nexusIDs, parentID);
}
@@ -112,7 +113,7 @@ void CategoryFactory::reset()
// 43 = Savegames (makes no sense to install them through MO)
// 45 = Videos and trailers
// 87 = Miscelanous
addCategory(0, "None", MakeVector<int>(4, 28, 43, 45, 87), 0);
addCategory(0, "None", { 4, 28, 43, 45, 87 }, 0);
}
@@ -205,63 +206,63 @@ void CategoryFactory::loadDefaultCategories()
{
// the order here is relevant as it defines the order in which the
// mods appear in the combo box
addCategory(1, "Animations", MakeVector<int>(2, 4, 51), 0);
addCategory(52, "Poses", MakeVector<int>(1, 29), 1);
addCategory(2, "Armour", MakeVector<int>(2, 5, 54), 0);
addCategory(53, "Power Armor", MakeVector<int>(1, 53), 2);
addCategory(3, "Audio", MakeVector<int>(3, 33, 35, 106), 0);
addCategory(38, "Music", MakeVector<int>(2, 34, 61), 0);
addCategory(39, "Voice", MakeVector<int>(2, 36, 107), 0);
addCategory(5, "Clothing", MakeVector<int>(2, 9, 60), 0);
addCategory(41, "Jewelry", MakeVector<int>(1, 102), 5);
addCategory(42, "Backpacks", MakeVector<int>(1, 49), 5);
addCategory(6, "Collectables", MakeVector<int>(2, 10, 92), 0);
addCategory(28, "Companions", MakeVector<int>(3, 11, 66, 96), 0);
addCategory(7, "Creatures, Mounts, & Vehicles", MakeVector<int>(4, 12, 65, 83, 101), 0);
addCategory(8, "Factions", MakeVector<int>(2, 16, 25), 0);
addCategory(9, "Gameplay", MakeVector<int>(2, 15, 24), 0);
addCategory(27, "Combat", MakeVector<int>(1, 77), 9);
addCategory(43, "Crafting", MakeVector<int>(2, 50, 100), 9);
addCategory(48, "Overhauls", MakeVector<int>(2, 24, 79), 9);
addCategory(49, "Perks", MakeVector<int>(1, 27), 9);
addCategory(54, "Radio", MakeVector<int>(1, 31), 9);
addCategory(55, "Shouts", MakeVector<int>(1, 104), 9);
addCategory(22, "Skills & Levelling", MakeVector<int>(2, 46, 73), 9);
addCategory(58, "Weather & Lighting", MakeVector<int>(1, 56), 9);
addCategory(44, "Equipment", MakeVector<int>(1, 44), 43);
addCategory(45, "Home/Settlement", MakeVector<int>(1, 45), 43);
addCategory(10, "Body, Face, & Hair", MakeVector<int>(2, 17, 26), 0);
addCategory(39, "Tattoos", MakeVector<int>(1, 57), 10);
addCategory(40, "Character Presets", MakeVector<int>(1, 58), 0);
addCategory(11, "Items", MakeVector<int>(2, 27, 85), 0);
addCategory(32, "Mercantile", MakeVector<int>(2, 23, 69), 0);
addCategory(37, "Ammo", MakeVector<int>(1, 3), 11);
addCategory(19, "Weapons", MakeVector<int>(2, 41, 55), 11);
addCategory(36, "Weapon & Armour Sets", MakeVector<int>(1, 42), 11);
addCategory(23, "Player Homes", MakeVector<int>(2, 28, 67), 0);
addCategory(25, "Castles & Mansions", MakeVector<int>(1, 68), 23);
addCategory(51, "Settlements", MakeVector<int>(1, 48), 23);
addCategory(12, "Locations", MakeVector<int>(10, 20, 21, 22, 30, 47, 70, 88, 89, 90, 91), 0);
addCategory(4, "Cities", MakeVector<int>(1, 53), 12);
addCategory(31, "Landscape Changes", MakeVector<int>(1, 58), 0);
addCategory(29, "Environment", MakeVector<int>(2, 14, 74), 0);
addCategory(30, "Immersion", MakeVector<int>(2, 51, 78), 0);
addCategory(20, "Magic", MakeVector<int>(3, 75, 93, 94), 0);
addCategory(21, "Models & Textures", MakeVector<int>(2, 19, 29), 0);
addCategory(33, "Modders resources", MakeVector<int>(2, 18, 82), 0);
addCategory(13, "NPCs", MakeVector<int>(3, 22, 33, 99), 0);
addCategory(24, "Bugfixes", MakeVector<int>(2, 6, 95), 0);
addCategory(14, "Patches", MakeVector<int>(2, 25, 84), 24);
addCategory(35, "Utilities", MakeVector<int>(2, 38, 39), 0);
addCategory(26, "Cheats", MakeVector<int>(1, 8), 0);
addCategory(15, "Quests", MakeVector<int>(2, 30, 35), 0);
addCategory(16, "Races & Classes", MakeVector<int>(1, 34), 0);
addCategory(34, "Stealth", MakeVector<int>(1, 76), 0);
addCategory(17, "UI", MakeVector<int>(2, 37, 42), 0);
addCategory(18, "Visuals", MakeVector<int>(2, 40, 62), 0);
addCategory(50, "Pip-Boy", MakeVector<int>(1, 52), 18);
addCategory(46, "Shader Presets", MakeVector<int>(3, 13, 97, 105), 0);
addCategory(47, "Miscellaneous", MakeVector<int>(2, 2, 28), 0);
addCategory(1, "Animations", { 2, 4, 51 }, 0);
addCategory(52, "Poses", { 1, 29 }, 1);
addCategory(2, "Armour", { 2, 5, 54 }, 0);
addCategory(53, "Power Armor", { 1, 53 }, 2);
addCategory(3, "Audio", { 3, 33, 35, 106 }, 0);
addCategory(38, "Music", { 2, 34, 61 }, 0);
addCategory(39, "Voice", { 2, 36, 107 }, 0);
addCategory(5, "Clothing", { 2, 9, 60 }, 0);
addCategory(41, "Jewelry", { 1, 102 }, 5);
addCategory(42, "Backpacks", { 1, 49 }, 5);
addCategory(6, "Collectables", { 2, 10, 92 }, 0);
addCategory(28, "Companions", { 3, 11, 66, 96 }, 0);
addCategory(7, "Creatures, Mounts, & Vehicles", { 4, 12, 65, 83, 101 }, 0);
addCategory(8, "Factions", { 2, 16, 25 }, 0);
addCategory(9, "Gameplay", { 2, 15, 24 }, 0);
addCategory(27, "Combat", { 1, 77 }, 9);
addCategory(43, "Crafting", { 2, 50, 100 }, 9);
addCategory(48, "Overhauls", { 2, 24, 79 }, 9);
addCategory(49, "Perks", { 1, 27 }, 9);
addCategory(54, "Radio", { 1, 31 }, 9);
addCategory(55, "Shouts", { 1, 104 }, 9);
addCategory(22, "Skills & Levelling", { 2, 46, 73 }, 9);
addCategory(58, "Weather & Lighting", { 1, 56 }, 9);
addCategory(44, "Equipment", { 1, 44 }, 43);
addCategory(45, "Home/Settlement", { 1, 45 }, 43);
addCategory(10, "Body, Face, & Hair", { 2, 17, 26 }, 0);
addCategory(39, "Tattoos", { 1, 57 }, 10);
addCategory(40, "Character Presets", { 1, 58 }, 0);
addCategory(11, "Items", { 2, 27, 85 }, 0);
addCategory(32, "Mercantile", { 2, 23, 69 }, 0);
addCategory(37, "Ammo", { 1, 3 }, 11);
addCategory(19, "Weapons", { 2, 41, 55 }, 11);
addCategory(36, "Weapon & Armour Sets", { 1, 42 }, 11);
addCategory(23, "Player Homes", { 2, 28, 67 }, 0);
addCategory(25, "Castles & Mansions", { 1, 68 }, 23);
addCategory(51, "Settlements", { 1, 48 }, 23);
addCategory(12, "Locations", { 10, 20, 21, 22, 30, 47, 70, 88, 89, 90, 91 }, 0);
addCategory(4, "Cities", { 1, 53 }, 12);
addCategory(31, "Landscape Changes", { 1, 58 }, 0);
addCategory(29, "Environment", { 2, 14, 74 }, 0);
addCategory(30, "Immersion", { 2, 51, 78 }, 0);
addCategory(20, "Magic", { 3, 75, 93, 94 }, 0);
addCategory(21, "Models & Textures", { 2, 19, 29 }, 0);
addCategory(33, "Modders resources", { 2, 18, 82 }, 0);
addCategory(13, "NPCs", { 3, 22, 33, 99 }, 0);
addCategory(24, "Bugfixes", { 2, 6, 95 }, 0);
addCategory(14, "Patches", { 2, 25, 84 }, 24);
addCategory(35, "Utilities", { 2, 38, 39 }, 0);
addCategory(26, "Cheats", { 1, 8 }, 0);
addCategory(15, "Quests", { 2, 30, 35 }, 0);
addCategory(16, "Races & Classes", { 1, 34 }, 0);
addCategory(34, "Stealth", { 1, 76 }, 0);
addCategory(17, "UI", { 2, 37, 42 }, 0);
addCategory(18, "Visuals", { 2, 40, 62 }, 0);
addCategory(50, "Pip-Boy", { 1, 52 }, 18);
addCategory(46, "Shader Presets", { 3, 13, 97, 105 }, 0);
addCategory(47, "Miscellaneous", { 2, 2, 28 }, 0);
}
@@ -294,7 +295,7 @@ bool CategoryFactory::isDecendantOf(int id, int parentID) const
return isDecendantOf(m_Categories[index].m_ParentID, parentID);
}
} else {
qWarning("%d is no valid category id", id);
log::warn("{} is no valid category id", id);
return false;
}
}
@@ -319,6 +320,42 @@ QString CategoryFactory::getCategoryName(unsigned int index) const
return m_Categories[index].m_Name;
}
QString CategoryFactory::getSpecialCategoryName(SpecialCategories type) const
{
QString label;
switch (type)
{
case Checked: label = QObject::tr("Active"); break;
case UpdateAvailable: label = QObject::tr("Update available"); break;
case HasCategory: label = QObject::tr("Has category"); break;
case Conflict: label = QObject::tr("Conflicted"); break;
case HasHiddenFiles: label = QObject::tr("Has hidden files"); break;
case Endorsed: label = QObject::tr("Endorsed"); break;
case Backup: label = QObject::tr("Has backup"); break;
case Managed: label = QObject::tr("Managed"); break;
case HasGameData: label = QObject::tr("Has valid game data"); break;
case HasNexusID: label = QObject::tr("Has Nexus ID"); break;
case Tracked: label = QObject::tr("Tracked on Nexus"); break;
default: return {};
}
return QString("<%1>").arg(label);
}
QString CategoryFactory::getCategoryNameByID(int id) const
{
auto itor = m_IDMap.find(id);
if (itor == m_IDMap.end()) {
return getSpecialCategoryName(static_cast<SpecialCategories>(id));
} else {
const auto index = itor->second;
if (index >= m_Categories.size()) {
return {};
}
return m_Categories[index].m_Name;
}
}
int CategoryFactory::getCategoryID(unsigned int index) const
{
@@ -359,10 +396,10 @@ unsigned int CategoryFactory::resolveNexusID(int nexusID) const
{
std::map<int, unsigned int>::const_iterator iter = m_NexusMap.find(nexusID);
if (iter != m_NexusMap.end()) {
qDebug("nexus category id %d maps to internal %d", nexusID, iter->second);
log::debug("nexus category id {} maps to internal {}", nexusID, iter->second);
return iter->second;
} else {
qDebug("nexus category id %d not mapped", nexusID);
log::debug("nexus category id {} not mapped", nexusID);
return 0U;
}
}
+16 -15
View File
@@ -37,23 +37,22 @@ class CategoryFactory {
friend class CategoriesDialog;
public:
static const int CATEGORY_NONE = 0;
static const int CATEGORY_SPECIAL_FIRST = 10000;
static const int CATEGORY_SPECIAL_CHECKED = CATEGORY_SPECIAL_FIRST;
static const int CATEGORY_SPECIAL_UNCHECKED = 10001;
static const int CATEGORY_SPECIAL_UPDATEAVAILABLE = 10002;
static const int CATEGORY_SPECIAL_NOCATEGORY = 10003;
static const int CATEGORY_SPECIAL_CONFLICT = 10004;
static const int CATEGORY_SPECIAL_NOTENDORSED = 10005;
static const int CATEGORY_SPECIAL_BACKUP = 10006;
static const int CATEGORY_SPECIAL_MANAGED = 10007;
static const int CATEGORY_SPECIAL_UNMANAGED = 10008;
enum SpecialCategories
{
Checked = 10000,
UpdateAvailable,
HasCategory,
Conflict,
HasHiddenFiles,
Endorsed,
Backup,
Managed,
HasGameData,
HasNexusID,
Tracked
};
public:
struct Category {
Category(int sortValue, int id, const QString &name, const std::vector<int> &nexusIDs, int parentID)
: m_SortValue(sortValue), m_ID(id), m_Name(name), m_HasChildren(false),
@@ -142,6 +141,8 @@ public:
* @return QString name of the category
**/
QString getCategoryName(unsigned int index) const;
QString getSpecialCategoryName(SpecialCategories type) const;
QString getCategoryNameByID(int id) const;
/**
* @brief look up the id of a category by its index
+7
View File
@@ -21,6 +21,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "ui_categoriesdialog.h"
#include "categories.h"
#include "utility.h"
#include "settings.h"
#include <QItemDelegate>
#include <QRegExpValidator>
#include <QLineEdit>
@@ -109,6 +110,12 @@ CategoriesDialog::~CategoriesDialog()
delete ui;
}
int CategoriesDialog::exec()
{
GeometrySaver gs(Settings::instance(), this);
return QDialog::exec();
}
void CategoriesDialog::cellChanged(int row, int)
{

Some files were not shown because too many files have changed in this diff Show More