author | llornkcor <llornkcor> | 2002-10-06 21:57:48 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-10-06 21:57:48 (UTC) |
commit | a60fbe6f441b906489984b0dbc239259adacdcbc (patch) (side-by-side diff) | |
tree | 84c47ae8e87c7d100fdd954a28256e0e8d5bd044 | |
parent | 2623a1e2fddf0bfb91191ea7224f016032336ed5 (diff) | |
download | opie-a60fbe6f441b906489984b0dbc239259adacdcbc.zip opie-a60fbe6f441b906489984b0dbc239259adacdcbc.tar.gz opie-a60fbe6f441b906489984b0dbc239259adacdcbc.tar.bz2 |
use m3u now. probably buggy still
-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 | 612 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidget.h | 2 |
5 files changed, 559 insertions, 295 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,24 +1,24 @@ 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 @@ -18,246 +18,300 @@ + . -:. = 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 <qpe/qpetoolbar.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 <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 ) { d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), "opieplayer2/add_to_playlist", this , SLOT(addSelected() ) ); d->tbRemoveFromList = new ToolButton( bar, tr( "Remove from Playlist" ), "opieplayer2/remove_from_playlist", this , SLOT(removeSelected() ) ); d->tbPlay = new ToolButton( bar, tr( "Play" ), "opieplayer2/play", this , SLOT( btnPlay( bool) ), TRUE ); d->tbShuffle = new ToolButton( bar, tr( "Randomize" ),"opieplayer2/shuffle", 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() ) ); Config cfg( "OpiePlayer" ); bool b= cfg.readBoolEntry("FullScreen", 0); mediaPlayerState->setFullscreen( b ); pmView->setItemChecked( -16, b ); (void)new ToolButton( vbox1, tr( "Move Up" ), "opieplayer2/up", d->selectedFiles, SLOT(moveSelectedUp() ) ); (void)new ToolButton( vbox1, tr( "Remove" ), "opieplayer2/cut", d->selectedFiles, SLOT(removeSelected() ) ); (void)new ToolButton( vbox1, tr( "Move Down" ), "opieplayer2/down", d->selectedFiles, SLOT(moveSelectedDown() ) ); QVBox *stretch2 = new QVBox( vbox1 ); connect( tbDeletePlaylist, ( SIGNAL( released() ) ), SLOT( deletePlaylist() ) ); connect( pmView, SIGNAL( activated( int ) ), this, SLOT( pmViewActivated( int ) ) ); connect( skinsMenu, SIGNAL( activated( int ) ) , this, SLOT( skinsMenuActivated( int ) ) ); connect( d->selectedFiles, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int) ), this,SLOT( playlistViewPressed( int, QListViewItem *, const QPoint&, int ) ) ); connect( audioView, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int ) ), this,SLOT( viewPressed( int, QListViewItem *, const QPoint&, int ) ) ); connect( audioView, SIGNAL( returnPressed( QListViewItem *) ), this,SLOT( playIt( QListViewItem *) ) ); connect( audioView, SIGNAL( doubleClicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); connect( videoView, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int) ), this,SLOT( viewPressed( int, QListViewItem *, const QPoint&, int) ) ); connect( videoView, SIGNAL( returnPressed( QListViewItem *) ), this,SLOT( playIt( QListViewItem *) ) ); connect( videoView, SIGNAL( doubleClicked( QListViewItem *) ), this, SLOT( addToSelection( QListViewItem *) ) ); connect( playLists, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( loadList( const DocLnk & ) ) ); connect( tabWidget, SIGNAL ( currentChanged(QWidget*) ), this, SLOT( tabChanged( QWidget* ) ) ); connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), 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 ); - QString currentPlaylist = cfg.readEntry( "CurrentPlaylist", "" ); - loadList(DocLnk( currentPlaylist ) ); - setCaption( tr( "OpiePlayer: " ) + currentPlaylist ); - +// 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 ) { delete d->current; } delete d; } 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; - 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++; + +// 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 { + m3uList->add( d->selectedFiles->current()->file()); } - } - while ( d->selectedFiles->next() ); - cfg.writeEntry("NumberOfFiles", noOfFiles ); + while ( d->selectedFiles->next() ); + + 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 ); } void PlayListWidget::clearList() { while ( first() ) { d->selectedFiles->removeSelected(); } } void PlayListWidget::viewPressed( int mouse, QListViewItem *, const QPoint& , int) { switch (mouse) { case 1: break; case 2: { QPopupMenu m; m.insertItem( tr( "Play Selected" ), this, SLOT( playSelected() )); m.insertItem( tr( "Add to Playlist" ), this, SLOT( addSelected() )); m.exec( QCursor::pos() ); @@ -371,149 +425,167 @@ const DocLnk *PlayListWidget::current() { // this is fugly bool PlayListWidget::prev() { if ( mediaPlayerState->playlist() ) { if ( mediaPlayerState->shuffled() ) { const DocLnk *cur = current(); int j = 1 + (int)(97.0 * rand() / (RAND_MAX + 1.0)); for ( int i = 0; i < j; i++ ) { if ( !d->selectedFiles->next() ) d->selectedFiles->first(); } if ( cur == current() ) if ( !d->selectedFiles->next() ) { d->selectedFiles->first(); } return TRUE; } else { if ( !d->selectedFiles->prev() ) { if ( mediaPlayerState->looping() ) { return d->selectedFiles->last(); } else { 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; } } else { return mediaPlayerState->looping(); } } bool PlayListWidget::first() { if ( mediaPlayerState->playlist() ) return d->selectedFiles->first(); else return mediaPlayerState->looping(); } bool PlayListWidget::last() { if ( mediaPlayerState->playlist() ) return d->selectedFiles->last(); else return mediaPlayerState->looping(); } -void PlayListWidget::saveList() { + 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"); +// } +// } + +// config.writeEntry("CurrentPlaylist",filename); +// setCaption(tr("OpiePlayer: ")+filename); +// d->selectedFiles->first(); +// if(fileDlg) { +// delete fileDlg; +// } +// } + } - 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; - } -} void PlayListWidget::loadList( const DocLnk & lnk) { - QString name= lnk.name(); -// qDebug("currentList is "+name); + QString name = lnk.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(); } } void PlayListWidget::addSelected() { Config cfg( "OpiePlayer" ); cfg.setGroup("PlayList"); QString currentPlaylist = cfg.readEntry("CurrentPlaylist",""); // int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); switch (whichList()) { case 0: //playlist break; case 1: { //audio QListViewItemIterator it( audioView ); // iterate through all items of the listview for ( ; it.current(); ++it ) { if ( it.current()->isSelected() ) { QListIterator<DocLnk> dit( files.children() ); for ( ; dit.current(); ++dit ) { if( dit.current()->name() == it.current()->text(0) ) { if(QFileInfo( dit.current()->file()).exists()) @@ -551,186 +623,160 @@ void PlayListWidget::addSelected() { void PlayListWidget::removeSelected() { d->selectedFiles->removeSelected( ); } void PlayListWidget::playIt( QListViewItem *it) { if(!it) return; mediaPlayerState->setPlaying(FALSE); mediaPlayerState->setPlaying(TRUE); d->selectedFiles->unSelect(); } void PlayListWidget::addToSelection( QListViewItem *it) { d->setDocumentUsed = FALSE; if(it) { switch ( whichList()) { case 1: { QListIterator<DocLnk> dit( files.children() ); for ( ; dit.current(); ++dit ) { if( dit.current()->name() == it->text(0)) { if(QFileInfo( dit.current()->file()).exists()) d->selectedFiles->addToSelection( **dit ); } } } break; case 2: { QListIterator<DocLnk> dit( vFiles.children() ); for ( ; dit.current(); ++dit ) { if( dit.current()->name() == it->text(0)) { - if(QFileInfo( dit.current()->file()).exists()) + if( QFileInfo( dit.current()->file()).exists() ) d->selectedFiles->addToSelection( **dit ); } } } break; case 0: break; }; tabWidget->setCurrentPage(0); } } void PlayListWidget::tabChanged(QWidget *) { switch ( whichList()) { case 0: { if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); } d->tbRemoveFromList->setEnabled(TRUE); d->tbAddToList->setEnabled(FALSE); } break; case 1: { audioView->clear(); populateAudioView(); if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); } d->tbRemoveFromList->setEnabled(FALSE); d->tbAddToList->setEnabled(TRUE); } break; case 2: { videoView->clear(); populateVideoView(); if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); } d->tbRemoveFromList->setEnabled(FALSE); d->tbAddToList->setEnabled(TRUE); } break; case 3: { if( tbDeletePlaylist->isHidden() ) { 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 break; }; } 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; } void PlayListWidget::populateAudioView() { audioView->clear(); StorageInfo storageInfo; const QList<FileSystem> &fs = storageInfo.fileSystems(); if(!audioScan) { scanForAudio(); } QListIterator<DocLnk> dit( files.children() ); QListIterator<FileSystem> it ( fs ); QString storage; for ( ; dit.current(); ++dit ) { for( ; it.current(); ++it ){ const QString name = (*it)->name(); const QString path = (*it)->path(); if(dit.current()->file().find(path) != -1 ) { storage = name; @@ -768,333 +814,315 @@ void PlayListWidget::populateVideoView() { QString storage, pathName; for ( ; Vdit.current(); ++Vdit ) { for( ; it.current(); ++it ) { const QString name = (*it)->name(); const QString path = (*it)->path(); if( Vdit.current()->file().find(path) != -1 ) { storage=name; pathName=path; } } QListViewItem * newItem; if ( QFile( Vdit.current()->file() ).exists() ) { newItem= /*(void)*/ new QListViewItem( videoView, Vdit.current()->name(), QString::number( QFile( Vdit.current()->file() ).size() ), storage, Vdit.current()->file()); newItem->setPixmap(0, Resource::loadPixmap( "opieplayer2/videofile" ) ); } } } 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(); - - 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() ); + + if(filename.find(":",8,TRUE) != -1) { //found a port + m3uFile = filename.left( filename.find( ":",8,TRUE)); + + m3uFile = m3uFile.right( 7); } else if(filename.left(4) == "http"){ - m3uFile=m3uFile.right(m3uFile.length()-7); - qDebug(m3uFile); - - m3uFilePath= QDir::homeDirPath()+"/"+m3uFile+".m3u"; + m3uFile=filename; + m3uFile = m3uFile.right( m3uFile.length() - 7); - QFile f(m3uFilePath ); - f.open( IO_WriteOnly ); - f.writeBlock( filename, filename.length() ); - f.close(); + } else{ + m3uFile=filename; + } - 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() ); +// qDebug( m3uFile); - } else{ +//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( filename ); - f.open( IO_WriteOnly ); - f.writeBlock( filename, filename.length() ); - f.close(); + m3uList->add( filename); + m3uList->write(); + if(m3uList) delete m3uList; - 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" ); +// qDebug( m3uFile); + lnk.setName( filename ); //sets file name + lnk.setFile( m3uFilePath ); //sets File property + lnk.setType( MimeType( QFile::encodeName(m3uFilePath) ).id() ); + + 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 break; case Key_F12: //home // doBlank(); break; case Key_F13: //mail // doUnblank(); break; case Key_Q: //add to playlist addSelected(); break; case Key_R: //remove from playlist removeSelected(); break; // case Key_P: //play // qDebug("Play"); // playSelected(); // break; case Key_Space: // playSelected(); puh break; case Key_1: tabWidget->setCurrentPage( 0 ); break; 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" ); cfg.writeEntry( "FullScreen", b ); } break; }; } void PlayListWidget::populateSkinsMenu() { int item = 0; defaultSkinIndex = 0; QString skinName; Config cfg( "OpiePlayer" ); cfg.setGroup("Options" ); QString skin = cfg.readEntry( "Skin", "default" ); QDir skinsDir( QPEApplication::qpeDir() + "/pics/opieplayer2/skins" ); skinsDir.setFilter( QDir::Dirs ); skinsDir.setSorting(QDir::Name ); const QFileInfoList *skinslist = skinsDir.entryInfoList(); QFileInfoListIterator it( *skinslist ); QFileInfo *fi; while ( ( fi = it.current() ) ) { skinName = fi->fileName(); // qDebug( fi->fileName() ); 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 @@ -32,65 +32,65 @@ */ #ifndef PLAY_LIST_WIDGET_H #define PLAY_LIST_WIDGET_H #include <qmainwindow.h> #include <qpe/applnk.h> #include <qtabwidget.h> #include <qpe/fileselector.h> #include <qpushbutton.h> #include <qpopupmenu.h> #include "playlistwidgetgui.h" //class PlayListWidgetPrivate; class Config; class QListViewItem; class QListView; 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; QString currentFileListPathName(); protected: void keyReleaseEvent( QKeyEvent *e); private: int defaultSkinIndex; bool audioScan, videoScan; void readm3u(const QString &); void readPls(const QString &); void initializeStates(); void readConfig( Config& cfg ); void populateAudioView(); void populateVideoView(); private slots: void populateSkinsMenu(); void skinsMenuActivated(int); void pmViewActivated(int); void writem3u(); void scanForAudio(); |