From fa2f5763c64e486eac428d91fe9683e1571655c7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 19 Aug 2019 07:25:28 -0400 Subject: [PATCH] [packagechooser] Load AppStream data - Get the id, name, and description from AppStream data Missing: - No translations - No screenshots --- src/modules/packagechooser/ItemAppStream.cpp | 62 ++++++++++++++++++-- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/src/modules/packagechooser/ItemAppStream.cpp b/src/modules/packagechooser/ItemAppStream.cpp index 287e5a139..769973575 100644 --- a/src/modules/packagechooser/ItemAppStream.cpp +++ b/src/modules/packagechooser/ItemAppStream.cpp @@ -25,9 +25,63 @@ #include "utils/Logger.h" #include "utils/Variant.h" -PackageItem -PackageItem::fromAppStream( const QVariantMap& map ) +#include + +static PackageItem +fromComponent( const AppStream::Component& component ) { - cWarning() << "AppStream loading not implemented."; - return PackageItem(); + cDebug() << "Loaded" << component.id(); + + QVariantMap map; + map.insert( "id", component.id() ); + map.insert( "name", component.name() ); + map.insert( "description", component.description() ); + // map.insert( "screenshot", component.screenshots() ); + return PackageItem( map ); +} + +PackageItem +PackageItem::fromAppStream( const QVariantMap& item_map ) +{ + QString appstreamId = CalamaresUtils::getString( item_map, "appstream" ); + if ( appstreamId.isEmpty() ) + { + cWarning() << "Can't load AppStream without a suitable appstreamId."; + return PackageItem(); + } + cDebug() << "Loading AppStream data for" << appstreamId; + + AppStream::Pool pool; + if ( !pool.load() ) + { + cWarning() << "AppStream load failed" << pool.lastError(); + return PackageItem(); + } + + auto itemList = pool.componentsById( appstreamId ); + if ( itemList.count() < 1 ) + { + cWarning() << "No AppStream data for" << appstreamId; + return PackageItem(); + } + if ( itemList.count() > 1 ) + { + cDebug() << "Multiple AppStream data for" << appstreamId << "using first."; + } + + auto r = fromComponent( itemList.first() ); + if ( r.isValid() ) + { + QString id = CalamaresUtils::getString( item_map, "id" ); + QString screenshotPath = CalamaresUtils::getString( item_map, "screenshot" ); + if ( !id.isEmpty() ) + { + r.id = id; + } + if ( !screenshotPath.isEmpty() ) + { + r.screenshot = screenshotPath; + } + } + return r; }