Make sure we set player to 0 when we delete it
[soundwave.git] / playlist.cpp
blobac9eea69aff24a5af5cbfbef773a4c0174b3cbfd
1 #include <QFile>
2 #include <QInputDialog>
3 #include <QNetworkRequest>
4 #include <QNetworkReply>
5 #include <QUrl>
6 #include "playlist.h"
8 //=========================================================
9 Playlist::Playlist() : QDialog( 0 )
11 ui = new Ui::Playlist;
12 ui->setupUi( this );
14 manager = new QNetworkAccessManager( this );
15 connect( manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(readNetwork(QNetworkReply*)));
17 list = new QStringListModel( this );
18 ui->playlistView->setModel( list );
20 player = 0;
22 //=========================================================
23 Playlist::~Playlist()
25 delete ui;
26 delete manager;
28 //=========================================================
29 void Playlist::on_addItems_clicked()
31 QUrl url( QInputDialog::getText( this, "Playlist URL", "URL" ));
32 if( !url.isValid())
33 return;
35 qDebug( "Opening %s", qPrintable( url.toString()));
36 if( url.scheme() == "http" )
37 manager->get( QNetworkRequest( url ));
38 else if( url.scheme() == "file" ){
39 QFile f( url.toLocalFile());
40 if( !f.open( QFile::ReadOnly )){
41 qDebug( "can't open file: %s", qPrintable( f.fileName()));
42 return;
45 addM3U( f.readAll());
47 else
48 qDebug( "No handlers for this scheme" );
50 //=========================================================
51 void Playlist::on_removeItems_clicked()
53 qDebug( "FIXME" );
55 //=========================================================
56 void Playlist::on_startPlay_clicked()
58 if( player ){
59 // stop current play
60 player->stop();
61 delete player;
62 player = 0;
65 QStringList items = list->stringList();
66 if( items.isEmpty()){
67 qDebug( "empty list" );
68 return;
71 manager->get( QNetworkRequest( QUrl( items.first())));
73 //=========================================================
74 void Playlist::on_stopPlay_clicked()
76 if( player ){
77 player->stop();
78 delete player;
79 player = 0;
82 //=========================================================
83 void Playlist::addM3U( const QString & data )
85 QStringList m3u_list = data.split( "\n" );
86 if( m3u_list.isEmpty())
87 return;
89 if( m3u_list.takeFirst().simplified() != "#EXTM3U" ){
90 qDebug( "Invalid M3U signature" );
91 return;
94 QStringList dataList = list->stringList();
95 while( !m3u_list.isEmpty()){
96 QString item = m3u_list.takeFirst().simplified();
97 if( item.startsWith('#'))
98 continue;
100 // add URL to list
101 QUrl url( item );
102 if( !url.isValid())
103 continue;
105 dataList.append( item );
108 list->setStringList( dataList );
110 //=========================================================
111 void Playlist::readNetwork( QNetworkReply *reply )
113 qDebug( "__FUNCTION__ " );
115 if( reply->error() == QNetworkReply::NoError ){
116 QByteArray data = reply->readAll();
117 if( data.left( 7 ) == QByteArray( "#EXTM3U"))
118 addM3U( data );
119 else {
120 player = new Player( data );
121 player->start( QThread::LowestPriority );
124 else
125 qDebug( "fetch failed: %d", (int)reply->error());