mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 10:07:38 -04:00
rbutil: Pull voice-corrections.txt out of voicestrings.zip
If the corrections file is not present on the target, then fall back to the (probably outdated) compile-time builtin version. Change-Id: I9904b81b2f3737149fc8a905ecd03ff54782bbdf
This commit is contained in:
parent
bb20b5c6bf
commit
077f44ca41
6 changed files with 40 additions and 17 deletions
|
@ -277,14 +277,12 @@ QString TalkGenerator::correctString(const QString& s)
|
|||
return corrected;
|
||||
}
|
||||
|
||||
void TalkGenerator::setLang(const QString& name)
|
||||
void TalkGenerator::setLang(const QString& name, QFile *correctionsFile)
|
||||
{
|
||||
m_lang = name;
|
||||
|
||||
// re-initialize corrections list
|
||||
m_corrections.clear();
|
||||
QFile correctionsFile(":/builtin/voice-corrections.txt");
|
||||
correctionsFile.open(QIODevice::ReadOnly);
|
||||
correctionsFile->seek(0);
|
||||
|
||||
QString engine = RbSettings::value(RbSettings::Tts).toString();
|
||||
TTSBase* tts = TTSBase::getTTS(this, RbSettings::value(RbSettings::Tts).toString());
|
||||
|
@ -300,7 +298,7 @@ void TalkGenerator::setLang(const QString& name)
|
|||
m_lang = "english";
|
||||
LOG_INFO() << "building string corrections list for"
|
||||
<< m_lang << engine << vendor;
|
||||
QTextStream stream(&correctionsFile);
|
||||
QTextStream stream(correctionsFile);
|
||||
while(!stream.atEnd()) {
|
||||
QString line = stream.readLine();
|
||||
if(line.startsWith(" ") || line.length() < 10)
|
||||
|
@ -333,5 +331,4 @@ void TalkGenerator::setLang(const QString& name)
|
|||
co.modifier = items.at(5);
|
||||
m_corrections.append(co);
|
||||
}
|
||||
correctionsFile.close();
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public:
|
|||
|
||||
public slots:
|
||||
void abort();
|
||||
void setLang(const QString& name);
|
||||
void setLang(const QString& name, QFile *correctionsFile);
|
||||
|
||||
signals:
|
||||
void done(bool);
|
||||
|
@ -88,4 +88,3 @@ private:
|
|||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -72,21 +72,40 @@ bool VoiceFileCreator::createVoiceFile()
|
|||
ZipUtil z(this);
|
||||
if(z.open(fn)) {
|
||||
QStringList contents = z.files();
|
||||
int index;
|
||||
for(index = 0; index < contents.size(); ++index) {
|
||||
int vindex = -1, cindex = -1;
|
||||
for(int index = 0; index < contents.size(); ++index) {
|
||||
// strip any path, we don't know the structure in the zip
|
||||
if(QFileInfo(contents.at(index)).baseName() == m_lang) {
|
||||
if(QFileInfo(contents.at(index)).baseName() == m_lang)
|
||||
vindex = index;
|
||||
if(QFileInfo(contents.at(index)).baseName() == "voice-corrections")
|
||||
cindex = index;
|
||||
if (vindex != -1 && cindex != -1)
|
||||
break;
|
||||
}
|
||||
if(cindex != -1) {
|
||||
LOG_INFO() << "extracting voice corrections file";
|
||||
QTemporaryFile corrfileT;
|
||||
corrfileT.open();
|
||||
QString cfn = corrfileT.fileName();
|
||||
if(z.extractArchive(cfn, QFileInfo(contents.at(cindex)).fileName())) {
|
||||
emit logItem(tr("Extracted voice corrections file from installation"), LOGINFO);
|
||||
corrFile = &corrfileT;
|
||||
} else {
|
||||
corrfileT.close();
|
||||
emit logItem(tr("Using internal voice corrections file"), LOGINFO);
|
||||
QFile corrfile(":/builtin/voice-corrections.txt");
|
||||
corrfile.open(QIODevice::ReadOnly);
|
||||
corrFile = &corrfile;
|
||||
}
|
||||
}
|
||||
if(index < contents.size()) {
|
||||
if(vindex != -1) {
|
||||
LOG_INFO() << "extracting strings file from zip";
|
||||
// extract strings
|
||||
QTemporaryFile stringsfile;
|
||||
stringsfile.open();
|
||||
QString sfn = stringsfile.fileName();
|
||||
// ZipUtil::extractArchive() only compares the filename.
|
||||
if(z.extractArchive(sfn, QFileInfo(contents.at(index)).fileName())) {
|
||||
if(z.extractArchive(sfn, QFileInfo(contents.at(vindex)).fileName())) {
|
||||
emit logItem(tr("Extracted voice strings from installation"), LOGINFO);
|
||||
|
||||
stringsfile.seek(0);
|
||||
|
@ -135,6 +154,8 @@ bool VoiceFileCreator::createVoiceFile()
|
|||
|
||||
// everything successful, now create the actual voice file.
|
||||
create();
|
||||
if (corrFile->isOpen())
|
||||
corrFile->close();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -282,7 +303,7 @@ void VoiceFileCreator::create(void)
|
|||
TalkGenerator generator(this);
|
||||
// set language for string correction. If not set no correction will be made.
|
||||
if(useCorrection)
|
||||
generator.setLang(m_lang);
|
||||
generator.setLang(m_lang, corrFile);
|
||||
connect(&generator, &TalkGenerator::done, this, &VoiceFileCreator::done);
|
||||
connect(&generator, &TalkGenerator::logItem, this, &VoiceFileCreator::logItem);
|
||||
connect(&generator, &TalkGenerator::logProgress, this, &VoiceFileCreator::logProgress);
|
||||
|
|
|
@ -68,10 +68,10 @@ private:
|
|||
QString m_versionstring; // version string to be used for logging
|
||||
int m_wavtrimThreshold;
|
||||
int m_voiceformat;
|
||||
QFile *corrFile; // the voice-corrections file
|
||||
|
||||
bool m_abort;
|
||||
QList<TalkGenerator::TalkEntry> m_talkList;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -51,3 +51,5 @@ Version 1.5.1
|
|||
Version 1.5.2
|
||||
* Add support for Native Port to AIGO Eros Q and various clones
|
||||
* Make Hosted Port to AIGO Eros Q and various clones "disabled" (can be reenabled by checking the "show disabled targets" checkbox)
|
||||
* When installing development builds, fall back to daily artefacts for non-firmware files
|
||||
* Where possible, extract voice corrections file from the actual device
|
||||
|
|
|
@ -68,10 +68,15 @@ void TestTalkGenerator::testCorrectString()
|
|||
QFETCH(QString, from);
|
||||
QFETCH(QString, to);
|
||||
|
||||
QFile corrfile(":/builtin/voice-corrections.txt");
|
||||
corrfile.open(QIODevice::ReadOnly);
|
||||
|
||||
TalkGenerator t(this);
|
||||
t.setLang(language);
|
||||
t.setLang(language, &corrfile);
|
||||
|
||||
QString corrected = t.correctString(from);
|
||||
QCOMPARE(corrected, to);
|
||||
corrfile.close();
|
||||
}
|
||||
|
||||
|
||||
|
@ -80,4 +85,3 @@ QTEST_MAIN(TestTalkGenerator)
|
|||
// this include is needed because we don't use a separate header file for the
|
||||
// test class. It also needs to be at the end.
|
||||
#include "test-talkgenerator.moc"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue