legacyapplication.cpp 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. QResource::registerResource(QApplication::applicationDirPath() + "/data01.gtr");
  43. QResource::registerResource(QApplication::applicationDirPath() + "/data02.gtr");
  44. QFontDatabase::addApplicationFont(":/fonts/trpro.ttf");
  45. QFontDatabase::addApplicationFont(":/fonts/CrimsonText.ttf");
  46. QFontDatabase::addApplicationFont(":/fonts/EBGaramond.ttf");
  47. QFontDatabase::addApplicationFont(":/fonts/aniron.ttf");
  48. qDebug() << "Starting Patch managers initialization...";
  49. patch_managers_thread_ = new QThread();
  50. PatchDownloader::instance().moveToThread(patch_managers_thread_);
  51. PatchInstaller::instance().moveToThread(patch_managers_thread_);
  52. patch_managers_thread_->start();
  53. qDebug() << "Starting GUI initialisation...";
  54. gui = new MainWindow();
  55. qDebug() << "Starting functional modules initialisation...";
  56. InitModules();
  57. qDebug() << "Successfully finished the initialization!!!";
  58. return true;
  59. }
  60. void LegacyApplication::InitModules() {
  61. modules_init_timer_.stop();
  62. AppErrorStatus status = CheckAppPrerequesities();
  63. emit ErrorStatusChanged(status);
  64. qDebug() << "NEW ERROR STATUS: " << status;
  65. if (status == E_NO_ERRORS) {
  66. QMetaObject::invokeMethod(&PatchInstaller::instance(), &PatchInstaller::init, Qt::BlockingQueuedConnection);
  67. QMetaObject::invokeMethod(&PatchDownloader::instance(), &PatchDownloader::init, Qt::BlockingQueuedConnection);
  68. QMetaObject::invokeMethod(&PatchDownloader::instance(), &PatchDownloader::checkForUpdates, Qt::QueuedConnection);
  69. } else if (status == E_NO_SERVER_CONNECTION) {
  70. qWarning() << "LegacyApplication: Cannot connect to server - restarting in 1 second!";
  71. modules_init_timer_.start();
  72. }
  73. }
  74. void LegacyApplication::close() {
  75. gui->close();
  76. }