[packagechooser] Start implementation of AppData loading
- Doing a manual read of the XML, since existing appdata libraries don't seem to have a convenient entry for what I need. - Expand tests to loading AppData (currently, they fail).
This commit is contained in:
parent
8329d7d7dc
commit
beb5896fa2
@ -1,4 +1,15 @@
|
||||
find_package( Qt5 COMPONENTS Core Gui Widgets REQUIRED )
|
||||
set( _extra_libraries "" )
|
||||
|
||||
### OPTIONAL AppData XML support in PackageModel
|
||||
#
|
||||
#
|
||||
find_package(Qt5 COMPONENTS Xml)
|
||||
if ( Qt5Xml_FOUND )
|
||||
add_definitions( -DHAVE_XML )
|
||||
list( APPEND _extra_libraries Qt5::Xml )
|
||||
endif()
|
||||
|
||||
|
||||
calamares_add_plugin( packagechooser
|
||||
TYPE viewmodule
|
||||
@ -13,6 +24,7 @@ calamares_add_plugin( packagechooser
|
||||
page_package.ui
|
||||
LINK_PRIVATE_LIBRARIES
|
||||
calamaresui
|
||||
${_extra_libraries}
|
||||
SHARED_LIB
|
||||
)
|
||||
|
||||
@ -23,8 +35,11 @@ if( ECM_FOUND AND BUILD_TESTING )
|
||||
packagechoosertest
|
||||
LINK_LIBRARIES
|
||||
${CALAMARES_LIBRARIES}
|
||||
calamares_viewmodule_packagechooser
|
||||
Qt5::Core
|
||||
Qt5::Test
|
||||
Qt5::Gui
|
||||
${_extra_libraries}
|
||||
)
|
||||
calamares_automoc( packagechoosertest)
|
||||
endif()
|
||||
|
@ -21,6 +21,11 @@
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/Variant.h"
|
||||
|
||||
#ifdef HAVE_XML
|
||||
#include <QDomDocument>
|
||||
#include <QFile>
|
||||
#endif
|
||||
|
||||
const NamedEnumTable< PackageChooserMode >&
|
||||
roleNames()
|
||||
{
|
||||
@ -41,13 +46,6 @@ roleNames()
|
||||
return names;
|
||||
}
|
||||
|
||||
PackageItem
|
||||
PackageItem::fromAppStream( const QString& filename )
|
||||
{
|
||||
// TODO: implement this
|
||||
return PackageItem {};
|
||||
}
|
||||
|
||||
PackageItem::PackageItem() {}
|
||||
|
||||
PackageItem::PackageItem( const QString& a_id,
|
||||
@ -99,6 +97,56 @@ PackageItem::PackageItem::PackageItem( const QVariantMap& item_map )
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_XML
|
||||
QDomDocument
|
||||
loadAppData( const QString& fileName )
|
||||
{
|
||||
QFile file( fileName );
|
||||
if ( !file.open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
return QDomDocument();
|
||||
}
|
||||
QDomDocument doc( "AppData" );
|
||||
if ( !doc.setContent( &file ) )
|
||||
{
|
||||
file.close();
|
||||
return QDomDocument();
|
||||
}
|
||||
file.close();
|
||||
return doc;
|
||||
}
|
||||
|
||||
QString
|
||||
getChildText( const QDomNode& n, const QString& tagName )
|
||||
{
|
||||
QDomElement e = n.firstChildElement( tagName );
|
||||
return e.isNull() ? QString() : e.text();
|
||||
}
|
||||
#endif
|
||||
|
||||
PackageItem
|
||||
PackageItem::fromAppData( const QString& fileName )
|
||||
{
|
||||
#ifdef HAVE_XML
|
||||
QDomDocument doc = loadAppData( fileName );
|
||||
if ( doc.isNull() )
|
||||
{
|
||||
return PackageItem();
|
||||
}
|
||||
|
||||
QDomElement componentNode = doc.documentElement();
|
||||
if ( !componentNode.isNull() && componentNode.tagName() == "component" )
|
||||
{
|
||||
QString id = getChildText( componentNode, "id" );
|
||||
cDebug() << "Got AppData id" << id;
|
||||
}
|
||||
|
||||
return PackageItem();
|
||||
#else
|
||||
return PackageItem();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
PackageListModel::PackageListModel( QObject* parent )
|
||||
: QAbstractListModel( parent )
|
||||
@ -117,7 +165,7 @@ void
|
||||
PackageListModel::addPackage( PackageItem&& p )
|
||||
{
|
||||
// Only add valid packages
|
||||
if ( !p.name.isEmpty() )
|
||||
if ( p.isValid() )
|
||||
{
|
||||
int c = m_packages.count();
|
||||
beginInsertRows( QModelIndex(), c, c );
|
||||
|
@ -75,8 +75,18 @@ struct PackageItem
|
||||
*/
|
||||
PackageItem( const QVariantMap& map );
|
||||
|
||||
// TODO: implement this
|
||||
PackageItem fromAppStream( const QString& filename );
|
||||
/** @brief Is this item valid?
|
||||
*
|
||||
* A valid item has an untranslated name available.
|
||||
*/
|
||||
bool isValid() const { return !name.isEmpty(); }
|
||||
|
||||
/** @brief Loads an AppData XML file and returns a PackageItem
|
||||
*
|
||||
* Requires XML support in libcalamares, if not present will
|
||||
* return invalid PackageItems.
|
||||
*/
|
||||
static PackageItem fromAppData( const QString& filename );
|
||||
};
|
||||
|
||||
using PackageList = QVector< PackageItem >;
|
||||
|
@ -18,6 +18,8 @@
|
||||
|
||||
#include "Tests.h"
|
||||
|
||||
#include "PackageModel.h"
|
||||
|
||||
#include <QtTest/QtTest>
|
||||
|
||||
QTEST_GUILESS_MAIN( PackageChooserTests )
|
||||
@ -36,3 +38,18 @@ PackageChooserTests::testBogus()
|
||||
{
|
||||
QVERIFY( true );
|
||||
}
|
||||
|
||||
void
|
||||
PackageChooserTests::testAppData()
|
||||
{
|
||||
// Path from the build-dir
|
||||
QString appdataName( "../io.calamares.calamares.appdata.xml" );
|
||||
QVERIFY( QFile::exists( appdataName ) );
|
||||
|
||||
PackageItem p = PackageItem::fromAppData( appdataName );
|
||||
#ifdef HAVE_XML
|
||||
QVERIFY( p.isValid() );
|
||||
#else
|
||||
QVERIFY( !p.isValid() );
|
||||
#endif
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ public:
|
||||
private Q_SLOTS:
|
||||
void initTestCase();
|
||||
void testBogus();
|
||||
void testAppData();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user