legacyapplication.cpp 4.3 KB

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