aboutsummaryrefslogtreecommitdiff
path: root/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-04-08 03:30:04 -0500
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-04-08 03:30:04 -0500
commit3de4056df4ea5d0afbcea388ad8d681daea1aac3 (patch)
treefc5978451f9f51b84268f45bd2fa6f5d4a17baaf /libs/game_bethesda/src/gamebryo/gamegamebryo.cpp
parent5ba23a6d7a40052d9e1d4bd0cf018cfe7814d03a (diff)
Remove NaK/Rust dependency, port remaining functionality to native C++
Replace NaK Rust crate and nak_ffi with native C++ implementations: - Game detection (Steam, Heroic, Bottles), VDF parser, icon extraction - Prefix symlinks, SLR manager, Steam path detection - Known games database Add FUSE VFS optimizations: zero-copy reads via fuse_reply_data, default_permissions mount option, FUSE_CAP_ASYNC_DIO, FUSE_CAP_EXPIRE_ONLY, lookup cache parent index, cached mode bits, increased I/O buffer sizes. Update build system, prefix setup, and various fixes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'libs/game_bethesda/src/gamebryo/gamegamebryo.cpp')
-rw-r--r--libs/game_bethesda/src/gamebryo/gamegamebryo.cpp43
1 files changed, 16 insertions, 27 deletions
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 =