Add support for the Creative ZEN and renew the way firmwares are
[Rockbox.git] / rbutil / rbutilqt / talkfile.cpp
blob7e5b6a2a0c73531ffa973e46aec340c5824aa874
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
9 * Copyright (C) 2007 by Dominik Wenger
10 * $Id$
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
18 ****************************************************************************/
20 #include "talkfile.h"
22 TalkFileCreator::TalkFileCreator(QObject* parent): QObject(parent)
27 bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger)
29 m_abort = false;
30 m_logger = logger;
31 m_logger->addItem(tr("Starting Talk file generation"),LOGINFO);
33 //tts
34 m_tts = TTSBase::getTTS(settings->curTTS());
35 m_tts->setCfg(settings);
37 QString errStr;
38 if(!m_tts->start(&errStr))
40 m_logger->addItem(errStr,LOGERROR);
41 m_logger->addItem(tr("Init of TTS engine failed"),LOGERROR);
42 m_logger->abort();
43 return false;
46 // Encoder
47 m_enc = EncBase::getEncoder(settings->curEncoder());
48 m_enc->setCfg(settings);
50 if(!m_enc->start())
52 m_logger->addItem(tr("Init of Encoder engine failed"),LOGERROR);
53 m_logger->abort();
54 m_tts->stop();
55 return false;
58 QCoreApplication::processEvents();
60 connect(logger,SIGNAL(aborted()),this,SLOT(abort()));
61 m_logger->setProgressMax(0);
63 QDirIterator::IteratorFlags flags = QDirIterator::NoIteratorFlags;
64 if(m_recursive)
65 flags = QDirIterator::Subdirectories;
67 QDirIterator it(m_dir,flags);
68 QSettings installlog(m_mountpoint + "/.rockbox/rbutil.log", QSettings::IniFormat, 0);
69 installlog.beginGroup("talkfiles");
70 // iterate over all entrys
71 while (it.hasNext())
73 if(m_abort)
75 m_logger->addItem(tr("Talk file creation aborted"),LOGERROR);
76 m_logger->abort();
77 m_tts->stop();
78 return false;
81 QCoreApplication::processEvents();
82 QFileInfo fileInf = it.fileInfo();
83 QString toSpeak;
84 QString filename;
85 QString wavfilename;
87 QString path = fileInf.filePath();
88 qDebug() << path;
90 if( path.endsWith("..") || path.endsWith(".talk") )
92 it.next();
93 continue;
96 //! if it is a dir
97 if(fileInf.isDir())
99 // skip entry if folder talking isnt enabled
100 if(m_talkFolders == false)
102 it.next();
103 continue;
105 int index1 = path.lastIndexOf("/");
106 int index2 = path.lastIndexOf("/",index1-1);
108 toSpeak = path.mid(index2+1,(index1-index2)-1);
110 filename = path.left(index1) + "/_dirname.talk";
111 qDebug() << "toSpeak: " << toSpeak << "filename: " << filename;
113 else // if it is a file
115 // skip entry if file talking isnt enabled
116 if(m_talkFiles == false)
118 it.next();
119 continue;
121 if(m_stripExtensions)
122 toSpeak = fileInf.baseName();
123 else
124 toSpeak = fileInf.fileName();
125 filename = fileInf.absoluteFilePath() + ".talk";
127 wavfilename = filename + ".wav";
129 QFileInfo filenameInf(filename);
130 QFileInfo wavfilenameInf(wavfilename);
132 //! the actual generation of the .talk files
133 if(!filenameInf.exists() || m_overwriteTalk)
135 if(!wavfilenameInf.exists() || m_overwriteWav)
137 m_logger->addItem(tr("Voicing of %1").arg(toSpeak),LOGINFO);
138 if(!m_tts->voice(toSpeak,wavfilename))
140 m_logger->addItem(tr("Voicing of %s failed").arg(toSpeak),LOGERROR);
141 m_logger->abort();
142 m_tts->stop();
143 m_enc->stop();
145 return false;
147 QCoreApplication::processEvents();
149 m_logger->addItem(tr("Encoding of %1").arg(toSpeak),LOGINFO);
150 if(!m_enc->encode(wavfilename,filename))
152 m_logger->addItem(tr("Encoding of %1 failed").arg(wavfilename),LOGERROR);
153 m_logger->abort();
154 m_tts->stop();
155 m_enc->stop();
157 return false;
159 QCoreApplication::processEvents();
162 //! remove the intermedia wav file, if requested
163 QString now = QDate::currentDate().toString("yyyyMMdd");
164 if(m_removeWav)
166 QFile wavfile(wavfilename);
167 wavfile.remove();
168 installlog.remove(wavfilename);
170 else
171 installlog.setValue(wavfilename.remove(0,m_mountpoint.length()),now);
173 //! add the .talk file to the install log
174 installlog.setValue(filename.remove(0,m_mountpoint.length()),now);
175 it.next();
178 installlog.endGroup();
179 m_tts->stop();
180 m_logger->addItem(tr("Finished creating Talk files"),LOGOK);
181 m_logger->setProgressMax(1);
182 m_logger->setProgressValue(1);
183 m_logger->abort();
185 return true;
189 void TalkFileCreator::abort()
191 m_abort = true;