1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2024-12-28 18:18:52 +00:00
OpenMW/apps/wizard/unshield/unshieldworker.hpp

129 lines
3.5 KiB
C++

#ifndef UNSHIELDWORKER_HPP
#define UNSHIELDWORKER_HPP
#include <QObject>
#include <QReadWriteLock>
#include <QStringList>
#include <QWaitCondition>
#include <libunshield.h>
#include "../inisettings.hpp"
namespace Wizard
{
enum Component
{
Component_Morrowind,
Component_Tribunal,
Component_Bloodmoon
};
class UnshieldWorker : public QObject
{
Q_OBJECT
public:
UnshieldWorker(qint64 expectedMorrowindBsaSize, QObject* parent = nullptr);
~UnshieldWorker() override = default;
void stopWorker();
void setInstallComponent(Wizard::Component component, bool install);
void setDiskPath(const QString& path);
void setPath(const QString& path);
void setIniPath(const QString& path);
void wakeAll();
QString getPath();
QString getIniPath();
void setIniEncoding(ToUTF8::FromType encoding);
bool setupSettings();
size_t getMorrowindBsaFileSize(const QString& cabFile);
private:
bool writeSettings();
bool getInstallComponent(Component component);
QString getDiskPath();
void setComponentDone(Component component, bool done = true);
bool getComponentDone(Component component);
bool removeDirectory(const QString& dirName);
bool copyFile(const QString& source, const QString& destination, bool keepSource = true);
bool copyDirectory(const QString& source, const QString& destination, bool keepSource = true);
bool extractCab(const QString& cabFile, const QString& destination);
bool extractFile(Unshield* unshield, const QString& destination, const QString& prefix, int index, int counter);
bool findInCab(const QString& fileName, const QString& cabFile);
QString findFile(const QString& fileName, const QString& path);
QStringList findFiles(const QString& fileName, const QString& path, int depth = 0, bool recursive = true,
bool directories = false, Qt::MatchFlags flags = Qt::MatchExactly);
QStringList findDirectories(const QString& dirName, const QString& path, bool recursive = true);
bool installFile(const QString& fileName, const QString& path, Qt::MatchFlags flags = Qt::MatchExactly,
bool keepSource = false);
bool installFiles(const QString& fileName, const QString& path, Qt::MatchFlags flags = Qt::MatchExactly,
bool keepSource = false, bool single = false);
bool installDirectories(
const QString& dirName, const QString& path, bool recursive = true, bool keepSource = false);
bool installComponent(Component component, const QString& path);
bool setupComponent(Component component);
bool mInstallMorrowind;
bool mInstallTribunal;
bool mInstallBloodmoon;
bool mMorrowindDone;
bool mTribunalDone;
bool mBloodmoonDone;
bool mStopped;
qint64 mExpectedMorrowindBsaSize;
QString mPath;
QString mIniPath;
QString mDiskPath;
IniSettings mIniSettings;
ToUTF8::FromType mIniEncoding;
QWaitCondition mWait;
QReadWriteLock mLock;
public slots:
void extract();
signals:
void finished();
void requestFileDialog(Wizard::Component component);
void requestOldVersionDialog();
void textChanged(const QString& text);
void error(const QString& text, const QString& details);
void progressChanged(int progress);
};
}
#endif // UNSHIELDWORKER_HPP