legacyapplication.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "legacyapplication.h"
  2. #include <QLockFile>
  3. #include <QDir>
  4. #include <QMessageBox>
  5. #include <QResource>
  6. #include <QFontDatabase>
  7. #include <QMessageLogContext>
  8. #include <QApplication>
  9. #include "utils.h"
  10. #include "widgets/mainwindow.h"
  11. #include "models/filesystem.h"
  12. #include "models/patchdownloader.h"
  13. #include "models/patchinstaller.h"
  14. extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
  15. LegacyApplication::LegacyApplication() {
  16. qInstallMessageHandler(logMessageHandler);
  17. modules_init_timer_.setInterval(1 * 1000); // one second.
  18. connect(&modules_init_timer_, &QTimer::timeout, this, &LegacyApplication::InitModules);
  19. modules_init_timer_.stop();
  20. }
  21. LegacyApplication::~LegacyApplication() {
  22. // gui will be deleted automatically on close due to Qt::WA_DeleteOnClose attribute
  23. patch_managers_thread_->terminate();
  24. patch_managers_thread_->wait();
  25. delete patch_managers_thread_;
  26. }
  27. bool LegacyApplication::init() {
  28. qt_ntfs_permission_lookup++;
  29. qDebug() << "Starting initialisation...";
  30. QCoreApplication::setOrganizationName("LotroLegacy");
  31. QCoreApplication::setOrganizationDomain("translate.lotros.ru");
  32. QCoreApplication::setApplicationName("Legacy_v2");
  33. QSettings::setDefaultFormat(QSettings::IniFormat);
  34. QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, QApplication::applicationDirPath());
  35. QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, QApplication::applicationDirPath());
  36. qDebug() << "Checking if there's another instance of Legacy";
  37. if (!checkSingleAppInstance()) {
  38. return false;
  39. }
  40. qDebug() << "Initialising fonts and resources";
  41. QDir::setCurrent(QApplication::applicationDirPath());
  42. if (!FileSystem::folderExists("backup")) {
  43. QDir dir;
  44. dir.mkdir("backup");
  45. }
  46. QResource::registerResource(QApplication::applicationDirPath() + "/data01.gtr");
  47. QResource::registerResource(QApplication::applicationDirPath() + "/data02.gtr");
  48. QFontDatabase::addApplicationFont(":/fonts/trpro.ttf");
  49. QFontDatabase::addApplicationFont(":/fonts/CrimsonText.ttf");
  50. QFontDatabase::addApplicationFont(":/fonts/EBGaramond.ttf");
  51. QFontDatabase::addApplicationFont(":/fonts/aniron.ttf");
  52. qDebug() << "Starting Patch managers initialization...";
  53. patch_managers_thread_ = new QThread();
  54. PatchDownloader::instance().moveToThread(patch_managers_thread_);
  55. PatchInstaller::instance().moveToThread(patch_managers_thread_);
  56. patch_managers_thread_->start();
  57. qDebug() << "Starting GUI initialisation...";
  58. gui = new MainWindow();
  59. // connect(this, &LegacyApplication::ErrorStatusChanged, gui, &MainWindow::onErrorStatusChanged);
  60. qDebug() << "Starting functional modules initialisation...";
  61. InitModules();
  62. qDebug() << "Successfully finished the initialization!!!";
  63. return true;
  64. }
  65. void LegacyApplication::InitModules() {
  66. modules_init_timer_.stop();
  67. AppErrorStatus status = CheckAppPrerequesities();
  68. emit ErrorStatusChanged(status);
  69. if (status == E_NO_ERRORS) {
  70. QMetaObject::invokeMethod(&PatchInstaller::instance(), &PatchInstaller::init, Qt::BlockingQueuedConnection);
  71. QMetaObject::invokeMethod(&PatchDownloader::instance(), &PatchDownloader::init, Qt::BlockingQueuedConnection);
  72. QMetaObject::invokeMethod(&PatchDownloader::instance(), &PatchDownloader::checkForUpdates, Qt::QueuedConnection);
  73. } else if (status == E_NO_SERVER_CONNECTION) {
  74. qWarning() << "LegacyApplication: Cannot connect to server - restarting in 1 second!";
  75. modules_init_timer_.start();
  76. }
  77. }