X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=browsemainwindow.cpp;h=2c7582f29ef73f33beeb3e4f343c6023c962b27d;hb=da1f6df7457019233d1f59c72e8933646e093af6;hp=f4bcef53545b003f8e1aab1aa801f3639ab498f6;hpb=ac5b64748ab0910c969efd2c54f6b4de0eb65d4d;p=vlc-remote diff --git a/browsemainwindow.cpp b/browsemainwindow.cpp index f4bcef5..2c7582f 100644 --- a/browsemainwindow.cpp +++ b/browsemainwindow.cpp @@ -1,27 +1,30 @@ /* VLC-REMOTE for MAEMO 5 - * Copyright (C) 2010 Schutz Sacha - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, - * or (at your option) any later version, as published by the Free - * Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ +* Copyright (C) 2010 Schutz Sacha , Dru Moore , Yann Nave +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2, +* or (at your option) any later version, as published by the Free +* Software Foundation +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details +* +* You should have received a copy of the GNU General Public +* License along with this program; if not, write to the +* Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ #include "browsemainwindow.h" #include "ui_browsemainwindow.h" #include +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) +#include +#endif #include "configdialog.h" #include "aboutdialog.h" #include "vlcbrowseelement.h" -#include "accountdialog.h" +#include "appsettings.h" BrowseMainWindow::BrowseMainWindow(QWidget *parent) : QMainWindow(parent), @@ -29,7 +32,7 @@ BrowseMainWindow::BrowseMainWindow(QWidget *parent) : { ui->setupUi(this); - mCurrentDir = "~/"; // This works on win as well as linux, would guess mac too. + mCurrentDir = "~/"; //AppSettings::getHomeDirectory().path; // This works on win as well as linux, would guess mac too. setWindowTitle("Vlc remote"); @@ -37,7 +40,8 @@ BrowseMainWindow::BrowseMainWindow(QWidget *parent) : mContents = new QList(); - //mResponse = new QByteArray(); + ui->listWidget->setTextElideMode(Qt::ElideMiddle); + ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui->playButton->setIcon(QIcon::fromTheme("camera_playback")); ui->addButton->setIcon(QIcon::fromTheme("general_add")); @@ -51,13 +55,26 @@ BrowseMainWindow::BrowseMainWindow(QWidget *parent) : connect(ui->playButton,SIGNAL(clicked()),this,SLOT(onPlay())); connect(ui->listWidget, SIGNAL(itemSelectionChanged()), this, SLOT(onListSelectionChanged())); + connect(ui->actionGoHome, SIGNAL(triggered()), this, SLOT(showHomeFolder())); + connect(ui->actionSetHome, SIGNAL(triggered()), this, SLOT(setHomeFolder())); + connect(ui->actionViewFavourites, SIGNAL(triggered()), this, SLOT(showFavourites())); + connect(ui->actionSetFavourite, SIGNAL(triggered()), this, SLOT(setFavourite())); + init(); } void BrowseMainWindow::init() // THIS METHOD IS CALLED WHEN CONFIG CHANGED... { - mIp = AccountDialog::currentIp(); + mIp = AppSettings::getCurrentIp(); // AccountDialog::currentIp(); + setHomeDirectory(); +} +void BrowseMainWindow::setHomeDirectory() +{ + mCurrentDir = AppSettings::getHomeDirectory().path; +} +void BrowseMainWindow::showCurrentDirectory() // THIS METHOD IS CALLED WHEN WINDOW IS OPENED... +{ browseDirectory(mCurrentDir); } @@ -78,6 +95,20 @@ void BrowseMainWindow::changeEvent(QEvent *e) } } +void BrowseMainWindow::showHomeFolder() { + browseDirectory(AppSettings::getHomeDirectory().path); +} +void BrowseMainWindow::setHomeFolder() { + if (0 < mCurrentDir.length()) { + VlcDirectory dir; + dir.name = "Home"; + dir.path = mCurrentDir; + AppSettings::setHomeDirectory(dir); + } +} +void BrowseMainWindow::showFavourites() {} +void BrowseMainWindow::setFavourite() {} + void BrowseMainWindow::onListSelectionChanged() { QList items = ui->listWidget->selectedItems(); if (0 < items.count()) { @@ -87,11 +118,12 @@ void BrowseMainWindow::onListSelectionChanged() { ui->browseButton->setDisabled(true); ui->playButton->setDisabled(true); ui->addButton->setDisabled(true); - browseDirectory(mCurrentElement.path); + mCurrentDir = mCurrentElement.path; + browseDirectory(mCurrentDir); } else { // can we browse? - if (0 == QString::compare("directory", mCurrentElement.type)) { + if (0 == QString::compare("directory", mCurrentElement.type) || 0 == QString::compare("dir", mCurrentElement.type)) { ui->browseButton->setDisabled(false); } else { @@ -116,9 +148,10 @@ VlcBrowseElement BrowseMainWindow::getElementFromText(QString text) { void BrowseMainWindow::onBrowse() { // check for directory - if (0 == QString::compare("directory", mCurrentElement.type)) { + if (0 == QString::compare("directory", mCurrentElement.type) || 0 == QString::compare("dir", mCurrentElement.type)) { // call browseDirectory - this->browseDirectory(mCurrentElement.path); + mCurrentDir = mCurrentElement.path; + browseDirectory(mCurrentDir); } else { ui->browseButton->setDisabled(true); @@ -126,22 +159,38 @@ void BrowseMainWindow::onBrowse() { } void BrowseMainWindow::onAddToPlaylist() { - /*QNetworkReply * reply = */ mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/status.xml?command=in_enqueue&input=" + mCurrentElement.path))); - } + QUrl url = QUrl("http://"+mIp+"/requests/status.xml?command=in_enqueue"); + url.addEncodedQueryItem(QByteArray("input"), QUrl::toPercentEncoding(mCurrentElement.path.replace("\\", "\\\\").replace("'", "\\'"))); + mNetManager->get(QNetworkRequest(url)); + //mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/status.xml?command=in_enqueue&input=" + mCurrentElement.path.replace("\\", "\\\\")))); +} void BrowseMainWindow::onPlay() { - /*QNetworkReply * reply = */ mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/status.xml?command=in_play&input=" + mCurrentElement.path))); - } + QUrl url = QUrl("http://"+mIp+"/requests/status.xml?command=in_play"); + url.addEncodedQueryItem(QByteArray("input"), QUrl::toPercentEncoding(mCurrentElement.path.replace("\\", "\\\\").replace("'", "\\'"))); + mNetManager->get(QNetworkRequest(url)); + //mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/status.xml?command=in_play&input=" + mCurrentElement.path.replace("\\", "\\\\")))); +} void BrowseMainWindow::browseDirectory(QString dir) { - mContents->clear(); - ui->listWidget->clear(); mResponse.clear(); - QNetworkReply * reply = mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/browse.xml?dir=" + dir))); - //reply->setReadBufferSize(1024 * 500); + QUrl url = QUrl("http://"+mIp+"/requests/browse.xml"); + url.addEncodedQueryItem(QByteArray("dir"), QUrl::toPercentEncoding(dir)); + QNetworkReply * reply = mNetManager->get(QNetworkRequest(url)); + //QNetworkReply * reply = mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/browse.xml?dir=" + dir.replace("&", "%26").replace("\\", "\\\\")))); +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) + this->setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true); +#endif connect(reply,SIGNAL(readyRead()),this,SLOT(readReady())); + connect(reply,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(error(QNetworkReply::NetworkError))); connect(mNetManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(finished(QNetworkReply *))); } +void BrowseMainWindow::error(QNetworkReply::NetworkError code) { +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) + this->setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); +#endif + qDebug() << code; +} void BrowseMainWindow::readReady() { QNetworkReply * reply = qobject_cast(sender()); // append to buffer @@ -152,6 +201,10 @@ void BrowseMainWindow::finished(QNetworkReply * reply) { this->parseXmlDirectory(); // only interested in finished signals disconnect(mNetManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(finished(QNetworkReply *))); +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) + this->setAttribute(Qt::WA_Maemo5ShowProgressIndicator, false); +#endif + delete reply; } void BrowseMainWindow::parseXmlDirectory() { QDomDocument doc; @@ -160,9 +213,10 @@ void BrowseMainWindow::parseXmlDirectory() { QDomNodeList elements = docElem.elementsByTagName("element"); // we can sort by folders then files alphabetically by running to lists and appending them at the end // vlc alpha sorts everything in the incoming stream, we just need to seperate files from folders. - QList* files = new QList(); if (0 < elements.count()) { + QList* files = new QList(); int idx = 0; + mContents->clear(); do { QDomNode node = elements.at(idx); VlcBrowseElement* dir = new VlcBrowseElement(); @@ -171,11 +225,14 @@ void BrowseMainWindow::parseXmlDirectory() { dir->date = QDate::fromString(node.attributes().namedItem("date").nodeValue()); dir->path = node.attributes().namedItem("path").nodeValue(); dir->name = node.attributes().namedItem("name").nodeValue(); - dir->extension = node.attributes().namedItem("extension").nodeValue(); + dir->extension = getExtension(dir->path, node.attributes().namedItem("extension").nodeValue()); ++idx; - if (0 != QString::compare("directory", dir->type)) { + if (0 != QString::compare("directory", dir->type) && 0 != QString::compare("dir", dir->type)) { files->append(*dir); } + else if (0 == QString::compare("..", dir->name)) { + this->mContents->prepend(*dir); + } else { this->mContents->append(*dir); } @@ -184,24 +241,38 @@ void BrowseMainWindow::parseXmlDirectory() { if (0 < files->count()) { mContents->append(*files); } + delete files; + // Update UI + this->updateList(); + } + else { + // alert user of error / empty directory + qDebug() << "can't browse dir: " << mCurrentDir; +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) + QMaemo5InformationBox::information(this, tr("Directory could not be browsed!"), QMaemo5InformationBox::DefaultTimeout); +#endif } - delete files; mResponse.clear(); - // Update UI - this->updateList(); } -void BrowseMainWindow::writeFile(QString path, QByteArray text) { - QFile file(path); - if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) - return; - - QTextStream out(&file); - out << text; +QString BrowseMainWindow::getExtension(QString path, QString extension) { + // return extension if exists + if (!extension.isNull() && !extension.isEmpty()) return extension; + // return blank if no path + if (path.isNull() || path.isEmpty()) return ""; + // otherwise extract the extension + int dot_pos = path.lastIndexOf('.'); + if (0 < dot_pos) { + return path.right(path.length() - (dot_pos + 1)); + } + else { // no dot + return ""; + } } void BrowseMainWindow::updateList() { + ui->listWidget->clear(); int ct = this->mContents->count(); if (0 < ct) { QIcon icon_up = QIcon::fromTheme("filemanager_folder_up"); @@ -210,11 +281,13 @@ void BrowseMainWindow::updateList() { QIcon icon_video = QIcon::fromTheme("general_video_file"); QIcon icon_image = QIcon::fromTheme("general_image"); QIcon icon_flash = QIcon::fromTheme("filemanager_flash_file"); + QIcon icon_real = QIcon::fromTheme("filemanager_real_music"); + QIcon icon_unknown= QIcon::fromTheme("filemanager_unknown_file"); for (int idx = 0; idx < ct; ++idx) { VlcBrowseElement dir = mContents->at(idx); QListWidgetItem* item; bool item_good = false; - if (0 == QString::compare("directory", dir.type)) { + if (0 == QString::compare("directory", dir.type) || 0 == QString::compare("dir", dir.type)) { if (0 == QString::compare("..", dir.name)) { item = new QListWidgetItem(icon_up, dir.name, ui->listWidget, 0); item_good = true; @@ -247,11 +320,17 @@ void BrowseMainWindow::updateList() { 0 == QString::compare(dir.extension, "mpg") || 0 == QString::compare(dir.extension, "mov") || 0 == QString::compare(dir.extension, "mp4") || + 0 == QString::compare(dir.extension, "m4v") || 0 == QString::compare(dir.extension, "wmv") || 0 == QString::compare(dir.extension, "mkv") || 0 == QString::compare(dir.extension, "ogv") ) { item_good = true; - item = new QListWidgetItem(icon_video, dir.name, ui->listWidget, 0); // .avi, .mpg, .mpeg, .mov, .mp4, .wmv, .mkv, .ogv + item = new QListWidgetItem(icon_video, dir.name, ui->listWidget, 0); // .avi, .mpg, .mpeg, .mov, .mp4, .m4v, .wmv, .mkv, .ogv + } + else if ( 0 == QString::compare(dir.extension, "rm") || + 0 == QString::compare(dir.extension, "ra") || + 0 == QString::compare(dir.extension, "ram") ) { + item = new QListWidgetItem(icon_real, dir.name, ui->listWidget, 0); // .ram, 'rm, 'ra } else if ( 0 == QString::compare(dir.extension, "flv") ) { item_good = true; @@ -264,6 +343,7 @@ void BrowseMainWindow::updateList() { } else { item_good = false; + //item = new QListWidgetItem(icon_unknown, dir.name, ui->listWidget, 0); } } }