NOISSUE implement recommended versions using the new JSON format
This commit is contained in:
parent
f565798650
commit
643d74f66c
@ -30,7 +30,7 @@ BaseVersionPtr BaseVersionList::findVersion(const QString &descriptor)
|
|||||||
return BaseVersionPtr();
|
return BaseVersionPtr();
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr BaseVersionList::getLatestStable() const
|
BaseVersionPtr BaseVersionList::getRecommended() const
|
||||||
{
|
{
|
||||||
if (count() <= 0)
|
if (count() <= 0)
|
||||||
return BaseVersionPtr();
|
return BaseVersionPtr();
|
||||||
@ -38,11 +38,6 @@ BaseVersionPtr BaseVersionList::getLatestStable() const
|
|||||||
return at(0);
|
return at(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr BaseVersionList::getRecommended() const
|
|
||||||
{
|
|
||||||
return getLatestStable();
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant BaseVersionList::data(const QModelIndex &index, int role) const
|
QVariant BaseVersionList::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
|
@ -93,11 +93,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual BaseVersionPtr findVersion(const QString &descriptor);
|
virtual BaseVersionPtr findVersion(const QString &descriptor);
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Gets the latest stable version from this list
|
|
||||||
*/
|
|
||||||
virtual BaseVersionPtr getLatestStable() const;
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the recommended version from this list
|
* \brief Gets the recommended version from this list
|
||||||
* If the list doesn't support recommended versions, this works exactly as getLatestStable
|
* If the list doesn't support recommended versions, this works exactly as getLatestStable
|
||||||
|
@ -52,6 +52,7 @@ static VersionPtr parseCommonVersion(const QString &uid, const QJsonObject &obj)
|
|||||||
version->setTime(QDateTime::fromString(requireString(obj, "releaseTime"), Qt::ISODate).toMSecsSinceEpoch() / 1000);
|
version->setTime(QDateTime::fromString(requireString(obj, "releaseTime"), Qt::ISODate).toMSecsSinceEpoch() / 1000);
|
||||||
version->setType(ensureString(obj, "type", QString()));
|
version->setType(ensureString(obj, "type", QString()));
|
||||||
version->setParentUid(ensureString(obj, "parentUid", QString()));
|
version->setParentUid(ensureString(obj, "parentUid", QString()));
|
||||||
|
version->setRecommended(ensureBoolean(obj, "recommended", false));
|
||||||
if(obj.contains("requires"))
|
if(obj.contains("requires"))
|
||||||
{
|
{
|
||||||
QHash<QString, QString> requires;
|
QHash<QString, QString> requires;
|
||||||
@ -87,7 +88,9 @@ static BaseEntity::Ptr parseVersionListInternal(const QJsonObject &obj)
|
|||||||
versions.reserve(versionsRaw.size());
|
versions.reserve(versionsRaw.size());
|
||||||
std::transform(versionsRaw.begin(), versionsRaw.end(), std::back_inserter(versions), [uid](const QJsonObject &vObj)
|
std::transform(versionsRaw.begin(), versionsRaw.end(), std::back_inserter(versions), [uid](const QJsonObject &vObj)
|
||||||
{
|
{
|
||||||
return parseCommonVersion(uid, vObj);
|
auto version = parseCommonVersion(uid, vObj);
|
||||||
|
version->setProvidesRecommendations();
|
||||||
|
return version;
|
||||||
});
|
});
|
||||||
|
|
||||||
VersionListPtr list = std::make_shared<VersionList>(uid);
|
VersionListPtr list = std::make_shared<VersionList>(uid);
|
||||||
|
@ -53,6 +53,13 @@ void Meta::Version::parse(const QJsonObject& obj)
|
|||||||
void Meta::Version::merge(const std::shared_ptr<BaseEntity> &other)
|
void Meta::Version::merge(const std::shared_ptr<BaseEntity> &other)
|
||||||
{
|
{
|
||||||
VersionPtr version = std::dynamic_pointer_cast<Version>(other);
|
VersionPtr version = std::dynamic_pointer_cast<Version>(other);
|
||||||
|
if(version->m_providesRecommendations)
|
||||||
|
{
|
||||||
|
if(m_recommended != version->m_recommended)
|
||||||
|
{
|
||||||
|
setRecommended(version->m_recommended);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (m_type != version->m_type)
|
if (m_type != version->m_type)
|
||||||
{
|
{
|
||||||
setType(version->m_type);
|
setType(version->m_type);
|
||||||
@ -107,3 +114,12 @@ void Meta::Version::setData(const VersionFilePtr &data)
|
|||||||
m_data = data;
|
m_data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Meta::Version::setProvidesRecommendations()
|
||||||
|
{
|
||||||
|
m_providesRecommendations = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Meta::Version::setRecommended(bool recommended)
|
||||||
|
{
|
||||||
|
m_recommended = recommended;
|
||||||
|
}
|
||||||
|
@ -72,6 +72,10 @@ public: /* con/des */
|
|||||||
{
|
{
|
||||||
return m_data;
|
return m_data;
|
||||||
}
|
}
|
||||||
|
bool isRecommended() const
|
||||||
|
{
|
||||||
|
return m_recommended;
|
||||||
|
}
|
||||||
|
|
||||||
void merge(const std::shared_ptr<BaseEntity> &other) override;
|
void merge(const std::shared_ptr<BaseEntity> &other) override;
|
||||||
void parse(const QJsonObject &obj) override;
|
void parse(const QJsonObject &obj) override;
|
||||||
@ -83,6 +87,8 @@ public: // for usage by format parsers only
|
|||||||
void setType(const QString &type);
|
void setType(const QString &type);
|
||||||
void setTime(const qint64 time);
|
void setTime(const qint64 time);
|
||||||
void setRequires(const QHash<QString, QString> &requires);
|
void setRequires(const QHash<QString, QString> &requires);
|
||||||
|
void setRecommended(bool recommended);
|
||||||
|
void setProvidesRecommendations();
|
||||||
void setData(const VersionFilePtr &data);
|
void setData(const VersionFilePtr &data);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@ -91,6 +97,8 @@ signals:
|
|||||||
void requiresChanged();
|
void requiresChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_providesRecommendations = false;
|
||||||
|
bool m_recommended = false;
|
||||||
QString m_name;
|
QString m_name;
|
||||||
QString m_uid;
|
QString m_uid;
|
||||||
QString m_parentUid;
|
QString m_parentUid;
|
||||||
|
@ -94,8 +94,9 @@ QVariant VersionList::data(const QModelIndex &index, int role) const
|
|||||||
case RequiresRole: return QVariant::fromValue(version->requires());
|
case RequiresRole: return QVariant::fromValue(version->requires());
|
||||||
case SortRole: return version->rawTime();
|
case SortRole: return version->rawTime();
|
||||||
case VersionPtrRole: return QVariant::fromValue(version);
|
case VersionPtrRole: return QVariant::fromValue(version);
|
||||||
case RecommendedRole: return version == getRecommended();
|
case RecommendedRole: return version->isRecommended();
|
||||||
case LatestRole: return version == getLatestStable();
|
// FIXME: this should be determined in whatever view/proxy is used...
|
||||||
|
// case LatestRole: return version == getLatestStable();
|
||||||
default: return QVariant();
|
default: return QVariant();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,7 +159,6 @@ void VersionList::setVersions(const QVector<VersionPtr> &versions)
|
|||||||
setupAddedVersion(i, m_versions.at(i));
|
setupAddedVersion(i, m_versions.at(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_latest = m_versions.isEmpty() ? nullptr : m_versions.first();
|
|
||||||
auto recommendedIt = std::find_if(m_versions.constBegin(), m_versions.constEnd(), [](const VersionPtr &ptr) { return ptr->type() == "release"; });
|
auto recommendedIt = std::find_if(m_versions.constBegin(), m_versions.constEnd(), [](const VersionPtr &ptr) { return ptr->type() == "release"; });
|
||||||
m_recommended = recommendedIt == m_versions.constEnd() ? nullptr : *recommendedIt;
|
m_recommended = recommendedIt == m_versions.constEnd() ? nullptr : *recommendedIt;
|
||||||
endResetModel();
|
endResetModel();
|
||||||
@ -202,11 +202,6 @@ void VersionList::merge(const BaseEntity::Ptr &other)
|
|||||||
m_lookup.insert(version->uid(), version);
|
m_lookup.insert(version->uid(), version);
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
|
||||||
if (!m_latest || version->rawTime() > m_latest->rawTime())
|
|
||||||
{
|
|
||||||
m_latest = version;
|
|
||||||
emit dataChanged(index(0), index(m_versions.size() - 1), QVector<int>() << LatestRole);
|
|
||||||
}
|
|
||||||
if (!m_recommended || (version->type() == "release" && version->rawTime() > m_recommended->rawTime()))
|
if (!m_recommended || (version->type() == "release" && version->rawTime() > m_recommended->rawTime()))
|
||||||
{
|
{
|
||||||
m_recommended = version;
|
m_recommended = version;
|
||||||
@ -224,10 +219,6 @@ void VersionList::setupAddedVersion(const int row, const VersionPtr &version)
|
|||||||
connect(version.get(), &Version::typeChanged, this, [this, row]() { emit dataChanged(index(row), index(row), QVector<int>() << TypeRole); });
|
connect(version.get(), &Version::typeChanged, this, [this, row]() { emit dataChanged(index(row), index(row), QVector<int>() << TypeRole); });
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr VersionList::getLatestStable() const
|
|
||||||
{
|
|
||||||
return m_latest;
|
|
||||||
}
|
|
||||||
BaseVersionPtr VersionList::getRecommended() const
|
BaseVersionPtr VersionList::getRecommended() const
|
||||||
{
|
{
|
||||||
return m_recommended;
|
return m_recommended;
|
||||||
|
@ -47,7 +47,6 @@ public:
|
|||||||
int count() const override;
|
int count() const override;
|
||||||
void sortVersions() override;
|
void sortVersions() override;
|
||||||
|
|
||||||
BaseVersionPtr getLatestStable() const override;
|
|
||||||
BaseVersionPtr getRecommended() const override;
|
BaseVersionPtr getRecommended() const override;
|
||||||
|
|
||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
@ -100,7 +99,6 @@ private:
|
|||||||
QString m_name;
|
QString m_name;
|
||||||
|
|
||||||
VersionPtr m_recommended;
|
VersionPtr m_recommended;
|
||||||
VersionPtr m_latest;
|
|
||||||
|
|
||||||
void setupAddedVersion(const int row, const VersionPtr &version);
|
void setupAddedVersion(const int row, const VersionPtr &version);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user