summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rbutil/rbutilqt/base/rbsettings.cpp1
-rw-r--r--rbutil/rbutilqt/base/rbsettings.h1
-rw-r--r--rbutil/rbutilqt/base/systeminfo.cpp8
-rw-r--r--rbutil/rbutilqt/base/systeminfo.h5
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidget.cpp119
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidget.h2
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui143
-rw-r--r--rbutil/rbutilqt/rbutil.ini7
-rw-r--r--rbutil/rbutilqt/rbutilqt.cpp1
9 files changed, 199 insertions, 88 deletions
diff --git a/rbutil/rbutilqt/base/rbsettings.cpp b/rbutil/rbutilqt/base/rbsettings.cpp
index 827c0f96fd..5baa53bee0 100644
--- a/rbutil/rbutilqt/base/rbsettings.cpp
+++ b/rbutil/rbutilqt/base/rbsettings.cpp
@@ -47,6 +47,7 @@ const static struct {
{ RbSettings::InstallFonts, "install_fonts", "true" },
{ RbSettings::InstallThemes, "install_themes", "false" },
{ RbSettings::InstallGamefiles, "install_gamefiles", "true" },
+ { RbSettings::InstallVoice, "install_voice", "false" },
#if defined(Q_OS_WIN32)
{ RbSettings::Tts, "tts", "sapi" },
#elif defined(Q_OS_MACX)
diff --git a/rbutil/rbutilqt/base/rbsettings.h b/rbutil/rbutilqt/base/rbsettings.h
index 7406aab1ad..a25eabbcee 100644
--- a/rbutil/rbutilqt/base/rbsettings.h
+++ b/rbutil/rbutilqt/base/rbsettings.h
@@ -46,6 +46,7 @@ class RbSettings : public QObject
InstallFonts,
InstallThemes,
InstallGamefiles,
+ InstallVoice,
Tts,
UseTtsCorrections,
TalkFolders,
diff --git a/rbutil/rbutilqt/base/systeminfo.cpp b/rbutil/rbutilqt/base/systeminfo.cpp
index 2aece49110..2ad3c7a7d4 100644
--- a/rbutil/rbutilqt/base/systeminfo.cpp
+++ b/rbutil/rbutilqt/base/systeminfo.cpp
@@ -159,7 +159,7 @@ QStringList SystemInfo::platforms(enum SystemInfo::PlatformType type, QString va
return result;
}
-QMap<QString, QStringList> SystemInfo::languages(void)
+QMap<QString, QStringList> SystemInfo::languages(bool namesOnly)
{
ensureSystemInfoExists();
@@ -168,7 +168,11 @@ QMap<QString, QStringList> SystemInfo::languages(void)
QStringList a = systemInfos->childKeys();
for(int i = 0; i < a.size(); i++)
{
- result.insert(a.at(i), systemInfos->value(a.at(i), "null").toStringList());
+ QStringList data = systemInfos->value(a.at(i), "null").toStringList();
+ if(namesOnly)
+ result.insert(data.at(0), QStringList(data.at(1)));
+ else
+ result.insert(a.at(i), data);
}
systemInfos->endGroup();
return result;
diff --git a/rbutil/rbutilqt/base/systeminfo.h b/rbutil/rbutilqt/base/systeminfo.h
index 12b9eb4bfb..9bcfe6d253 100644
--- a/rbutil/rbutilqt/base/systeminfo.h
+++ b/rbutil/rbutilqt/base/systeminfo.h
@@ -90,8 +90,9 @@ class SystemInfo : public QObject
//! return a list of all platforms (rbutil internal names)
static QStringList platforms(enum PlatformType type = PlatformAll,
QString variant="");
- //! returns a map of all languages
- static QMap<QString, QStringList> languages(void);
+ //! returns a map of all languages.
+ //! Maps <language code> to (<language name>, <display name>)
+ static QMap<QString, QStringList> languages(bool namesOnly = false);
//! returns a map of usb-ids and their targets
static QMap<int, QStringList> usbIdMap(enum MapType type);
//! get a value from system settings
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>
diff --git a/rbutil/rbutilqt/rbutil.ini b/rbutil/rbutilqt/rbutil.ini
index e0d60e797e..f680a15fe2 100644
--- a/rbutil/rbutilqt/rbutil.ini
+++ b/rbutil/rbutilqt/rbutil.ini
@@ -22,7 +22,7 @@ download_url=http://download.rockbox.org/bootloader
[release]
build_url=https://download.rockbox.org/release/%RELVERSION%/rockbox-%MODEL%-%RELVERSION%.zip
-voice_url=https://download.rockbox.org/release/%RELVERSION%/%MODEL%-%RELVERSION%-english.zip
+voice_url=https://download.rockbox.org/release/%RELVERSION%/%MODEL%-%RELVERSION%-%LANGUAGE%.zip
font_url=https://download.rockbox.org/release/%RELEASEVER%/rockbox-fonts-%RELEASEVER%.zip
manual_url=https://download.rockbox.org/release/%RELEASEVER%/rockbox-%MODEL%%FORMAT%
@@ -34,14 +34,15 @@ manual_url=https://download.rockbox.org/release-candidate/%RELEASEVER%/rockbox-%
[development]
build_url=http://build.rockbox.org/data/rockbox-%MODEL%.zip
-voice_url=https://download.rockbox.org/release/%RELVERSION%/%MODEL%-%RELVERSION%-english.zip
+; we don't have voices for dev builds.
+voice_url=https://download.rockbox.org/daily/voices/%MODEL%-%LANGUAGE%.zip
font_url=https://download.rockbox.org/daily/fonts/rockbox-fonts.zip
; manual is only built daily, use that one instead.
manual_url=https://download.rockbox.org/daily/manual/rockbox-%MODEL%%FORMAT%
[daily]
build_url=https://download.rockbox.org/daily/%MODEL%/rockbox-%MODEL%.zip
-voice_url=https://download.rockbox.org/daily/voices/%MODEL%-%VERSION%-%LANGUAGE%.zip
+voice_url=https://download.rockbox.org/daily/voices/%MODEL%-%LANGUAGE%.zip
font_url=https://download.rockbox.org/daily/fonts/rockbox-fonts.zip
manual_url=https://download.rockbox.org/daily/manual/rockbox-%MODEL%%FORMAT%
diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp
index 597509cc78..d996eddfe1 100644
--- a/rbutil/rbutilqt/rbutilqt.cpp
+++ b/rbutil/rbutilqt/rbutilqt.cpp
@@ -496,6 +496,7 @@ void RbUtilQt::installVoice()
// replace placeholder in voice url
voiceurl.replace("%MODEL%", model);
voiceurl.replace("%RELVERSION%", relversion);
+ voiceurl.replace("%LANGUAGE%", "english");
LOG_INFO() << "voicefile URL:" << voiceurl;