legacyapplication.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. }
  23. bool LegacyApplication::init()
  24. {
  25. qt_ntfs_permission_lookup++;
  26. qDebug() << "Starting initialisation...";
  27. QCoreApplication::setOrganizationName("LotroLegacy");
  28. QCoreApplication::setOrganizationDomain("translate.lotros.ru");
  29. QCoreApplication::setApplicationName("Legacy_v2");
  30. QSettings::setDefaultFormat(QSettings::IniFormat);
  31. QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, QApplication::applicationDirPath());
  32. QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, QApplication::applicationDirPath());
  33. qDebug() << "Checking if there's another instance of Legacy";
  34. if (!checkSingleAppInstance()) {
  35. return false;
  36. }
  37. qDebug() << "Initialising fonts and resources";
  38. QDir::setCurrent(QApplication::applicationDirPath());
  39. if (!FileSystem::folderExists("backup")) {
  40. QDir dir;
  41. dir.mkdir("backup");
  42. }
  43. QResource::registerResource(QApplication::applicationDirPath() + "/data01.gtr");
  44. QResource::registerResource(QApplication::applicationDirPath() + "/data02.gtr");
  45. QFontDatabase::addApplicationFont(":/fonts/trpro.ttf");
  46. QFontDatabase::addApplicationFont(":/fonts/CrimsonText.ttf");
  47. QFontDatabase::addApplicationFont(":/fonts/EBGaramond.ttf");
  48. QFontDatabase::addApplicationFont(":/fonts/aniron.ttf");
  49. qDebug() << "Starting Patch managers initialization...";
  50. patch_managers_thread_ = new QThread();
  51. PatchDownloader::instance().moveToThread(patch_managers_thread_);
  52. PatchInstaller::instance().moveToThread(patch_managers_thread_);
  53. patch_managers_thread_->start();
  54. qDebug() << "Starting GUI initialisation...";
  55. gui = new MainWindow();
  56. connect(this, &LegacyApplication::ErrorStatusChanged, gui, &MainWindow::onErrorStatusChanged);
  57. connect(this, &LegacyApplication::SecondsToNextTryToInitChanged, gui, &MainWindow::onSecondsToNextTryToInitChanged);
  58. qDebug() << "Starting functional modules initialisation...";
  59. InitModules();
  60. return true;
  61. }
  62. void LegacyApplication::InitModules()
  63. {
  64. if (seconds_after_previous_try_to_init_ + 1 < try_to_init_timeout_) {
  65. seconds_after_previous_try_to_init_++;
  66. emit SecondsToNextTryToInitChanged(try_to_init_timeout_ - seconds_after_previous_try_to_init_);
  67. return;
  68. }
  69. modules_init_timer_.stop();
  70. seconds_after_previous_try_to_init_ = 0;
  71. AppErrorStatus status = CheckAppPrerequesities();
  72. emit ErrorStatusChanged(status);
  73. if (status == E_NO_ERRORS) {
  74. connect(&PatchDownloader::instance(), &PatchDownloader::finished, &PatchInstaller::instance(), &PatchInstaller::startPatchInstallationChain, Qt::QueuedConnection);
  75. QMetaObject::invokeMethod(&PatchInstaller::instance(), &PatchInstaller::init, Qt::BlockingQueuedConnection);
  76. QMetaObject::invokeMethod(&PatchDownloader::instance(), &PatchDownloader::init, Qt::BlockingQueuedConnection);
  77. QMetaObject::invokeMethod(&PatchDownloader::instance(), &PatchDownloader::startPatchDownloaderChain, Qt::QueuedConnection);
  78. } else {
  79. qWarning() << "LegacyApplication: Couldnt init functional modules!";
  80. modules_init_timer_.start();
  81. }
  82. }