Compare commits

..
183 Commits
Author SHA1 Message Date
LostDragonist 179a738571 Merge pull request #695 from ModOrganizer2/Develop
Stage for Release 2.2.0
2019-05-03 21:32:33 -05:00
LostDragonist 907c546842 Update version to 2.2.0 2019-05-03 21:08:20 -05:00
LostDragonist 7fbdbd8950 Update version to 2.2.0rc3 2019-05-02 06:01:11 -05:00
LostDragonist 5f0dc90ceb Fix installing qdds.dll 2019-05-02 05:57:34 -05:00
LostDragonist 65c137bf59 Update translation file 2019-04-30 05:24:46 -05:00
LostDragonist e9b5f78883 Update version to 2.2.0rc2 2019-04-30 04:51:59 -05:00
LostDragonist 3061a15822 Restart MO if the API key is changed or the reset geometries button was clicked 2019-04-30 04:51:32 -05:00
LostDragonist 8c47ba2252 Update translation file 2019-04-29 14:29:00 -05:00
LostDragonist 2d75be6ad7 Update version to 2.2.0-rc1 2019-04-29 13:28:30 -05:00
LePresidente c3d633ab7e dp windeployqt.exe last since we require everything to be installed before running. 2019-04-20 16:39:13 +02:00
LostDragonist 149c38d54d Add protection against non-existent working directory for executables 2019-04-15 05:25:22 -05:00
Jeremy Rimpo 0f13d9a4c0 Merge pull request #691 from jakemaguy/Develop
Added Missing URL for Nexus Info Tab in ModInfoDialog Window
2019-04-14 01:37:17 -05:00
Jake 94cd6f5349 Added the missing URL to setURL function to support the call to getURL() 2019-04-14 02:08:36 -04:00
LostDragonist b932416249 Update translation file 2019-04-13 22:16:08 -05:00
LostDragonist 509def79c6 Improve ignoring of missing English translations
Why does the language code keep changing?!
2019-04-13 21:17:27 -05:00
LostDragonist 379c60375c Update version to 2.2.0beta9 2019-04-13 20:21:47 -05:00
LostDragonist 405dfebe4d Don't log warnings when files can't be found (moves responsibility to caller) 2019-04-13 20:21:47 -05:00
LostDragonist 3c488a69ed Fix typo in missing INI dialog 2019-04-13 20:21:46 -05:00
Silarn 5ea25f03ce Rework logic - we want updates that are newer than the last update - 1hr 2019-04-12 21:28:47 -05:00
LostDragonist 81b9784615 Update tooltip on Nexus settings 2019-04-01 11:57:51 -05:00
LostDragonist c362199ac0 Fix performance when selecting many mods 2019-03-30 22:27:26 -05:00
LostDragonist 22d3f0cd3c Fix getFileOrigins 2019-03-26 14:32:20 -05:00
LostDragonist eb9ac6ca24 Add more protection against missing game plugins 2019-03-25 04:42:02 -05:00
LostDragonist 043a5fa941 Update version to 2.2.0beta8 2019-03-24 21:34:51 -05:00
LostDragonist b1af3eed10 Add parameters to startApplication to allow control of custom overwrite 2019-03-24 21:30:58 -05:00
LostDragonist a4679b6fac Don't query for the file description if it's present but blank 2019-03-24 18:12:23 -05:00
LostDragonist d541f982a5 Add another query to get the missing file description 2019-03-24 17:41:58 -05:00
LostDragonist 93028df242 Handle multiple replies to MD5 search 2019-03-24 17:12:19 -05:00
LostDragonist e69c84d40e Expand mo_interface.log from 1K lines to 1M lines 2019-03-24 10:50:41 -05:00
LostDragonist 3d56e17dd8 Make sure the configured temp folder exists 2019-03-23 23:02:12 -05:00
LostDragonist 1f3133059e Prevent diagnose plugins that return false for isActive from reporting notifications 2019-03-23 21:21:51 -05:00
LostDragonist ff7fd68c0b Connect diagnosisUpdate and updateProblemsButton so the notification button is updated properly 2019-03-23 19:26:16 -05:00
LostDragonist 5f8c95e78e Allow the user to go back to the instance manager if using an instance and the instance's game plugin disappears or stops functioning 2019-03-23 18:09:27 -05:00
LostDragonist 6a19ac3de5 Only let the user select game installations that match what the instance is configured for 2019-03-23 17:47:55 -05:00
LostDragonist bca9f0ec56 Do not change the game type of an instance without getting explicit instructions from the user 2019-03-23 17:10:28 -05:00
LostDragonist a337972ffb Revert "Use MD5 info search for new downloads"
This reverts commit 5ba369680d.
2019-03-23 15:03:44 -05:00
LostDragonist 6dd246363e Fix origin determination for the case of a lower priority, loose files mod being added after a higher priority, archived files mod. 2019-03-22 21:26:50 -05:00
LostDragonist 1f50d61ecb Fix update filter check 2019-03-22 18:00:13 -05:00
LostDragonist c3ff652ff8 Only change to the update filter if mods are being checked for update or mods have updates available 2019-03-22 17:33:10 -05:00
LostDragonist d141258357 Add support for info log messages 2019-03-22 17:16:08 -05:00
LostDragonist 5ba369680d Use MD5 info search for new downloads 2019-03-22 17:03:58 -05:00
LostDragonist b6be2863f2 Set the remaining API requests on a 429 reply 2019-03-22 01:10:01 -05:00
LostDragonist 5b6f16f06a Fix reported number of mods checking for update when multiple mods are selected 2019-03-22 00:52:14 -05:00
LostDragonist 4144684d8d Don't display Nexus ID of zero 2019-03-22 00:44:16 -05:00
LostDragonist 84be4c5440 Don't delete the Nexus ID on invalid update requests 2019-03-22 00:43:49 -05:00
LostDragonist 968cc4b495 Allow moving overwrite files to mods to replace files 2019-03-18 13:53:30 -05:00
LostDragonist be93ce0690 Update translation file 2019-03-18 06:10:06 -05:00
LostDragonist 7819a1aa27 Update version to 2.2.0beta7 2019-03-18 05:16:27 -05:00
Al 105a112f3c Add "Explore Virtual Folder" (name subject to change) as a default executable. 2019-03-10 17:46:36 +01:00
LostDragonist df142f8310 Refresh mod list after clearing overwrite folder 2019-03-09 22:12:10 -06:00
LostDragonist c49fce871a Allow selecting overwrite to trigger selected plugin highlight 2019-03-09 21:41:38 -06:00
LostDragonist e8e7f70ded Allow selecting overwrite to trigger mod conflict highlights 2019-03-09 21:41:20 -06:00
LostDragonist abfbf68469 Improve updating mod highlights when no mod is selected 2019-03-09 21:40:10 -06:00
LostDragonist d26c4e8ea2 Fix conflict detection concerning overwrite 2019-03-09 20:47:10 -06:00
LostDragonist c1210714f8 Update tutorials and stylesheets for problems->notifications change 2019-03-09 01:43:02 -06:00
LostDragonist 57c14681f2 Disable the login timeout timer when something happens 2019-03-09 00:46:45 -06:00
LostDragonist c28750d0fb Improve timeout behavior when logging in to Nexus 2019-03-08 23:14:52 -06:00
LostDragonist 035cf9e767 Update what's this description of profiles 2019-03-08 21:34:43 -06:00
LostDragonist 78954b0b9f Improve function and error reporting of dropping files on mod list 2019-03-08 21:26:47 -06:00
LostDragonist a6c32d0c3d Update translation file 2019-03-07 18:21:33 -06:00
LostDragonist aaeb0e8570 Convert file description from BBCode 2019-03-07 17:52:17 -06:00
LostDragonist 77bcfdfdb3 Update version to 2.2.0beta6 2019-03-07 17:32:27 -06:00
LostDragonist d5ba880283 Suppress expected network errors during MD5 searches 2019-03-07 16:55:42 -06:00
LostDragonist 70bcd97bd2 Use MD5 when querying info before bothering the user 2019-03-07 16:32:17 -06:00
LostDragonist 2eecead236 Rework tracking pin to be green 2019-03-07 11:59:07 -06:00
LostDragonist 6c0f5202ce Support log messages with newlines 2019-03-07 11:21:47 -06:00
LostDragonist d5332c5080 Add support for displaying tracked mods and setting tracked status 2019-03-07 11:21:47 -06:00
LostDragonist 09a68079bb Assume an empty release list from GitHub means some kind of error occurred 2019-03-06 18:46:15 -06:00
LostDragonist 0174423841 Improve failed login checks on start up 2019-03-06 18:02:03 -06:00
LostDragonist dfc992f467 Add setting to hide the API counter 2019-03-06 17:20:53 -06:00
LostDragonist fa44740193 Clear palette of mod list and plugin list to better support themes 2019-03-05 01:58:25 -06:00
LostDragonist 249745c6b1 Don't show unrelated paths when browsing for game 2019-02-25 08:54:51 -06:00
LostDragonist 667ef70cc8 Do not add inactive tool plugins to the tools menu 2019-02-24 21:18:52 -06:00
LostDragonist 899fa6e78d Call toggleMO2EndorseState for consistency 2019-02-24 02:31:15 -06:00
LostDragonist bcca611176 Store endorsement state of MO when a reply is received 2019-02-23 21:25:32 -06:00
LostDragonist ceb0ea65ed Update version to 2.2.0beta5 2019-02-23 18:19:01 -06:00
LostDragonist ba8ce395cf Add function to get configured mods directory 2019-02-23 07:11:57 -06:00
LostDragonist 208f389300 Change setGameName parameters to match MOBase changes 2019-02-22 22:18:05 -06:00
LostDragonist 77d6b71395 Fix call to requestModInfo 2019-02-22 22:17:45 -06:00
LostDragonist 570dc369b7 Fix call to requestDownloadURL 2019-02-22 19:53:10 -06:00
LostDragonist ef80a8baca Remove the spoofed NMM version
The new API does not require this and it serves no purpose to keep it.
2019-02-22 04:33:21 -06:00
LostDragonist 0798e102ba Force an update check after installing a mod 2019-02-22 03:45:54 -06:00
LostDragonist 01203bb467 Allow force-check updates to bypass update timeouts 2019-02-21 21:56:09 -06:00
LostDragonist 5812ad3d46 Don't count updates as ignored when the ignored version is invalid 2019-02-21 21:38:52 -06:00
LostDragonist 8f0f41f08c Invalidate mod list sort proxy when mods find updates 2019-02-21 21:36:09 -06:00
LostDragonist 6984711a01 Don't populate newestVersion from mod description
This leaves the newestVersion unpopulated until the user checks the mod for an update.
2019-02-21 20:50:17 -06:00
LostDragonist 3a290b8a5a Fix warning about multiple consts 2019-02-21 19:36:00 -06:00
LostDragonist 8027fea667 Grab the description for downloads instead of the change log 2019-02-21 19:35:15 -06:00
LostDragonist 9dbac137ef Limit the download file description to 4096 characters
The description is limited to 255 characters on the Nexus so this is mostly protecting against invalid data.
2019-02-21 19:32:32 -06:00
LostDragonist 277e0ffded Update translation file 2019-02-21 04:12:51 -06:00
LostDragonist 78be0744f9 Merge pull request #661 from przester/double-install-fix
Fix state breakage when terminating installation via exceptions
2019-02-21 03:30:24 -06:00
LostDragonist 330ff910d1 Add space 2019-02-21 03:16:52 -06:00
Krzysztof Starecki 067d605a58 Fix state breakage when terminating installation via exceptions 2019-02-20 15:20:20 +01:00
LePresidente 51c02718b1 Merge branch 'Develop' of https://github.com/ModOrganizer2/modorganizer into Develop 2019-02-20 09:25:15 +02:00
LePresidente b62dff5fd6 [Appveyor] make sure we are in the appveyor build folder before sending the discord notification, to avoid errors 2019-02-20 09:24:50 +02:00
LostDragonist 8d5cfc2470 Remove more old Nexus settings 2019-02-19 09:01:04 -06:00
LePresidente 1a123d2dfa Updated AppVeyor build to include artifacts, to allow testers to grab new exe's as they are built 2019-02-19 16:21:17 +02:00
LostDragonist 9ec158dcee Fix for Steam being run as administrator
Previously, when Steam was run as administrator, MO couldn't
access the process therefore couldn't detect it.  Now, an
alternative method for listing processes is now being used
in order to determine if Steam is running.

