1 #include "bootscreen.h"
5 BootScreen::BootScreen(QWidget *parent)
8 hildonWelcome = "/etc/hildon-welcome.d/";
9 videosDir = "/opt/bootscreen/media/";
10 settingsDir = "/opt/bootscreen/data/";
13 filterGroup = new QActionGroup(this);
14 filterGroup->setExclusive(true);
15 mRandom = new QAction(tr("Random"), filterGroup);
16 mRandom->setCheckable(true);
17 mMultiple = new QAction(tr("Multiple"), filterGroup);
18 mMultiple->setCheckable(true);
22 mRandom->setChecked(true);
24 mMultiple->setChecked(true);
27 connect(mRandom, SIGNAL(toggled(bool)), this, SLOT(disableSelection(bool)));
28 connect(mMultiple, SIGNAL(toggled(bool)), this, SLOT(selectMultiple(bool)));
30 menuBar()->addActions(filterGroup->actions());
32 menuBar()->addAction(tr("Add"), this, SLOT(addVideo()));
33 menuBar()->addAction(tr("Remove"), this, SLOT(removeVideos()));
38 void BootScreen::checkSettings()
40 QDir dir(settingsDir);
41 settingsFile.setFileName(dir.filePath("bootscreen.conf"));
43 if (!settingsFile.exists())
46 QSettings tempSettings(settingsFile.fileName(),QSettings::IniFormat);
47 random = tempSettings.value("random").toBool();
51 void BootScreen::createList()
53 QWidget *central = new QWidget();
55 QVBoxLayout *lay = new QVBoxLayout(central);
57 lay->setContentsMargins(0, 0, 0, 15);
59 list = new QListWidget();
62 list->setSelectionMode(QAbstractItemView::MultiSelection);
64 QDir dirHildon(hildonWelcome);
65 dirHildon.setFilter(QDir::Files | QDir::NoSymLinks);
66 dirHildon.setSorting(QDir::Name);
68 QFileInfoList ls = dirHildon.entryInfoList();
69 for (int i = 0; i < ls.size(); ++i) {
70 QFileInfo fileInfo = ls.at(i);
71 QSettings tempSettings(fileInfo.absoluteFilePath(),QSettings::IniFormat);
72 tempSettings.beginGroup("hildon-welcome");
74 QFileInfo prettyName(tempSettings.value("filename").toString());
75 list->addItem(QString("%1").arg(prettyName.fileName()));
76 mediaFiles[prettyName.fileName()] = tempSettings.value("filename").toString();
79 qDebug() << fileInfo.absoluteFilePath() << endl;
80 qDebug() << tempSettings.value("filename") << endl;
84 QListWidgetItem *temp;
85 int listSize = list->count();
87 for(int i = 0; i < listSize; i++){
90 temp->setSelected(true);
94 list->setSelectionMode(QAbstractItemView::NoSelection);
98 if(!mediaFiles.contains("Hands-v32-h264.avi")){
99 QFileInfo handsTmp("/usr/share/hildon-welcome/media/Hands-v32-h264.avi");
100 if(handsTmp.exists()){
101 mediaFiles[handsTmp.fileName()] = handsTmp.absoluteFilePath();
102 list->addItem(QString("%1").arg(handsTmp.fileName()));
107 dir.setFilter(QDir::Files | QDir::NoSymLinks);
108 dir.setSorting(QDir::Name);
109 //if empty show warning to add a file via menu
111 ls = dir.entryInfoList();
112 for (int i = 0; i < ls.size(); ++i) {
113 QFileInfo fileInfo = ls.at(i);
114 if(!mediaFiles.contains(fileInfo.fileName())){
115 mediaFiles[fileInfo.fileName()] = fileInfo.absoluteFilePath();
116 list->addItem(QString("%1").arg(fileInfo.fileName()));
118 qDebug() << fileInfo.absoluteFilePath() << endl;
122 // for(int i =0; i < 8; i++){
123 // list->addItem("bbr");
126 lay->addWidget(list);
128 QHBoxLayout *layButtons = new QHBoxLayout();
129 up = new QPushButton("Up");
130 down = new QPushButton("Down");
131 save = new QPushButton("Save");
132 save->setEnabled(false);
135 up->setEnabled(false);
136 down->setEnabled(false);
139 layButtons->addWidget(up);
140 layButtons->addWidget(down);
141 layButtons->addSpacing(50);
142 layButtons->addWidget(save);
143 lay->addLayout(layButtons);
145 connect(up, SIGNAL(clicked()), this, SLOT(moveUp()));
146 connect(down, SIGNAL(clicked()), this, SLOT(moveDown()));
147 connect(save, SIGNAL(clicked()), this, SLOT(saveConfs()));
148 connect(list, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(setPendingChanges(QListWidgetItem*)));
150 setCentralWidget(central);
153 void BootScreen::addVideo()
155 QString filePath = QFileDialog::getOpenFileName(this,
156 tr("Open file"), "/home/user/MyDocs", tr("Video Files (*.avi)"));
157 qDebug() << filePath << endl;
160 QFile fileCopy(filePath);
161 QFileInfo fileInfo(filePath);
162 QString fileName = fileInfo.fileName();
163 //boot player can't read files with spaces in the name
164 fileName.replace(QString(" "), QString("_"));
165 QString newFilePath = videosDir + fileName;
166 qDebug() << newFilePath << endl;
167 qDebug() << fileInfo.size() << endl;
168 if(fileInfo.size() > 11100000)
169 QMaemo5InformationBox::information(this, "<font color=black><b>Error:</b> The selected file is too big</font>",
170 QMaemo5InformationBox::DefaultTimeout);
173 QFile tempTest(newFilePath);
174 if(tempTest.exists())
175 QMaemo5InformationBox::information(this, "<font color=black><b>Error:</b> The file already exists</font>",
176 QMaemo5InformationBox::DefaultTimeout);
178 bool result = fileCopy.copy(newFilePath);
180 list->addItem(QString("%1").arg(fileName));
181 save->setEnabled(true);
182 //autoselect item, if not in random mode
184 QListWidgetItem *currentItem = list->item(list->count()-1);
185 currentItem->setSelected(true);
189 QMaemo5InformationBox::information(this, "<font color=black>Error copying file</font>",
190 QMaemo5InformationBox::DefaultTimeout);
197 void BootScreen::removeVideos()
199 QListWidgetItem *temp;
200 QList <QListWidgetItem *> selectedItems = list->selectedItems();
201 if(selectedItems.size()>0){
202 QDir vidDir(videosDir);
203 int ret = QMessageBox::information(this, tr("Remove files"), tr("Remove selected file(s) ?"), QMessageBox::Yes | QMessageBox::No);
205 if(ret == QMessageBox::Yes){
206 for(int i=0; i< selectedItems.size();i++){
207 temp = selectedItems.at(i);
208 bool result = vidDir.remove(temp->text());
209 qDebug() << result << " :" << temp->text() << endl;
212 int rw = list->row(temp);
213 temp = list->takeItem(rw);
217 save->setEnabled(true);
223 void BootScreen::moveUp()
225 int currentRow = list->currentRow();
226 if (currentRow == 0) return;
227 QListWidgetItem * currentItem = list->takeItem(currentRow);
228 list->insertItem(currentRow - 1, currentItem);
229 list->setCurrentRow(currentRow - 1);
230 save->setEnabled(true);
233 void BootScreen::moveDown()
235 int currentRow = list->currentRow();
236 if (currentRow >= list->count()-1) return;
237 QListWidgetItem * currentItem = list->takeItem(currentRow);
238 list->insertItem(currentRow + 1, currentItem);
239 list->setCurrentRow(currentRow + 1);
240 save->setEnabled(true);
243 void BootScreen::disableSelection(bool state)
246 up->setEnabled(false);
247 down->setEnabled(false);
248 QListWidgetItem *temp;
249 int listSize = list->count();
251 QTime fixTime(0, 0, 0);
252 qsrand(fixTime.secsTo(QTime::currentTime()));
253 int randomNumb = qrand() % listSize;
254 qDebug() << randomNumb << endl;
255 for(int i = 0; i < listSize; i++){
256 temp = list->item(i);
259 temp->setSelected(true);
261 temp->setSelected(false);
264 list->setSelectionMode(QAbstractItemView::NoSelection);
265 QMaemo5InformationBox::information(this, "<font color=black><b>Random mode:</b> Selection disabled</font>",
266 QMaemo5InformationBox::DefaultTimeout);
270 save->setEnabled(true);
273 void BootScreen::selectMultiple(bool state)
276 up->setEnabled(true);
277 down->setEnabled(true);
278 list->setSelectionMode(QAbstractItemView::MultiSelection);
283 void BootScreen::writeSettings()
285 QSettings settings(settingsFile.fileName(),QSettings::IniFormat);
286 settings.setValue("random", random);
289 void BootScreen::restoreSettings()
291 qDebug() << settingsFile.fileName() << endl;
293 if (!settingsFile.open(QIODevice::ReadWrite | QIODevice::Text)){
294 qWarning("Cannot create the settings file"); //abord
295 QMaemo5InformationBox::information(this, "<font color=black><b>Error:</b> Cannot create the settings file</font>",
296 QMaemo5InformationBox::DefaultTimeout);
299 QTextStream out(&settingsFile);
300 out << "random=false" << endl;
305 void BootScreen::saveConfs(){
308 QDir dir(hildonWelcome);
309 dir.setFilter(QDir::Files);
311 QFileInfoList ls = dir.entryInfoList();
312 for (int i = 0; i < ls.size(); ++i) {
313 QFileInfo fileInfo = ls.at(i);
314 bool result = dir.remove(fileInfo.fileName());
315 qDebug() << result << " :" << fileInfo.fileName() << endl;
318 QListWidgetItem *temp;
319 for(int i=0; i< list->count();i++){
320 temp = list->item(i);
321 if(temp->isSelected())
323 createFile(temp->text(), 0);
325 createFile(temp->text(), i);
327 save->setEnabled(false);
330 void BootScreen::createFile(QString filename, int index)
332 QString ind = QString::number(index);
333 if(mediaFiles.contains(filename)){
334 QFile confFile(hildonWelcome + ind + ".conf");
335 qDebug() << confFile.fileName() << endl;
336 if (!confFile.open(QIODevice::ReadWrite | QIODevice::Text)){
337 qWarning("Cannot create the settings file"); //abord
338 QMaemo5InformationBox::information(this, "<font color=black><b>Error:</b> Cannot create the configurations file</font>",
339 QMaemo5InformationBox::DefaultTimeout);
342 QString filePath = mediaFiles.value(filename);
343 QTextStream out(&confFile);
344 out << "[hildon-welcome]" << endl;
345 out << "filename=" << filePath << endl;
349 qDebug() << filename << endl;
350 qDebug() << "File already exists" << endl;
354 void BootScreen::setPendingChanges(QListWidgetItem *item)
357 save->setEnabled(true);
360 void BootScreen::closeEvent(QCloseEvent *event)
362 if(save->isEnabled()){
363 int ret = QMessageBox::information(this, tr("There are pending changes"), tr("Do you want to save your changes?"),
364 QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
366 if(ret == QMessageBox::Save){
372 else if(ret == QMessageBox::Discard){
386 BootScreen::~BootScreen()