From 549b84b0f8815737c93913b200dde3821a062cb0 Mon Sep 17 00:00:00 2001 From: SulfurNitride Date: Sat, 16 May 2026 19:51:40 -0500 Subject: mo2: catch up to upstream 2.5.3 Betas 3-11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Multi-area sync against the upstream MO2 2.5.3 beta line. Roughly three logical sections share the diff: Catch-up (Betas 3-11): - nxmaccessmanager: drop "supporter" from validRoles so non-premium supporters get the right download path (Beta 10) - mainwindow: disable tutorial triggers at the trigger sites; Qt 6.11 lockup on child windows (Beta 4) - basic_games: add Kingdom Come Deliverance 2, Slay the Spire 2 (Betas 11, 6) - uibase: add NXM collections parsing fields/accessors + (?:nxm|modl) scheme support in NXMUrl (Beta 9) - Starfield: blueprintPrefix() on IPluginGame; plugins.txt write suppression for blueprint plugins; hasInvalidBlueprint / hasUnpairedBlueprint diagnoses; Title-keyed content catalog consolidation (Betas 3-5) - downloadmanager + systemtraymanager + organizercore + iuserinterface + settings: add Beta 11 "show notifications when downloads complete or fail" toggle and the showNotification plumbing - nxmaccessmanager: restore upstream re-entry guard for OAuth refresh and the styled OAuth response page (Beta 11) - organizer_en.ts and game-bethesda *_en.ts: pull upstream HEAD strings Workarounds tab removed: - Delete settingsdialogworkarounds.{h,cpp}; drop the tab in settingsdialog.ui; move "Enable archives parsing" into General - Hardcode GameSettings::forceEnableCoreFiles() to true so the primary-master toggle-off bug (DLCs unchecked on tab refresh) can't recur; setter becomes a no-op - No-op stubs for offlineMode, useProxy, useCustomBrowser, Steam appID/credentials, executablesBlacklist, skipFileSuffixes, skipDirectories — UI gone, accessors keep call sites green - settingsdialognexus drops the custom-browser wiring; spawn drops the "Change the blacklist" Retry path Beta 9 download manager port: - fileID-first match in nxmFilesAvailable and nxmFileInfoFromMd5Available; filename remains the fallback - NexusInterface::isActiveFileStatus() helper; rewrite of nxmUpdatesAvailable to use pickNewestVersion / findUpdateChainSuccessors / resolveInstalledFileId. ARCHIVED_HIDDEN now correctly treated as inactive - std::optional reservedID on DownloadInfo factories and on the three addDownload overloads; startDownloadURLs and startDownloadURLWithMeta return the canonical DownloadID instead of m_ActiveDownloads.size()-1 (which was the index, not an ID) - QHash m_ByID maintained alongside m_ActiveDownloads at every mutation site; downloadInfoByID is now O(1) via m_ByID.value(id, nullptr) LOOT remains intentionally stripped (lootcli build cruft cleaned up separately). BSA wide-path skipped — Linux UTF-8 paths already work. Co-Authored-By: Claude Opus 4.7 (1M context) --- libs/uibase/include/uibase/iplugingame.h | 7 +++++++ libs/uibase/include/uibase/nxmurl.h | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) (limited to 'libs/uibase/include') diff --git a/libs/uibase/include/uibase/iplugingame.h b/libs/uibase/include/uibase/iplugingame.h index 93ee09f..c7760f1 100644 --- a/libs/uibase/include/uibase/iplugingame.h +++ b/libs/uibase/include/uibase/iplugingame.h @@ -314,6 +314,13 @@ public: */ virtual QStringList CCPlugins() const { return {}; } + /** + * @brief Get the blueprint plugin prefix for blueprint autoloading + * + * @node Primarily used by Starfield + */ + virtual QString blueprintPrefix() const { return ""; } + /* * @brief determine the load order mechanism used by this game. * diff --git a/libs/uibase/include/uibase/nxmurl.h b/libs/uibase/include/uibase/nxmurl.h index bd06d3d..dd1935e 100644 --- a/libs/uibase/include/uibase/nxmurl.h +++ b/libs/uibase/include/uibase/nxmurl.h @@ -75,6 +75,21 @@ public: */ int userId() const { return m_UserId; } + /** + * @return if collection link + */ + bool isCollection() const { return m_Collection; } + + /** + * @return collection ID + */ + QString collectionId() const { return m_CollectionId; } + + /** + * @return collection revision + */ + int collectionRevision() const { return m_CollectionRevision; } + private: QString m_Game; QString m_Key; @@ -82,6 +97,9 @@ private: int m_FileId; int m_Expires; int m_UserId; + bool m_Collection; + QString m_CollectionId; + int m_CollectionRevision; }; #endif // NXMURL_H -- cgit v1.3.1