[dummyqml] Search for files

- start implementation of searching-for-qml
 - add a *filename* configuration item, so that the filename
   can be set per-instance (via the config file)
This commit is contained in:
Adriaan de Groot 2020-01-13 22:04:27 +01:00
parent 04615b251c
commit 7f8a31007a
2 changed files with 44 additions and 4 deletions

View File

@ -181,6 +181,40 @@ Calamares::QmlViewStep::showQml()
} }
} }
/** @brief Find a suitable QML file, given the search method and name hints
*
* Returns QString() if nothing is found (which would mean the module
* is badly configured).
*/
QString
searchQmlFile( Calamares::QmlViewStep::QmlSearch method, const QString& configuredName, const QString& moduleName )
{
cDebug() << "Looking for QML for" << moduleName;
for ( const QString& candidate :
QStringList { configuredName.isEmpty() ? QString() : QStringLiteral( ":/%1.qml" ).arg( configuredName ),
moduleName.isEmpty() ? QString() : QStringLiteral( ":/%1.qml" ).arg( moduleName ) } )
{
if ( candidate.isEmpty() )
{
continue;
}
cDebug() << Logger::SubEntry << "Looking at QML file" << candidate;
if ( QFile::exists( candidate ) )
{
if ( candidate.startsWith( ':' ) )
{
// Inconsistency: QFile only sees the file with :,
// but QML needs an explicit scheme (of qrc:)
return QStringLiteral( "qrc" ) + candidate;
}
return candidate;
}
}
cDebug() << Logger::SubEntry << "None found.";
return QString();
}
void void
Calamares::QmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) Calamares::QmlViewStep::setConfigurationMap( const QVariantMap& configurationMap )
{ {
@ -191,11 +225,14 @@ Calamares::QmlViewStep::setConfigurationMap( const QVariantMap& configurationMap
cDebug() << "Bad QML search mode."; cDebug() << "Bad QML search mode.";
} }
if ( !m_qmlComponent ) QString qmlFile = CalamaresUtils::getString( configurationMap, "filename" );
if ( qmlFile.isEmpty() )
{ {
// TODO: search for suitable file cWarning() << "No QML file for module" << m_name;
QString qrcName = QStringLiteral( "qrc:/%1.qml" ).arg( m_name ); }
m_qmlFileName = qrcName; else if ( !m_qmlComponent )
{
m_qmlFileName = searchQmlFile( m_searchMethod, qmlFile, m_name );
cDebug() << "QmlViewStep" << moduleInstanceKey() << "loading" << m_qmlFileName; cDebug() << "QmlViewStep" << moduleInstanceKey() << "loading" << m_qmlFileName;
m_qmlComponent = new QQmlComponent( m_qmlComponent = new QQmlComponent(

View File

@ -15,5 +15,8 @@
# To support instanced QML modules, searches in the branding # To support instanced QML modules, searches in the branding
# directory look for the full module@instanceid name as well. # directory look for the full module@instanceid name as well.
--- ---
# Search mode. Valid values are "both", "qrc" and "branding"
search: both search: both
# Name of the QML file. If not set, uses the name of the module.
filename: dummyqml