Additionally, MO will detect if Steam is admin and MO is not
and prompt the user if they want to restart MO as admin.
2019-02-19 03:26:08 -06:00
Brian Munro 046a72346c Merge pull request #656 from ModOrganizer2/Appveyor
Appveyor test build process, current project only
2019-02-19 06:30:30 +02:00
Silarn f9ac64c65d Cleanup and version bump 2019-02-18 21:37:34 -06:00
LostDragonist 9634549f92 Rework messages about downloads already queued or started 2019-02-18 21:33:48 -06:00
Silarn d2120a9c55 Extend the update date back one hour to help prevent time mismatches
- Server time and local time may not align perfectly for bulk API
2019-02-18 21:31:22 -06:00
Silarn 70a9cf9429 Coalesce code for identifying game short name from nexus name 2019-02-18 21:31:22 -06:00
LostDragonist 61842daf93 Fix up messages for already pending/started downloads 2019-02-18 21:31:21 -06:00
LostDragonist b43ab45493 Fix display of file names when querying info 2019-02-18 21:31:21 -06:00
Silarn ec0a0a2beb Fix seconds calculation 2019-02-18 21:31:21 -06:00
Silarn 42ae919c96 Fix issue with downloads not being remove on failure
Also adds helpful message when API key is not valid or present
2019-02-18 21:31:21 -06:00
Silarn f7d1ce1fae Small updates, cleanup, update code, cache settings, tooltips 2019-02-18 21:31:21 -06:00
Silarn 2b9d2f32fb Endorsement and efficiency updates
* Reduce update timeout to 5 minutes
* Introduce bulk endorsement check replacing global mod info check
* Fine tune performance of bulk update info query
* Thread the update processing to prevent lockups
2019-02-18 21:31:21 -06:00
Silarn 5a7d0243c6 Implement bulk update check layer 2019-02-18 21:31:20 -06:00
Silarn b59c44aaa1 Some fixes to parse the preferred server list and download speed feature 2019-02-18 21:31:20 -06:00
Silarn 3f86a94ff7 Freeing the credential object when there's no result causes overruns 2019-02-18 21:31:20 -06:00
Silarn 8bc9db23d9 Add settings option to switch between fixed and dynamic cache timeouts 2019-02-18 21:31:20 -06:00
Silarn eb575e2f92 Implement Windows Credential Manager 2019-02-18 21:31:20 -06:00
Silarn ae74c7ff2b Re-simplify ModInfo interface 2019-02-18 21:31:20 -06:00
Silarn d86d2f704a Implement staggered timeouts bases on age.
* < 1 mo = 2 hours
* < 3 mo = 4 hours
* < 6 mo = 6 hours
* < 1 yr = 12 hours
* > 1 yr = 24 hours
2019-02-18 21:31:19 -06:00
Silarn a873c7be23 Simple updates API headers requested by Nexus 2019-02-18 21:31:19 -06:00
Silarn 177f5c0446 Fix issues with duplicate requests, expand parallel requests to 6 2019-02-18 21:31:19 -06:00
Silarn 91e909bc45 Request pools are not combined, we need to use the max of both pools. 2019-02-18 21:31:19 -06:00
LostDragonist 17b36957ff Add Qt5WebSockets to DLL manifest 2019-02-18 21:31:19 -06:00
Silarn 34a374fce8 Several api improvements:
* Don't check time for force updates
* Implement API restrictions for <200 remaining requests
* Fix bug causing duplicate mod checks for differing short name capitalization
2019-02-18 21:31:19 -06:00
Silarn f7220cdd22 Prevent runaway requests and fix info dialog description update display 2019-02-18 21:31:19 -06:00
Silarn 2b5862ef01 Multiple updates:
* Remove periodic auto-update
* Add context menu force-update for mod list
* Fix some bugs with update parsing
  - Ignore update files that are deleted
  - Fix remaining issue with failing to get all mods due to capitalization
