diff --git a/backend/flipperupdates.cpp b/backend/flipperupdates.cpp index efb3c9d0..5e762f14 100644 --- a/backend/flipperupdates.cpp +++ b/backend/flipperupdates.cpp @@ -6,21 +6,24 @@ #include #include -#include "debug.h" - using namespace Flipper::Updates; -FileInfo::FileInfo(const QJsonValue &val) +FileInfo::FileInfo(): + m_isValid(false) +{} + +FileInfo::FileInfo(const QJsonValue &val): + FileInfo() { if(!val.isObject()) { throw std::runtime_error("Expected FileInfo to be an object"); } const auto &json = val.toObject(); - const auto canConstruct = json.contains("target") && json.contains("type") && + m_isValid = json.contains("target") && json.contains("type") && json.contains("url") && json.contains("sha256"); - if(!canConstruct) { + if(!m_isValid) { throw std::runtime_error("Malformed FileInfo"); } @@ -50,6 +53,11 @@ const QByteArray &FileInfo::sha256() const return m_sha256; } +bool FileInfo::isValid() const +{ + return m_isValid; +} + VersionInfo::VersionInfo(const QJsonValue &val) { if(!val.isObject()) { @@ -103,8 +111,7 @@ const FileInfo VersionInfo::fileInfo(const QString &type, const QString &target) return (arg.type() == type) && (target == arg.target()); }); - check_return_val(it != m_files.cend(), "FileInfo not found", FileInfo()); - return *it; + return (it != m_files.cend()) ? *it : FileInfo(); } qint64 VersionInfo::compare(const VersionInfo &other) const diff --git a/backend/flipperupdates.h b/backend/flipperupdates.h index 32429814..2bfe358a 100644 --- a/backend/flipperupdates.h +++ b/backend/flipperupdates.h @@ -15,7 +15,7 @@ class FileInfo Q_GADGET public: - FileInfo() = default; + FileInfo(); FileInfo(const QJsonValue &val); const QString &target() const; @@ -23,11 +23,14 @@ class FileInfo const QString &url() const; const QByteArray &sha256() const; + bool isValid() const; + private: QString m_target; QString m_type; QString m_url; QByteArray m_sha256; + bool m_isValid; }; class VersionInfo diff --git a/backend/flipperzero/helper/firmwarehelper.cpp b/backend/flipperzero/helper/firmwarehelper.cpp index 48c2c100..2d363a6d 100644 --- a/backend/flipperzero/helper/firmwarehelper.cpp +++ b/backend/flipperzero/helper/firmwarehelper.cpp @@ -160,12 +160,24 @@ void FirmwareHelper::prepareOptionBytes() void FirmwareHelper::fetchAssets() { m_deviceState->setStatusString(QStringLiteral("Fetching databases...")); - const auto &fileInfo = m_versionInfo.fileInfo(QStringLiteral("resources_tgz"), QStringLiteral("any")); + + const auto type = QStringLiteral("resources_tgz"); + auto fileInfo = m_versionInfo.fileInfo(type, m_deviceState->deviceInfo().hardware.target); + + if(!fileInfo.isValid()) { + fileInfo = m_versionInfo.fileInfo(type, QStringLiteral("any")); + } + fetchFile(FileIndex::AssetsTgz, fileInfo); } void FirmwareHelper::fetchFile(FileIndex index, const Updates::FileInfo &fileInfo) { + if(!fileInfo.isValid()) { + finishWithError(BackendError::DataError, QStringLiteral("File info invalid (missing target?)")); + return; + } + const auto fileName = QUrl(fileInfo.url()).fileName(); auto *file = globalTempDirs->createFile(fileName, this);