summaryrefslogtreecommitdiffstats
path: root/rbutil/rbutilqt/gui
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2020-11-21 19:33:29 +0100
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2020-11-22 14:43:01 +0100
commitc2dacf6736dfcde92a4ed947f06fd85c6b2087d4 (patch)
tree470852777cef90f4a2f1fb9a463653955261fcff /rbutil/rbutilqt/gui
parentad37655687cd4861681e561b2a84fabb5c307327 (diff)
downloadrockbox-c2dacf6736dfcde92a4ed947f06fd85c6b2087d4.tar.gz
rockbox-c2dacf6736dfcde92a4ed947f06fd85c6b2087d4.zip
rbutil: Add voice installation to main widget.
Add checkbox for installing the prerendered voice file to the main install widget. Current limitations: - only english for now. The available languages are available from the build server but are not yet taken into account. - only for releases. This is the same limitations we had before. We do have voices for daily builds, but that requires adding daily builds again (those have been removed some time back.) - Old voice installation dialog still present. Change-Id: Ia6443b0f15365196df86cc1b64d5e043dff70c4c
Diffstat (limited to 'rbutil/rbutilqt/gui')
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidget.cpp119
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidget.h2
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui143
3 files changed, 183 insertions, 81 deletions
diff --git a/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp b/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp
index c916e7a190..8a83c6ebc5 100644
--- a/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp
+++ b/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp
@@ -39,6 +39,7 @@ SelectiveInstallWidget::SelectiveInstallWidget(QWidget* parent) : QWidget(parent
ui.fontsCheckbox->setChecked(RbSettings::value(RbSettings::InstallFonts).toBool());
ui.themesCheckbox->setChecked(RbSettings::value(RbSettings::InstallThemes).toBool());
ui.gamefileCheckbox->setChecked(RbSettings::value(RbSettings::InstallGamefiles).toBool());
+ ui.voiceCheckbox->setChecked(RbSettings::value(RbSettings::InstallVoice).toBool());
// check if Rockbox is installed by looking after rockbox-info.txt.
// If installed uncheck bootloader installation.
@@ -62,17 +63,27 @@ SelectiveInstallWidget::SelectiveInstallWidget(QWidget* parent) : QWidget(parent
void SelectiveInstallWidget::selectedVersionChanged(int index)
{
- QString current = ui.selectedVersion->itemData(index).toString();
- if(current == "release")
+ m_buildtype = ui.selectedVersion->itemData(index).toString();
+ bool voice = true;
+ if(m_buildtype == "release") {
ui.selectedDescription->setText(tr("This is the latest stable "
"release available."));
- if(current == "development")
+ voice = true;
+ }
+ if(m_buildtype == "development") {
ui.selectedDescription->setText(tr("The development version is "
"updated on every code change. Last update was on %1").arg(
ServerInfo::instance()->platformValue(ServerInfo::BleedingDate).toString()));
- if(current == "rc")
+ voice = false;
+ }
+ if(m_buildtype == "rc") {
ui.selectedDescription->setText(tr("This will eventually become the "
"next Rockbox version. Install it to help testing."));
+ voice = false;
+ }
+ ui.voiceCheckbox->setEnabled(voice);
+ ui.voiceCombobox->setEnabled(voice);
+ ui.voiceLabel->setEnabled(voice);
}
@@ -144,7 +155,27 @@ void SelectiveInstallWidget::updateVersion(void)
RockboxInfo info(m_mountpoint);
ui.bootloaderCheckbox->setChecked(!info.success());
}
-
+ // populate languages for voice file.
+ // FIXME: currently only english. Need to get the available languages from
+ // build-info later.
+ QVariant current = ui.voiceCombobox->currentData();
+ QMap<QString, QStringList> languages = SystemInfo::languages(true);
+ QStringList voicelangs;
+ voicelangs << "english";
+ ui.voiceCombobox->clear();
+ for(int i = 0; i < voicelangs.size(); i++) {
+ QString key = voicelangs.at(i);
+ if(!languages.contains(key)) {
+ LOG_WARNING() << "trying to add unknown language" << key;
+ continue;
+ }
+ ui.voiceCombobox->addItem(languages.value(key).at(0), key);
+ }
+ // try to select the previously selected one again (if still present)
+ // TODO: Fall back to system language if not found, or english.
+ int sel = ui.voiceCombobox->findData(current);
+ if(sel >= 0)
+ ui.voiceCombobox->setCurrentIndex(sel);
}
@@ -157,6 +188,8 @@ void SelectiveInstallWidget::saveSettings(void)
RbSettings::setValue(RbSettings::InstallFonts, ui.fontsCheckbox->isChecked());
RbSettings::setValue(RbSettings::InstallThemes, ui.themesCheckbox->isChecked());
RbSettings::setValue(RbSettings::InstallGamefiles, ui.gamefileCheckbox->isChecked());
+ RbSettings::setValue(RbSettings::InstallVoice, ui.voiceCheckbox->isChecked());
+ RbSettings::setValue(RbSettings::VoiceLanguage, ui.voiceCombobox->currentData().toString());
}
@@ -209,7 +242,8 @@ void SelectiveInstallWidget::continueInstall(bool error)
case 3: installFonts(); break;
case 4: installThemes(); break;
case 5: installGamefiles(); break;
- case 6: installBootloaderPost(); break;
+ case 6: installVoicefile(); break;
+ case 7: installBootloaderPost(); break;
default: break;
}
@@ -381,15 +415,14 @@ void SelectiveInstallWidget::installRockbox(void)
LOG_INFO() << "installing Rockbox";
QString url;
- QString selected = ui.selectedVersion->itemData(ui.selectedVersion->currentIndex()).toString();
- RbSettings::setValue(RbSettings::Build, selected);
+ RbSettings::setValue(RbSettings::Build, m_buildtype);
RbSettings::sync();
- if(selected == "release") url = ServerInfo::instance()->platformValue(
+ if(m_buildtype == "release") url = ServerInfo::instance()->platformValue(
ServerInfo::CurReleaseUrl, m_target).toString();
- else if(selected == "development") url = ServerInfo::instance()->platformValue(
+ else if(m_buildtype == "development") url = ServerInfo::instance()->platformValue(
ServerInfo::CurDevelUrl, m_target).toString();
- else if(selected == "rc") url = ServerInfo::instance()->platformValue(
+ else if(m_buildtype == "rc") url = ServerInfo::instance()->platformValue(
ServerInfo::RelCandidateUrl, m_target).toString();
//! install build
@@ -399,7 +432,7 @@ void SelectiveInstallWidget::installRockbox(void)
m_zipinstaller->setLogSection("Rockbox (Base)");
if(!RbSettings::value(RbSettings::CacheDisabled).toBool())
m_zipinstaller->setCache(true);
- m_zipinstaller->setLogVersion(m_versions[selected]);
+ m_zipinstaller->setLogVersion(m_versions[m_buildtype]);
m_zipinstaller->setMountPoint(m_mountpoint);
connect(m_zipinstaller, SIGNAL(done(bool)), this, SLOT(continueInstall(bool)));
@@ -422,25 +455,71 @@ void SelectiveInstallWidget::installFonts(void)
if(ui.fontsCheckbox->isChecked()) {
LOG_INFO() << "installing Fonts";
+ RockboxInfo installInfo(m_mountpoint);
+ QString fontsurl;
+ QString logversion;
+ QString relversion = installInfo.release();
+ if(relversion.isEmpty()) {
+ // release is empty for non-release versions (i.e. daily / current)
+ fontsurl = SystemInfo::value(SystemInfo::FontUrl, SystemInfo::BuildDaily).toString();
+ }
+ else {
+ fontsurl = SystemInfo::value(SystemInfo::FontUrl, SystemInfo::BuildRelease).toString();
+ logversion = installInfo.release();
+ }
+ fontsurl.replace("%RELEASEVER%", relversion);
+
+ // create new zip installer
+ if(m_zipinstaller != nullptr) m_zipinstaller->deleteLater();
+ m_zipinstaller = new ZipInstaller(this);
+ m_zipinstaller->setUrl(fontsurl);
+ m_zipinstaller->setLogSection("Fonts");
+ m_zipinstaller->setLogVersion(logversion);
+ m_zipinstaller->setMountPoint(m_mountpoint);
+ if(!RbSettings::value(RbSettings::CacheDisabled).toBool())
+ m_zipinstaller->setCache(true);
+
+ connect(m_zipinstaller, SIGNAL(done(bool)), this, SLOT(continueInstall(bool)));
+ connect(m_zipinstaller, SIGNAL(logItem(QString, int)), m_logger, SLOT(addItem(QString, int)));
+ connect(m_zipinstaller, SIGNAL(logProgress(int, int)), m_logger, SLOT(setProgress(int, int)));
+ connect(m_logger, SIGNAL(aborted()), m_zipinstaller, SLOT(abort()));
+ m_zipinstaller->install();
+ }
+ else {
+ LOG_INFO() << "Fonts install disabled.";
+ emit installSkipped(false);
+ }
+}
+
+void SelectiveInstallWidget::installVoicefile(void)
+{
+ if(ui.voiceCheckbox->isChecked()) {
+ LOG_INFO() << "installing Voice file";
+ QString lang = ui.voiceCombobox->currentData().toString();
+
RockboxInfo installInfo(m_mountpoint);
- QString fontsurl;
+ QString voiceurl;
QString logversion;
QString relversion = installInfo.release();
- if(relversion.isEmpty()) {
+ if(m_buildtype == "release") {
// release is empty for non-release versions (i.e. daily / current)
- fontsurl = SystemInfo::value(SystemInfo::FontUrl, SystemInfo::BuildDaily).toString();
+ voiceurl = SystemInfo::value(SystemInfo::VoiceUrl, SystemInfo::BuildRelease).toString();
}
else {
- fontsurl = SystemInfo::value(SystemInfo::FontUrl, SystemInfo::BuildRelease).toString();
+ voiceurl = SystemInfo::value(SystemInfo::VoiceUrl, SystemInfo::BuildDaily).toString();
logversion = installInfo.release();
}
- fontsurl.replace("%RELEASEVER%", relversion);
+ voiceurl.replace("%RELVERSION%", m_versions[m_buildtype]);
+ voiceurl.replace("%MODEL%", m_target);
+ voiceurl.replace("%LANGUAGE%", lang);
+
+ LOG_INFO() << "voicurl" << voiceurl;
// create new zip installer
if(m_zipinstaller != nullptr) m_zipinstaller->deleteLater();
m_zipinstaller = new ZipInstaller(this);
- m_zipinstaller->setUrl(fontsurl);
- m_zipinstaller->setLogSection("Fonts");
+ m_zipinstaller->setUrl(voiceurl);
+ m_zipinstaller->setLogSection("Voice (" + lang + ")");
m_zipinstaller->setLogVersion(logversion);
m_zipinstaller->setMountPoint(m_mountpoint);
if(!RbSettings::value(RbSettings::CacheDisabled).toBool())
@@ -453,7 +532,7 @@ void SelectiveInstallWidget::installFonts(void)
m_zipinstaller->install();
}
else {
- LOG_INFO() << "Fonts install disabled.";
+ LOG_INFO() << "Voice install disabled.";
emit installSkipped(false);
}
}
diff --git a/rbutil/rbutilqt/gui/selectiveinstallwidget.h b/rbutil/rbutilqt/gui/selectiveinstallwidget.h
index 799829e066..ac07e24ab8 100644
--- a/rbutil/rbutilqt/gui/selectiveinstallwidget.h
+++ b/rbutil/rbutilqt/gui/selectiveinstallwidget.h
@@ -41,6 +41,7 @@ class SelectiveInstallWidget : public QWidget
void installBootloader(void);
void installRockbox(void);
void installFonts(void);
+ void installVoicefile(void);
void installThemes(void);
void installGamefiles(void);
void installBootloaderPost(void);
@@ -62,6 +63,7 @@ class SelectiveInstallWidget : public QWidget
ZipInstaller *m_zipinstaller;
QMap<QString, QString> m_versions;
ThemesInstallWindow *m_themesinstaller;
+ QString m_buildtype;
};
#endif
diff --git a/rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui b/rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui
index 5e7fe54ffe..a5bb023f2e 100644
--- a/rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui
+++ b/rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>663</width>
- <height>369</height>
+ <height>399</height>
</rect>
</property>
<property name="sizePolicy">
@@ -54,22 +54,22 @@
<string>Rockbox components to install</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QCheckBox" name="bootloaderCheckbox">
+ <item row="1" column="0">
+ <widget class="QCheckBox" name="rockboxCheckbox">
<property name="text">
- <string>&amp;Bootloader</string>
+ <string>&amp;Rockbox</string>
</property>
<property name="icon">
<iconset resource="../rbutilqt.qrc">
- <normaloff>:/icons/preferences-system.svg</normaloff>:/icons/preferences-system.svg</iconset>
+ <normaloff>:/icons/multimedia-player.svg</normaloff>:/icons/multimedia-player.svg</iconset>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QLabel" name="rockboxLabel">
+ <item row="0" column="1">
+ <widget class="QLabel" name="bootloaderLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -77,13 +77,51 @@
</sizepolicy>
</property>
<property name="text">
- <string>The main Rockbox firmware.</string>
+ <string>The bootloader is required for starting Rockbox. Only necessary for first time install.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
+ <item row="3" column="0">
+ <widget class="QCheckBox" name="themesCheckbox">
+ <property name="text">
+ <string>Themes</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../rbutilqt.qrc">
+ <normaloff>:/icons/preferences-desktop-theme.svg</normaloff>:/icons/preferences-desktop-theme.svg</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="3">
+ <widget class="QPushButton" name="themesCustomize">
+ <property name="text">
+ <string>Customize</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../rbutilqt.qrc">
+ <normaloff>:/icons/preferences-system.svg</normaloff>:/icons/preferences-system.svg</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Minimum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>1</width>
+ <height>1</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
<item row="2" column="0">
<widget class="QCheckBox" name="fontsCheckbox">
<property name="text">
@@ -98,22 +136,19 @@
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QCheckBox" name="rockboxCheckbox">
+ <item row="6" column="0">
+ <widget class="QCheckBox" name="gamefileCheckbox">
<property name="text">
- <string>&amp;Rockbox</string>
+ <string>Game Files</string>
</property>
<property name="icon">
<iconset resource="../rbutilqt.qrc">
- <normaloff>:/icons/multimedia-player.svg</normaloff>:/icons/multimedia-player.svg</iconset>
- </property>
- <property name="checked">
- <bool>true</bool>
+ <normaloff>:/icons/input-gaming.svg</normaloff>:/icons/input-gaming.svg</iconset>
</property>
</widget>
</item>
- <item row="6" column="1">
- <widget class="QLabel" name="gameLabel">
+ <item row="3" column="1">
+ <widget class="QLabel" name="themesLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -121,7 +156,7 @@
</sizepolicy>
</property>
<property name="text">
- <string>Some game plugins require additional files.</string>
+ <string>Themes allow adjusting the user interface of Rockbox. Use &quot;Customize&quot; to select themes.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@@ -144,8 +179,8 @@
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QLabel" name="bootloaderLabel">
+ <item row="6" column="1">
+ <widget class="QLabel" name="gameLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -153,77 +188,63 @@
</sizepolicy>
</property>
<property name="text">
- <string>The bootloader is required for starting Rockbox. Only necessary for first time install.</string>
+ <string>Some game plugins require additional files.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
- <item row="6" column="0">
- <widget class="QCheckBox" name="gamefileCheckbox">
+ <item row="1" column="1">
+ <widget class="QLabel" name="rockboxLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="text">
- <string>Game Files</string>
+ <string>The main Rockbox firmware.</string>
</property>
- <property name="icon">
- <iconset resource="../rbutilqt.qrc">
- <normaloff>:/icons/input-gaming.svg</normaloff>:/icons/input-gaming.svg</iconset>
+ <property name="wordWrap">
+ <bool>true</bool>
</property>
</widget>
</item>
- <item row="3" column="3">
- <widget class="QPushButton" name="themesCustomize">
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="bootloaderCheckbox">
<property name="text">
- <string>Customize</string>
+ <string>&amp;Bootloader</string>
</property>
<property name="icon">
<iconset resource="../rbutilqt.qrc">
<normaloff>:/icons/preferences-system.svg</normaloff>:/icons/preferences-system.svg</iconset>
</property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
</widget>
</item>
- <item row="3" column="0">
- <widget class="QCheckBox" name="themesCheckbox">
+ <item row="7" column="0">
+ <widget class="QCheckBox" name="voiceCheckbox">
<property name="text">
- <string>Themes</string>
+ <string>&amp;Voice File</string>
</property>
<property name="icon">
<iconset resource="../rbutilqt.qrc">
- <normaloff>:/icons/preferences-desktop-theme.svg</normaloff>:/icons/preferences-desktop-theme.svg</iconset>
+ <normaloff>:/icons/audio-volume-high.svg</normaloff>:/icons/audio-volume-high.svg</iconset>
</property>
</widget>
</item>
- <item row="3" column="1">
- <widget class="QLabel" name="themesLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
+ <item row="7" column="1">
+ <widget class="QLabel" name="voiceLabel">
<property name="text">
- <string>Themes allow adjusting the user interface of Rockbox. Use &quot;Customize&quot; to select themes.</string>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
+ <string>Install prerendered voice file.</string>
</property>
</widget>
</item>
- <item row="1" column="2">
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Minimum</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>1</width>
- <height>1</height>
- </size>
- </property>
- </spacer>
+ <item row="7" column="3">
+ <widget class="QComboBox" name="voiceCombobox"/>
</item>
</layout>
</widget>