aboutsummaryrefslogtreecommitdiff
path: root/libs/game_bethesda/src/gamebryo
diff options
context:
space:
mode:
Diffstat (limited to 'libs/game_bethesda/src/gamebryo')
-rw-r--r--libs/game_bethesda/src/gamebryo/CMakeLists.txt6
-rw-r--r--libs/game_bethesda/src/gamebryo/gamegamebryo.cpp43
2 files changed, 17 insertions, 32 deletions
diff --git a/libs/game_bethesda/src/gamebryo/CMakeLists.txt b/libs/game_bethesda/src/gamebryo/CMakeLists.txt
index bbc47ae..9e5970b 100644
--- a/libs/game_bethesda/src/gamebryo/CMakeLists.txt
+++ b/libs/game_bethesda/src/gamebryo/CMakeLists.txt
@@ -58,11 +58,7 @@ target_link_libraries(game_gamebryo
$<IF:$<TARGET_EXISTS:lz4::lz4>,lz4::lz4,PkgConfig::LZ4>
)
-# NaK FFI for game detection (replaces Windows registry)
-if(TARGET mo2::nak_ffi)
- target_link_libraries(game_gamebryo PRIVATE mo2::nak_ffi)
- target_compile_definitions(game_gamebryo PRIVATE HAS_NAK_FFI)
-endif()
+# Game detection symbols are in libuibase.so (already linked via mo2::uibase).
target_include_directories(game_gamebryo PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp b/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp
index 2fd45cd..9d29dcf 100644
--- a/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp
+++ b/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp
@@ -39,8 +39,9 @@
#include <winver.h>
#endif
-#ifdef HAS_NAK_FFI
-#include <nak_ffi.h>
+#ifndef _WIN32
+#include "gamedetection.h"
+#include "steamdetection.h"
#endif
#include <optional>
@@ -230,12 +231,9 @@ QFileInfo GameGamebryo::findInGameFolder(const QString& relativePath) const
QString GameGamebryo::identifyGamePath() const
{
-#ifdef HAS_NAK_FFI
- // Use NaK to detect game installations on Linux
- NakGameList gameList = nak_detect_all_games();
- ON_BLOCK_EXIT([&]() {
- nak_game_list_free(gameList);
- });
+#ifndef _WIN32
+ // Detect game installations on Linux.
+ const GameScanResult scanResult = detectAllGames();
QString shortName = gameShortName();
QString fullName = gameName();
@@ -258,17 +256,14 @@ QString GameGamebryo::identifyGamePath() const
return anyToken;
};
- for (size_t i = 0; i < gameList.count; ++i) {
- const NakGame& game = gameList.games[i];
- QString detectedName = QString::fromUtf8(game.name);
- QString detectedPath = QString::fromUtf8(game.install_path);
- if (detectedName.compare(fullName, Qt::CaseInsensitive) == 0 ||
- detectedName.compare(shortName, Qt::CaseInsensitive) == 0 ||
- detectedName.contains(fullName, Qt::CaseInsensitive) ||
- detectedName.contains(shortName, Qt::CaseInsensitive) ||
- tokensMatch(detectedName, fullName) || tokensMatch(detectedName, shortName)) {
- if (looksValid(QDir(detectedPath))) {
- return detectedPath;
+ for (const DetectedGame& game : scanResult.games) {
+ if (game.name.compare(fullName, Qt::CaseInsensitive) == 0 ||
+ game.name.compare(shortName, Qt::CaseInsensitive) == 0 ||
+ game.name.contains(fullName, Qt::CaseInsensitive) ||
+ game.name.contains(shortName, Qt::CaseInsensitive) ||
+ tokensMatch(game.name, fullName) || tokensMatch(game.name, shortName)) {
+ if (looksValid(QDir(game.install_path))) {
+ return game.install_path;
}
}
}
@@ -857,14 +852,8 @@ QString GameGamebryo::parseEpicGamesLocation(const QStringList& manifests)
QString GameGamebryo::parseSteamLocation(const QString& appid,
const QString& directoryName)
{
-#ifdef HAS_NAK_FFI
- // Use NaK to find Steam path
- char* steamPathC = nak_find_steam_path();
- QString steamLocation;
- if (steamPathC) {
- steamLocation = QString::fromUtf8(steamPathC);
- nak_string_free(steamPathC);
- }
+#ifndef _WIN32
+ QString steamLocation = findSteamPath();
#elif defined(_WIN32)
QString path = "Software\\Valve\\Steam";
QString steamLocation =