소스 검색

Lotro compilation errors fixes, minor fixes in other modules

Ivan Arkhipov 5 년 전
부모
커밋
eaa55bf4fa

+ 2 - 0
import/LotroDat/DatSubsystems/DatExporter.h

@@ -36,6 +36,8 @@ namespace LOTRO_DAT {
 
         DatOperationResult<int> ExtractAllFilesByType(const FILE_TYPE &type, Database *db);
 
+        DatOperationResult<> ExtractFileById(long long file_id, Database *db);
+
     private:
         DatOperationResult<> WriteStringToFile(const std::u16string &str, const std::string &path);
 

+ 2 - 2
src/Legacy-advanced/Legacy-advanced.pro

@@ -65,8 +65,8 @@ FORMS += \
     widgets\statuswidget.ui
 
 RESOURCES += \
-    backgrounds.qrc \
-    common.qrc
+    resources\backgrounds.qrc \
+    resources\common.qrc
 
 win32:RC_ICONS = $$PWD/resources/appicon.ico
 

+ 9 - 3
src/Legacy-advanced/main.cpp

@@ -2,8 +2,12 @@
 #include <QMessageBox>
 #include <QLockFile>
 #include <QDir>
-#include "legacyapp.h"
+
+#include "models/lotro.h"
+
 #include <QTextCodec>
+#include <QThread>
+#include <QObject>
 
 int main(int argc, char *argv[])
 {
@@ -19,7 +23,9 @@ int main(int argc, char *argv[])
         return 1;
     }
 
-    LegacyApp app;
-    app.Init();
+    QSettings *settings = new QSettings(qApp->applicationDirPath() + "/legacy_v2.ini", QSettings::IniFormat);
+    QThread *lotro_mgr_thread = new QThread();
+    Lotro *lotro_mgr = new Lotro(settings);
+    QObject::connect(lotro_mgr_thread, &QThread::finished, lotro_mgr, &QObject::deleteLater);
     return a.exec();
 }

+ 14 - 14
src/Legacy-advanced/models/downloader.cpp

@@ -1,33 +1,33 @@
-#include "networkdownloader.h"
+#include "downloader.h"
 #include <QEventLoop>
 #include <QApplication>
 
-NetworkDownloader::NetworkDownloader(QObject *parent) :QObject(parent), busy(false)
+Downloader::Downloader(QObject *parent) :QObject(parent), busy(false)
 {
     connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply*)), this, SLOT(onDownloadFinished(QNetworkReply*)));
 }
 
