-rw-r--r-- | noncore/multimedia/opieplayer2/om3u.cpp | 157 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/om3u.h | 79 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/opieplayer2.pro | 4 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidget.cpp | 580 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidget.h | 2 |
5 files changed, 543 insertions, 279 deletions
diff --git a/noncore/multimedia/opieplayer2/om3u.cpp b/noncore/multimedia/opieplayer2/om3u.cpp new file mode 100644 index 0000000..d378145 --- a/dev/null +++ b/noncore/multimedia/opieplayer2/om3u.cpp @@ -0,0 +1,157 @@ +/* + This file is part of the Opie Project + + Copyright (c) 2002 L. Potter <ljp@llornkcor.com> + =. + .=l. + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. 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 library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#include "playlistwidget.h" +#include "om3u.h" + +#include <qpe/applnk.h> +#include <qpe/qpeapplication.h> +#include <qpe/storage.h> +#include <qpe/mimetype.h> +#include <qpe/global.h> +#include <qpe/resource.h> + +#include <qdir.h> +#include <qregexp.h> +#include <qstring.h> +#include <qtextstream.h> +#include <qstringlist.h> +#include <qcstring.h> + +//extern PlayListWidget *playList; + +Om3u::Om3u( const QString &filePath) + : QStringList (){ +//filePath is path name to m3u +//qDebug("<<<<<<<new m3u "+filePath); + f.setName(filePath); + if(f.exists()) + f.open( IO_ReadWrite ); + else + f.open( IO_ReadWrite | IO_Truncate); +} + +Om3u::~Om3u(){} + +void Om3u::readM3u() { //it's m3u +// qDebug("<<<<<<reading m3u "+f.name()); + QTextStream t(&f); + QString s; + while ( !t.atEnd() ) { + s=t.readLine(); + + if( s.find( "#", 0, TRUE) == -1 ) { + if( s.find( " ", 0, TRUE) == -1 ) { + if( s.left(2) == "E:" || s.left(2) == "P:" ) { + s = s.right( s.length() -2 ); + QFileInfo f( s ); + QString name = f.baseName(); + name = name.right( name.length() - name.findRev( "\\", -1, TRUE ) -1 ); + s=s.replace( QRegExp( "\\" ), "/" ); + append(s); +// qDebug(s); + } else { // is url + s.replace( QRegExp( "%20" )," " ); + QString name; + if( name.left( 4 ) == "http" ) { + name = s.right( s.length() - 7 ); + } else { + name = s; + } + append(name); +// qDebug(name); + } + } + } + } +} + +void Om3u::readPls() { //it's a pls file + QTextStream t( &f ); + QString s; + while ( !t.atEnd() ) { + s = t.readLine(); + if( s.left(4) == "File" ) { + s = s.right( s.length() - 6 ); + s.replace( QRegExp( "%20" )," "); +// qDebug( "adding " + s + " to playlist" ); + // numberofentries=2 + // File1=http + // Title + // Length + // Version + // File2=http + s = s.replace( QRegExp( "\\" ), "/" ); + QFileInfo f( s ); + QString name = f.baseName(); + if( name.left( 4 ) == "http" ) { + name = s.right( s.length() - 7); + } else { + name = s; + } + name = name.right( name.length() - name.findRev( "\\", -1, TRUE) - 1 ); + if( s.at( s.length() - 4) == '.') // if this is probably a file + append(s); + else { //if its a url + if( name.right( 1 ).find( '/' ) == -1) { + s += "/"; + } + append(s); + } + } + } +} + +void Om3u::write() { //writes list to m3u file + QString list; + for ( QStringList::ConstIterator it = begin(); it != end(); ++it ) { + qDebug(*it); + list += *it+"\n"; + } + f.writeBlock( list, list.length() ); + f.close(); +} + +void Om3u::add(const QString &filePath) { //adds to m3u file + append(filePath); +} + +void Om3u::remove(const QString &filePath) { //removes from m3u list + +} + +void Om3u::deleteFile(const QString &filePath) {//deletes m3u file + +} + +void Om3u::close() { //closes m3u file + f.close(); +} diff --git a/noncore/multimedia/opieplayer2/om3u.h b/noncore/multimedia/opieplayer2/om3u.h new file mode 100644 index 0000000..392980e --- a/dev/null +++ b/noncore/multimedia/opieplayer2/om3u.h @@ -0,0 +1,79 @@ +/* + This file is part of the Opie Project + + Copyright (c) 2002 L. Potter <ljp@llornkcor.com> + =. + .=l. + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. 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 library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#ifndef OM3U_H +#define OM3U_H + +#include "playlistwidget.h" + +#include <qpe/applnk.h> +#include <qpe/qpeapplication.h> +#include <qpe/storage.h> +#include <qpe/mimetype.h> +#include <qpe/global.h> +#include <qpe/resource.h> + +#include <qdir.h> +#include <qregexp.h> +#include <qstring.h> +#include <qtextstream.h> +#include <qstringlist.h> +#include <qcstring.h> +#include <qfile.h> + + +class Om3u : public QStringList { +// Q_OBJECT +public: + Om3u( const QString &filePath); + ~Om3u(); + void readM3u(); + void readPls(); + void write(); + void add(const QString &); + void remove(const QString &); + void deleteFile(const QString &); + void close(); + +public slots: + +protected: + +private: + QFile f; +private slots: + + +}; + +#endif// M3U_H + + diff --git a/noncore/multimedia/opieplayer2/opieplayer2.pro b/noncore/multimedia/opieplayer2/opieplayer2.pro index 619d36d..52814e7 100644 --- a/noncore/multimedia/opieplayer2/opieplayer2.pro +++ b/noncore/multimedia/opieplayer2/opieplayer2.pro @@ -1,23 +1,23 @@ TEMPLATE = app #CONFIG = qt warn_on release CONFIG = qt warn_on debug DESTDIR = $(OPIEDIR)/bin HEADERS = playlistselection.h mediaplayerstate.h xinecontrol.h \ - videowidget.h audiowidget.h playlistwidget.h mediaplayer.h inputDialog.h \ + videowidget.h audiowidget.h playlistwidget.h om3u.h mediaplayer.h inputDialog.h \ frame.h lib.h xinevideowidget.h volumecontrol.h playlistwidgetgui.h\ alphablend.h yuv2rgb.h SOURCES = main.cpp \ playlistselection.cpp mediaplayerstate.cpp xinecontrol.cpp \ - videowidget.cpp audiowidget.cpp playlistwidget.cpp mediaplayer.cpp inputDialog.cpp \ + videowidget.cpp audiowidget.cpp playlistwidget.cpp om3u.cpp mediaplayer.cpp inputDialog.cpp \ frame.cpp lib.cpp nullvideo.c xinevideowidget.cpp volumecontrol.cpp \ playlistwidgetgui.cpp\ alphablend.c yuv2rgb.c yuv2rgb_arm.c yuv2rgb_arm4l.S TARGET = opieplayer2 INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lpthread -lopie -lxine MOC_DIR = qpeobj OBJECTS_DIR = qpeobj #INCLUDEPATH += $(OPIEDIR)/include #DEPENDPATH += $(OPIEDIR)/include diff --git a/noncore/multimedia/opieplayer2/playlistwidget.cpp b/noncore/multimedia/opieplayer2/playlistwidget.cpp index 6acdd1d..ab6b593 100644 --- a/noncore/multimedia/opieplayer2/playlistwidget.cpp +++ b/noncore/multimedia/opieplayer2/playlistwidget.cpp @@ -38,24 +38,25 @@ #include <qpe/global.h> #include <qpe/resource.h> #include <qdir.h> #include <qmessagebox.h> #include <qregexp.h> #include <qtextstream.h> #include "playlistselection.h" #include "playlistwidget.h" #include "mediaplayerstate.h" #include "inputDialog.h" +#include "om3u.h" //only needed for the random play #include <stdlib.h> #include "audiowidget.h" #include "videowidget.h" extern MediaPlayerState *mediaPlayerState; PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) : PlayListWidgetGui( parent, name, fl ) { @@ -72,27 +73,27 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) mediaPlayerState, SLOT( setShuffled( bool ) ), TRUE ); d->tbLoop = new ToolButton( bar, tr( "Loop" ), "opieplayer2/loop", mediaPlayerState, SLOT( setLooping( bool ) ), TRUE ); (void)new MenuItem( pmPlayList, tr( "Clear List" ), this, SLOT( clearList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all audio files" ), this, SLOT( addAllMusicToList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all video files" ), this, SLOT( addAllVideoToList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all files" ), this, SLOT( addAllToList() ) ); pmPlayList->insertSeparator(-1); - (void)new MenuItem( pmPlayList, tr( "Save PlayList" ), - this, SLOT( saveList() ) ); - (void)new MenuItem( pmPlayList, tr( "Export playlist to m3u" ), +// (void)new MenuItem( pmPlayList, tr( "Save PlayList" ), +// this, SLOT( saveList() ) ); + (void)new MenuItem( pmPlayList, tr( "Save Playlist" ), this, SLOT(writem3u() ) ); pmPlayList->insertSeparator(-1); (void)new MenuItem( pmPlayList, tr( "Open File or URL" ), this,SLOT( openFile() ) ); pmPlayList->insertSeparator(-1); (void)new MenuItem( pmPlayList, tr( "Rescan for Audio Files" ), this,SLOT( scanForAudio() ) ); (void)new MenuItem( pmPlayList, tr( "Rescan for Video Files" ), this,SLOT( scanForVideo() ) ); pmView->insertItem( Resource::loadPixmap("fullscreen") , tr( "Full Screen"), mediaPlayerState, SLOT( toggleFullscreen() ) ); @@ -138,29 +139,33 @@ PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl ) d->tbPlay, SLOT( setOn( bool ) ) ); connect( mediaPlayerState, SIGNAL( loopingToggled( bool ) ), d->tbLoop, SLOT( setOn( bool ) ) ); connect( mediaPlayerState, SIGNAL( shuffledToggled( bool ) ), d->tbShuffle, SLOT( setOn( bool ) ) ); connect( mediaPlayerState, SIGNAL( playlistToggled( bool ) ), this, SLOT( setPlaylist( bool ) ) ); connect( d->selectedFiles, SIGNAL( doubleClicked( QListViewItem *) ), this, SLOT( playIt( QListViewItem *) ) ); connect ( gammaSlider, SIGNAL( valueChanged( int ) ), mediaPlayerState, SLOT( setVideoGamma( int ) ) ); - readConfig( cfg ); +// cfg.setGroup( "PlayList" ); +// if( cfg.readBoolEntry("newPlaylist") ){ QString currentPlaylist = cfg.readEntry( "CurrentPlaylist", "" ); loadList(DocLnk( currentPlaylist ) ); setCaption( tr( "OpiePlayer: " ) + currentPlaylist ); +// } else { +// readConfig( cfg ); +// } // see which skins are installed videoScan=FALSE; audioScan=FALSE; populateSkinsMenu(); initializeStates(); } PlayListWidget::~PlayListWidget() { // WTF?!@?! if ( d->current ) { @@ -170,74 +175,123 @@ PlayListWidget::~PlayListWidget() { } void PlayListWidget::initializeStates() { d->tbPlay->setOn( mediaPlayerState->playing() ); d->tbLoop->setOn( mediaPlayerState->looping() ); d->tbShuffle->setOn( mediaPlayerState->shuffled() ); setPlaylist( true ); } void PlayListWidget::readConfig( Config& cfg ) { + cfg.setGroup( "PlayList" ); QString currentString = cfg.readEntry( "current", "" ); int noOfFiles = cfg.readNumEntry( "NumberOfFiles", 0 ); + for ( int i = 0; i < noOfFiles; i++ ) { QString entryName; entryName.sprintf( "File%i", i + 1 ); + QString linkFile = cfg.readEntry( entryName ); + + qDebug("reading "+linkFile); + if( QFileInfo( linkFile ).exists() ) { + DocLnk lnk( linkFile ); + if ( QFileInfo( lnk.file() ).exists() || + linkFile.find( "http" , 0, TRUE) != -1) { + d->selectedFiles->addToSelection( lnk ); + } } } d->selectedFiles->setSelectedItem( currentString ); + } void PlayListWidget::writeConfig( Config& cfg ) const { - d->selectedFiles->writeCurrent( cfg ); - cfg.setGroup( "PlayList" ); - int noOfFiles = 0; + +// Config config( "OpiePlayer" ); +// config.setGroup( "PlayList" ); + +// if(config.readBoolEntry("newPlaylist")) { +// new for testing + QString name, filename, list; + Om3u *m3uList; + name = "default"; + + filename=QPEApplication::documentDir() + "/" + name+".m3u"; + + m3uList = new Om3u(filename); + d->selectedFiles->first(); do { - const DocLnk *lnk = d->selectedFiles->current(); - if ( lnk ) { - QString entryName; - entryName.sprintf( "File%i", noOfFiles + 1 ); - cfg.writeEntry( entryName, lnk->linkFile() ); - // if this link does exist, add it so we have the file - // next time... - if ( !QFile::exists( lnk->linkFile() ) ) { - // the way writing lnks doesn't really check for out - // of disk space, but check it anyway. - if ( !lnk->writeLink() ) { - QMessageBox::critical( 0, tr("Out of space"), - tr( "There was a problem saving " - "the playlist.\n" - "Your playlist " - "may be missing some entries\n" - "the next time you start it." ) - ); - } - } - noOfFiles++; - } + m3uList->add( d->selectedFiles->current()->file()); } while ( d->selectedFiles->next() ); - cfg.writeEntry("NumberOfFiles", noOfFiles ); + + qDebug( list ); + + m3uList->write(); + m3uList->close(); + if(m3uList) delete m3uList; + + DocLnk lnk; + lnk.setFile( filename); + lnk.setIcon("opieplayer2/playlist2"); + lnk.setName( name); //sets file name + + qDebug("writing default playlist "+filename); + + config.writeEntry("CurrentPlaylist", filename); +// currentPlayList=filename; + + if(!lnk.writeLink()) { + qDebug("Writing doclink did not work"); + } + +// } else { + +// d->selectedFiles->writeCurrent( cfg ); +// int noOfFiles = 0; +// d->selectedFiles->first(); + +// do { +// const DocLnk *lnk = d->selectedFiles->current(); + +// if ( lnk ) { + +// QString entryName; +// entryName.sprintf( "File%i", noOfFiles + 1 ); + +// cfg.writeEntry( entryName, lnk->linkFile() ); +// // if this link does exist, add it so we have the file +// // next time... + +// if ( !QFile::exists( lnk->linkFile() ) ) { +// lnk->writeLink(); +// } +// } +// noOfFiles++; +// } +// while ( d->selectedFiles->next() ); +// cfg.writeEntry("NumberOfFiles", noOfFiles ); +// } } void PlayListWidget::addToSelection( const DocLnk& lnk ) { d->setDocumentUsed = FALSE; if ( mediaPlayerState->playlist() ) { if( QFileInfo( lnk.file() ).exists() || lnk.file().left(4) == "http" ) d->selectedFiles->addToSelection( lnk ); } else mediaPlayerState->setPlaying( TRUE ); @@ -391,25 +445,25 @@ bool PlayListWidget::prev() { return FALSE; } } return TRUE; } } else { return mediaPlayerState->looping(); } } bool PlayListWidget::next() { -qDebug("<<<<<<<<<<<<next()"); +//qDebug("<<<<<<<<<<<<next()"); if ( mediaPlayerState->playlist() ) { if ( mediaPlayerState->shuffled() ) { return prev(); } else { if ( !d->selectedFiles->next() ) { if ( mediaPlayerState->looping() ) { return d->selectedFiles->first(); } else { return FALSE; } } return TRUE; @@ -428,72 +482,90 @@ bool PlayListWidget::first() { } bool PlayListWidget::last() { if ( mediaPlayerState->playlist() ) return d->selectedFiles->last(); else return mediaPlayerState->looping(); } void PlayListWidget::saveList() { +// Config config( "OpiePlayer" ); +// config.setGroup( "PlayList" ); + +// if(config.readBoolEntry("newPlaylist") ){ + writem3u(); + +// } else { + +// QString filename; +// InputDialog *fileDlg = 0l; +// fileDlg = new InputDialog(this,tr("Save Playlist"),TRUE, 0); +// fileDlg->exec(); +// if( fileDlg->result() == 1 ) { +// if ( d->current ) +// delete d->current; +// filename = fileDlg->text();//+".playlist"; +// // qDebug("saving playlist "+filename+".playlist"); + +// Config cfg( filename +".playlist"); +// writeConfig( cfg ); + +// DocLnk lnk; +// lnk.setFile(QDir::homeDirPath()+"/Settings/"+filename+".playlist.conf"); +// //sets File property +// lnk.setType("playlist/plain"); +// lnk.setIcon("opieplayer2/playlist2"); +// lnk.setName( filename); //sets file name +// // qDebug(filename); +// if(!lnk.writeLink()) { +// qDebug("Writing doclink did not work"); +// } +// } - QString filename; - InputDialog *fileDlg = 0l; - fileDlg = new InputDialog(this,tr("Save Playlist"),TRUE, 0); - fileDlg->exec(); - if( fileDlg->result() == 1 ) { - if ( d->current ) - delete d->current; - filename = fileDlg->text();//+".playlist"; - // qDebug("saving playlist "+filename+".playlist"); - Config cfg( filename +".playlist"); - writeConfig( cfg ); - - DocLnk lnk; - lnk.setFile(QDir::homeDirPath()+"/Settings/"+filename+".playlist.conf"); -//sets File property - lnk.setType("playlist/plain");// hey is this a REGISTERED mime type?!?!? ;D - lnk.setIcon("opieplayer2/playlist2"); - lnk.setName( filename); //sets file name - // qDebug(filename); - if(!lnk.writeLink()) { - qDebug("Writing doclink did not work"); - } - } - Config config( "OpiePlayer" ); - config.writeEntry("CurrentPlaylist",filename); - setCaption(tr("OpiePlayer: ")+filename); - d->selectedFiles->first(); - if(fileDlg) { - delete fileDlg; - } +// config.writeEntry("CurrentPlaylist",filename); +// setCaption(tr("OpiePlayer: ")+filename); +// d->selectedFiles->first(); +// if(fileDlg) { +// delete fileDlg; +// } +// } } + void PlayListWidget::loadList( const DocLnk & lnk) { QString name= lnk.name(); -// qDebug("currentList is "+name); + qDebug("currentList is "+name); + if( name.length()>0) { setCaption("OpiePlayer: "+name); - // qDebug("load list "+ name+".playlist"); + qDebug("<<<<<<<<<<<<load list "+ lnk.file()); clearList(); - Config cfg( name+".playlist"); - readConfig(cfg); + +// if(name.right(3) == "m3u") { + + readm3u(lnk.file()); +// } else { +// / Config cfg( name+".playlist"); +// readConfig(cfg); tabWidget->setCurrentPage(0); Config config( "OpiePlayer" ); - config.writeEntry("CurrentPlaylist", name); - // d->selectedFiles->first(); + config.setGroup( "PlayList" ); + config.writeEntry("CurrentPlaylist", lnk.file()); +// // d->selectedFiles->first(); +// } } } void PlayListWidget::setPlaylist( bool shown ) { if ( shown ) { d->playListFrame->show(); } else { d->playListFrame->hide(); } } @@ -635,52 +707,25 @@ void PlayListWidget::tabChanged(QWidget *) { tbDeletePlaylist->show(); } playLists->reread(); } break; }; } void PlayListWidget::btnPlay(bool b) { // mediaPlayerState->setPlaying(false); mediaPlayerState->setPlaying(b); -// qApp->processEvents(); insanityBool=FALSE; -// switch ( whichList()) { -// case 0: -// { -// mediaPlayerState->setPlaying(b); -// } -// break; -// case 1: -// { -// mediaPlayerState->setPlaying(b); -// qApp->processEvents(); -// insanityBool=FALSE; -// }// audioView->clearSelection(); -// break; -// case 2: -// { -// // addToSelection( videoView->currentItem() ); -// mediaPlayerState->setPlaying(b); -// qApp->processEvents(); -// // d->selectedFiles->removeSelected( ); -// // tabWidget->setCurrentPage(2); -// // d->selectedFiles->unSelect(); -// insanityBool=FALSE; -// }// videoView->clearSelection(); -// break; -// }; - } void PlayListWidget::deletePlaylist() { switch( QMessageBox::information( this, (tr("Remove Playlist?")), (tr("You really want to delete\nthis playlist?")), (tr("Yes")), (tr("No")), 0 )){ case 0: // Yes clicked, QFile().remove(playLists->selectedDocument().file()); QFile().remove(playLists->selectedDocument().linkFile()); playLists->reread(); break; case 1: // Cancel @@ -692,25 +737,26 @@ void PlayListWidget::deletePlaylist() { void PlayListWidget::playSelected() { btnPlay( TRUE); } void PlayListWidget::scanForAudio() { // qDebug("scan for audio"); files.detachChildren(); QListIterator<DocLnk> sdit( files.children() ); for ( ; sdit.current(); ++sdit ) { delete sdit.current(); } - Global::findDocuments(&files, "audio/*"); +// Global::findDocuments( &files, "audio/*"); + Global::findDocuments( &files, "audio/mpeg;audio/x-wav;audio/x-ogg"); audioScan = TRUE; } void PlayListWidget::scanForVideo() { // qDebug("scan for video"); vFiles.detachChildren(); QListIterator<DocLnk> sdit( vFiles.children() ); for ( ; sdit.current(); ++sdit ) { delete sdit.current(); } Global::findDocuments(&vFiles, "video/*"); videoScan = TRUE; @@ -788,94 +834,220 @@ void PlayListWidget::populateVideoView() { void PlayListWidget::openFile() { QString filename, name; InputDialog *fileDlg; fileDlg = new InputDialog(this,tr("Open file or URL"),TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { filename = fileDlg->text(); qDebug( "Selected filename is " + filename ); - if(filename.left(4) == "http") { + if(filename.left(4) == "http") { //if http, lets write a new m3u + Om3u *m3uList; DocLnk lnk; QString m3uFile, m3uFilePath; - if(filename.find(":",8,TRUE) != -1) { -//found a port - m3uFile=filename.left(filename.find(":",8,TRUE)); - - m3uFile=m3uFile.right(m3uFile.length()-7); - qDebug(m3uFile); - m3uFilePath= QDir::homeDirPath()+"/"+m3uFile+".m3u"; - QFile f(m3uFilePath ); - f.open( IO_WriteOnly ); - f.writeBlock( filename, filename.length() ); - f.close(); + if(filename.find(":",8,TRUE) != -1) { //found a port + m3uFile = filename.left( filename.find( ":",8,TRUE)); - lnk.setName( m3uFile ); //sets file name - lnk.setFile( m3uFilePath ); //sets File property - //qWarning( "Mimetype: " + MimeType( QFile::encodeName(filename) ).id() ); - lnk.setType( MimeType( QFile::encodeName(m3uFilePath) ).id() ); + m3uFile = m3uFile.right( 7); } else if(filename.left(4) == "http"){ + m3uFile=filename; m3uFile=m3uFile.right(m3uFile.length()-7); - qDebug(m3uFile); + } else{ + m3uFile=filename; + } + +// qDebug( m3uFile); + +//this is where this new m3u is going to live at m3uFilePath= QDir::homeDirPath()+"/"+m3uFile+".m3u"; +// m3uFile += ".m3u"; + m3uList = new Om3u( m3uFile+".m3u"); - QFile f(m3uFilePath ); - f.open( IO_WriteOnly ); - f.writeBlock( filename, filename.length() ); - f.close(); + m3uList->add( filename); + m3uList->write(); + if(m3uList) delete m3uList; - lnk.setName( m3uFile ); //sets file name +// qDebug( m3uFile); + lnk.setName( filename ); //sets file name lnk.setFile( m3uFilePath ); //sets File property - //qWarning( "Mimetype: " + MimeType( QFile::encodeName(filename) ).id() ); lnk.setType( MimeType( QFile::encodeName(m3uFilePath) ).id() ); - } else{ - - QFile f( filename ); - f.open( IO_WriteOnly ); - f.writeBlock( filename, filename.length() ); - f.close(); - - lnk.setName( filename ); //sets file name - lnk.setFile( filename ); //sets File property - //qWarning( "Mimetype: " + MimeType( QFile::encodeName(filename) ).id() ); - lnk.setType( MimeType( QFile::encodeName(filename) ).id() ); - } - lnk.setExec( "opieplayer" ); - lnk.setIcon( "opieplayer2/MPEGPlayer" ); + lnk.setExec( "opieplayer2" ); + lnk.setIcon("opieplayer2/playlist2"); if( !lnk.writeLink() ) { qDebug( "Writing doclink did not work" ); } d->selectedFiles->addToSelection( lnk ); } else if( filename.right( 3 ) == "m3u" ) { readm3u( filename ); + } else if( filename.right(3) == "pls" ) { readPls( filename ); } } if( fileDlg ) { delete fileDlg; } } +/* +reads m3u and adds files/urls to playlist */ +void PlayListWidget::readm3u( const QString &filename ) { + qDebug( "read m3u filename " + filename ); + + Om3u *m3uList; + QString s, name; + m3uList = new Om3u( filename); + m3uList->readM3u(); + DocLnk lnk; + for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) { + s = *it; + s.replace( QRegExp( "%20" )," " ); + qDebug("reading "+ s); + + if( QFileInfo( s ).exists() ) { + lnk.setName( QFileInfo(s).baseName()); + qDebug("set link "+s); + if(s.at(s.length()-4) == '.') //if regular file + lnk.setFile( s); + else + lnk.setFile( s+"/"); //if url with no extension + + d->selectedFiles->addToSelection( lnk ); + } + } + Config config( "OpiePlayer" ); + config.setGroup( "PlayList" ); + + config.writeEntry("CurrentPlaylist",filename); + currentPlayList=filename; + + m3uList->close(); + if(m3uList) delete m3uList; + + d->selectedFiles->setSelectedItem( s); + setCaption(tr("OpiePlayer: ")+ QFileInfo(s).baseName()); + +} + +/* +reads pls and adds files/urls to playlist */ +void PlayListWidget::readPls( const QString &filename ) { + + qDebug( "pls filename is " + filename ); + Om3u *m3uList; + QString s, name; + m3uList = new Om3u( filename); + m3uList->readPls(); + + for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) { + s = *it; + s.replace( QRegExp( "%20" )," " ); + DocLnk lnk( s ); + QFileInfo f( s ); + QString name = f.baseName(); + + if( name.left( 4 ) == "http" ) { + name = s.right( s.length() - 7); + } else { + name = s; + } + + name = name.right( name.length() - name.findRev( "\\", -1, TRUE) - 1 ); + + lnk.setName( name ); + if( s.at( s.length() - 4) == '.') {// if this is probably a file + lnk.setFile( s ); + } else { //if its a url + if( name.right( 1 ).find( '/' ) == -1) { + s += "/"; + } + lnk.setFile( s ); + } + lnk.setType( "audio/x-mpegurl" ); + + lnk.writeLink(); + d->selectedFiles->addToSelection( lnk ); + } + + m3uList->close(); + if(m3uList) delete m3uList; +} + +/* + writes current playlist to m3u file */ +void PlayListWidget::writem3u() { + InputDialog *fileDlg; + fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0); + fileDlg->exec(); + QString name, filename, list; + Om3u *m3uList; + + if( fileDlg->result() == 1 ) { + name = fileDlg->text(); + qDebug( filename ); + + if( name.left( 1) != "/" ) { + filename = QPEApplication::documentDir() + "/" + name; + } + + if( name.right( 3 ) != "m3u" ) { + filename = QPEApplication::documentDir() + "/" +name+".m3u"; + } + + m3uList = new Om3u(filename); + + d->selectedFiles->first(); + + do { + m3uList->add( d->selectedFiles->current()->file()); + } + while ( d->selectedFiles->next() ); +// qDebug( list ); + + m3uList->write(); + m3uList->close(); + } + if(m3uList) delete m3uList; + if(fileDlg) delete fileDlg; + + DocLnk lnk; + lnk.setFile( filename); + lnk.setIcon("opieplayer2/playlist2"); + lnk.setName( name); //sets file name + +// qDebug(filename); + Config config( "OpiePlayer" ); + config.setGroup( "PlayList" ); + + config.writeEntry("CurrentPlaylist",filename); + currentPlayList=filename; + + if(!lnk.writeLink()) { + qDebug("Writing doclink did not work"); + } + + setCaption(tr("OpiePlayer: ") + name); +} + void PlayListWidget::keyReleaseEvent( QKeyEvent *e ) { switch ( e->key() ) { ////////////////////////////// Zaurus keys case Key_F9: //activity // if(audioUI->isHidden()) // audioUI->showMaximized(); break; case Key_F10: //contacts // if( videoUI->isHidden()) // videoUI->showMaximized(); break; case Key_F11: //menu @@ -905,173 +1077,29 @@ void PlayListWidget::keyReleaseEvent( QKeyEvent *e ) { case Key_2: tabWidget->setCurrentPage( 1 ); break; case Key_3: tabWidget->setCurrentPage( 2 ); break; case Key_4: tabWidget->setCurrentPage( 3 ); break; case Key_Down: if ( !d->selectedFiles->next() ) d->selectedFiles->first(); - break; case Key_Up: if ( !d->selectedFiles->prev() ) // d->selectedFiles->last(); - break; - - } -} - -void PlayListWidget::readm3u( const QString &filename ) { - qDebug( "m3u filename is " + filename ); - QFile f( filename ); - - if( f.open( IO_ReadOnly ) ) { - QTextStream t(&f); - QString s;//, first, second; - int i=0; - while ( !t.atEnd() ) { - s=t.readLine(); - - if( s.find( "#", 0, TRUE) == -1 ) { - if( s.find( " ", 0, TRUE) == -1 ) { -// not sure if this is neede since cf uses vfat - if( s.left(2) == "E:" || s.left(2) == "P:" ) { - s = s.right( s.length() -2 ); - DocLnk lnk( s ); - QFileInfo f( s ); - QString name = f.baseName(); - name = name.right( name.length() - name.findRev( "\\", -1, TRUE ) -1 ); - lnk.setName( name ); - s=s.replace( QRegExp( "\\" ), "/" ); - lnk.setFile( s ); - lnk.writeLink(); - qDebug( "add " + name); - d->selectedFiles->addToSelection( lnk ); - } else { // is url - s.replace( QRegExp( "%20" )," " ); - DocLnk lnk( s ); - QString name; - if( name.left( 4 ) == "http" ) { - name = s.right( s.length() - 7 ); - } else { - name = s; - } - lnk.setName( name ); - if( s.at( s.length() - 4) == '.' ) { - lnk.setFile( s ); - } else { - lnk.setFile( s + "/" ); - } - lnk.setType( "audio/x-mpegurl" ); - lnk.writeLink(); - d->selectedFiles->addToSelection( lnk ); - } - i++; - } - } - } - } - f.close(); -} - -void PlayListWidget::writem3u() { - InputDialog *fileDlg; - fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0); - fileDlg->exec(); - QString filename, list; - if( fileDlg->result() == 1 ) { - filename = fileDlg->text(); - qDebug( filename ); - int noOfFiles = 0; - d->selectedFiles->first(); - do { - // we dont check for existance because of url's - // qDebug(d->selectedFiles->current()->file()); - - // so maybe we should do some net checking to ,-) - // no, cause it takes to long... - - list += d->selectedFiles->current()->file() + "\n"; - noOfFiles++; - } - while ( d->selectedFiles->next() ); - qDebug( list ); - if( filename.left( 1) != "/" ) { - filename=QPEApplication::documentDir() + "/" + filename; - } - if( filename.right( 3 ) != "m3u" ) { - filename=filename+".m3u"; - } - QFile f( filename ); - f.open( IO_WriteOnly ); - f.writeBlock( list, list.length() ); - f.close(); - } - if( fileDlg ) { - delete fileDlg; - } -} - -void PlayListWidget::readPls( const QString &filename ) { - - qDebug( "pls filename is " + filename ); - QFile f( filename ); - - if( f.open( IO_ReadOnly ) ) { - QTextStream t( &f ); - QString s;//, first, second; - int i = 0; - while ( !t.atEnd() ) { - s = t.readLine(); - if( s.left(4) == "File" ) { - s = s.right( s.length() - 6 ); - s.replace( QRegExp( "%20" )," "); - qDebug( "adding " + s + " to playlist" ); - // numberofentries=2 - // File1=http - // Title - // Length - // Version - // File2=http - s = s.replace( QRegExp( "\\" ), "/" ); - DocLnk lnk( s ); - QFileInfo f( s ); - QString name = f.baseName(); - if( name.left( 4 ) == "http" ) { - name = s.right( s.length() - 7); - } else { - name = s; - } - name = name.right( name.length() - name.findRev( "\\", -1, TRUE) - 1 ); - lnk.setName( name ); - if( s.at( s.length() - 4) == '.') // if this is probably a file - lnk.setFile( s ); - else { //if its a url - if( name.right( 1 ).find( '/' ) == -1) { - s += "/"; - } - lnk.setFile( s ); - } - lnk.setType( "audio/x-mpegurl" ); - - //qDebug("DocLnk add "+name); - d->selectedFiles->addToSelection( lnk ); - } - } - i++; } } void PlayListWidget::pmViewActivated(int index) { // qDebug("%d", index); switch(index) { case -16: { mediaPlayerState->toggleFullscreen(); bool b=mediaPlayerState->fullscreen(); pmView->setItemChecked( index, b); Config cfg( "OpiePlayer" ); diff --git a/noncore/multimedia/opieplayer2/playlistwidget.h b/noncore/multimedia/opieplayer2/playlistwidget.h index 2873dca..428821a 100644 --- a/noncore/multimedia/opieplayer2/playlistwidget.h +++ b/noncore/multimedia/opieplayer2/playlistwidget.h @@ -52,25 +52,25 @@ class QPoint; class QAction; class QLabel; class PlayListWidget : public PlayListWidgetGui { Q_OBJECT public: PlayListWidget( QWidget* parent=0, const char* name=0, WFlags fl=0 ); ~PlayListWidget(); DocLnkSet files; DocLnkSet vFiles; bool fromSetDocument; bool insanityBool; - QString setDocFileRef; + QString setDocFileRef, currentPlayList; // retrieve the current playlist entry (media file link) const DocLnk *current(); void useSelectedDocument(); int selected; int whichList(); public slots: bool first(); bool last(); bool next(); bool prev(); void writeConfig( Config& cfg ) const; |