[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 )
|
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
|
calamares_add_plugin( packagechooser
|
||||||
TYPE viewmodule
|
TYPE viewmodule
|
||||||
@ -13,6 +24,7 @@ calamares_add_plugin( packagechooser
|
|||||||
page_package.ui
|
page_package.ui
|
||||||
LINK_PRIVATE_LIBRARIES
|
LINK_PRIVATE_LIBRARIES
|
||||||
calamaresui
|
calamaresui
|
||||||
|
${_extra_libraries}
|
||||||
SHARED_LIB
|
SHARED_LIB
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -23,8 +35,11 @@ if( ECM_FOUND AND BUILD_TESTING )
|
|||||||
packagechoosertest
|
packagechoosertest
|
||||||
LINK_LIBRARIES
|
LINK_LIBRARIES
|
||||||
${CALAMARES_LIBRARIES}
|
${CALAMARES_LIBRARIES}
|
||||||
|
calamares_viewmodule_packagechooser
|
||||||
Qt5::Core
|
Qt5::Core
|
||||||
Qt5::Test
|
Qt5::Test
|
||||||
|
Qt5::Gui
|
||||||
|
${_extra_libraries}
|
||||||
)
|
)
|
||||||
calamares_automoc( packagechoosertest)
|
calamares_automoc( packagechoosertest)
|
||||||
endif()
|
endif()
|
||||||
|
@ -21,6 +21,11 @@
|
|||||||
#include "utils/Logger.h"
|
#include "utils/Logger.h"
|
||||||
#include "utils/Variant.h"
|
#include "utils/Variant.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_XML
|
||||||
|
#include <QDomDocument>
|
||||||
|
#include <QFile>
|
||||||
|
#endif
|
||||||
|
|
||||||
const NamedEnumTable< PackageChooserMode >&
|
const NamedEnumTable< PackageChooserMode >&
|
||||||
roleNames()
|
roleNames()
|
||||||
{
|
{
|
||||||
@ -41,13 +46,6 @@ roleNames()
|
|||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
PackageItem
|
|
||||||
PackageItem::fromAppStream( const QString& filename )
|
|
||||||
{
|
|
||||||
// TODO: implement this
|
|
||||||
return PackageItem {};
|
|
||||||
}
|
|
||||||
|
|
||||||
PackageItem::PackageItem() {}
|
PackageItem::PackageItem() {}
|
||||||
|
|
||||||
PackageItem::PackageItem( const QString& a_id,
|
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 )
|
PackageListModel::PackageListModel( QObject* parent )
|
||||||
: QAbstractListModel( parent )
|
: QAbstractListModel( parent )
|
||||||
@ -117,7 +165,7 @@ void
|
|||||||
PackageListModel::addPackage( PackageItem&& p )
|
PackageListModel::addPackage( PackageItem&& p )
|
||||||
{
|
{
|
||||||
// Only add valid packages
|
// Only add valid packages
|
||||||
if ( !p.name.isEmpty() )
|
if ( p.isValid() )
|
||||||
{
|
{
|
||||||
int c = m_packages.count();
|
int c = m_packages.count();
|
||||||
beginInsertRows( QModelIndex(), c, c );
|
beginInsertRows( QModelIndex(), c, c );
|
||||||
|
@ -75,8 +75,18 @@ struct PackageItem
|
|||||||
*/
|
*/
|
||||||
PackageItem( const QVariantMap& map );
|
PackageItem( const QVariantMap& map );
|
||||||
|
|
||||||
// TODO: implement this
|
/** @brief Is this item valid?
|
||||||
PackageItem fromAppStream( const QString& filename );
|
*
|
||||||
|
* 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 >;
|
using PackageList = QVector< PackageItem >;
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
#include "Tests.h"
|
#include "Tests.h"
|
||||||
|
|
||||||
|
#include "PackageModel.h"
|
||||||
|
|
||||||
#include <QtTest/QtTest>
|
#include <QtTest/QtTest>
|
||||||
|
|
||||||
QTEST_GUILESS_MAIN( PackageChooserTests )
|
QTEST_GUILESS_MAIN( PackageChooserTests )
|
||||||
@ -36,3 +38,18 @@ PackageChooserTests::testBogus()
|
|||||||
{
|
{
|
||||||
QVERIFY( true );
|
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:
|
private Q_SLOTS:
|
||||||
void initTestCase();
|
void initTestCase();
|
||||||
void testBogus();
|
void testBogus();
|
||||||
|
void testAppData();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user