@@ -314,6 +314,23 @@ void MainWindow::repopulate()
314314 }
315315}
316316
317+ /* Whether this OS should be displayed in the list of installable OSes */
318+ bool canInstallOs (const QString& name, const QVariantMap& values)
319+ {
320+ /* Can't simply pull "name" from "values" because in some JSON files it's "os_name" and in others it's "name"
321+
322+ /* RISC_OS needs a matching riscos_offset */
323+ if (nameMatchesRiscOS (name))
324+ {
325+ if (!values.contains (RISCOS_OFFSET_KEY) || (values.value (RISCOS_OFFSET_KEY).toInt () != RISCOS_OFFSET))
326+ {
327+ return false ;
328+ }
329+ }
330+
331+ return true ;
332+ }
333+
317334QMap<QString, QVariantMap> MainWindow::listImages ()
318335{
319336 QMap<QString,QVariantMap> images;
@@ -329,32 +346,36 @@ QMap<QString, QVariantMap> MainWindow::listImages()
329346 continue ;
330347 QVariantMap osv = Json::loadFromFile (imagefolder+" /os.json" ).toMap ();
331348
332- if (QFile::exists (imagefolder+" /flavours.json" ))
349+ QString basename = osv.value (" name" ).toString ();
350+ if (canInstallOs (basename, osv))
333351 {
334- QVariantMap v = Json::loadFromFile (imagefolder+" /flavours.json" ).toMap ();
335- QVariantList fl = v.value (" flavours" ).toList ();
336-
337- foreach (QVariant f, fl)
352+ if (QFile::exists (imagefolder+" /flavours.json" ))
338353 {
339- QVariantMap fm = f.toMap ();
340- if (fm.contains (" name" ))
354+ QVariantMap v = Json::loadFromFile (imagefolder+" /flavours.json" ).toMap ();
355+ QVariantList fl = v.value (" flavours" ).toList ();
356+
357+ foreach (QVariant f, fl)
341358 {
342- QString name = fm.value (" name" ).toString ();
343- if (name == RECOMMENDED_IMAGE)
344- fm[" recommended" ] = true ;
345- fm[" folder" ] = imagefolder;
346- fm[" release_date" ] = osv.value (" release_date" );
347- images[imagefolder+" #" +name] = fm;
359+ QVariantMap fm = f.toMap ();
360+ if (fm.contains (" name" ))
361+ {
362+ QString name = fm.value (" name" ).toString ();
363+ if (name == RECOMMENDED_IMAGE)
364+ fm[" recommended" ] = true ;
365+ fm[" folder" ] = imagefolder;
366+ fm[" release_date" ] = osv.value (" release_date" );
367+ images[imagefolder+" #" +name] = fm;
368+ }
348369 }
349370 }
350- }
351- else
352- {
353- QString name = osv. value ( " name" ). toString ();
354- if (name. contains (RECOMMENDED_IMAGE))
355- osv[" recommended " ] = true ;
356- osv[ " folder " ] = imagefolder ;
357- images[imagefolder+ " # " +name] = osv;
371+ else
372+ {
373+ QString name = basename;
374+ if ( name. contains (RECOMMENDED_IMAGE))
375+ osv[ " recommended " ] = true ;
376+ osv[" folder " ] = imagefolder ;
377+ images[imagefolder+ " # " +name ] = osv ;
378+ }
358379 }
359380 }
360381
@@ -885,61 +906,64 @@ void MainWindow::processJson(QVariant json)
885906 {
886907 QVariantMap os = osv.toMap ();
887908
888- if (os.contains (" flavours" ))
909+ QString basename = os.value (" os_name" ).toString ();
910+ if (canInstallOs (basename, os))
889911 {
890- QVariantList flavours = os.value (" flavours" ).toList ();
891-
892- foreach (QVariant flv, flavours)
912+ if (os.contains (" flavours" ))
893913 {
894- QVariantMap flavour = flv.toMap ();
895- QVariantMap item = os;
896- QString name = flavour.value (" name" ).toString ();
897- QString description = flavour.value (" description" ).toString ();
898- QString iconurl = flavour.value (" icon" ).toString ();
899-
900- item.insert (" name" , name);
901- item.insert (" description" , description);
902- item.insert (" icon" , iconurl);
914+ QVariantList flavours = os.value (" flavours" ).toList ();
903915
904- if (!alreadyHasItem (name, item.value (" release_date" )))
916+ foreach (QVariant flv, flavours)
917+ {
918+ QVariantMap flavour = flv.toMap ();
919+ QVariantMap item = os;
920+ QString name = flavour.value (" name" ).toString ();
921+ QString description = flavour.value (" description" ).toString ();
922+ QString iconurl = flavour.value (" icon" ).toString ();
923+
924+ item.insert (" name" , name);
925+ item.insert (" description" , description);
926+ item.insert (" icon" , iconurl);
927+
928+ if (!alreadyHasItem (name, item.value (" release_date" )))
929+ {
930+ if (!iconurl.isEmpty ())
931+ iconurls.insert (iconurl);
932+
933+ bool recommended = (name == RECOMMENDED_IMAGE);
934+ if (recommended)
935+ name += " [" +tr (" RECOMMENDED" )+" ]" ;
936+
937+ QListWidgetItem *witem = new QListWidgetItem (name+" \n " +description);
938+ witem->setCheckState (Qt::Unchecked);
939+ witem->setData (Qt::UserRole, item);
940+ witem->setData (SecondIconRole, internetIcon);
941+
942+ if (recommended)
943+ ui->list ->insertItem (0 , witem);
944+ else
945+ ui->list ->addItem (witem);
946+ }
947+ }
948+ }
949+ if (os.contains (" description" ))
950+ {
951+ QString name = basename;
952+ QString description = os.value (" description" ).toString ();
953+ if (!alreadyHasItem (name, os.value (" release_date" )))
905954 {
955+ os[" name" ] = name;
956+ QString iconurl = os.value (" icon" ).toString ();
906957 if (!iconurl.isEmpty ())
907958 iconurls.insert (iconurl);
908959
909- bool recommended = (name == RECOMMENDED_IMAGE);
910- if (recommended)
911- name += " [" +tr (" RECOMMENDED" )+" ]" ;
912-
913- QListWidgetItem *witem = new QListWidgetItem (name+" \n " +description);
960+ QListWidgetItem *witem = new QListWidgetItem (name+" \n " +description, ui->list );
914961 witem->setCheckState (Qt::Unchecked);
915- witem->setData (Qt::UserRole, item );
962+ witem->setData (Qt::UserRole, os );
916963 witem->setData (SecondIconRole, internetIcon);
917-
918- if (recommended)
919- ui->list ->insertItem (0 , witem);
920- else
921- ui->list ->addItem (witem);
922964 }
923965 }
924966 }
925- if (os.contains (" description" ))
926- {
927- QString name = os.value (" os_name" ).toString ();
928- QString description = os.value (" description" ).toString ();
929-
930- if (!alreadyHasItem (name, os.value (" release_date" )))
931- {
932- os[" name" ] = name;
933- QString iconurl = os.value (" icon" ).toString ();
934- if (!iconurl.isEmpty ())
935- iconurls.insert (iconurl);
936-
937- QListWidgetItem *witem = new QListWidgetItem (name+" \n " +description, ui->list );
938- witem->setCheckState (Qt::Unchecked);
939- witem->setData (Qt::UserRole, os);
940- witem->setData (SecondIconRole, internetIcon);
941- }
942- }
943967 }
944968
945969 /* Download icons */
@@ -1053,7 +1077,7 @@ void MainWindow::updateNeeded()
10531077 QVariantMap entry = item->data (Qt::UserRole).toMap ();
10541078 _neededMB += entry.value (" nominal_size" ).toInt ();
10551079
1056- if (entry.value (" name" ).toString (). contains ( " risc " , Qt::CaseInsensitive ))
1080+ if (nameMatchesRiscOS ( entry.value (" name" ).toString ()))
10571081 {
10581082 /* RiscOS needs to start at a predetermined sector, calculate the extra space needed for that */
10591083 int startSector = getFileContents (" /sys/class/block/mmcblk0p2/start" ).trimmed ().toULongLong ();
0 commit comments