* Remove queue retry when out of requests
* Clear all requests when out of requests
* More potential improvements to login/validation process
2019-02-18 21:31:16 -06:00
Silarn 78ae7072c9 Write the file category ID to the mod data when installing/updating 2019-02-18 21:29:27 -06:00
Silarn 7f56407b91 Use NXM link key and expiration in file list API call when available 2019-02-18 21:29:27 -06:00
Silarn d08b836265 Fix various issues when not having a stored API key 2019-02-18 21:29:27 -06:00
Silarn b7d2a608d8 Fixe API Key storage and actually validate the response 2019-02-18 21:29:27 -06:00
Silarn f04c437960 Rework the data and cleanup a bit 2019-02-18 21:29:27 -06:00
Silarn 42d8bba5d4 Stop blindly following examples and use better code 2019-02-18 21:29:27 -06:00
Silarn b751b070e5 Implement using the DPAPI to encrypt credentials 2019-02-18 21:29:27 -06:00
Silarn 2454690813 Make mod search case insensitive, reintroduce timed update batches 2019-02-18 21:29:26 -06:00
Silarn bbed7c0a32 Rework SSO for new protocol and utilize MO2 application ID 2019-02-18 21:29:26 -06:00
Silarn 6b9e94473a Various fixes and updates
* Add second api type for mod info to segment updates from basic desc
* Add saved nexus file type and factor it into the update display
* Fix some issues with how we were checking for 'latest update' files
2019-02-18 21:29:26 -06:00
Silarn 5aed35d2b6 Ensure mainwindow slot doesn't override data we've just set 2019-02-18 21:29:26 -06:00
Silarn 04c6c6da5c Fix missing nexus update setters 2019-02-18 21:29:26 -06:00
Silarn c7c4a8b08e Update outdated UI descriptions for API monitor 2019-02-18 21:29:25 -06:00
Silarn 6030a1d1fc Sorting logic fix and show last updated date 2019-02-18 21:29:25 -06:00
Silarn f07f6b8904 Update Process Improvements
* 5 minute batch auto-update of up to 10 mods
  - Still able to force an update of all 'unchecked' mods
  - Prioritizes mods with oldest update 'age'
