make separate source for image type

rename to image type
This commit is contained in:
Dmitry Degtyarev 2020-11-01 20:57:48 +04:00
parent b4f25d06a0
commit 37a0ee2ba9
4 changed files with 34 additions and 176 deletions

View File

@ -22,7 +22,8 @@ HEADERS += \
network.h \
notifications.h \
image_download.h \
progress.h
progress.h \
image_type.h
SOURCES += main.cpp \
drivemanager.cpp \
@ -30,7 +31,8 @@ SOURCES += main.cpp \
network.cpp \
notifications.cpp \
image_download.cpp \
progress.cpp
progress.cpp \
image_type.cpp
RESOURCES += qml.qrc \
assets.qrc \

View File

@ -18,6 +18,7 @@
*/
#include "releasemanager.h"
#include "image_type.h"
#include "drivemanager.h"
#include "network.h"
#include "image_download.h"
@ -91,7 +92,7 @@ ReleaseManager::ReleaseManager(QObject *parent)
qmlRegisterUncreatableType<ReleaseVersion>("MediaWriter", 1, 0, "Version", "");
qmlRegisterUncreatableType<ReleaseVariant>("MediaWriter", 1, 0, "Variant", "");
qmlRegisterUncreatableType<ReleaseArchitecture>("MediaWriter", 1, 0, "Architecture", "");
qmlRegisterUncreatableType<ReleaseImageType>("MediaWriter", 1, 0, "ImageType", "");
qmlRegisterUncreatableType<ImageType>("MediaWriter", 1, 0, "ImageType", "");
qmlRegisterUncreatableType<Progress>("MediaWriter", 1, 0, "Progress", "");
const QList<QString> releaseImagesList = getReleaseImagesFiles();
@ -260,12 +261,12 @@ void ReleaseManager::setFilterText(const QString &o) {
}
}
bool ReleaseManager::updateUrl(const QString &name, const QString &version, const QString &status, const QString &architecture, ReleaseImageType *imageType, const QString &board, const QString &url) {
bool ReleaseManager::updateUrl(const QString &name, const QString &version, const QString &status, const QString &architecture, ImageType *imageType, const QString &board, const QString &url) {
if (!ReleaseArchitecture::isKnown(architecture)) {
qDebug() << "Architecture" << architecture << "is not known!";
return false;
}
if (imageType->id() == ReleaseImageType::UNKNOWN) {
if (imageType->isValid()) {
qDebug() << "Image type for " << url << "is not known!";
return false;
}
@ -360,7 +361,7 @@ void ReleaseManager::loadReleaseFile(const QString &fileContents) {
QString version = "9";
QString status = "0";
ReleaseImageType *imageType = ReleaseImageType::fromFilename(url);
ImageType *imageType = ImageType::fromFilename(url);
qDebug() << this->metaObject()->className() << "Adding" << name << arch;
@ -374,20 +375,20 @@ QStringList ReleaseManager::architectures() const {
}
QStringList ReleaseManager::fileNameFilters() const {
const QList<ReleaseImageType *> imageTypes = ReleaseImageType::all();
const QList<ImageType *> imageTypes = ImageType::all();
QStringList filters;
for (const auto type : imageTypes) {
if (type->id() == ReleaseImageType::UNKNOWN) {
continue;
}
const QString extensions =
[type]() {
const QStringList abbreviation = type->abbreviation();
if (abbreviation.isEmpty()) {
return QString();
}
QString out;
out += "(";
const QStringList abbreviation = type->abbreviation();
for (const auto e : abbreviation) {
if (abbreviation.indexOf(e) > 0) {
out += " ";
@ -401,6 +402,10 @@ QStringList ReleaseManager::fileNameFilters() const {
return out;
}();
if (extensions.isEmpty()) {
continue;
}
const QString name = type->name();
const QString filter = name + " " + extensions;
@ -513,7 +518,7 @@ ReleaseListModel::ReleaseListModel(ReleaseManager *parent)
const auto customVersion = new ReleaseVersion(customRelease, QString(), ReleaseVersion::FINAL);
customRelease->addVersion(customVersion);
const auto customVariant = new ReleaseVariant(customVersion, QString(), ReleaseArchitecture::fromId(ReleaseArchitecture::UNKNOWN), ReleaseImageType::all()[ReleaseImageType::ISO], "UNKNOWN BOARD");
const auto customVariant = new ReleaseVariant(customVersion, QString(), ReleaseArchitecture::fromId(ReleaseArchitecture::UNKNOWN), ImageType::all()[ImageType::ISO], "UNKNOWN BOARD");
customVersion->addVariant(customVariant);
}
@ -550,7 +555,7 @@ void Release::setLocalFile(const QString &path) {
emit selectedVersionChanged();
}
bool Release::updateUrl(const QString &version, const QString &status, const QString &architecture, ReleaseImageType *imageType, const QString &board, const QString &url) {
bool Release::updateUrl(const QString &version, const QString &status, const QString &architecture, ImageType *imageType, const QString &board, const QString &url) {
int finalVersions = 0;
for (auto i : m_versions) {
if (i->number() == version)
@ -704,7 +709,7 @@ const Release *ReleaseVersion::release() const {
return qobject_cast<const Release*>(parent());
}
bool ReleaseVersion::updateUrl(const QString &status, const QString &architecture, ReleaseImageType *imageType, const QString &board, const QString &url) {
bool ReleaseVersion::updateUrl(const QString &status, const QString &architecture, ImageType *imageType, const QString &board, const QString &url) {
// first determine and eventually update the current alpha/beta/final level of this version
Status s = status == "alpha" ? ALPHA : status == "beta" ? BETA : FINAL;
if (s <= m_status) {
@ -788,7 +793,7 @@ QList<ReleaseVariant *> ReleaseVersion::variantList() const {
}
ReleaseVariant::ReleaseVariant(ReleaseVersion *parent, QString url, ReleaseArchitecture *arch, ReleaseImageType *imageType, QString board)
ReleaseVariant::ReleaseVariant(ReleaseVersion *parent, QString url, ReleaseArchitecture *arch, ImageType *imageType, QString board)
: QObject(parent)
, m_arch(arch)
, m_image_type(imageType)
@ -803,7 +808,7 @@ ReleaseVariant::ReleaseVariant(ReleaseVersion *parent, const QString &file)
: QObject(parent)
, m_image(file)
, m_arch(ReleaseArchitecture::fromId(ReleaseArchitecture::X86_64))
, m_image_type(ReleaseImageType::fromFilename(file))
, m_image_type(ImageType::fromFilename(file))
, m_board("UNKNOWN BOARD")
, m_progress(new Progress(this))
{
@ -841,7 +846,7 @@ ReleaseArchitecture *ReleaseVariant::arch() const {
return m_arch;
}
ReleaseImageType *ReleaseVariant::imageType() const {
ImageType *ReleaseVariant::imageType() const {
return m_image_type;
}
@ -1136,105 +1141,3 @@ QString ReleaseArchitecture::description() const {
int ReleaseArchitecture::index() const {
return this - m_all;
}
// ReleaseImageType ReleaseImageType::m_all[] = {
// {{"iso", "dvd"}, QT_TR_NOOP("ISO DVD"), QT_TR_NOOP("ISO format image")},
// {{"tar"}, QT_TR_NOOP("TAR Archive"), QT_TR_NOOP("tar archive of rootfs")},
// {{"tgz", "tar.gz"}, QT_TR_NOOP("GZip TAR Archive"), QT_TR_NOOP("GNU Zip compressed tar archive of rootfs")},
// {{"txz", "tar.xz"}, QT_TR_NOOP("LZMA TAR Archive"), QT_TR_NOOP("LZMA-compressed tar archive of rootfs")},
// {{"img"}, QT_TR_NOOP("TAR Archive"), QT_TR_NOOP("raw image")},
// {{"igz", "img.gz"}, QT_TR_NOOP("GZip TAR Archive"), QT_TR_NOOP("GNU Zip compressed raw image")},
// {{"ixz", "img.xz"}, QT_TR_NOOP("LZMA TAR Archive"), QT_TR_NOOP("LZMA-compressed raw image")},
// {{"trc", "recovery.tar"}, QT_TR_NOOP("Recovery TAR Archive"), QT_TR_NOOP("Special recovery archive for Tavolga Terminal")},
// };
QList<ReleaseImageType *> ReleaseImageType::all() {
static const QList<ReleaseImageType *> m_all =
[]() {
QList<ReleaseImageType *> out;
for (int i = 0; i < COUNT; i++) {
const ReleaseImageType::Id id = (ReleaseImageType::Id) i;
out.append(new ReleaseImageType(id));
}
return out;
}();
return m_all;
}
ReleaseImageType::ReleaseImageType(const ReleaseImageType::Id id_arg)
: m_id(id_arg) {
}
ReleaseImageType *ReleaseImageType::fromFilename(const QString &filename) {
for (int i = 0; i < COUNT; i++) {
ReleaseImageType *type = all()[i];
const QStringList abbreviations = type->abbreviation();
for (const QString abbreviation : abbreviations) {
if (filename.endsWith(abbreviation, Qt::CaseInsensitive)) {
return type;
}
}
}
return all()[UNKNOWN];
}
ReleaseImageType::Id ReleaseImageType::id() const {
return m_id;
}
QStringList ReleaseImageType::abbreviation() const {
switch (m_id) {
case ISO: return {"iso", "dvd"};
case TAR: return {"tar"};
case TAR_GZ: return {"tgz", "tar.gz"};
case TAR_XZ: return {"archive", "tar.xz"};
case IMG: return {"img"};
case IMG_GZ: return {"igz", "img.gz"};
case IMG_XZ: return {"ixz", "img.xz"};
case RECOVERY_TAR: return {"trc", "recovery.tar"};
case UNKNOWN: return {};
case COUNT: return {};
}
return QStringList();
}
QString ReleaseImageType::name() const {
switch (m_id) {
case ISO: return tr("ISO DVD");
case TAR: return {"TAR Archive"};
case TAR_GZ: return tr("GZIP TAR Archive");
case TAR_XZ: return tr("LZMA TAR Archive");
case IMG: return tr("IMG");
case IMG_GZ: return tr("GZIP IMG");
case IMG_XZ: return tr("LZMA IMG");
case RECOVERY_TAR: return tr("Recovery TAR Archive");
case UNKNOWN: return tr("Unknown");
case COUNT: return QString();
}
return QString();
}
bool ReleaseImageType::supportedForWriting() const {
static const QList<ReleaseImageType::Id> unsupported = {
TAR_GZ, TAR_XZ, IMG_GZ, RECOVERY_TAR, UNKNOWN, COUNT
};
return !unsupported.contains(m_id);
}
bool ReleaseImageType::canWriteWithRootfs() const {
#if defined(_WIN32)
return false;
#else
if (m_id == TAR_XZ) {
return true;
} else {
return false;
}
#endif
}

View File

@ -30,7 +30,7 @@ class Release;
class ReleaseVersion;
class ReleaseVariant;
class ReleaseArchitecture;
class ReleaseImageType;
class ImageType;
class Progress;
/*
@ -99,7 +99,7 @@ public:
QString filterText() const;
void setFilterText(const QString &o);
bool updateUrl(const QString &name, const QString &version, const QString &status, const QString &architecture, ReleaseImageType *imageType, const QString &board, const QString &url);
bool updateUrl(const QString &name, const QString &version, const QString &status, const QString &architecture, ImageType *imageType, const QString &board, const QString &url);
QStringList architectures() const;
QStringList fileNameFilters() const;
@ -201,7 +201,7 @@ class Release : public QObject {
public:
Release(ReleaseManager *parent, const QString &name, const QString &displayName, const QString &summary, const QString &description, const QString &icon, const QStringList &screenshots);
Q_INVOKABLE void setLocalFile(const QString &path);
bool updateUrl(const QString &version, const QString &status, const QString &architecture, ReleaseImageType *imageType, const QString &board, const QString &url);
bool updateUrl(const QString &version, const QString &status, const QString &architecture, ImageType *imageType, const QString &board, const QString &url);
ReleaseManager *manager();
QString name() const;
@ -276,7 +276,7 @@ public:
Release *release();
const Release *release() const;
bool updateUrl(const QString &status, const QString &architecture, ReleaseImageType *imageType, const QString &board, const QString &url);
bool updateUrl(const QString &status, const QString &architecture, ImageType *imageType, const QString &board, const QString &url);
QString number() const;
QString name() const;
@ -327,7 +327,7 @@ class ReleaseVariant : public QObject {
Q_PROPERTY(QString url READ url NOTIFY urlChanged)
Q_PROPERTY(QString image READ image NOTIFY imageChanged)
Q_PROPERTY(ReleaseImageType *imageType READ imageType CONSTANT)
Q_PROPERTY(ImageType *imageType READ imageType CONSTANT)
Q_PROPERTY(qreal size READ size NOTIFY sizeChanged)
Q_PROPERTY(Progress* progress READ progress CONSTANT)
@ -366,7 +366,7 @@ public:
tr("Error")
};
ReleaseVariant(ReleaseVersion *parent, QString url, ReleaseArchitecture *arch, ReleaseImageType *imageType, QString board);
ReleaseVariant(ReleaseVersion *parent, QString url, ReleaseArchitecture *arch, ImageType *imageType, QString board);
ReleaseVariant(ReleaseVersion *parent, const QString &file);
bool updateUrl(const QString &url);
@ -383,7 +383,7 @@ public:
QString url() const;
QString image() const;
ReleaseImageType *imageType() const;
ImageType *imageType() const;
qreal size() const;
Progress *progress();
@ -414,7 +414,7 @@ public slots:
private:
QString m_image {};
ReleaseArchitecture *m_arch { nullptr };
ReleaseImageType *m_image_type { nullptr };
ImageType *m_image_type { nullptr };
QString m_board {};
QString m_url {};
qreal m_size = 0.0;
@ -475,51 +475,4 @@ private:
const char *m_details {};
};
/**
* @brief The ReleaseImageType class
*
* Class representing the possible image types of the releases
*
* @property abbreviation short names for the type, like iso
* @property name a common name what the short stands for, like "ISO DVD"
* @property supportedForWriting whether this image type can be written to media
* @property canWriteWithRootfs whether this image type can be written with rootfs
*/
class ReleaseImageType : public QObject {
Q_OBJECT
Q_PROPERTY(QStringList abbreviation READ abbreviation CONSTANT)
Q_PROPERTY(QString name READ name CONSTANT)
Q_PROPERTY(bool supportedForWriting READ supportedForWriting CONSTANT)
Q_PROPERTY(bool canWriteWithRootfs READ canWriteWithRootfs CONSTANT)
public:
enum Id {
ISO,
TAR,
TAR_GZ,
TAR_XZ,
IMG,
IMG_GZ,
IMG_XZ,
RECOVERY_TAR,
UNKNOWN,
COUNT,
};
Q_ENUMS(Id);
static QList<ReleaseImageType *> all();
static ReleaseImageType *fromFilename(const QString &filename);
Id id() const;
QStringList abbreviation() const;
QString name() const;
QString description() const;
bool supportedForWriting() const;
bool canWriteWithRootfs() const;
private:
ReleaseImageType(const ReleaseImageType::Id id_arg);
ReleaseImageType::Id m_id;
};
#endif // RELEASEMANAGER_H

View File

@ -344,7 +344,7 @@ sudo alt-rootfs-installer --rootfs=%1 --media=%2 --target=%3</translation>
</message>
</context>
<context>
<name>ReleaseImageType</name>
<name>ImageType</name>
<message>
<source>ISO DVD</source>
<translation></translation>