mirror of
https://github.com/ModOrganizer2/modorganizer.git
synced 2026-07-27 13:58:24 -07:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7665d9dd61 | ||
|
|
12104ed988 |
@@ -7,7 +7,7 @@ on:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
env:
|
||||
VCPKG_BINARY_SOURCES: ${{ vars.AZ_BLOB_VCPKG_URL != '' && format('clear;x-azblob,{0},{1},readwrite', vars.AZ_BLOB_VCPKG_URL, secrets.AZ_BLOB_SAS) || '' }}
|
||||
VCPKG_BINARY_SOURCES: clear;x-azblob,${{ vars.AZ_BLOB_VCPKG_URL }},${{ secrets.AZ_BLOB_SAS }},readwrite
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
id: build-modorganizer
|
||||
uses: ModOrganizer2/build-with-mob-action@master
|
||||
with:
|
||||
qt-modules: qtpositioning qtwebchannel qtwebengine qtwebsockets qtnetworkauth
|
||||
qt-modules: qtpositioning qtwebchannel qtwebengine qtwebsockets
|
||||
mo2-dependencies: usvfs uibase bsatk esptk archive lootcli
|
||||
|
||||
- name: Install ModOrganizer
|
||||
|
||||
+1
-4
@@ -8,12 +8,9 @@ src/*.bak
|
||||
CMakeLists.txt.user
|
||||
edit
|
||||
/CMakeFiles
|
||||
.idea/*
|
||||
!.idea/filetypes/
|
||||
!.idea/filetypes/qt-translations.xml
|
||||
.idea
|
||||
/msbuild.log
|
||||
/*std*.log
|
||||
/*build
|
||||
|
||||
/src/version.aps
|
||||
.idea/
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v6.0.0
|
||||
rev: v5.0.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
- id: end-of-file-fixer
|
||||
- id: check-merge-conflict
|
||||
- id: check-case-conflict
|
||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||
rev: v22.1.5
|
||||
rev: v19.1.5
|
||||
hooks:
|
||||
- id: clang-format
|
||||
'types_or': [c++, c]
|
||||
|
||||
@@ -5,6 +5,8 @@ set(MO2_CMAKE_DEPRECATED_UIBASE_INCLUDE ON)
|
||||
|
||||
project(organizer)
|
||||
|
||||
find_package(mo2-cmake CONFIG REQUIRED)
|
||||
|
||||
# if MO2_INSTALL_IS_BIN is set, this means that we should install directly into the
|
||||
# installation prefix, without the bin/ subfolder, typically for a standalone build
|
||||
# to update an existing install
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
[](https://ci.appveyor.com/project/ModOrganizer2/modorganizer-736bd)
|
||||
|
||||
# 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.
|
||||
@@ -18,14 +20,14 @@ If you want to submit your code changes, please use a good formatting style like
|
||||
Through the work of a few people of the community MO2 has come quite far, now it needs some more of those people to go further.
|
||||
|
||||
## Reporting Issues:
|
||||
Issues should be reported to the GitHub page or on the open Discord server: [Mod Organizer 2](https://discord.gg/ewUVAqyrQX). Here is also where dev builds are tested, bugs are reported and investigated, suggestions are discussed and a lot more.
|
||||
Issues should be reported to the GitHub page or on the open discord server: [Mod Organizer 2](https://discord.gg/ewUVAqyrQX). Here is also where dev builds are tested, bugs are reported and investigated, suggestions are discussed and a lot more.
|
||||
|
||||
Credits to Tannin, LePresidente, Silarn, erasmux, AL12, LostDragonist, AnyOldName3, isa, Holt59, Project579, przester, Qudix, RJ, Jonathan Feenstra and many others for the development.
|
||||
|
||||
## Download Location
|
||||
|
||||
* on [GitHub.com](https://github.com/Modorganizer2/modorganizer/releases)
|
||||
* on [NexusMods.com](https://www.nexusmods.com/site/mods/6)
|
||||
* on [NexusMods.com](https://www.nexusmods.com/skyrimspecialedition/mods/6194)
|
||||
|
||||
## Old Download Location
|
||||
|
||||
|
||||
+2
-9
@@ -1,6 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
find_package(mo2-cmake CONFIG REQUIRED)
|
||||
|
||||
find_package(usvfs CONFIG REQUIRED)
|
||||
|
||||
@@ -12,7 +11,7 @@ find_package(mo2-esptk CONFIG REQUIRED)
|
||||
find_package(mo2-dds-header CONFIG REQUIRED)
|
||||
find_package(mo2-libbsarch CONFIG REQUIRED)
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets WebSockets NetworkAuth)
|
||||
find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets WebSockets)
|
||||
find_package(Boost CONFIG REQUIRED COMPONENTS program_options thread interprocess signals2 uuid accumulators)
|
||||
find_package(7zip CONFIG REQUIRED)
|
||||
find_package(lz4 CONFIG REQUIRED)
|
||||
@@ -41,7 +40,7 @@ target_link_libraries(organizer PRIVATE
|
||||
usvfs::usvfs mo2::uibase mo2::archive mo2::libbsarch
|
||||
mo2::bsatk mo2::esptk mo2::lootcli-header
|
||||
Boost::program_options Boost::signals2 Boost::uuid Boost::accumulators
|
||||
Qt6::WebEngineWidgets Qt6::WebSockets Qt6::NetworkAuth Version Dbghelp)
|
||||
Qt6::WebEngineWidgets Qt6::WebSockets Version Dbghelp)
|
||||
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.qt6"
|
||||
DESTINATION ${_bin}/dlls
|
||||
@@ -109,7 +108,6 @@ mo2_add_filter(NAME src/application GROUPS
|
||||
multiprocess
|
||||
sanitychecks
|
||||
selfupdater
|
||||
systemtraymanager
|
||||
updatedialog
|
||||
)
|
||||
|
||||
@@ -130,9 +128,6 @@ mo2_add_filter(NAME src/core GROUPS
|
||||
githubpp
|
||||
installationmanager
|
||||
nexusinterface
|
||||
nexusoauthlogin
|
||||
nexusoauthtokens
|
||||
nexusoauthconfig
|
||||
nxmaccessmanager
|
||||
organizercore
|
||||
game_features
|
||||
@@ -277,9 +272,7 @@ mo2_add_filter(NAME src/profiles GROUPS
|
||||
|
||||
mo2_add_filter(NAME src/proxies GROUPS
|
||||
downloadmanagerproxy
|
||||
executableslistproxy
|
||||
gamefeaturesproxy
|
||||
instancemanagerproxy
|
||||
modlistproxy
|
||||
organizerproxy
|
||||
pluginlistproxy
|
||||
|
||||
@@ -45,6 +45,7 @@ AboutDialog::AboutDialog(const QString& version, QWidget* parent)
|
||||
m_LicenseFiles[LICENSE_CCBY3] = "BY-SA-v3.0.txt";
|
||||
m_LicenseFiles[LICENSE_ZLIB] = "zlib.txt";
|
||||
m_LicenseFiles[LICENSE_PYTHON] = "python.txt";
|
||||
m_LicenseFiles[LICENSE_SSL] = "openssl.txt";
|
||||
m_LicenseFiles[LICENSE_CPPTOML] = "cpptoml.txt";
|
||||
m_LicenseFiles[LICENSE_UDIS] = "udis86.txt";
|
||||
m_LicenseFiles[LICENSE_SPDLOG] = "spdlog.txt";
|
||||
@@ -68,6 +69,7 @@ AboutDialog::AboutDialog(const QString& version, QWidget* parent)
|
||||
addLicense("ANTLR", LICENSE_ANTLR);
|
||||
addLicense("LOOT", LICENSE_GPL3);
|
||||
addLicense("Python", LICENSE_PYTHON);
|
||||
addLicense("OpenSSL", LICENSE_SSL);
|
||||
addLicense("cpptoml", LICENSE_CPPTOML);
|
||||
addLicense("Udis86", LICENSE_UDIS);
|
||||
addLicense("spdlog", LICENSE_SPDLOG);
|
||||
|
||||
@@ -51,6 +51,7 @@ private:
|
||||
LICENSE_BOOST,
|
||||
LICENSE_CCBY3,
|
||||
LICENSE_PYTHON,
|
||||
LICENSE_SSL,
|
||||
LICENSE_CPPTOML,
|
||||
LICENSE_7ZIP,
|
||||
LICENSE_ZLIB,
|
||||
|
||||
+721
-893
File diff suppressed because it is too large
Load Diff
+4
-15
@@ -19,17 +19,12 @@ APIUserAccount::APIUserAccount() : m_type(APIUserAccountTypes::None) {}
|
||||
|
||||
bool APIUserAccount::isValid() const
|
||||
{
|
||||
return !m_accessToken.isEmpty() || !m_apiKey.isEmpty();
|
||||
}
|
||||
|
||||
const QString& APIUserAccount::accessToken() const
|
||||
{
|
||||
return m_accessToken;
|
||||
return !m_key.isEmpty();
|
||||
}
|
||||
|
||||
const QString& APIUserAccount::apiKey() const
|
||||
{
|
||||
return m_apiKey;
|
||||
return m_key;
|
||||
}
|
||||
|
||||
const QString& APIUserAccount::id() const
|
||||
@@ -52,15 +47,9 @@ const APILimits& APIUserAccount::limits() const
|
||||
return m_limits;
|
||||
}
|
||||
|
||||
APIUserAccount& APIUserAccount::accessToken(const QString& token)
|
||||
APIUserAccount& APIUserAccount::apiKey(const QString& key)
|
||||
{
|
||||
m_accessToken = token;
|
||||
return *this;
|
||||
}
|
||||
|
||||
APIUserAccount& APIUserAccount::apiKey(const QString& apiKey)
|
||||
{
|
||||
m_apiKey = apiKey;
|
||||
m_key = key;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
+4
-14
@@ -65,12 +65,7 @@ public:
|
||||
bool isValid() const;
|
||||
|
||||
/**
|
||||
* OAuth access token
|
||||
*/
|
||||
const QString& accessToken() const;
|
||||
|
||||
/**
|
||||
* OAuth access token
|
||||
* api key
|
||||
*/
|
||||
const QString& apiKey() const;
|
||||
|
||||
@@ -95,14 +90,9 @@ public:
|
||||
const APILimits& limits() const;
|
||||
|
||||
/**
|
||||
* sets the OAuth access token
|
||||
* sets the api key
|
||||
*/
|
||||
APIUserAccount& accessToken(const QString& token);
|
||||
|
||||
/**
|
||||
* sets the OAuth access token
|
||||
*/
|
||||
APIUserAccount& apiKey(const QString& apiKey);
|
||||
APIUserAccount& apiKey(const QString& key);
|
||||
|
||||
/**
|
||||
* sets the user id
|
||||
@@ -142,7 +132,7 @@ public:
|
||||
bool exhausted() const;
|
||||
|
||||
private:
|
||||
QString m_accessToken, m_apiKey, m_id, m_name;
|
||||
QString m_key, m_id, m_name;
|
||||
APIUserAccountTypes m_type;
|
||||
APILimits m_limits;
|
||||
};
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<longPathAware xmlns="microsoft.com">true</longPathAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
</assembly>
|
||||
@@ -17,8 +17,8 @@ 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 ARCHIVEFILETREE_H
|
||||
#define ARCHIVEFILETREE_H
|
||||
#ifndef ARCHIVEFILENETRY_H
|
||||
#define ARCHIVEFILENTRY_H
|
||||
|
||||
#include <archive/archive.h>
|
||||
#include <uibase/ifiletree.h>
|
||||
|
||||
+14
-20
@@ -57,17 +57,13 @@ void CategoryFactory::loadCategories()
|
||||
QFile categoryFile(categoriesFilePath());
|
||||
bool needLoad = false;
|
||||
|
||||
if (!categoryFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
if (!categoryFile.open(QIODevice::ReadOnly)) {
|
||||
needLoad = true;
|
||||
} else {
|
||||
const auto lines = categoryFile.readAll().split('\n');
|
||||
categoryFile.close();
|
||||
for (int lineNum = 0; lineNum < lines.size(); ++lineNum) {
|
||||
const auto& line = lines[lineNum];
|
||||
if (line.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int lineNum = 0;
|
||||
while (!categoryFile.atEnd()) {
|
||||
QByteArray line = categoryFile.readLine();
|
||||
++lineNum;
|
||||
QList<QByteArray> cells = line.split('|');
|
||||
if (cells.count() == 4) {
|
||||
std::vector<NexusCategory> nexusCats;
|
||||
@@ -80,7 +76,7 @@ void CategoryFactory::loadCategories()
|
||||
if (!ok) {
|
||||
log::error(tr("invalid category id {0}"), iter->constData());
|
||||
}
|
||||
nexusCats.emplace_back("Unknown", temp);
|
||||
nexusCats.push_back(NexusCategory("Unknown", temp));
|
||||
}
|
||||
}
|
||||
bool cell0Ok = true;
|
||||
@@ -107,19 +103,16 @@ void CategoryFactory::loadCategories()
|
||||
line.constData(), cells.count());
|
||||
}
|
||||
}
|
||||
categoryFile.close();
|
||||
|
||||
QFile nexusMapFile(nexusMappingFilePath());
|
||||
if (!nexusMapFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
if (!nexusMapFile.open(QIODevice::ReadOnly)) {
|
||||
needLoad = true;
|
||||
} else {
|
||||
const auto nexLines = nexusMapFile.readAll().split('\n');
|
||||
nexusMapFile.close();
|
||||
for (int nexLineNum = 0; nexLineNum < nexLines.size(); ++nexLineNum) {
|
||||
const auto& nexLine = nexLines[nexLineNum];
|
||||
if (nexLine.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int nexLineNum = 0;
|
||||
while (!nexusMapFile.atEnd()) {
|
||||
QByteArray nexLine = nexusMapFile.readLine();
|
||||
++nexLineNum;
|
||||
QList<QByteArray> nexCells = nexLine.split('|');
|
||||
if (nexCells.count() == 3) {
|
||||
std::vector<NexusCategory> nexusCats;
|
||||
@@ -136,11 +129,12 @@ void CategoryFactory::loadCategories()
|
||||
m_NexusMap.insert_or_assign(nexID, NexusCategory(nexName, nexID));
|
||||
m_NexusMap.at(nexID).setCategoryID(catID);
|
||||
} else {
|
||||
log::error(tr("invalid nexus category line {0}: {1} ({2} cells)"), nexLineNum,
|
||||
log::error(tr("invalid nexus category line {0}: {1} ({2} cells)"), lineNum,
|
||||
nexLine.constData(), nexCells.count());
|
||||
}
|
||||
}
|
||||
}
|
||||
nexusMapFile.close();
|
||||
}
|
||||
std::sort(m_Categories.begin(), m_Categories.end());
|
||||
setParents();
|
||||
|
||||
+6
-56
@@ -10,8 +10,6 @@
|
||||
#include <log.h>
|
||||
#include <report.h>
|
||||
|
||||
#include <boost/optional/optional_io.hpp>
|
||||
|
||||
namespace cl
|
||||
{
|
||||
|
||||
@@ -223,12 +221,8 @@ std::optional<int> CommandLine::runEarly()
|
||||
|
||||
std::optional<int> CommandLine::runPostApplication(MOApplication& a)
|
||||
{
|
||||
const auto instanceArg = m_vm.find("instance");
|
||||
if (instanceArg != m_vm.end() &&
|
||||
!instanceArg->second.as<boost::optional<std::string>>().has_value()) {
|
||||
|
||||
// handle -i with no arguments (distinct from -i "", which will launch the
|
||||
// portable instance if it exists, hence the use of boost::optional)
|
||||
// handle -i with no arguments
|
||||
if (m_vm.count("instance") && m_vm["instance"].as<std::string>() == "") {
|
||||
env::Console c;
|
||||
|
||||
if (auto i = InstanceManager::singleton().currentInstance()) {
|
||||
@@ -320,9 +314,7 @@ void CommandLine::createOptions()
|
||||
|
||||
("logs", "duplicates the logs to stdout")
|
||||
|
||||
("instance,i",
|
||||
po::value<boost::optional<std::string>>()->implicit_value(
|
||||
boost::none),
|
||||
("instance,i", po::value<std::string>()->implicit_value(""),
|
||||
"use the given instance (defaults to last used)")
|
||||
|
||||
("profile,p", po::value<std::string>(),
|
||||
@@ -410,14 +402,8 @@ std::optional<QString> CommandLine::instance() const
|
||||
|
||||
if (m_shortcut.isValid() && m_shortcut.hasInstance()) {
|
||||
return m_shortcut.instanceName();
|
||||
} else {
|
||||
const auto instanceArg = m_vm.find("instance");
|
||||
if (instanceArg != m_vm.end()) {
|
||||
const auto& instanceVal = instanceArg->second.as<boost::optional<std::string>>();
|
||||
if (instanceVal.has_value()) {
|
||||
return QString::fromStdString(instanceVal.value());
|
||||
}
|
||||
}
|
||||
} else if (m_vm.count("instance")) {
|
||||
return QString::fromStdString(m_vm["instance"].as<std::string>());
|
||||
}
|
||||
|
||||
return {};
|
||||
@@ -853,19 +839,6 @@ Command::Meta DownloadFileCommand::meta() const
|
||||
return {"download", "downloads a file", "URL", ""};
|
||||
}
|
||||
|
||||
po::options_description DownloadFileCommand::getVisibleOptions() const
|
||||
{
|
||||
po::options_description d;
|
||||
|
||||
d.add_options()("game,g", po::value<std::string>(), "managed game")(
|
||||
"name,n", po::value<std::string>(), "(optional) the download name")(
|
||||
"modname,m", po::value<std::string>(), "(optional) the mod name")(
|
||||
"version,v", po::value<std::string>(), "(optional) the download / mod version")(
|
||||
"source,s", po::value<std::string>(), "(optional) the download source");
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
po::options_description DownloadFileCommand::getInternalOptions() const
|
||||
{
|
||||
po::options_description d;
|
||||
@@ -892,39 +865,16 @@ bool DownloadFileCommand::canForwardToPrimary() const
|
||||
std::optional<int> DownloadFileCommand::runPostOrganizer(OrganizerCore& core)
|
||||
{
|
||||
const QString url = QString::fromStdString(vm()["URL"].as<std::string>());
|
||||
QString game("");
|
||||
QString name, modName, version, source;
|
||||
|
||||
if (!url.startsWith("https://")) {
|
||||
reportError(QObject::tr("Download URL must start with https://"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (vm().count("game")) {
|
||||
game = QString::fromStdString(vm()["game"].as<std::string>());
|
||||
}
|
||||
|
||||
if (vm().count("name")) {
|
||||
name = QString::fromStdString(vm()["name"].as<std::string>());
|
||||
}
|
||||
|
||||
if (vm().count("modname")) {
|
||||
modName = QString::fromStdString(vm()["modname"].as<std::string>());
|
||||
}
|
||||
|
||||
if (vm().count("version")) {
|
||||
version = QString::fromStdString(vm()["version"].as<std::string>());
|
||||
}
|
||||
|
||||
if (vm().count("source")) {
|
||||
source = QString::fromStdString(vm()["source"].as<std::string>());
|
||||
}
|
||||
|
||||
log::debug("starting direct download from command line: {}", url.toStdString());
|
||||
MessageDialog::showMessage(QObject::tr("Download started"), qApp->activeWindow(),
|
||||
false);
|
||||
core.downloadManager()->startDownloadURLWithMeta(url, game, name, modName, version,
|
||||
source);
|
||||
core.downloadManager()->startDownloadURLs(QStringList() << url);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -212,7 +212,6 @@ class DownloadFileCommand : public Command
|
||||
protected:
|
||||
Meta meta() const override;
|
||||
|
||||
po::options_description getVisibleOptions() const override;
|
||||
po::options_description getInternalOptions() const override;
|
||||
po::positional_options_description getPositional() const override;
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ class Settings;
|
||||
//
|
||||
// pages can be disabled if they return true in skip(), which happens globally
|
||||
// for some (IntroPage has a setting in the registry), depending on context
|
||||
// (NexusPage is skipped if the Nexus authorization already exists) or explicitly (when
|
||||
// (NexusPage is skipped if the API key already exists) or explicitly (when
|
||||
// only some info about the instance is missing on startup, such as a game
|
||||
// variant)
|
||||
//
|
||||
|
||||
@@ -103,7 +103,6 @@ void Page::next()
|
||||
|
||||
bool Page::action(CreateInstanceDialog::Actions a)
|
||||
{
|
||||
Q_UNUSED(a);
|
||||
// no-op
|
||||
return false;
|
||||
}
|
||||
@@ -1204,7 +1203,7 @@ NexusPage::NexusPage(CreateInstanceDialog& dlg) : Page(dlg), m_skip(false)
|
||||
|
||||
// just check it once, or connecting and then going back and forth would skip
|
||||
// the page, which would be unexpected
|
||||
m_skip = GlobalSettings::hasNexusOAuthTokens() || GlobalSettings::hasNexusApiKey();
|
||||
m_skip = GlobalSettings::hasNexusApiKey();
|
||||
}
|
||||
|
||||
NexusPage::~NexusPage() = default;
|
||||
|
||||
@@ -6,13 +6,14 @@
|
||||
<file name="dxcompiler.dll" />
|
||||
<file name="dxil.dll" />
|
||||
<file name="libbsarchd.dll" />
|
||||
<file name="libcrypto-3-x64.dll" />
|
||||
<file name="liblz4.dll" />
|
||||
<file name="libssl-3-x64.dll" />
|
||||
<file name="opengl32sw.dll" />
|
||||
<file name="Qt6Concurrentd.dll" />
|
||||
<file name="Qt6Cored.dll" />
|
||||
<file name="Qt6Guid.dll" />
|
||||
<file name="Qt6Networkd.dll" />
|
||||
<file name="Qt6NetworkAuthd.dll" />
|
||||
<file name="Qt6OpenGLd.dll" />
|
||||
<file name="Qt6OpenGLWidgetsd.dll" />
|
||||
<file name="Qt6Positioningd.dll" />
|
||||
|
||||
@@ -6,13 +6,14 @@
|
||||
<file name="dxcompiler.dll" />
|
||||
<file name="dxil.dll" />
|
||||
<file name="libbsarch.dll" />
|
||||
<file name="libcrypto-3-x64.dll" />
|
||||
<file name="liblz4.dll" />
|
||||
<file name="libssl-3-x64.dll" />
|
||||
<file name="opengl32sw.dll" />
|
||||
<file name="Qt6Concurrent.dll" />
|
||||
<file name="Qt6Core.dll" />
|
||||
<file name="Qt6Gui.dll" />
|
||||
<file name="Qt6Network.dll" />
|
||||
<file name="Qt6NetworkAuth.dll" />
|
||||
<file name="Qt6OpenGL.dll" />
|
||||
<file name="Qt6OpenGLWidgets.dll" />
|
||||
<file name="Qt6Positioning.dll" />
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user