-NetworkDownloader::~NetworkDownloader() {
+Downloader::~Downloader() {
 }
 
-QUrl NetworkDownloader::getUrl()
+QUrl Downloader::getUrl()
 {
     return url;
 }
 
-void NetworkDownloader::setUrl(const QUrl &_url)
+void Downloader::setUrl(const QUrl &_url)
 {
     url = _url;
 }
 
-void NetworkDownloader::waitForDownloaded()
+void Downloader::waitForDownloaded()
 {
     QEventLoop loop;
-    connect(this, &NetworkDownloader::downloadFinished, &loop, &QEventLoop::quit);
+    connect(this, &Downloader::downloadFinished, &loop, &QEventLoop::quit);
     loop.exec();
 }
 
-void NetworkDownloader::start()
+void Downloader::start()
 {
     if (busy) {
         qDebug() << "Cannot download " << url << ", downloader is busy!";
@@ -39,24 +39,24 @@ void NetworkDownloader::start()
     QNetworkRequest request(url);
     m_CurrentReply = m_WebCtrl.get(request);
     m_CurrentReply->setReadBufferSize(download_speed_limit);
-    connect(m_CurrentReply, &QNetworkReply::readyRead, this, &NetworkDownloader::onReadyRead);
-    connect(m_CurrentReply, &QNetworkReply::downloadProgress, this, &NetworkDownloader::progressChanged);
+    connect(m_CurrentReply, &QNetworkReply::readyRead, this, &Downloader::onReadyRead);
+    connect(m_CurrentReply, &QNetworkReply::downloadProgress, this, &Downloader::progressChanged);
 }
 
-void NetworkDownloader::updateDownloadSpeedLimit(int bytes_per_sec)
+void Downloader::updateDownloadSpeedLimit(int bytes_per_sec)
 {
     download_speed_limit = bytes_per_sec;
     if (m_CurrentReply)
         m_CurrentReply->setReadBufferSize(bytes_per_sec);
 }
 
-void NetworkDownloader::stop()
+void Downloader::stop()
 {
     m_CurrentReply->abort();
     busy = false;
 }
 
-void NetworkDownloader::onDownloadFinished(QNetworkReply*) {
+void Downloader::onDownloadFinished(QNetworkReply*) {
     if (m_CurrentReply)
         m_CurrentReply->deleteLater();
 
@@ -64,7 +64,7 @@ void NetworkDownloader::onDownloadFinished(QNetworkReply*) {
     emit downloadFinished();
 }
 
-void NetworkDownloader::onReadyRead()
+void Downloader::onReadyRead()
 {
     QByteArray readdata = m_CurrentReply->readAll();
     if (targetFile && targetFile->isWritable())

+ 3 - 3
src/Legacy-advanced/models/downloader.h

@@ -8,13 +8,13 @@
 #include <QFile>
 #include <QByteArray>
 
-class NetworkDownloader : public QObject
+class Downloader : public QObject
 {
     Q_OBJECT
 
 public:
-    explicit NetworkDownloader(QObject *parent = 0);
-    virtual ~NetworkDownloader();
+    explicit Downloader(QObject *parent = 0);
+    virtual ~Downloader();
 
     QUrl getUrl();
     void setUrl(const QUrl& _url);

+ 41 - 42
src/Legacy-advanced/models/lotro.cpp

@@ -9,19 +9,19 @@
 #include <iostream>
 #include <fstream>
 
-Lotro::Lotro(QSettings& app_settings_, QObject *parent) : app_settings(app_settings_),
+Lotro::Lotro(QSettings* app_settings_, QObject *parent) : app_settings(app_settings_),
     QObject(parent) {
 }
 
-void Lotro::initialiseDatFile(QString file_name) {
+void Lotro::initialiseDatFile(QString file_path) {
     if (!tryToBlockFile())
         return;
-    emit processStarted("initialiseDatFile", {file_name});
+    emit processStarted("initialiseDatFile", {file_path});
 
-    qDebug() << "Initialising file " << file_name;
+    qDebug() << "Initialising file " << file_path;
 
     if (!FileSystem::fileExists(file_path)) {
-        emit caughtError("initialiseDatFile", {QString("Ошибка инициализации"), QString("Файл " + file_path + " несуществует! Невозможно инициализировать файл ресурсов.")});
+        emit caughtError(QString("initialiseDatFile"), {QString("Ошибка инициализации"), QString("Файл " + file_path + " несуществует! Невозможно инициализировать файл ресурсов.")});
         busy = false;
         return;
     }
@@ -36,8 +36,6 @@ void Lotro::changeLocale() {
         return;
 
     qDebug() << "Changing locale of dat file...";
-    emit processStarted("changeLocale", {current_locale, new_locale});
-
     // Setting locale, opposite to current
     auto current_locale = file.GetLocaleManager().GetCurrentLocale();
     auto new_locale = current_locale == LOTRO_DAT::DatLocaleManager::PATCHED ?
@@ -46,6 +44,7 @@ void Lotro::changeLocale() {
 
     QString old_locale_name = (current_locale == LOTRO_DAT::DatLocaleManager::PATCHED ? "Русифицированная" : "Оригинальная");
     QString new_locale_name = (new_locale == LOTRO_DAT::DatLocaleManager::PATCHED ? "Русифицированная" : "Оригинальная");
+    emit processStarted("changeLocale", {old_locale_name, new_locale_name});
 
 
     auto operation = file.GetLocaleManager().SetLocale(new_locale);
@@ -68,7 +67,7 @@ void Lotro::getLocaleFileContents(long long file_id, int locale) {
 
     emit processStarted("getFileContents", {file_id, locale});
 
-    auto getfile_op = file.GetLocaleManager().GetLocaleFile(file_id, locale);
+    auto getfile_op = file.GetLocaleManager().GetLocaleFile(file_id, (LOTRO_DAT::DatLocaleManager::LOCALE)locale);
     if (!getfile_op.result) {
         emit caughtError("getFileContents", {"Файл не найден!", QString("Не удаётся найти файл с id ") + QString::number(file_id)});
         emit processFinished("getFileContents", {"Error"});
@@ -101,7 +100,7 @@ void Lotro::importFilesFromDatabase(QString database_path) {
     emit processStarted("importFilesFromDatabase", {database_path});
 
     if (!FileSystem::fileExists(database_path)) {
-        emit caughtError("importFilesFromDatabase", {QString("Ошибка импорта!"), QString("Файл " + file_path + " не существует! Невозможно инициализировать базу данных!")});
+        emit caughtError(QString("importFilesFromDatabase"), {QString("Ошибка импорта!"), QString("Файл " + database_path + " не существует! Невозможно инициализировать базу данных!")});
         emit processFinished("importFilesFromDatabase", {QString("Error")});
         busy = false;
         return;
@@ -143,7 +142,7 @@ void Lotro::importFile(long long file_id, QString file_path) {
     data.options["fid"] = file_id;
 
     auto getfile_op = file.GetFileSystem().GetFile(file_id);
-    if (getfile_op.value == LOTRO_DAT::ERROR) {
+    if (getfile_op.result == LOTRO_DAT::ERROR) {
         emit caughtError("importFile", {QString("Ошибка импорта!"), QString("Файл с id ") + QString::number(file_id) + QString(" не существует в ресурсах игры! Невозможно импортировать :/")});
         emit processFinished("importFile", {QString("Error")});
         busy = false;
@@ -207,7 +206,7 @@ void Lotro::importTextFragment(long long file_id, long long fragment_id,
         emit caughtError("importTextFragment", {"Ошибка формата!", QString("Текстовые данные содержат указатели на аргументы DO_NOT_TOUCH! Такого быть не должно! Пользуйтесь порядком перечисления аргументов внизу")});
         emit processFinished("importTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
     auto getfile_op = file.GetFileSystem().GetFile(file_id);
@@ -215,10 +214,10 @@ void Lotro::importTextFragment(long long file_id, long long fragment_id,
         emit caughtError("importTextFragment", {"Файл не найден!", QString("Не удаётся найти в ресурсах файл с id ") + QString::number(file_id)});
         emit processFinished("importTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
-    LOTRO_DAT::SubFile subfile = getfile_op.value;
+    LOTRO_DAT::SubFile subfile = *getfile_op.value;
 
     auto getfiledata_op = file.GetFileSystem().GetFileData(subfile, 8);
 
@@ -226,29 +225,29 @@ void Lotro::importTextFragment(long long file_id, long long fragment_id,
         emit caughtError("importTextFragment", {"Ошибка импорта!", QString("Обнаружены некорректные данные файла в словаре! Файл ресурсов мог быть повреждён!\nid = ") + QString::number(file_id)});
         emit processFinished("importTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
     LOTRO_DAT::SubfileData data = subfile.PrepareForExport(getfiledata_op.value);
-    if (!result) {
+    if (data.Empty()) {
         emit caughtError("importTextFragment", {"Ошибка импорта!", QString("Не удалось подготовить файл к изменению фрагмента!\nid = ") + QString::number(file_id)});
         emit processFinished("importTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
-    int beginning = data.text_data.find(QString::number(fragment_id).toStdU16String(), 0);
+    unsigned beginning = data.text_data.find(QString::number(fragment_id).toStdU16String(), 0);
     if (beginning == std::u16string::npos) {
         emit caughtError("importTextFragment", {"Ошибка импорта!", QString("Не удалось найти фрагмент в файле!\nid = ") + QString::number(file_id) + "\nfragment_id = " + QString::number(fragment_id)});
         emit processFinished("importTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
-    int ending = data.text_data.find(QString("|||").toStdU16String(), beginning);
+    unsigned ending = data.text_data.find(QString("|||").toStdU16String(), beginning);
 
     QString new_fragment = QString::number(fragment_id) + ":::" + arguments + ":::" + fragment_contents;
-    std::u16string new_text =  data.text_data.substr(0, beginning) + new_fragment.toStdU16String() + result.text_data.substr(ending);
+    std::u16string new_text =  data.text_data.substr(0, beginning) + new_fragment.toStdU16String() + data.text_data.substr(ending);
     data.text_data = new_text;
 
     auto patchfile_op = file.GetPatcher().PatchFile(data);
@@ -273,10 +272,10 @@ void Lotro::getTextFragment(long long file_id, long long fragment_id) {
         emit caughtError("getTextFragment", {"Файл не найден!", QString("Не удаётся найти в ресурсах файл с id ") + QString::number(file_id)});
         emit processFinished("getTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
-    LOTRO_DAT::SubFile subfile = getfile_op.value;
+    LOTRO_DAT::SubFile subfile = *getfile_op.value;
 
     auto getfiledata_op = file.GetFileSystem().GetFileData(subfile, 8);
 
@@ -284,28 +283,28 @@ void Lotro::getTextFragment(long long file_id, long long fragment_id) {
         emit caughtError("getTextFragment", {"Ошибка импорта!", QString("Обнаружены некорректные данные файла в словаре! Файл ресурсов мог быть повреждён!\nid = ") + QString::number(file_id)});
         emit processFinished("getTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
     LOTRO_DAT::SubfileData data = subfile.PrepareForExport(getfiledata_op.value);
-    if (!result) {
+    if (data.Empty()) {
         emit caughtError("getTextFragment", {"Ошибка импорта!", QString("Не удалось подготовить файл к изменению фрагмента!\nid = ") + QString::number(file_id)});
         emit processFinished("getTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
-    int beginning = data.text_data.find(QString::number(fragment_id).toStdU16String(), 0);
+    unsigned beginning = data.text_data.find(QString::number(fragment_id).toStdU16String(), 0);
     if (beginning == std::u16string::npos) {
         emit caughtError("importTextFragment", {"Ошибка импорта!", QString("Не удалось найти фрагмент в файле!\nid = ") + QString::number(file_id) + "\nfragment_id = " + QString::number(fragment_id)});
         emit processFinished("importTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
-    int ending = data.text_data.find(QString("|||").toStdU16String(), beginning);
+    unsigned ending = data.text_data.find(QString("|||").toStdU16String(), beginning);
 
-    int size = std::u16string::npos;
+    unsigned size = std::u16string::npos;
 
     if (ending != std::u16string::npos)
         size = ending - beginning;
@@ -317,7 +316,7 @@ void Lotro::getTextFragment(long long file_id, long long fragment_id) {
         emit caughtError("importTextFragment", {"Ошибка импорта!", QString("Получены некорректные данные фрагмента!\nДанные:") + QString::fromStdU16String(str)});
         emit processFinished("importTextFragment", {"Error"});
         busy = false;
-        return false;
+        return;
     }
 
     busy = false;
@@ -385,15 +384,15 @@ void Lotro::extractGrouppedFiles(QString output_foldername, LOTRO_DAT::FILE_TYPE
     if (!tryToBlockFile())
         return;
 
-    emit processStarted("extractSingleFile", {output_foldername, file_id});
+    emit processStarted("extractGrouppedFiles", {output_foldername, type});
     auto extractfile_op = file.GetExporter().ExtractAllFilesByType(type, output_foldername.toStdString());
     busy = false;
 
     if (extractfile_op.result == LOTRO_DAT::SUCCESS) {
-        emit processFinished("extractSingleFile", {"Success", output_foldername, type});
+        emit processFinished("extractGrouppedFiles", {"Success", output_foldername, type, extractfile_op.value});
     } else {
-        emit caughtError("extractSingleFile", {"Ошибка экспорта!", QString("Не удаётся экспортировать файл " + QString::number(file_id) + " в файл " + output_filename)});
-        emit processFinished("extractSingleFile", {"Error", output_foldername});
+        emit caughtError("extractGrouppedFiles", {"Ошибка экспорта!", QString("Не удаётся экспортировать файлы с типом " + QString::number(type) + " в папку " + output_foldername)});
+        emit processFinished("extractGrouppedFiles", {"Error", output_foldername, type, extractfile_op.value});
     }
 }
 
@@ -401,7 +400,7 @@ void Lotro::extractGrouppedFilesToDatabase(QString database_path, LOTRO_DAT::FIL
     if (!tryToBlockFile())
         return;
 
-    emit processStarted("extractGrouppedFilesToDatabase", {database_path, file_id});
+    emit processStarted(QString("extractGrouppedFilesToDatabase"), {database_path, type});
     LOTRO_DAT::Database db;
     if (!db.InitDatabase(database_path.toStdString())) {
         emit caughtError("extractGrouppedFilesToDatabase", {"Ошибка экспорта!", QString("Не удаётся создать/открыть базу данных " + database_path)});
@@ -410,14 +409,14 @@ void Lotro::extractGrouppedFilesToDatabase(QString database_path, LOTRO_DAT::FIL
         return;
     }
 
-    auto extractfile_op = file.GetExporter().ExtractFileById(file_id, &db);
+    auto extractfile_op = file.GetExporter().ExtractAllFilesByType(type, &db);
     busy = false;
 
     if (extractfile_op.result == LOTRO_DAT::SUCCESS) {
-        emit processFinished("extractGrouppedFilesToDatabase", {"Success", database_path, type});
+        emit processFinished("extractGrouppedFilesToDatabase", {"Success", database_path, type, extractfile_op.value});
     } else {
         emit caughtError("extractGrouppedFilesToDatabase", {"Ошибка экспорта!", QString("Не удаётся экспортировать файлы с типом " + QString::number(type) + " в базу данных " + database_path)});
-        emit processFinished("extractGrouppedFilesToDatabase", {"Error", output_foldername});
+        emit processFinished("extractGrouppedFilesToDatabase", {"Error", database_path, extractfile_op.value});
     }
 }
 
@@ -462,7 +461,7 @@ void Lotro::startGame() {
 
     qDebug() << "Запускаем игру со следующими аргументами: " << args;
 
-    QFile f(app_settings("Local", "folder") + "/LotroLauncher.exe");
+    QFile f(app_settings->value("Local", "folder").toString() + "/LotroLauncher.exe");
     QProcess process;
 
     if (FileSystem::fileExists(f.fileName())) {
@@ -471,7 +470,7 @@ void Lotro::startGame() {
         process.waitForFinished(-1);
         emit processFinished("startGame", {});
     } else {
-        emit caughtError("startGame", {"Ошибка запуска игры!", QString("Не удалось найти файл LotroLauncher в папке: ") + app_settings("Local", "folder")});
+        emit caughtError("startGame", {"Ошибка запуска игры!", QString("Не удалось найти файл LotroLauncher в папке: ") + app_settings->value("Local", "folder").toString()});
         emit processFinished("startGame", {"Error"});
     }
     busy = false;
@@ -484,7 +483,7 @@ void Lotro::getLocaleFileInfo(long long file_id, int locale) {
 
     emit processStarted("getLocaleFileInfo", {file_id, locale});
 
-    auto getfile_op = file.GetLocaleManager().GetLocaleFile(file_id, locale);
+    auto getfile_op = file.GetLocaleManager().GetLocaleFile(file_id, (LOTRO_DAT::DatLocaleManager::LOCALE)locale);
     if (!getfile_op.result) {
         emit caughtError("getLocaleFileInfo", {"Файл не найден!", QString("Не удаётся найти в ресурсах файл с id ") + QString::number(file_id)});
         emit processFinished("getLocaleFileInfo", {"Error"});
@@ -514,7 +513,7 @@ void Lotro::getFileInfo(long long file_id) {
     if (!tryToBlockFile())
         return;
 
-    emit processStarted("getFileInfo", {file_id, locale});
+    emit processStarted(QString("getFileInfo"), {file_id});
 
     auto getfile_op = file.GetFileSystem().GetFile(file_id);
     if (!getfile_op.result) {

+ 4 - 3
src/Legacy-advanced/models/lotro.h

@@ -12,7 +12,7 @@ class Lotro : public QObject
     Q_OBJECT
 
 public:
-    explicit Lotro(QSettings& app_settings_, QObject *parent = nullptr);
+    explicit Lotro(QSettings* app_settings_, QObject *parent = nullptr);
 
     bool initialised();
 
@@ -21,7 +21,7 @@ public:
     bool notPatched();
 
 public slots:
-    void initialiseDatFile(QString file_name);
+    void initialiseDatFile(QString file_path);
 
     void changeLocale();
 
@@ -66,11 +66,12 @@ signals:
     void textFragmentReceived(QString, QString);
     void unactiveCategoriesReceived(QStringList);
     void localeFileContentsReceived(int, LOTRO_DAT::SubfileData); // extention, contents
+    void localeFileInfoReceived(QString);
 
 private:
     LOTRO_DAT::DatFile file;
     bool busy;
-    QSettings& app_settings;
+    QSettings* app_settings;
 };
 
 #endif // LEGACYAPP_H

+ 1 - 1
src/Legacy-advanced/resources/backgrounds.qrc

@@ -9,7 +9,7 @@
         <file>backgrounds/bg7.png</file>
         <file>backgrounds/bg8.png</file>
         <file>backgrounds/bg9.png</file>
-        <file>backgrounds/process_dialog.png</file>
         <file>backgrounds/loading-gear.gif</file>
+        <file>backgrounds/process_dialog.png</file>
     </qresource>
 </RCC>

+ 0 - 0
src/Legacy-advanced/resources/backgrounds/messagebox.png → src/Legacy-advanced/resources/backgrounds/process_dialog.png