summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorAidan MacDonald <amachronic@protonmail.com>2021-12-29 00:26:47 +0000
committerAidan MacDonald <amachronic@protonmail.com>2022-01-02 15:50:17 -0500
commitcbb57fe714b633cd5b91850eae9cfd326dee2eeb (patch)
tree57fce120fed1c96313842f63b770dbee9fa55333 /utils
parent42999913ba3a76221fceb04b1f935ed4e0e71476 (diff)
downloadrockbox-cbb57fe714b633cd5b91850eae9cfd326dee2eeb.tar.gz
rockbox-cbb57fe714b633cd5b91850eae9cfd326dee2eeb.zip
rbutil: allow checking bootloader installer capabilities
Instead of checking for certain hardcoded strings, fetch the actual capability bitmask by instantiating an installer and querying it. Change-Id: I7883d9c1e90da37ee7c0189732ac626685adbfa1
Diffstat (limited to 'utils')
-rw-r--r--utils/rbutilqt/base/bootloaderinstallbase.h2
-rw-r--r--utils/rbutilqt/base/bootloaderinstallhelper.cpp20
-rw-r--r--utils/rbutilqt/base/bootloaderinstallhelper.h1
-rw-r--r--utils/rbutilqt/base/bootloaderinstallipod.cpp11
-rw-r--r--utils/rbutilqt/base/bootloaderinstallsansa.cpp10
-rw-r--r--utils/rbutilqt/rbutilqt.cpp22
6 files changed, 44 insertions, 22 deletions
diff --git a/utils/rbutilqt/base/bootloaderinstallbase.h b/utils/rbutilqt/base/bootloaderinstallbase.h
index 9a216a632c..0d9423a06f 100644
--- a/utils/rbutilqt/base/bootloaderinstallbase.h
+++ b/utils/rbutilqt/base/bootloaderinstallbase.h
@@ -67,8 +67,6 @@ class BootloaderInstallBase : public QObject
67 // be modified for new targets 67 // be modified for new targets
68 static QString postinstallHints(QString model); 68 static QString postinstallHints(QString model);
69 69
70 //! returns the correct BootloaderInstaller object for the requested type
71 static BootloaderInstallBase* createBootloaderInstaller(QObject* parent,QString type);
72 protected slots: 70 protected slots:
73 void downloadReqFinished(int id, bool error); 71 void downloadReqFinished(int id, bool error);
74 void downloadBlFinish(bool error); 72 void downloadBlFinish(bool error);
diff --git a/utils/rbutilqt/base/bootloaderinstallhelper.cpp b/utils/rbutilqt/base/bootloaderinstallhelper.cpp
index c94ed29140..4a1b24883b 100644
--- a/utils/rbutilqt/base/bootloaderinstallhelper.cpp
+++ b/utils/rbutilqt/base/bootloaderinstallhelper.cpp
@@ -77,6 +77,26 @@ BootloaderInstallBase* BootloaderInstallHelper::createBootloaderInstaller(QObjec
77 } 77 }
78} 78}
79 79
80BootloaderInstallBase::Capabilities
81 BootloaderInstallHelper::bootloaderInstallerCapabilities(QObject *parent, QString type)
82{
83 /* Note - this is a terrible pattern in general, but in this case
84 * it is a much simpler option to just allocate a class instance.
85 * This operation is rarely used, anyway. */
86
87 BootloaderInstallBase* bootloaderInstaller =
88 createBootloaderInstaller(parent, type);
89
90 BootloaderInstallBase::Capabilities caps = BootloaderInstallBase::Capabilities();
91
92 if(bootloaderInstaller) {
93 caps = bootloaderInstaller->capabilities();
94 delete bootloaderInstaller;
95 }
96
97 return caps;
98}
99
80 100
81//! @brief Return post install hints string. 101//! @brief Return post install hints string.
82//! @param model model string 102//! @param model model string
diff --git a/utils/rbutilqt/base/bootloaderinstallhelper.h b/utils/rbutilqt/base/bootloaderinstallhelper.h
index c89444d7a7..9b6fed0866 100644
--- a/utils/rbutilqt/base/bootloaderinstallhelper.h
+++ b/utils/rbutilqt/base/bootloaderinstallhelper.h
@@ -29,6 +29,7 @@ class BootloaderInstallHelper : public QObject
29 Q_OBJECT 29 Q_OBJECT
30 public: 30 public:
31 static BootloaderInstallBase* createBootloaderInstaller(QObject* parent, QString type); 31 static BootloaderInstallBase* createBootloaderInstaller(QObject* parent, QString type);
32 static BootloaderInstallBase::Capabilities bootloaderInstallerCapabilities(QObject *parent, QString type);
32 static QString postinstallHints(QString model); 33 static QString postinstallHints(QString model);
33}; 34};
34 35
diff --git a/utils/rbutilqt/base/bootloaderinstallipod.cpp b/utils/rbutilqt/base/bootloaderinstallipod.cpp
index f94813f99f..d08cc22339 100644
--- a/utils/rbutilqt/base/bootloaderinstallipod.cpp
+++ b/utils/rbutilqt/base/bootloaderinstallipod.cpp
@@ -28,10 +28,6 @@
28BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent) 28BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent)
29 : BootloaderInstallBase(parent) 29 : BootloaderInstallBase(parent)
30{ 30{
31 (void)parent;
32 // initialize sector buffer. The sector buffer is part of the ipod_t
33 // structure, so a second instance of this class will have its own buffer.
34 ipod_alloc_buffer(&ipod, BUFFER_SIZE);
35} 31}
36 32
37 33
@@ -45,11 +41,18 @@ BootloaderInstallIpod::~BootloaderInstallIpod()
45 41
46bool BootloaderInstallIpod::install(void) 42bool BootloaderInstallIpod::install(void)
47{ 43{
44 // initialize sector buffer. The sector buffer is part of the ipod_t
45 // structure, so a second instance of this class will have its own buffer.
46 if(ipod.sectorbuf == nullptr) {
47 ipod_alloc_buffer(&ipod, BUFFER_SIZE);
48 }
49
48 if(ipod.sectorbuf == nullptr) { 50 if(ipod.sectorbuf == nullptr) {
49 emit logItem(tr("Error: can't allocate buffer memory!"), LOGERROR); 51 emit logItem(tr("Error: can't allocate buffer memory!"), LOGERROR);
50 emit done(true); 52 emit done(true);
51 return false; 53 return false;
52 } 54 }
55
53 // save buffer pointer before cleaning up ipod_t structure 56 // save buffer pointer before cleaning up ipod_t structure
54 unsigned char* sb = ipod.sectorbuf; 57 unsigned char* sb = ipod.sectorbuf;
55 memset(&ipod, 0, sizeof(struct ipod_t)); 58 memset(&ipod, 0, sizeof(struct ipod_t));
diff --git a/utils/rbutilqt/base/bootloaderinstallsansa.cpp b/utils/rbutilqt/base/bootloaderinstallsansa.cpp
index d4a2799f73..568bb82afa 100644
--- a/utils/rbutilqt/base/bootloaderinstallsansa.cpp
+++ b/utils/rbutilqt/base/bootloaderinstallsansa.cpp
@@ -27,10 +27,6 @@
27BootloaderInstallSansa::BootloaderInstallSansa(QObject *parent) 27BootloaderInstallSansa::BootloaderInstallSansa(QObject *parent)
28 : BootloaderInstallBase(parent) 28 : BootloaderInstallBase(parent)
29{ 29{
30 (void)parent;
31 // initialize sector buffer. The sector buffer is part of the sansa_t
32 // structure, so a second instance of this class will have its own buffer.
33 sansa_alloc_buffer(&sansa, BUFFER_SIZE);
34} 30}
35 31
36 32
@@ -46,6 +42,12 @@ BootloaderInstallSansa::~BootloaderInstallSansa()
46 */ 42 */
47bool BootloaderInstallSansa::install(void) 43bool BootloaderInstallSansa::install(void)
48{ 44{
45 // initialize sector buffer. The sector buffer is part of the sansa_t
46 // structure, so a second instance of this class will have its own buffer.
47 if(sansa.sectorbuf == nullptr) {
48 sansa_alloc_buffer(&sansa, BUFFER_SIZE);
49 }
50
49 if(sansa.sectorbuf == nullptr) { 51 if(sansa.sectorbuf == nullptr) {
50 emit logItem(tr("Error: can't allocate buffer memory!"), LOGERROR); 52 emit logItem(tr("Error: can't allocate buffer memory!"), LOGERROR);
51 return false; 53 return false;
diff --git a/utils/rbutilqt/rbutilqt.cpp b/utils/rbutilqt/rbutilqt.cpp
index d0ff9f2799..aa405418be 100644
--- a/utils/rbutilqt/rbutilqt.cpp
+++ b/utils/rbutilqt/rbutilqt.cpp
@@ -359,16 +359,14 @@ void RbUtilQt::updateSettings()
359 359
360void RbUtilQt::updateDevice() 360void RbUtilQt::updateDevice()
361{ 361{
362 /* TODO: We should check the flags of the bootloaderinstall classes, and not 362 PlayerBuildInfo* playerBuildInfo = PlayerBuildInfo::instance();
363 * just check if its != none or != "fwpatcher" */
364 363
365 /* Enable bootloader installation, if possible */ 364 BootloaderInstallBase::Capabilities bootloaderCapabilities =
366 bool bootloaderInstallable = 365 BootloaderInstallHelper::bootloaderInstallerCapabilities(this,
367 PlayerBuildInfo::instance()->value(PlayerBuildInfo::BootloaderMethod).toString() != "none"; 366 playerBuildInfo->value(PlayerBuildInfo::BootloaderMethod).toString());
368 367
369 /* Enable bootloader uninstallation, if possible */ 368 /* Disable uninstallation actions if they are not supported. */
370 bool bootloaderUninstallable = bootloaderInstallable && 369 bool bootloaderUninstallable = !(bootloaderCapabilities & BootloaderInstallBase::Uninstall);
371 PlayerBuildInfo::instance()->value(PlayerBuildInfo::BootloaderMethod) != "fwpatcher";
372 ui.labelRemoveBootloader->setEnabled(bootloaderUninstallable); 370 ui.labelRemoveBootloader->setEnabled(bootloaderUninstallable);
373 ui.buttonRemoveBootloader->setEnabled(bootloaderUninstallable); 371 ui.buttonRemoveBootloader->setEnabled(bootloaderUninstallable);
374 ui.actionRemove_bootloader->setEnabled(bootloaderUninstallable); 372 ui.actionRemove_bootloader->setEnabled(bootloaderUninstallable);
@@ -379,11 +377,11 @@ void RbUtilQt::updateDevice()
379 ui.menuA_ctions->setEnabled(configurationValid); 377 ui.menuA_ctions->setEnabled(configurationValid);
380 378
381 // displayed device info 379 // displayed device info
382 QString brand = PlayerBuildInfo::instance()->value(PlayerBuildInfo::Brand).toString(); 380 QString brand = playerBuildInfo->value(PlayerBuildInfo::Brand).toString();
383 QString name 381 QString name
384 = QString("%1 (%2)").arg( 382 = QString("%1 (%2)").arg(
385 PlayerBuildInfo::instance()->value(PlayerBuildInfo::DisplayName).toString(), 383 playerBuildInfo->value(PlayerBuildInfo::DisplayName).toString(),
386 PlayerBuildInfo::instance()->statusAsString()); 384 playerBuildInfo->statusAsString());
387 ui.labelDevice->setText(QString("<b>%1 %2</b>").arg(brand, name)); 385 ui.labelDevice->setText(QString("<b>%1 %2</b>").arg(brand, name));
388 386
389 QString mountpoint = RbSettings::value(RbSettings::Mountpoint).toString(); 387 QString mountpoint = RbSettings::value(RbSettings::Mountpoint).toString();
@@ -398,7 +396,7 @@ void RbUtilQt::updateDevice()
398 } 396 }
399 397
400 QPixmap pm; 398 QPixmap pm;
401 QString m = PlayerBuildInfo::instance()->value(PlayerBuildInfo::PlayerPicture).toString(); 399 QString m = playerBuildInfo->value(PlayerBuildInfo::PlayerPicture).toString();
402 pm.load(":/icons/players/" + m + "-small.png"); 400 pm.load(":/icons/players/" + m + "-small.png");
403 pm = pm.scaledToHeight(QFontMetrics(QApplication::font()).height() * 3); 401 pm = pm.scaledToHeight(QFontMetrics(QApplication::font()).height() * 3);
404 ui.labelPlayerPic->setPixmap(pm); 402 ui.labelPlayerPic->setPixmap(pm);