legacyapplication.cpp 3.7 KB

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