From 256f3e93e093f74932bbf2ac33d9aa74d24a9134 Mon Sep 17 00:00:00 2001 From: Elias Woods Date: Fri, 25 Jun 2010 23:11:08 -0400 Subject: [PATCH] Playlist support (basic) and download progress dialogs --- Groove.pro | 26 +++++++++++++++----------- Groove.pro.user | 4 ++-- groove.cpp | 43 ++++++++++++++++++++++++++++++++++++++++--- groove.h | 6 +++++- groove.png | Bin 0 -> 3143 bytes grooveprogressbar.cpp | 4 ++-- grooveprogressbar.h | 2 +- icon.svg | 22 +++++++++++++--------- playlist.cpp | 15 +++++++++++---- playlist.h | 1 + reasource.qrc | 5 ----- splayer.cpp | 9 ++++++++- 12 files changed, 98 insertions(+), 39 deletions(-) create mode 100644 groove.png delete mode 100644 reasource.qrc diff --git a/Groove.pro b/Groove.pro index 2098722..fa7f8d2 100644 --- a/Groove.pro +++ b/Groove.pro @@ -5,18 +5,18 @@ TEMPLATE = app TARGET = groove #target = groove -target.path = /usr/bin +#target.path = /usr/bin #//target.path = /usr/local/ -INSTALLS += target +#INSTALLS += target #CONFIG += build_all DEPENDPATH += . INCLUDEPATH += . -#INCLUDEPATH += /usr/include/qjson -INCLUDEPATH += ../qjson/src/ +INCLUDEPATH += /usr/include/qjson +#INCLUDEPATH += ../qjson/src/ #INCLUDEPATH += ./src/ #LIBS += -L/usr/lib -lqjson ##Desktop Target -#LIBS += -L/usr/local/lib -lqjson ##Armel Target -LIBS += -L~/NokiaQtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1014-slim/usr/lib -lqjson ##Armel Target SDK +LIBS += -L/usr/local/lib -lqjson ##Armel Target +#LIBS += -L~/NokiaQtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1014-slim/usr/lib -lqjson ##Armel Target SDK #LIBS += -L../qjson/lib -lqjson ##X86 maemo QT += network QT += phonon @@ -42,10 +42,8 @@ HEADERS += \ qmaemo5rotator.h OTHER_FILES += \ - icon.svg - -RESOURCES += \ - reasource.qrc + icon.svg \ + groove.png unix { PREFIX = /usr BINDIR = $$PREFIX/bin @@ -55,7 +53,13 @@ unix { #MAKE INSTALL - INSTALLS += target + INSTALLS += target desktop icon64 target.path =$$BINDIR + + desktop.path = $$DATADIR/applications/hildon + desktop.files += groove.desktop + + icon64.path = $$DATADIR/icons/hicolor/64x64/apps + icon64.files += groove.png } diff --git a/Groove.pro.user b/Groove.pro.user index 0bf42b9..ae4a94e 100644 --- a/Groove.pro.user +++ b/Groove.pro.user @@ -118,7 +118,7 @@ qmake QtProjectManager.QMakeBuildStep - LIBS+=-L~/NokiaQtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1014-slim/usr/lib -lqjson + INCLUDEPATH+=../qjson/src LIBS+=-L~/NokiaQtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1014-slim/usr/lib -lqjson @@ -194,7 +194,7 @@ 1 - 2010-06-25T05:45:13 + 2010-06-25T21:36:22 diff --git a/groove.cpp b/groove.cpp index 050a743..e857651 100644 --- a/groove.cpp +++ b/groove.cpp @@ -25,11 +25,12 @@ groove::groove(QWidget *parent) : pushMenu->addAction("Song:"); //pushMenu->addAction("Artist:"); //pushMenu->addAction("Album:"); - + pd = new grooveProgressBar(this); + pd->hide(); QMenu *moreAction = new QMenu(); moreAction->addAction("Playlist"); - moreAction->addAction("Add current song to playlist"); - moreAction->addAction("Show download Progress"); + connect(moreAction->addAction("Add current song to playlist"),SIGNAL(triggered()),this,SLOT(addSongPlaylist())); + connect(moreAction->addAction("Show download Progress"),SIGNAL(triggered()),pd,SLOT(show())); moreButton->setMenu(moreAction); //sMethod->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Maximum); @@ -79,6 +80,8 @@ groove::groove(QWidget *parent) : pl = new playlist(); pl->setGscom(gs); player->setPlaylist(pl); + connect(pl,SIGNAL(downloadProgress(int,qint64,qint64)),this,SLOT(progressUpdate(int,qint64,qint64))); + connect(pl,SIGNAL(bufferReady(int)),pd,SLOT(close())); } void groove::search() { @@ -135,10 +138,35 @@ void groove::play() return; //gs->getSong(); player->play(pl->addSong(item)); + pd->setMaximum(100); + pd->setValue(0); + pd->show(); } //selected. //if } +void groove::addSongPlaylist() +{ + QModelIndexList selected = resultView->selectionModel()->selectedRows(0); + if(!selected.isEmpty()) + { + QStandardItem *item = model->item(selected.first().row(),2); + if(item == 0) + return; + //gs->getSong(); + if(pl->currentplaying() == -1) + { + player->play(pl->addSong(item)); + } + else + pl->addSong(item); + pd->setMaximum(100); + pd->setValue(0); + pd->show(); + model->item(selected.first().row(),1)->setText("Added to Playlist");; + } +} + void groove::stop() { player->stop(); @@ -147,6 +175,15 @@ void groove::moreB() { qDebug() << "He pressed the button"; } +void groove::progressUpdate(int p, qint64 d, qint64 t) +{ + //if(!pd->isHidden()) + //{ + pd->setMaximum(t); + pd->setValue(d); + //} +} + void groove::orientationChanged() { #ifdef Q_WS_MAEMO_5 diff --git a/groove.h b/groove.h index 5741d03..3bb0000 100644 --- a/groove.h +++ b/groove.h @@ -6,6 +6,7 @@ #include "qmaemo5rotator.h" #include #include "playlist.h" +#include "grooveprogressbar.h" class groove : public QWidget { @@ -23,7 +24,9 @@ public slots: void stop(); void moreB(); void orientationChanged(); - +private slots: + void progressUpdate(int,qint64,qint64); + void addSongPlaylist(); private: sPlayer *player; QMenuBar *mBar; @@ -36,6 +39,7 @@ private: gscom *gs; QMaemo5Rotator *rot; playlist *pl; + grooveProgressBar *pd; }; diff --git a/groove.png b/groove.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc34a4dd2261faaae7644222d3648c5de7fca55 GIT binary patch literal 3143 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 this->setLayout(lay); this->setWindowTitle("Downloading / Buffering"); - rot = new QMaemo5Rotator(QMaemo5Rotator::AutomaticBehavior,this); + //rot = new QMaemo5Rotator(QMaemo5Rotator::AutomaticBehavior,this); } void grooveProgressBar::setMaximum(int maximum) { diff --git a/grooveprogressbar.h b/grooveprogressbar.h index f8f1989..d0067fd 100644 --- a/grooveprogressbar.h +++ b/grooveprogressbar.h @@ -9,7 +9,7 @@ class grooveProgressBar : public QDialog { Q_OBJECT public: - explicit grooveProgressBar(QDialog *parent = 0); + explicit grooveProgressBar(QWidget *parent = 0); void setMaximum(int maximum); void setValue(int position); int maximum(); diff --git a/icon.svg b/icon.svg index f9b82d1..0fe06eb 100644 --- a/icon.svg +++ b/icon.svg @@ -9,12 +9,15 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="48" - height="48" + width="64" + height="64" id="svg2" version="1.1" inkscape:version="0.47 r22583" - sodipodi:docname="icon.svg"> + sodipodi:docname="icon.svg" + inkscape:export-filename="/home/eli/Projects/qt4/Groove/icon.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + id="filter3692" + color-interpolation-filters="sRGB"> + transform="translate(0,-988.3622)"> at(position)->buffer->~QBuffer(); pList->at(position)->buffer = new QBuffer(); } +bool playlist::existAt(int position) +{ + return (pList->size() > position); +} int playlist::currentplaying() { @@ -26,7 +30,10 @@ int playlist::currentplaying() } bool playlist::bReady(int b) { - return pList->at(b)->bufferready; + if(pList->size() > b) + return pList->at(b)->bufferready; + else + return false; } void playlist::setBufferRdy(int b) { @@ -63,8 +70,7 @@ void playlist::beginDownload(int position) req.setUrl(*pList->at(currentdownloaditem)->server); qDebug() << pList->at(currentdownloaditem)->server; req.setHeader(req.ContentTypeHeader,QVariant("application/x-www-form-urlencoded")); - if(reply) - reply->~QNetworkReply(); + delete reply; reply = manager->post(req,QString("streamKey=" + pList->at(this->currentdownloaditem)->streamkey->toAscii()).toAscii()); pList->at(this->currentdownloaditem)->buffer->open(QBuffer::ReadWrite | QBuffer::Truncate); connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(downloadSlot(qint64,qint64))); @@ -88,6 +94,7 @@ void playlist::skeyFound() else if(this->currentplaying() == this->currentSkeyItem) this->beginDownload(this->currentSkeyItem); + this->currentSkeyItem = -1; } int playlist::addSong(QStandardItem *item) @@ -110,7 +117,7 @@ int playlist::addSong(QStandardItem *item) void playlist::downloadDone(int position) { - if(pList->size() < position+1) + if(this->existAt(position+1) && this->currentSkeyItem == -1) beginDownload(position+1); else this->currentdownloaditem = -1; diff --git a/playlist.h b/playlist.h index 17895ee..4365d8d 100644 --- a/playlist.h +++ b/playlist.h @@ -34,6 +34,7 @@ public: bool bReady(int b); int findFirstNotPlayed(); void beginDownload(int position); + bool existAt(int position); signals: void downloadProgress(int position, qint64 d, qint64 t); diff --git a/reasource.qrc b/reasource.qrc deleted file mode 100644 index 474bfc3..0000000 --- a/reasource.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - icon.svg - - diff --git a/splayer.cpp b/splayer.cpp index e642dd1..16c8ec3 100644 --- a/splayer.cpp +++ b/splayer.cpp @@ -25,7 +25,14 @@ void sPlayer::setPlaylist(playlist *playList) void sPlayer::markComplete() { pl->markPlayed(pl->currentplaying()); - pl->setCurrentPlaying(-1); + if(pl->existAt(pl->currentplaying()+1)) + { + pl->setCurrentPlaying(pl->currentplaying()+1); + if(pl->bReady(pl->currentplaying())) + this->start(pl->currentplaying()); + } + else + pl->setCurrentPlaying(-1); } sPlayer::~sPlayer() -- 1.7.9.5