2019-11-28 18:13:56 +03:00
|
|
|
#include "idistribution.h"
|
2020-01-05 13:58:38 +03:00
|
|
|
#include <typeinfo>
|
|
|
|
#include <QFile>
|
2020-01-13 18:25:03 +03:00
|
|
|
#include <QTextStream>
|
2020-01-14 15:48:35 +03:00
|
|
|
#include <QDir>
|
2020-01-15 18:31:09 +03:00
|
|
|
#include <cassert>
|
|
|
|
#include <filemanager.h>
|
2020-01-16 11:10:16 +03:00
|
|
|
#include "deploycore.h"
|
|
|
|
#include "pathutils.h"
|
2020-01-18 20:01:14 +03:00
|
|
|
#include <QMap>
|
|
|
|
#include <distromodule.h>
|
2019-11-28 18:13:56 +03:00
|
|
|
|
|
|
|
iDistribution::~iDistribution() = default;
|
2020-01-05 13:58:38 +03:00
|
|
|
|
2020-01-15 18:31:09 +03:00
|
|
|
iDistribution::iDistribution(FileManager *fileManager) {
|
|
|
|
_fileManager = fileManager;
|
|
|
|
assert(_fileManager);
|
|
|
|
}
|
|
|
|
|
2020-01-05 13:58:38 +03:00
|
|
|
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,
|
2020-01-19 13:26:47 +03:00
|
|
|
const TemplateInfo &info,
|
|
|
|
const QStringList& sufixes) const {
|
2020-01-14 15:48:35 +03:00
|
|
|
QFile file(resource.absoluteFilePath());
|
2020-01-13 18:25:03 +03:00
|
|
|
if (!file.open(QIODevice::ReadOnly)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-01-19 13:26:47 +03:00
|
|
|
QByteArray inputData = file.readAll();
|
2020-01-13 18:25:03 +03:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2020-01-19 13:26:47 +03:00
|
|
|
if (sufixes.contains(resource.suffix(), Qt::CaseInsensitive)) {
|
|
|
|
QString inputText(inputData);
|
2020-01-13 18:25:03 +03:00
|
|
|
|
2020-01-19 13:26:47 +03:00
|
|
|
inputText.replace("$NAME", info.Name);
|
|
|
|
inputText.replace("$DESCRIPTION", info.Description);
|
|
|
|
inputText.replace("$VERSION", info.Version);
|
|
|
|
inputText.replace("$RELEASEDATA", info.ReleaseData);
|
|
|
|
inputText.replace("$ICON", info.Icon);
|
|
|
|
inputText.replace("$PUBLISHER", info.Publisher);
|
2020-01-13 18:25:03 +03:00
|
|
|
|
2020-01-19 13:26:47 +03:00
|
|
|
for (auto it = info.Custom.cbegin(); it != info.Custom.cend(); ++it) {
|
|
|
|
inputText.replace(it.key(), it.value());
|
|
|
|
}
|
|
|
|
|
|
|
|
QTextStream stream(&file);
|
|
|
|
stream << inputText;
|
|
|
|
} else {
|
|
|
|
file.write(inputData);
|
|
|
|
}
|
2020-01-13 18:25:03 +03:00
|
|
|
|
|
|
|
file.close();
|
|
|
|
|
2020-01-15 18:31:09 +03:00
|
|
|
return _fileManager->addToDeployed(target + "/" + resource.fileName());
|
2020-01-13 18:25:03 +03:00
|
|
|
}
|
2020-01-14 15:48:35 +03:00
|
|
|
|
|
|
|
bool iDistribution::unpackDir(const QString &resource,
|
|
|
|
const QString &target,
|
2020-01-19 13:26:47 +03:00
|
|
|
const TemplateInfo &info,
|
|
|
|
const QStringList &sufixes) const {
|
2020-01-14 15:48:35 +03:00
|
|
|
|
|
|
|
|
|
|
|
QDir res(resource);
|
2020-09-06 19:12:17 +03:00
|
|
|
auto list = res.entryInfoList(QDir::NoDotAndDotDot | QDir::AllEntries);
|
2020-01-14 15:48:35 +03:00
|
|
|
|
|
|
|
for (const auto & item :list) {
|
|
|
|
|
|
|
|
if (item.isFile()) {
|
2020-01-19 13:26:47 +03:00
|
|
|
if (!unpackFile(item, target, info, sufixes)) {
|
2020-01-14 15:48:35 +03:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (!unpackDir(item.absoluteFilePath(),
|
|
|
|
target + "/" + item.fileName(),
|
2020-01-19 13:26:47 +03:00
|
|
|
info, sufixes)) {
|
2020-01-14 15:48:35 +03:00
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2020-01-15 18:31:09 +03:00
|
|
|
|
2020-08-15 19:29:17 +03:00
|
|
|
bool iDistribution::copyDir(const QString &resource,
|
|
|
|
const QString &target) const {
|
|
|
|
|
|
|
|
return _fileManager->copyFolder(resource, target, {}, nullptr, nullptr, true);
|
|
|
|
}
|
|
|
|
|
2020-01-15 18:31:09 +03:00
|
|
|
bool iDistribution::moveData(const QString &from,
|
2020-01-18 20:01:14 +03:00
|
|
|
const QString &to,
|
|
|
|
const QString& ignore) const {
|
|
|
|
return _fileManager->moveFolder(from, to, ignore);
|
2020-01-15 18:31:09 +03:00
|
|
|
}
|
2020-01-16 11:10:16 +03:00
|
|
|
|
2020-03-04 17:35:12 +03:00
|
|
|
bool iDistribution::copyFile(const QString &from, const QString &to, bool isFileTarget) const {
|
|
|
|
if (isFileTarget) {
|
|
|
|
_fileManager->removeFile(to);
|
|
|
|
}
|
|
|
|
return _fileManager->copyFile(from, to, nullptr, isFileTarget);
|
2020-01-16 15:25:36 +03:00
|
|
|
}
|
|
|
|
|
2020-03-08 13:52:26 +03:00
|
|
|
void iDistribution::registerOutFiles() const {
|
|
|
|
auto files = outPutFiles();
|
|
|
|
|
|
|
|
for (const auto& i : files) {
|
|
|
|
_fileManager->addToDeployed(i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-18 20:01:14 +03:00
|
|
|
|