@@ -314,6 +314,23 @@ void MainWindow::repopulate()
314
314
}
315
315
}
316
316
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
+
317
334
QMap<QString, QVariantMap> MainWindow::listImages ()
318
335
{
319
336
QMap<QString,QVariantMap> images;
@@ -329,32 +346,36 @@ QMap<QString, QVariantMap> MainWindow::listImages()
329
346
continue ;
330
347
QVariantMap osv = Json::loadFromFile (imagefolder+" /os.json" ).toMap ();
331
348
332
- if (QFile::exists (imagefolder+" /flavours.json" ))
349
+ QString basename = osv.value (" name" ).toString ();
350
+ if (canInstallOs (basename, osv))
333
351
{
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" ))
338
353
{
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)
341
358
{
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
+ }
348
369
}
349
370
}
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
+ }
358
379
}
359
380
}
360
381
@@ -885,61 +906,64 @@ void MainWindow::processJson(QVariant json)
885
906
{
886
907
QVariantMap os = osv.toMap ();
887
908
888
- if (os.contains (" flavours" ))
909
+ QString basename = os.value (" os_name" ).toString ();
910
+ if (canInstallOs (basename, os))
889
911
{
890
- QVariantList flavours = os.value (" flavours" ).toList ();
891
-
892
- foreach (QVariant flv, flavours)
912
+ if (os.contains (" flavours" ))
893
913
{
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 ();
903
915
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" )))
905
954
{
955
+ os[" name" ] = name;
956
+ QString iconurl = os.value (" icon" ).toString ();
906
957
if (!iconurl.isEmpty ())
907
958
iconurls.insert (iconurl);
908
959
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 );
914
961
witem->setCheckState (Qt::Unchecked);
915
- witem->setData (Qt::UserRole, item );
962
+ witem->setData (Qt::UserRole, os );
916
963
witem->setData (SecondIconRole, internetIcon);
917
-
918
- if (recommended)
919
- ui->list ->insertItem (0 , witem);
920
- else
921
- ui->list ->addItem (witem);
922
964
}
923
965
}
924
966
}
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
- }
943
967
}
944
968
945
969
/* Download icons */
@@ -1053,7 +1077,7 @@ void MainWindow::updateNeeded()
1053
1077
QVariantMap entry = item->data (Qt::UserRole).toMap ();
1054
1078
_neededMB += entry.value (" nominal_size" ).toInt ();
1055
1079
1056
- if (entry.value (" name" ).toString (). contains ( " risc " , Qt::CaseInsensitive ))
1080
+ if (nameMatchesRiscOS ( entry.value (" name" ).toString ()))
1057
1081
{
1058
1082
/* RiscOS needs to start at a predetermined sector, calculate the extra space needed for that */
1059
1083
int startSector = getFileContents (" /sys/class/block/mmcblk0p2/start" ).trimmed ().toULongLong ();
0 commit comments