X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=playlistmainwindow.cpp;h=4114ca5fbf655aa2544da3eedd83a50f08a2c07f;hb=d1c6fb19f9ff914a6714a80ad0d0cfd52e427e43;hp=4af4b7aab9b8319d768ba040ca1854d1b8817619;hpb=41becf578bfb2621ec53d9989ae113f243157f91;p=vlc-remote diff --git a/playlistmainwindow.cpp b/playlistmainwindow.cpp index 4af4b7a..4114ca5 100644 --- a/playlistmainwindow.cpp +++ b/playlistmainwindow.cpp @@ -1,5 +1,5 @@ /* VLC-REMOTE for MAEMO 5 - * Copyright (C) 2010 Schutz Sacha + * 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 @@ -22,6 +22,7 @@ #include "configdialog.h" #include "aboutdialog.h" #include "accountdialog.h" +#include "vlcstatus.h" PlayListMainWindow::PlayListMainWindow(QWidget *parent) : QMainWindow(parent), @@ -40,6 +41,9 @@ PlayListMainWindow::PlayListMainWindow(QWidget *parent) : mContents = new QList(); + ui->listWidget->setTextElideMode(Qt::ElideLeft); + ui->listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + ui->playButton->setIcon(QIcon::fromTheme("camera_playback")); ui->clearButton->setIcon(QIcon::fromTheme("general_delete")); ui->shuffleButton->setIcon(QIcon::fromTheme("mediaplayer_default_shuffle")); @@ -109,7 +113,7 @@ void PlayListMainWindow::onListSelectionChanged() { void PlayListMainWindow::onRemove() { if (0 < this->mCurrentVlcIndex) { /*QNetworkReply * reply = */ mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/status.xml?command=pl_delete&id=" + QString::number(this->mCurrentVlcIndex)))); - this->requestPlayList(); + connect(mNetManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(requestPlayList())); } } void PlayListMainWindow::onPlay() { @@ -128,7 +132,7 @@ void PlayListMainWindow::onShuffle() { } void PlayListMainWindow::onClear() { /*QNetworkReply * reply = */ mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/status.xml?command=pl_empty"))); - this->requestPlayList(); + connect(mNetManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(requestPlayList())); } void PlayListMainWindow::requestPlayList() { mContents->clear(); @@ -137,6 +141,7 @@ void PlayListMainWindow::requestPlayList() { ui->removeButton->setDisabled(true); ui->playButton->setDisabled(true); QNetworkReply * reply = mNetManager->get(QNetworkRequest(QUrl("http://"+mIp+"/requests/playlist.xml"))); + disconnect(mNetManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(requestPlayList())); connect(reply,SIGNAL(readyRead()),this,SLOT(readReady())); connect(mNetManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(finished(QNetworkReply *))); } @@ -157,14 +162,15 @@ void PlayListMainWindow::parseXmlPlayList() { doc.setContent(this->mResponse); QDomElement docElem = doc.documentElement(); QDomNodeList nodes = docElem.elementsByTagName("node"); - int depth = 0; int ct = nodes.count(); for (int idx = 0; idx < ct; ++idx) { QDomNode node = nodes.at(idx); - QString name = node.attributes().namedItem("name").nodeValue(); - if (0 == QString::compare("Playlist", name)) { + QString current = ""; + //QString name = node.attributes().namedItem("name").nodeValue().replace("\\\\", "\\"); + int id = node.attributes().namedItem("id").nodeValue().toInt(); + if (4 > id && 0 == QString::compare(node.attributes().namedItem("ro").nodeValue(), "ro")) { // got the main playlist, let's build it up if (node.hasChildNodes()) { QDomNodeList leafs = node.childNodes(); @@ -174,11 +180,14 @@ void PlayListMainWindow::parseXmlPlayList() { QDomNode leaf = leafs.at(jdx); VlcPlayListElementSimple* el = new VlcPlayListElementSimple(); el->id = leaf.attributes().namedItem("id").nodeValue().toInt(); - //el->path = leaf.attributes().namedItem("uri").nodeValue(); - el->name = leaf.attributes().namedItem("name").nodeValue(); + el->path = leaf.attributes().namedItem("uri").nodeValue(); + el->name = leaf.attributes().namedItem("name").nodeValue().replace("\\\\", "\\"); + current = leaf.attributes().namedItem("current").nodeValue(); + el->playing = (0 < current.length()); + el->depth = 1; if (0 == QString::compare(leaf.nodeName(), "node")) { - el->depth = 1; el->type = "node"; + el->extension = getExtension(el->path, NULL); this->mContents->append(*el); // now parse the child nodes as leafs. if (leaf.hasChildNodes()) { @@ -189,10 +198,13 @@ void PlayListMainWindow::parseXmlPlayList() { QDomNode item = items.at(kdx); VlcPlayListElementSimple* it = new VlcPlayListElementSimple(); it->id = item.attributes().namedItem("id").nodeValue().toInt(); - //it->path = item.attributes().namedItem("uri").nodeValue(); - it->name = item.attributes().namedItem("name").nodeValue(); + it->path = item.attributes().namedItem("uri").nodeValue(); + it->name = item.attributes().namedItem("name").nodeValue().replace("\\\\", "\\"); + it->extension = getExtension(it->path, NULL); it->depth = 2; it->type = "leaf"; + current = item.attributes().namedItem("current").nodeValue(); + it->playing = (0 < current.length()); this->mContents->append(*it); delete it; } @@ -200,8 +212,8 @@ void PlayListMainWindow::parseXmlPlayList() { } } else { - el->depth = 1; el->type = "leaf"; + el->extension = getExtension(el->path, NULL); this->mContents->append(*el); } delete el; @@ -218,6 +230,21 @@ void PlayListMainWindow::parseXmlPlayList() { } +QString PlayListMainWindow::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 ""; + } +} + VlcPlayListElementSimple PlayListMainWindow::getElementFromText(QString text) { //if (0 != QString::compare("", text)) { for (int idx = 0; idx < mContents->count(); ++idx) { @@ -232,17 +259,65 @@ VlcPlayListElementSimple PlayListMainWindow::getElementFromText(QString text) { void PlayListMainWindow::updateList() { int ct = this->mContents->count(); if (0 < ct) { + QIcon icon_audio = QIcon::fromTheme("general_audio_file"); + 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_media = QIcon::fromTheme("filemanager_media_folder"); for (int idx = 0; idx < ct; ++idx) { VlcPlayListElementSimple el = mContents->at(idx); - QListWidgetItem* item;// + QListWidgetItem* item; if (0 == QString::compare("node", el.type)) { - item = new QListWidgetItem(QIcon::fromTheme("filemanager_media_folder"), el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); + item = new QListWidgetItem(icon_media, el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); } else { - item = new QListWidgetItem(QIcon::fromTheme("general_video_file"), el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); + if ( 0 == QString::compare(el.extension, "jpg") || + 0 == QString::compare(el.extension, "jpeg") || + 0 == QString::compare(el.extension, "gif") || + 0 == QString::compare(el.extension, "png") || + 0 == QString::compare(el.extension, "bmp") ) { + item = new QListWidgetItem(icon_image, el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); // .jpg, .jpeg, .gif, .png, .bmp + } + else if ( 0 == QString::compare(el.extension, "mp3") || + 0 == QString::compare(el.extension, "m4a") || + 0 == QString::compare(el.extension, "ogg") || + 0 == QString::compare(el.extension, "oga") || + 0 == QString::compare(el.extension, "wav") || + 0 == QString::compare(el.extension, "flac") ) { + item = new QListWidgetItem(icon_audio, el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); // .mp3, .m4a, .ogg, .oga, .wav, .flac + } + else if ( 0 == QString::compare(el.extension, "avi") || + 0 == QString::compare(el.extension, "mpeg") || + 0 == QString::compare(el.extension, "mpg") || + 0 == QString::compare(el.extension, "mov") || + 0 == QString::compare(el.extension, "mp4") || + 0 == QString::compare(el.extension, "wmv") || + 0 == QString::compare(el.extension, "mkv") || + 0 == QString::compare(el.extension, "ogv") ) { + item = new QListWidgetItem(icon_video, el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); // .avi, .mpg, .mpeg, .mov, .mp4, .wmv, .mkv, .ogv + } + else if ( 0 == QString::compare(el.extension, "flv") ) { + item = new QListWidgetItem(icon_flash, el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); // .flv + } + else { + if (el.name.contains("Flash")) { + item = new QListWidgetItem(icon_flash, el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); + } + else { + item = new QListWidgetItem(icon_media, el.name, ui->listWidget, LIST_ITEM_TYPE_OFFSET + el.id); + } + } } + item->setSelected(el.playing); ui->listWidget->addItem(item); - /// TODO - Work out the file / media type and use an appropriate icon instead of the default. + if (el.playing) { + ui->listWidget->scrollToItem(item, QAbstractItemView::PositionAtCenter); + } } } } +void PlayListMainWindow::updateUiWithCurrentStatus(VlcStatus * status) { + ui->loopButton->setChecked(status->loop); + ui->repeatButton->setChecked(status->repeat); + ui->shuffleButton->setChecked(status->random); +}