CQtDeployer/Deploy/Distributions/idistribution.cpp

86 lines
2.1 KiB
C++
Raw Normal View History

2019-11-28 18:13:56 +03:00
#include "idistribution.h"
#include <typeinfo>
#include <QFile>
2020-01-13 18:25:03 +03:00
#include <QTextStream>
2020-01-14 15:48:35 +03:00
#include <QDir>
2019-11-28 18:13:56 +03:00
iDistribution::iDistribution() = default;
iDistribution::~iDistribution() = default;
QString iDistribution::getClassName() const {
return typeid(*this).name();
}
QString iDistribution::getLocation() const {
return _location;
}
void iDistribution::setLocation(const QString &location) {
_location = location;
}
2020-01-13 18:25:03 +03:00
2020-01-14 15:48:35 +03:00
bool iDistribution::unpackFile(const QFileInfo &resource,
const QString &target,
const TemplateInfo &info) const {
QFile file(resource.absoluteFilePath());
2020-01-13 18:25:03 +03:00
if (!file.open(QIODevice::ReadOnly)) {
return false;
}
QString inputData = file.readAll();
file.close();
2020-01-14 15:48:35 +03:00
if (!QDir().mkpath(target))
return false;
file.setFileName(target + "/" + resource.fileName());
2020-01-13 18:25:03 +03:00
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
return false;
}
inputData.replace("$NAME", info.Name);
inputData.replace("$DESCRIPTION", info.Description);
inputData.replace("$VERSION", info.Version);
inputData.replace("$RELEASEDATA", info.ReleaseData);
inputData.replace("$ICON", info.Icon);
for (auto it = info.Custom.cbegin(); it != info.Custom.cend(); ++it) {
inputData.replace(it.key(), it.value());
}
QTextStream stream(&file);
stream << inputData;
file.close();
return true;
}
2020-01-14 15:48:35 +03:00
bool iDistribution::unpackDir(const QString &resource,
const QString &target,
const TemplateInfo &info) const {
QDir res(resource);
auto list = res.entryInfoList();
for (const auto & item :list) {
if (item.isFile()) {
if (!unpackFile(item, target, info)) {
return false;
}
} else {
if (!unpackDir(item.absoluteFilePath(),
target + "/" + item.fileName(),
info)) {
return false;
}
}
}
return true;
}