diff --git a/src/libcalamares/utils/YamlUtils.cpp b/src/libcalamares/utils/YamlUtils.cpp index 48295851c..e7eb8fd46 100644 --- a/src/libcalamares/utils/YamlUtils.cpp +++ b/src/libcalamares/utils/YamlUtils.cpp @@ -214,6 +214,10 @@ writeIndent( QFile& f, int indent ) // forward declaration static bool dumpYaml( QFile& f, const QVariantMap& map, int indent ); +// It's a quote +static const char quote[] = "\""; +static const char newline[] = "\n"; + /// @brief Recursive helper to dump a single value static void dumpYamlElement( QFile& f, const QVariant& value, int indent ) @@ -222,24 +226,35 @@ dumpYamlElement( QFile& f, const QVariant& value, int indent ) f.write( value.toBool() ? "true" : "false" ); else if ( value.type() == QVariant::Type::String ) { - static const char quote[] = "\""; f.write( quote ); f.write( value.toString().toUtf8() ); f.write( quote ); } + else if ( value.type() == QVariant::Type::Int ) + { + f.write( QString::number( value.toInt() ).toUtf8() ); + } + else if ( value.type() == QVariant::Type::Double ) + { + f.write( QString::number( value.toDouble() ).toUtf8() ); + } else if ( value.type() == QVariant::Type::List ) { int c = 0; for ( const auto& it : value.toList() ) { - f.write( "\n" ); + ++c; + f.write( newline ); writeIndent( f, indent+1 ); f.write( "- " ); dumpYamlElement( f, it, indent+1 ); } + if ( !c ) // i.e. list was empty + f.write( "[]" ); } else if ( value.type() == QVariant::Type::Map ) { + f.write( newline ); dumpYaml( f, value.toMap(), indent+1 ); } else @@ -256,10 +271,13 @@ dumpYaml( QFile& f, const QVariantMap& map, int indent ) { for ( auto it = map.cbegin(); it != map.cend(); ++it ) { + writeIndent( f, indent ); + f.write( quote ); f.write( it.key().toUtf8() ); + f.write( quote ); f.write( ": " ); dumpYamlElement( f, it.value(), indent ); - f.write( "\n" ); + f.write( newline ); } return true; }