* Implemented 1-hour wait between update checks per mod
* Fixed issues with update progress display
* Only enable update filter automatically if 'force update'
* Improved display of version update status in mod list
  - Italic text when ready to perform update check
  - Tooltip indicates when next update is available
* Fixed remaining issues with update fallback check
* Only trigger one update API request for duplicate sources
2019-02-18 21:29:23 -06:00
Silarn ef286a938d Multiple fixes:
* Uses current daily/hourly rate limits
* Fixed issue with translating API game string to mod game string
** Corrects issues with update checks and downloads
2019-02-18 21:28:27 -06:00
Silarn a305ea2270 Translate nexus game name to short name to fix fetching updates 2019-02-18 21:28:26 -06:00
Silarn 370e010a1a Fix a typo 2019-02-18 21:28:26 -06:00
Silarn 4932c52136 Add counter for API requests 2019-02-18 21:28:24 -06:00
Silarn 23ff0bea74 Always emit the failed signal so we trigger another request 2019-02-18 21:28:07 -06:00
Silarn 72de94ee89 Add a retry for rate limited requests and requeue requests with 429 err 2019-02-18 21:28:07 -06:00
Silarn 56f9ba159b Detect throttling with error code 429 2019-02-18 21:28:07 -06:00
Silarn f6dcc77158 Filter deleted downloads from the download query dialog 2019-02-18 21:28:07 -06:00
Silarn b4a9dd410c Fix issue with endorsement response parsing 2019-02-18 21:28:07 -06:00
Silarn b6805f2730 Add some comments and always use latest update file as the version 2019-02-18 21:28:06 -06:00
Silarn b6498abaf3 Implement an API rate limiter 2019-02-18 21:28:06 -06:00
Silarn fbbff08fb8 Fix up mismatched signals and slots 2019-02-18 21:28:06 -06:00
Silarn 4bea346b26 Reworking update checks to use the file update info with a fallback 2019-02-18 21:28:04 -06:00
Silarn 7de78b6697 Several Nexus API-related changes
* Added 30-second ping so Nexus doesn't close our connection
* Set an overall 5 minute timeout before we give up listening for auth
* Fixed some old signal and slot connections
* Added a button to revoke the current API authorization
* Updated bulk endorsement function with new API changes
2019-02-18 21:27:32 -06:00
Silarn 9fe2f6126d Initial Nexus API changes:
- Switch to SSO with WebSocket
- Update endpoints (all but version checking)
2019-02-18 21:26:44 -06:00
LostDragonist bd9cc6254c Update version to 2.2.0beta3 2019-02-18 18:00:11 -06:00
LePresidente f0f672f9b7 appveyor really wants those blank lines between commands. 2019-02-18 16:27:45 +02:00
LePresidente 63134bc94a Use same branch on umbrella as the project. 2019-02-18 16:24:03 +02:00
LePresidente 24ef8c56d2 Added blank lines between commands, due to appveyor sees it as a single command 2019-02-18 14:30:26 +02:00
LePresidente fa9427d22a Added appveyor build badge to readme.md
Added appveyor.yml which will control the appveyor build in the future (currently extremely basic)
2019-02-18 13:50:48 +02:00
LePresidente 3a1a381b9b Minor change to CMakeLists.txt to use the DEPENDENCY_DIR variable from umbrella, instead of relative paths, this is required to support appveyor. 2019-02-18 13:23:21 +02:00
LostDragonist 57fd35fc47 Visit Nexus page for first primary source if game does not have its own Nexus page 2019-02-17 23:16:49 -06:00
Al ee266e5220 Merge pull request #655 from przester/double-install-fix
Reject new mod installations if another one is already running
2019-02-16 20:41:27 +01:00
Krzysztof Starecki d0a6321a39 Update translation file 2019-02-16 13:37:46 +01:00
Krzysztof Starecki b1f91d28fb Merge branch 'Develop' into double-install-fix 2019-02-16 13:34:20 +01:00
Al c19ba15337 Merge pull request #653 from przester/instance-fix
Fix instance errors when downloading the same file multiple times
2019-02-16 13:02:52 +01:00
Al 4b98a3f5b6 Merge pull request #654 from przester/contextmenu-fix
Change mod list context menu to stack allocation
2019-02-15 23:00:07 +01:00
Krzysztof Starecki 55249ba3a6 Reject new mod installations if another one is already running 2019-02-15 22:01:36 +01:00
Krzysztof Starecki 600b0786eb Change mod list context menu to stack allocation 2019-02-15 17:34:44 +01:00
Krzysztof Starecki 02c5b083dc Fix instance errors when downloading the same file multiple times 2019-02-15 17:07:43 +01:00
Al 4d8920cec1 Fix openOriginInfo and openOriginFolder for base files like skyrim.esm 2019-02-15 15:59:33 +01:00
Al 2106f29224 Write currentProfile to Ini file on profile change. Exclusively for outside detection of profile change. 2019-02-15 15:06:44 +01:00
LostDragonist e2b799bd6b Update translation file 2018-12-20 15:56:54 -06:00
LostDragonist 185eb8e5ef Merge branch 'Develop' 2018-12-20 15:34:11 -06:00
LostDragonist ed67ac2113 Merge pull request #586 from ModOrganizer2/Develop
Release 2.1.6
2018-12-20 14:33:08 -06:00
Brian Munro 2232bdfc77 Merge pull request #497 from Modorganizer2/Develop
Fix possible crash during write to disk error
2018-08-22 06:38:34 +02:00
Brian Munro 364289db72 Merge pull request #495 from Modorganizer2/Develop
Release 2.1.5
2018-08-21 12:23:47 +02:00
LePresidente 7b1821a518 Reverted bad commit, should of removed VS_FF_PRERELEASE 2018-08-04 11:24:49 +02:00
LePresidente fb0d4d5e5a use VER_FILEVERSION_STR instead of VER_FILEVERSION so pre-alpha is not shown 2018-08-04 10:35:56 +02:00
Brian Munro 9a3a15b1f6 Merge pull request #454 from Modorganizer2/Develop
Release 2.1.4
2018-08-02 09:15:12 +02:00
Jeremy Rimpo 886fb10288 Merge pull request #343 from Modorganizer2/Develop
Better error message when archives can't be extracted
2018-05-08 19:33:47 -05:00
Jeremy Rimpo 26b946a905 Merge pull request #342 from Modorganizer2/Develop
Fix an issue with resuming a completed download
2018-05-08 19:24:02 -05:00
Jeremy Rimpo 5e6bb0a16e Merge pull request #341 from Modorganizer2/Develop
Reset the progress bar data after completing the extraction
2018-05-08 11:35:45 -05:00
Brian Munro 0da6af17b2 Merge pull request #336 from Modorganizer2/Develop
Release 2.1.3
2018-05-08 12:47:54 +02:00
Brian Munro bc75009169 Merge pull request #294 from Modorganizer2/Develop
Release 2.1.2
2018-04-13 11:56:36 +02:00
69 changed files with 24859 additions and 23598 deletions
+28
View File
@@ -0,0 +1,28 @@
version: 1.0.{build}
skip_branch_with_pr: true
image: Visual Studio 2017
environment:
WEBHOOK_URL:
secure: gOKbXaZM9ImtMD5XrYITvdyZUW/az082G9OIN1EC1VYoNNsKROB4s6VsQiL6qbLNLc4XQhc8Y9DhdU9Hfh49vhypcjUEQmMsENxnp+1hYMJctTqIYDunVSd767eez5wz6rKHqk+XOHmg5gyVNCV9u4DVcCZJSVe4UTKn1lc47H0=
build_script:
- cmd: >-
git clone --depth=1 --branch=%APPVEYOR_REPO_BRANCH% https://github.com/ModOrganizer2/modorganizer-umbrella.git c:\projects\modorganizer-umbrella 2> $null
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%
artifacts:
- path: vsbuild\src\RelWithDebInfo\ModOrganizer.exe
name: modorganizer_exe
- path: vsbuild\src\RelWithDebInfo\ModOrganizer.pdb
name: modorganizer_pdb
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
on_failure:
- 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 failure $env:WEBHOOK_URL
+2 -1
View File
@@ -1,3 +1,5 @@
[![Build status](https://ci.appveyor.com/api/projects/status/23qmd9rufv9vpmg7?svg=true)](https://ci.appveyor.com/project/Modorganizer2/modorganizer)
# Mod Organizer
Mod Organizer (MO) is a tool for managing mod collections of arbitrary size. It is specifically designed for people who like to experiment with mods and thus need an easy and reliable way to install and uninstall them.
@@ -82,4 +84,3 @@ Here is a complete list:
### Unused Repositories
* https://github.com/Modorganizer2/modorganizer-hookdll
* https://github.com/TanninOne/modorganizer-tool_nmmimport
+15 -19
View File
@@ -79,7 +79,6 @@ SET(organizer_SRCS
previewgenerator.cpp
previewdialog.cpp
aboutdialog.cpp
json.cpp
modflagicondelegate.cpp
genericicondelegate.cpp
organizerproxy.cpp
@@ -173,7 +172,6 @@ SET(organizer_HDRS
previewgenerator.h
previewdialog.h
aboutdialog.h
json.h
modflagicondelegate.h
genericicondelegate.h
organizerproxy.h
@@ -250,7 +248,8 @@ SOURCE_GROUP(Headers FILES ${organizer_HDRS})
SOURCE_GROUP(UI FILES ${organizer_UIS})
# MO projects
SET(default_project_path "${CMAKE_SOURCE_DIR}/..")
SET(dependency_project_path "${DEPENDENCIES_DIR}")
SET(default_project_path "${DEPENDENCIES_DIR}/modorganizer_super")
GET_FILENAME_COMPONENT(${default_project_path} ${default_project_path} REALPATH)
SET(project_path "${default_project_path}" CACHE PATH "path to the other mo projects")
@@ -267,6 +266,7 @@ FIND_PACKAGE(Qt5Quick REQUIRED)
FIND_PACKAGE(Qt5Network REQUIRED)
FIND_PACKAGE(Qt5WinExtras REQUIRED)
FIND_PACKAGE(Qt5WebEngineWidgets REQUIRED)
FIND_PACKAGE(Qt5WebSockets REQUIRED)
FIND_PACKAGE(Qt5Qml REQUIRED)
FIND_PACKAGE(Qt5LinguistTools)
QT5_WRAP_UI(organizer_UIHDRS ${organizer_UIS})
@@ -296,7 +296,7 @@ INCLUDE_DIRECTORIES(${project_path}/uibase/src
${project_path}/bsatk/src
${project_path}/esptk/src
${project_path}/archive/src
${project_path}/../usvfs/include
${dependency_project_path}/usvfs/include
${project_path}/game_gamebryo/src/gamebryo
${project_path}/game_gamebryo/src/creation
${project_path}/game_features/src
@@ -325,12 +325,12 @@ ENDIF()
ADD_EXECUTABLE(ModOrganizer WIN32 ${organizer_HDRS} ${organizer_SRCS} ${organizer_UIHDRS} ${organizer_RCS} ${organizer_RCCPPS} ${organizer_translations_qm})
TARGET_LINK_LIBRARIES(ModOrganizer
Qt5::Widgets Qt5::WinExtras Qt5::WebEngineWidgets Qt5::Quick
Qt5::Qml Qt5::QuickWidgets Qt5::Network
Qt5::Qml Qt5::QuickWidgets Qt5::Network Qt5::WebSockets
${Boost_LIBRARIES}
zlibstatic
uibase esptk bsatk githubpp
${usvfs_name}
Dbghelp advapi32 Version Shlwapi liblz4)
Dbghelp advapi32 Version Shlwapi liblz4 Crypt32)
IF (MSVC)
SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES COMPILE_FLAGS "/std:c++latest")
@@ -363,17 +363,19 @@ INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.qt5
DESTINATION bin/dlls
RENAME dlls.manifest)
INSTALL(FILES ${organizer_translations_qm} DESTINATION bin/translations)
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/stylesheets
${CMAKE_CURRENT_SOURCE_DIR}/tutorials
DESTINATION bin)
#We should do this last, since windeployqt.exe scans the folders in bin for required modules e.g QtQuick.2 required by tutorials.
# use windeployqt.exe to install all required libraries
SET(windeploy_parameters "--no-translations --plugindir qtplugins --libdir dlls --release-with-debug-info --no-compiler-runtime")
INSTALL(
CODE
"EXECUTE_PROCESS(COMMAND
${qt5bin}/windeployqt.exe ModOrganizer.exe --webenginewidgets ${windeploy_parameters}
WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin
)
# run it a second time because on the first run it misses some files
EXECUTE_PROCESS(COMMAND
${qt5bin}/windeployqt.exe ModOrganizer.exe --webenginewidgets ${windeploy_parameters}
${qt5bin}/windeployqt.exe ModOrganizer.exe --webenginewidgets --websockets ${windeploy_parameters}
WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin
)
EXECUTE_PROCESS(COMMAND
@@ -390,10 +392,4 @@ INSTALL(
)
# qdds.dll needs installing manually as Qt no longer ships with it by default.
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../qdds.dll DESTINATION bin/dlls/imageformats)
install(FILES ${organizer_translations_qm} DESTINATION bin/translations)
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/stylesheets
${CMAKE_CURRENT_SOURCE_DIR}/tutorials
DESTINATION bin)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../qdds.dll DESTINATION bin/dlls/imageformats)
-10
View File
@@ -32,16 +32,6 @@ CredentialsDialog::~CredentialsDialog()
delete ui;
}
QString CredentialsDialog::username() const
{
return ui->usernameEdit->text();
}
QString CredentialsDialog::password() const
{
return ui->passwordEdit->text();
}
bool CredentialsDialog::store() const
{
return ui->rememberCheck->isChecked();
-3
View File
@@ -34,9 +34,6 @@ public:
explicit CredentialsDialog(QWidget *parent = 0);
~CredentialsDialog();
QString username() const;
QString password() const;
bool store() const;
bool neverAsk() const;
+1 -2
View File
@@ -178,10 +178,9 @@ void DirectoryRefresher::refresh()
std::wstring dataDirectory = QDir::toNativeSeparators(game->dataDirectory().absolutePath()).toStdWString();
m_DirectoryStructure->addFromOrigin(L"data", dataDirectory, 0);
// TODO what was the point of having the priority in this tuple? the list is already sorted by priority
std::sort(m_Mods.begin(), m_Mods.end(), [](auto lhs, auto rhs){return lhs.priority < rhs.priority;});
auto iter = m_Mods.begin();
//TODO i is the priority here, where higher = more important. the input vector is also sorted by priority but inverted!
for (int i = 1; iter != m_Mods.end(); ++iter, ++i) {
try {
addModToStructure(m_DirectoryStructure, iter->modName, i, iter->absolutePath, iter->stealFiles, iter->archives);
+2 -1
View File
@@ -21,6 +21,7 @@
<file name="Qt5Svg.dll"/>
<file name="Qt5WebEngineCore.dll"/>
<file name="Qt5WebEngineWidgets.dll"/>
<file name="Qt5WebSockets.dll"/>
<file name="Qt5Widgets.dll"/>
<file name="Qt5WinExtras.dll"/>
</assembly>
</assembly>
+4 -3
View File
@@ -104,8 +104,9 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const
case DownloadManager::STATE_CANCELED: return tr("Canceled");
case DownloadManager::STATE_PAUSED: return tr("Paused");
case DownloadManager::STATE_ERROR: return tr("Error");
case DownloadManager::STATE_FETCHINGMODINFO: return tr("Fetching Info 1");
case DownloadManager::STATE_FETCHINGFILEINFO: return tr("Fetching Info 2");
case DownloadManager::STATE_FETCHINGMODINFO: return tr("Fetching Info");
case DownloadManager::STATE_FETCHINGFILEINFO: return tr("Fetching Info");
case DownloadManager::STATE_FETCHINGMODINFO_MD5: return tr("Fetching Info");
case DownloadManager::STATE_READY: return tr("Downloaded");
case DownloadManager::STATE_INSTALLED: return tr("Installed");
case DownloadManager::STATE_UNINSTALLED: return tr("Uninstalled");
@@ -133,7 +134,7 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const
text += tr("Information missing, please select \"Query Info\" from the context menu to re-retrieve.");
} else {
const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(index.row());
return QString("%1 (ID %2) %3<br><span>%4</span>").arg(info->modName).arg(m_Manager->getModID(index.row())).arg(info->version.canonicalString()).arg(info->description);
return QString("%1 (ID %2) %3<br><span>%4</span>").arg(info->modName).arg(m_Manager->getModID(index.row())).arg(info->version.canonicalString()).arg(info->description.chopped(4096));
}
return text;
}
+7 -2
View File
@@ -199,8 +199,8 @@ void DownloadListWidget::onCustomContextMenu(const QPoint &point)
if (state >= DownloadManager::STATE_READY) {
menu.addAction(tr("Install"), this, SLOT(issueInstall()));
if (m_Manager->isInfoIncomplete(m_ContextRow))
menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo()));
if (m_Manager->isInfoIncomplete(m_ContextRow))
menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfoMd5()));
else
menu.addAction(tr("Visit on Nexus"), this, SLOT(issueVisitOnNexus()));
menu.addAction(tr("Open File"), this, SLOT(issueOpenFile()));
@@ -252,6 +252,11 @@ void DownloadListWidget::issueQueryInfo()
emit queryInfo(m_ContextRow);
}
void DownloadListWidget::issueQueryInfoMd5()
{
emit queryInfoMd5(m_ContextRow);
}
void DownloadListWidget::issueDelete()
{
if (QMessageBox::question(nullptr, tr("Delete Files?"),
+2
View File
@@ -78,6 +78,7 @@ public:
signals:
void installDownload(int index);
void queryInfo(int index);
void queryInfoMd5(int index);
void removeDownload(int index, bool deleteFile);
void restoreDownload(int index);
void cancelDownload(int index);
@@ -109,6 +110,7 @@ private slots:
void issueRemoveFromViewCompleted();
void issueRemoveFromViewUninstalled();
void issueQueryInfo();
void issueQueryInfoMd5();
private:
DownloadManager *m_Manager;
+2066 -1853
View File
File diff suppressed because it is too large Load Diff
+575 -568
View File
File diff suppressed because it is too large Load Diff
+27 -3
View File
@@ -83,8 +83,33 @@ void EditExecutablesDialog::refreshExecutablesWidget()
void EditExecutablesDialog::on_binaryEdit_textChanged(const QString &name)
{
QFileInfo fileInfo(name);
ui->addButton->setEnabled(fileInfo.exists() && fileInfo.isFile());
updateButtonStates();
}
void EditExecutablesDialog::on_workingDirEdit_textChanged(const QString &dir)
{
updateButtonStates();
}
void EditExecutablesDialog::updateButtonStates()
{
bool enabled = true;
QString filePath(ui->binaryEdit->text());
QFileInfo fileInfo(filePath);
if (!fileInfo.exists())
enabled = false;
if (!fileInfo.isFile())
enabled = false;
QString dirPath(ui->workingDirEdit->text());
if (!dirPath.isEmpty()) {
QDir dirInfo(dirPath);
if (!dirInfo.exists())
enabled = false;
}
ui->addButton->setEnabled(enabled);
}
void EditExecutablesDialog::resetInput()
@@ -293,7 +318,6 @@ bool EditExecutablesDialog::executableChanged()
&& fileInfo.isFile();
}
}
void EditExecutablesDialog::on_executablesListBox_itemSelectionChanged()
{
if (ui->executablesListBox->selectedItems().size() == 0) {
+4
View File
@@ -74,6 +74,8 @@ private slots:
void on_binaryEdit_textChanged(const QString &arg1);
void on_workingDirEdit_textChanged(const QString &arg1);
void on_addButton_clicked();
void on_browseButton_clicked();
@@ -106,6 +108,8 @@ private:
bool executableChanged();
void updateButtonStates();
private:
Ui::EditExecutablesDialog *ui;
+18 -1
View File
@@ -25,6 +25,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QFileInfo>
#include <QDir>
#include <QDebug>
#include <QCoreApplication>
#include <algorithm>
@@ -53,6 +55,17 @@ void ExecutablesList::init(IPluginGame const *game)
info.steamAppID());
}
}
ExecutableInfo explorerpp = ExecutableInfo("Explore Virtual Folder", QFileInfo(QCoreApplication::applicationDirPath() + "/explorer++/Explorer++.exe" ))
.withArgument(QString("\"%1\"").arg(QDir::toNativeSeparators(game->dataDirectory().absolutePath())));
if (explorerpp.isValid()) {
addExecutableInternal(explorerpp.title(),
explorerpp.binary().absoluteFilePath(),
explorerpp.arguments().join(" "),
explorerpp.workingDirectory().absolutePath(),
explorerpp.steamAppID());
}
}
void ExecutablesList::getExecutables(std::vector<Executable>::iterator &begin, std::vector<Executable>::iterator &end)
@@ -139,6 +152,7 @@ void ExecutablesList::updateExecutable(const QString &title,
Executable::Flags flags)
{
QFileInfo file(executableName);
QDir dir(workingDirectory);
auto existingExe = findExe(title);
flags &= mask;
@@ -152,8 +166,11 @@ void ExecutablesList::updateExecutable(const QString &title,
// don't overwrite a valid binary with an invalid one
existingExe->m_BinaryInfo = file;
}
if (dir.exists()) {
// don't overwrite a valid working directory with an invalid one
existingExe->m_WorkingDirectory = workingDirectory;
}
existingExe->m_Arguments = arguments;
existingExe->m_WorkingDirectory = workingDirectory;
existingExe->m_SteamAppID = steamAppID;
}
} else {
+16 -3
View File
@@ -80,7 +80,8 @@ static T resolveFunction(QLibrary &lib, const char *name)
InstallationManager::InstallationManager()
: m_ParentWidget(nullptr),
m_SupportedExtensions({"zip", "rar", "7z", "fomod", "001"}) {
m_SupportedExtensions({"zip", "rar", "7z", "fomod", "001"}),
m_IsRunning(false) {
QLibrary archiveLib(QCoreApplication::applicationDirPath() +
"\\dlls\\archive.dll");
if (!archiveLib.load()) {
@@ -560,7 +561,7 @@ bool InstallationManager::ensureValidModName(GuessedValue<QString> &name) const
bool InstallationManager::doInstall(GuessedValue<QString> &modName, QString gameName, int modID,
const QString &version, const QString &newestVersion,
int categoryID, const QString &repository)
int categoryID, int fileCategoryID, const QString &repository)
{
if (!ensureValidModName(modName)) {
return false;
@@ -640,6 +641,7 @@ bool InstallationManager::doInstall(GuessedValue<QString> &modName, QString game
if (!settingsFile.contains("category")) {
settingsFile.setValue("category", QString::number(categoryID));
}
settingsFile.setValue("nexusFileStatus", fileCategoryID);
settingsFile.setValue("installationFile", m_CurrentFile);
settingsFile.setValue("repository", repository);
settingsFile.setValue("url", m_URL);
@@ -664,6 +666,11 @@ bool InstallationManager::wasCancelled()
return m_ArchiveHandler->getLastError() == Archive::ERROR_EXTRACT_CANCELLED;
}
bool InstallationManager::isRunning()
{
return m_IsRunning;
}
void InstallationManager::postInstallCleanup()
{
@@ -705,6 +712,9 @@ bool InstallationManager::install(const QString &fileName,
bool &hasIniTweaks,
int modID)
{
m_IsRunning = true;
ON_BLOCK_EXIT([this]() { m_IsRunning = false; });
QFileInfo fileInfo(fileName);
if (m_SupportedExtensions.find(fileInfo.suffix()) == m_SupportedExtensions.end()) {
reportError(tr("File format \"%1\" not supported").arg(fileInfo.suffix()));
@@ -720,6 +730,7 @@ bool InstallationManager::install(const QString &fileName,
QString version = "";
QString newestVersion = "";
int categoryID = 0;
int fileCategoryID = 1;
QString repository = "Nexus";
QString metaName = fileName + ".meta";
@@ -738,6 +749,7 @@ bool InstallationManager::install(const QString &fileName,
metaFile.value("category", 0).toInt());
categoryID = CategoryFactory::instance().getCategoryID(categoryIndex);
repository = metaFile.value("repository", "").toString();
fileCategoryID = metaFile.value("fileCategory", 1).toInt();
}
if (version.isEmpty()) {
@@ -815,7 +827,7 @@ bool InstallationManager::install(const QString &fileName,
// the simple installer only prepares the installation, the rest
// works the same for all installers
if (!doInstall(modName, gameName, modID, version, newestVersion, categoryID,
repository)) {
fileCategoryID, repository)) {
installResult = IPluginInstaller::RESULT_FAILED;
}
}
@@ -871,6 +883,7 @@ bool InstallationManager::install(const QString &fileName,
reportError(tr("None of the available installer plugins were able to handle that archive.\n"
"This is likely due to a corrupted or incompatible download or unrecognized archive format."));
return false;
}
+8 -1
View File
@@ -89,6 +89,11 @@ public:
**/
bool wasCancelled();
/**
* @return true if an installation is currently in progress
**/
bool isRunning();
/**
* @brief retrieve a string describing the specified error code
*
@@ -171,7 +176,7 @@ private:
MOBase::DirectoryTree::Node *getSimpleArchiveBase(MOBase::DirectoryTree *dataTree);
bool doInstall(MOBase::GuessedValue<QString> &modName, QString gameName,
int modID, const QString &version, const QString &newestVersion, int categoryID, const QString &repository);
int modID, const QString &version, const QString &newestVersion, int categoryID, int fileCategoryID, const QString &repository);
//QString generateBackupName(const QString &directoryName) const;
@@ -202,6 +207,8 @@ private:
private:
bool m_IsRunning;
QWidget *m_ParentWidget;
QString m_ModsDirectory;
-522
View File
File diff suppressed because it is too large Load Diff
-94
View File
@@ -1,94 +0,0 @@
/**
* QtJson - A simple class for parsing JSON data into a QVariant hierarchies and vice-versa.
* Copyright (C) 2011 Eeli Reilin
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file json.h
*/
#ifndef JSON_H
#define JSON_H
#include <QVariant>
#include <QString>
/**
* \namespace QtJson
* \brief A JSON data parser
*
* Json parses a JSON data into a QVariant hierarchy.
*/
namespace QtJson {
typedef QVariantMap JsonObject;
typedef QVariantList JsonArray;
/**
* Parse a JSON string
*
* \param json The JSON data
*/
QVariant parse(const QString &json);
/**
* Parse a JSON string
*
* \param json The JSON data
* \param success The success of the parsing
*/
QVariant parse(const QString &json, bool &success);
/**
* This method generates a textual JSON representation
*
* \param data The JSON data generated by the parser.
*
* \return QByteArray Textual JSON representation in UTF-8
*/
QByteArray serialize(const QVariant &data);
/**
* This method generates a textual JSON representation
*
* \param data The JSON data generated by the parser.
* \param success The success of the serialization
*
* \return QByteArray Textual JSON representation in UTF-8
*/
QByteArray serialize(const QVariant &data, bool &success);
/**
* This method generates a textual JSON representation
*
* \param data The JSON data generated by the parser.
*
* \return QString Textual JSON representation
*/
QString serializeStr(const QVariant &data);
/**
* This method generates a textual JSON representation
*
* \param data The JSON data generated by the parser.
* \param success The success of the serialization
*
* \return QString Textual JSON representation
*/
QString serializeStr(const QVariant &data, bool &success);
}
#endif //JSON_H
+23 -15
View File
@@ -51,21 +51,24 @@ LogBuffer::~LogBuffer()
void LogBuffer::logMessage(QtMsgType type, const QString &message)
{
if (type >= m_MinMsgType) {
Message msg = {type, QTime::currentTime(), message};
if (m_NumMessages < m_Messages.size()) {
beginInsertRows(QModelIndex(), static_cast<int>(m_NumMessages),
static_cast<int>(m_NumMessages) + 1);
}
m_Messages.at(m_NumMessages % m_Messages.size()) = msg;
if (m_NumMessages < m_Messages.size()) {
endInsertRows();
} else {
emit dataChanged(createIndex(0, 0),
createIndex(static_cast<int>(m_Messages.size()), 0));
}
++m_NumMessages;
if (type >= QtCriticalMsg) {
write();
QStringList messagelist = message.split("\n");
for (auto split_message : messagelist) {
Message msg = {type, QTime::currentTime(), split_message};
if (m_NumMessages < m_Messages.size()) {
beginInsertRows(QModelIndex(), static_cast<int>(m_NumMessages),
static_cast<int>(m_NumMessages) + 1);
}
m_Messages.at(m_NumMessages % m_Messages.size()) = msg;
if (m_NumMessages < m_Messages.size()) {
endInsertRows();
} else {
emit dataChanged(createIndex(0, 0),
createIndex(static_cast<int>(m_Messages.size()), 0));
}
++m_NumMessages;
if (type >= QtCriticalMsg) {
write();
}
}
}
}
@@ -111,6 +114,8 @@ char LogBuffer::msgTypeID(QtMsgType type)
switch (type) {
case QtDebugMsg:
return 'D';
case QtInfoMsg:
return 'I';
case QtWarningMsg:
return 'W';
case QtCriticalMsg:
@@ -200,6 +205,7 @@ QVariant LogBuffer::data(const QModelIndex &index, int role) const
if (index.column() == 1) {
switch (m_Messages[msgIndex].type) {
case QtDebugMsg:
case QtInfoMsg:
return QIcon(":/MO/gui/information");
case QtWarningMsg:
return QIcon(":/MO/gui/warning");
@@ -215,6 +221,8 @@ QVariant LogBuffer::data(const QModelIndex &index, int role) const
switch (m_Messages[msgIndex].type) {
case QtDebugMsg:
return "D";
case QtInfoMsg:
return "I";
case QtWarningMsg:
return "W";
case QtCriticalMsg:

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