-Release::Release(ReleaseManager *parent, const QString &name, const QString &display_name, const QString &summary, const QString &description, const QString &icon, const QStringList &screenshots)
+Release::Release(const QString &name, const QString &display_name, const QString &summary, const QString &description, const QString &icon, const QStringList &screenshots, QObject *parent)
: QObject(parent)
, m_name(name)
, m_displayName(display_name)
@@ -35,14 +35,11 @@ Release::Release(ReleaseManager *parent, const QString &name, const QString &dis
, m_screenshots(screenshots)
, m_isCustom(false)
{
- // TODO: connect to release's signal in parent, not the other way around, won't need to have parent be releasemanager then
- connect(
- this, &Release::selectedVariantChanged,
- parent, &ReleaseManager::variantChangedFilter);
+
}
-Release *Release::custom(ReleaseManager *parent) {
- auto customRelease = new Release(parent, QString(), tr("Custom image"), QT_TRANSLATE_NOOP("Release", "Pick a file from your drive(s)"), { QT_TRANSLATE_NOOP("Release", "Here you can choose a OS image from your hard drive to be written to your flash disk
Currently it is only supported to write raw disk images (.iso or .bin)
") }, "qrc:/logo/custom", {});
+Release *Release::custom(QObject *parent) {
+ auto customRelease = new Release(QString(), tr("Custom image"), QT_TRANSLATE_NOOP("Release", "Pick a file from your drive(s)"), { QT_TRANSLATE_NOOP("Release", "Here you can choose a OS image from your hard drive to be written to your flash disk
Currently it is only supported to write raw disk images (.iso or .bin)
") }, "qrc:/logo/custom", {}, parent);
customRelease->m_isCustom = true;
customRelease->setLocalFile(QString());
@@ -84,7 +81,7 @@ void Release::updateUrl(const QString &url, Architecture *architecture, ImageTyp
}
return out;
}();
- auto new_variant = new Variant(url, architecture, imageType, board, live, this);
+ auto new_variant = new Variant(url, m_displayName, architecture, imageType, board, live, this);
m_variants.insert(insert_index, new_variant);
emit variantsChanged();
@@ -97,17 +94,14 @@ void Release::updateUrl(const QString &url, Architecture *architecture, ImageTyp
}
void Release::setLocalFile(const QString &path) {
- // Delete old custom variant (there's only one, but iterate anyway)
+ // Delete old custom variant (there's really only one, but iterate anyway)
for (auto variant : m_variants) {
variant->deleteLater();
}
m_variants.clear();
// Add new variant
- ImageType *image_type = ImageType::fromFilename(path);
- auto customVariant = new Variant(path, Architecture::fromId(Architecture::UNKNOWN), image_type, QString(), false, this);
- // NOTE: start out in ready because don't need to download
- customVariant->setStatus(Variant::READY);
+ auto customVariant = Variant::custom(path, this);
m_variants.append(customVariant);
emit variantsChanged();
diff --git a/app/release.h b/app/release.h
index 9e82a1d..ae36665 100644
--- a/app/release.h
+++ b/app/release.h
@@ -20,9 +20,6 @@
#ifndef RELEASE_H
#define RELEASE_H
-
-class ReleaseManager;
-class Release;
class Variant;
class Architecture;
class ImageType;
@@ -63,12 +60,11 @@ class Release : public QObject {
Q_PROPERTY(Variant* variant READ selectedVariant NOTIFY selectedVariantChanged)
Q_PROPERTY(int variantIndex READ selectedVariantIndex WRITE setSelectedVariantIndex NOTIFY selectedVariantChanged)
public:
- Release(ReleaseManager *parent, const QString &name, const QString &displayName, const QString &summary, const QString &description, const QString &icon, const QStringList &screenshots);
+ Release(const QString &name, const QString &displayName, const QString &summary, const QString &description, const QString &icon, const QStringList &screenshots, QObject *parent);
- static Release *custom(ReleaseManager *parent);
+ static Release *custom(QObject *parent);
void updateUrl(const QString &url, Architecture *architecture, ImageType *imageType, const QString &board, const bool live);
- ReleaseManager *manager();
Q_INVOKABLE void setLocalFile(const QString &path);
diff --git a/app/releasemanager.cpp b/app/releasemanager.cpp
index 66a333c..98aa7ae 100644
--- a/app/releasemanager.cpp
+++ b/app/releasemanager.cpp
@@ -121,10 +121,6 @@ ReleaseManager::ReleaseManager(QObject *parent)
loadVariants(variantsFile);
}
- connect(
- this, &ReleaseManager::selectedChanged,
- this, &ReleaseManager::variantChangedFilter);
-
// Download releases from getalt.org
QTimer::singleShot(0, this, &ReleaseManager::downloadMetadata);
}
@@ -315,12 +311,6 @@ void ReleaseManager::setBeingUpdated(const bool value) {
emit beingUpdatedChanged();
}
-void ReleaseManager::variantChangedFilter() {
- // TODO here we could add some filters to help signal/slot performance
- // TODO otherwise this can just go away and connections can be directly to the signal
- emit variantChanged();
-}
-
bool ReleaseManager::beingUpdated() const {
return m_beingUpdated;
}
@@ -394,16 +384,6 @@ void ReleaseManager::setSelectedIndex(int o) {
}
}
-Variant *ReleaseManager::variant() {
- Release *release = selected();
-
- if (release != nullptr) {
- return release->selectedVariant();
- } else {
- return nullptr;
- }
-}
-
void ReleaseManager::loadVariants(const QString &variantsFile) {
YAML::Node variants = YAML::Load(variantsFile.toStdString());
@@ -556,7 +536,7 @@ QVariant ReleaseListModel::data(const QModelIndex &index, int role) const {
return QVariant();
}
-ReleaseListModel::ReleaseListModel(const QList §ionsFiles, ReleaseManager *parent)
+ReleaseListModel::ReleaseListModel(const QList §ionsFiles, QObject *parent)
: QAbstractListModel(parent)
{
qDebug() << "Creating ReleaseListModel";
@@ -602,7 +582,7 @@ ReleaseListModel::ReleaseListModel(const QList §ionsFiles, ReleaseM
// NOTE: icon_path is consumed by QML, so it needs to begin with "qrc:/" not ":/"
const QString icon_path = "qrc" + icon_path_test;
- const auto release = new Release(manager(), name, display_name, summary, description, icon_path, screenshots);
+ const auto release = new Release(name, display_name, summary, description, icon_path, screenshots, this);
// Reorder releases because default order in
// sections files is not good. Try to put
@@ -627,14 +607,10 @@ ReleaseListModel::ReleaseListModel(const QList §ionsFiles, ReleaseM
}
}
- auto customRelease = Release::custom(manager());
+ auto customRelease = Release::custom(this);
m_releases.insert(FRONTPAGE_ROW_COUNT - 1, customRelease);
}
-ReleaseManager *ReleaseListModel::manager() {
- return qobject_cast(parent());
-}
-
Release *ReleaseListModel::get(int index) {
if (index >= 0 && index < m_releases.count())
return m_releases[index];
diff --git a/app/releasemanager.h b/app/releasemanager.h
index 689c65b..dfa2b2c 100644
--- a/app/releasemanager.h
+++ b/app/releasemanager.h
@@ -79,8 +79,6 @@ class ReleaseManager : public QSortFilterProxyModel {
Q_PROPERTY(Release* selected READ selected NOTIFY selectedChanged)
Q_PROPERTY(int selectedIndex READ selectedIndex WRITE setSelectedIndex NOTIFY selectedChanged)
- Q_PROPERTY(Variant* variant READ variant NOTIFY variantChanged)
-
Q_PROPERTY(QStringList architectures READ architectures CONSTANT)
Q_PROPERTY(QStringList fileNameFilters READ fileNameFilters CONSTANT)
public:
@@ -106,18 +104,12 @@ public:
int selectedIndex() const;
void setSelectedIndex(int o);
- Variant *variant();
-
-public slots:
- void variantChangedFilter();
-
signals:
void beingUpdatedChanged();
void frontPageChanged();
void filterTextChanged();
void filterArchitectureChanged();
void selectedChanged();
- void variantChanged();
private:
ReleaseListModel *m_sourceModel { nullptr };
@@ -141,8 +133,7 @@ private:
class ReleaseListModel : public QAbstractListModel {
Q_OBJECT
public:
- explicit ReleaseListModel(const QList §ionsFiles, ReleaseManager *parent);
- ReleaseManager *manager();
+ explicit ReleaseListModel(const QList §ionsFiles, QObject *parent);
Q_INVOKABLE Release *get(int index);
diff --git a/app/variant.cpp b/app/variant.cpp
index 78069f3..f3abe67 100644
--- a/app/variant.cpp
+++ b/app/variant.cpp
@@ -31,8 +31,9 @@
#include
#include
-Variant::Variant(QString url, Architecture *arch, ImageType *imageType, QString board, const bool live, Release *parent)
+Variant::Variant(QString url, const QString &releaseName_arg, Architecture *arch, ImageType *imageType, QString board, const bool live, QObject *parent)
: QObject(parent)
+, releaseName(releaseName_arg)
, m_arch(arch)
, m_image_type(imageType)
, m_board(board)
@@ -43,6 +44,20 @@ Variant::Variant(QString url, Architecture *arch, ImageType *imageType, QString
}
+Variant *Variant::custom(const QString &path, QObject *parent) {
+ const QString releaseName = tr("Custom");
+ ImageType *image_type = ImageType::fromFilename(path);
+ Architecture *arch = Architecture::fromId(Architecture::UNKNOWN);
+ const QString board = QString();
+ const bool live = false;
+
+ auto variant = new Variant(path, releaseName, arch, image_type, board, live, parent);
+ // NOTE: start out in ready because don't need to download
+ variant->setStatus(Variant::READY);
+
+ return variant;
+}
+
bool Variant::updateUrl(const QString &url) {
bool changed = false;
if (!url.isEmpty() && m_url.toUtf8().trimmed() != url.toUtf8().trimmed()) {
@@ -54,14 +69,6 @@ bool Variant::updateUrl(const QString &url) {
return changed;
}
-Release *Variant::release() {
- return qobject_cast(parent());
-}
-
-const Release *Variant::release() const {
- return qobject_cast(parent());
-}
-
Architecture *Variant::arch() const {
return m_arch;
}
@@ -89,10 +96,7 @@ QString Variant::name() const {
}
QString Variant::fullName() {
- if (release()->isCustom())
- return QFileInfo(image()).fileName();
- else
- return QString("%1 %2").arg(release()->displayName(), name());
+ return QString("%1 %2").arg(releaseName, name());
}
QString Variant::url() const {
diff --git a/app/variant.h b/app/variant.h
index e6d186f..f01ba1b 100644
--- a/app/variant.h
+++ b/app/variant.h
@@ -28,7 +28,6 @@
class Progress;
class ImageType;
class Architecture;
-class Release;
/**
* @brief The Variant class
@@ -92,13 +91,12 @@ public:
tr("Error")
};
- Variant(QString url, Architecture *arch, ImageType *imageType, QString board, const bool live, Release *parent);
+ Variant(QString url, const QString &releaseName_arg, Architecture *arch, ImageType *imageType, QString board, const bool live, QObject *parent);
+
+ static Variant *custom(const QString &path, QObject *parent);
bool updateUrl(const QString &url);
- Release *release();
- const Release *release() const;
-
Architecture *arch() const;
ImageType *imageType() const;
QString name() const;
@@ -136,6 +134,7 @@ public slots:
void onImageDownloadFinished();
private:
+ const QString releaseName;
QString m_image {};
Architecture *m_arch;
ImageType *m_image_type;
diff --git a/app/views/ImageDetails.qml b/app/views/ImageDetails.qml
index adefa1f..dbfc356 100644
--- a/app/views/ImageDetails.qml
+++ b/app/views/ImageDetails.qml
@@ -91,9 +91,9 @@ Item {
deviceNotification.open = false
archPopover.open = false
dlDialog.visible = true
- releases.variant.download()
+ releases.selected.variant.download()
}
- enabled: !releases.selected.isCustom || releases.variant.image
+ enabled: !releases.selected.isCustom || releases.selected.variant.image
}
}
@@ -125,7 +125,7 @@ Item {
}
Text {
font.pointSize: 12
- property double size: releases.variant.size
+ property double size: releases.selected.variant.size
text: size <= 0 ? "" :
(size < 1024) ? (size + " B") :
(size < (1024 * 1024)) ? ((size / 1024).toFixed(1) + " KB") :
@@ -143,13 +143,13 @@ Item {
font.pointSize: 10
color: mixColors(palette.window, palette.windowText, 0.3)
visible: releases.selected.variant
- text: releases.variant.name
+ text: releases.selected.variant.name
}
Text {
font.pointSize: 8
color: mixColors(palette.window, palette.windowText, 0.3)
- visible: releases.variant
- text: releases.variant && releases.variant.imageType.name
+ visible: releases.selected.variant
+ text: releases.selected.variant && releases.selected.variant.imageType.name
}
RowLayout {
spacing: 0