123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #ifndef INTERNALLOGICMANAGER_H
- #define INTERNALLOGICMANAGER_H
- #include <QObject>
- #include <QSettings>
- #include <QThread>
- #include "models/patchdownloader.h"
- #include "models/lotrodatmanager.h"
- #include "models/filesystem.h"
- /*
- Stage 1 - check if user opened application for the first time - then we need to show
- hello messages.
- Stage 2 - check if lotro folder is correct (there's file LotroLauncher.exe in it).
- If no - then show him settings (ask to find lotro folder) where user can set it.
- Stage 3 - check if there are client_local_English.dat and client_general.dat files.
- If no - then remove file and show message that we need to download them.
- Stage 4 - try to open client_local_English.dat and client_general.dat. If at least one of them
- fails to open at all - show that there may be other processes taken ownage.
- Stage 5 - if .dat files are opened, but there was an error telling that file has incorrect version -
- remove file and show message that we need to download them.
- --- After this assuming that .dat files are correct and opened.
- Stage 6 - if user runs for the first time, then ask to create backup
- Stage 7 - check that user has chosen patches options. Otherwise move user to settings with enabled
- position of choosing (this skips stage 8 and goes to st.9)
- Stage 8 - if user runs app for the first time - ask to download micropatches
- Stage 9 - if there are flags that patches already applied but this is not true with .dat - ask to
- apply them once more
- Stage 10 - All settings are checked and set. If user is for the first time - show message "ready to begin"
- Start check for updates. Start check for updates timer.
- */
- class MainWindow;
- enum class APP_STATE {
- NO_PROCESS,
- SEMI_CRITICAL_PROCESS,
- CRITICAL_PROCESS
- };
- class InternalLogicManager : public QObject
- {
- Q_OBJECT
- public:
- explicit InternalLogicManager(MainWindow *gui_, QSettings *settings_, QObject *parent = nullptr);
- ~InternalLogicManager();
- signals:
- void stateChanged(APP_STATE state);
- public slots:
- void startInitPipeline();
- // Actions from UI -> general window
- void startGame(QString locale = "Original"); // Original/RU
- // Actions from UI -> settings window
- void lotroSettingsUpdated();
- void createLotroFilesBackup();
- void removeLotroFilesBackup();
- void applySelectedPatches();
- void updateSettingsChanged();
- void terminateThreads();
- void stopThreads();
- private slots:
- void onLotroManagerStarted(QString, QVector<QVariant>);
- void onLotroManagerFinished(QString, QVector<QVariant>);
- void onLotroManagerErrorOccured(QString, QVector<QVariant>);
- void onLotroManagerProgressChanged();
- private slots:
- void checkFirstTimeOpening();
- void checkGameFolderCorrectness();
- void checkDatFilesExist();
- void processLotroManagerInit();
- void processPatchDownloaderInit(); // There begins also checkForUpdates cycle;
- void checkBackupExist();
- void checkUserHasEnteredPatchOptions();
- void checkDatFileWasPatched();
- private:
- PatchDownloader *patch_downloader;
- QThread *patch_downloader_thread;
- LotroDatManager *lotro_manager;
- QThread *lotro_manager_thread;
- QSettings *settings;
- MainWindow *gui;
- APP_STATE state;
- size_t active_critical_process_count;
- size_t active_non_critical_process_count;
- };
- #endif // INTERNALLOGICMANAGER_H
|