diff --git a/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp b/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp --- a/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp +++ b/libdiscover/backends/FlatpakBackend/FlatpakBackend.cpp @@ -878,6 +878,10 @@ FlatpakFetchDataJob *job = new FlatpakFetchDataJob(flatpakInstallation, resource, FlatpakFetchDataJob::FetchSize); connect(job, &FlatpakFetchDataJob::finished, job, &FlatpakFetchDataJob::deleteLater); connect(job, &FlatpakFetchDataJob::jobFetchSizeFinished, this, &FlatpakBackend::onFetchSizeFinished); + connect(job, &FlatpakFetchDataJob::jobFetchSizeFailed, [resource] () { + resource->setDownloadSize(-2); + resource->setInstalledSize(-2); + }); job->start(); } @@ -928,6 +932,7 @@ ResultsStream * FlatpakBackend::search(const AbstractResourcesBackend::Filters &filter) { QVector ret; + foreach(AbstractResource* r, m_resources) { if (qobject_cast(r)->type() == FlatpakResource::Runtime && filter.state != AbstractResource::Upgradeable) { continue; diff --git a/libdiscover/backends/FlatpakBackend/FlatpakFetchDataJob.h b/libdiscover/backends/FlatpakBackend/FlatpakFetchDataJob.h --- a/libdiscover/backends/FlatpakBackend/FlatpakFetchDataJob.h +++ b/libdiscover/backends/FlatpakBackend/FlatpakFetchDataJob.h @@ -46,7 +46,9 @@ void run() override; Q_SIGNALS: + void jobFetchMetadataFailed(); void jobFetchMetadataFinished(FlatpakInstallation *installation, FlatpakResource *resource, const QByteArray &metadata); + void jobFetchSizeFailed(); void jobFetchSizeFinished(FlatpakResource *resource, int downloadSize, int installedSize); private: diff --git a/libdiscover/backends/FlatpakBackend/FlatpakFetchDataJob.cpp b/libdiscover/backends/FlatpakBackend/FlatpakFetchDataJob.cpp --- a/libdiscover/backends/FlatpakBackend/FlatpakFetchDataJob.cpp +++ b/libdiscover/backends/FlatpakBackend/FlatpakFetchDataJob.cpp @@ -53,11 +53,13 @@ if (m_app->origin().isEmpty()) { qWarning() << "Failed to get metadata file because of missing origin"; + Q_EMIT jobFetchMetadataFailed(); return; } fakeRef = createFakeRef(m_app); if (!fakeRef) { + Q_EMIT jobFetchMetadataFailed(); return; } @@ -67,11 +69,13 @@ metadataContent = QByteArray((char *)g_bytes_get_data(data, &len)); } else { qWarning() << "Failed to get metadata file: " << localError->message; + Q_EMIT jobFetchMetadataFailed(); return; } if (metadataContent.isEmpty()) { qWarning() << "Failed to get metadata file: empty metadata"; + Q_EMIT jobFetchMetadataFailed(); return; } @@ -83,12 +87,14 @@ ref = createFakeRef(m_app); if (!ref) { + Q_EMIT jobFetchSizeFailed(); return; } if (!flatpak_installation_fetch_remote_size_sync(m_installation, m_app->origin().toStdString().c_str(), ref, &downloadSize, &installedSize, m_cancellable, &localError)) { qWarning() << "Failed to get remote size of " << m_app->name() << ": " << localError->message; + Q_EMIT jobFetchSizeFailed(); return; } diff --git a/libdiscover/backends/FlatpakBackend/FlatpakResource.cpp b/libdiscover/backends/FlatpakBackend/FlatpakResource.cpp --- a/libdiscover/backends/FlatpakBackend/FlatpakResource.cpp +++ b/libdiscover/backends/FlatpakBackend/FlatpakResource.cpp @@ -45,8 +45,8 @@ FlatpakResource::FlatpakResource(AppStream::Component *component, FlatpakBackend *parent) : AbstractResource(parent) , m_appdata(component) - , m_downloadSize(0) - , m_installedSize(0) + , m_downloadSize(-1) + , m_installedSize(-1) , m_scope(FlatpakResource::System) , m_state(AbstractResource::None) , m_type(FlatpakResource::DesktopApp) @@ -352,9 +352,21 @@ { KFormat f; if (!isInstalled() || canUpgrade()) { - return i18nc("@info app size", "%1 to download, %2 on disk", f.formatByteSize(downloadSize()), f.formatByteSize(installedSize())); + if (downloadSize() == -1 || installedSize() == -1) { + return i18n("Retrieving size information"); + } else if (downloadSize() == -2 || installedSize() == -2) { + return i18n("Unknown size"); + } else { + return i18nc("@info app size", "%1 to download, %2 on disk", f.formatByteSize(downloadSize()), f.formatByteSize(installedSize())); + } } else { - return i18nc("@info app size", "%1 on disk", f.formatByteSize(installedSize())); + if (installedSize() == -1) { + return i18n("Retrieving size information"); + } else if (installedSize() == -2) { + return i18n("Unknown size"); + } else { + return i18nc("@info app size", "%1 on disk", f.formatByteSize(installedSize())); + } } }