summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/playlistwidget.cpp
authorllornkcor <llornkcor>2005-08-28 19:53:11 (UTC)
committer llornkcor <llornkcor>2005-08-28 19:53:11 (UTC)
commitf680479965bf13285a955873c48db47bd0c935d3 (patch) (unidiff)
tree58945d235215685b316c00b62d951bd0b6d4df95 /core/multimedia/opieplayer/playlistwidget.cpp
parent43217700cc9b23519776a27661fbf0c29a7d100d (diff)
downloadopie-f680479965bf13285a955873c48db47bd0c935d3.zip
opie-f680479965bf13285a955873c48db47bd0c935d3.tar.gz
opie-f680479965bf13285a955873c48db47bd0c935d3.tar.bz2
podcast! support.. 1st installment. needs improvements
Diffstat (limited to 'core/multimedia/opieplayer/playlistwidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/playlistwidget.cpp344
1 files changed, 237 insertions, 107 deletions
diff --git a/core/multimedia/opieplayer/playlistwidget.cpp b/core/multimedia/opieplayer/playlistwidget.cpp
index c0a0029..146dbb6 100644
--- a/core/multimedia/opieplayer/playlistwidget.cpp
+++ b/core/multimedia/opieplayer/playlistwidget.cpp
@@ -1,77 +1,82 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20// code added by L. J. Potter Sat 03-02-2002 06:17:54 20// code added by L. J. Potter Sat 03-02-2002 06:17:54
21#define QTOPIA_INTERNAL_FSLP 21#define QTOPIA_INTERNAL_FSLP
22 22
23#include "playlistselection.h" 23#include "playlistselection.h"
24#include "playlistwidget.h" 24#include "playlistwidget.h"
25#include "mediaplayerstate.h" 25#include "mediaplayerstate.h"
26#include "inputDialog.h" 26#include "inputDialog.h"
27#include "audiowidget.h" 27#include "audiowidget.h"
28#include "videowidget.h" 28#include "videowidget.h"
29#include "rssparser.h"
29 30
31#include <qpe/process.h>
32
33#include <qvector.h>
34#include <qxml.h>
30/* OPIE */ 35/* OPIE */
31#include <qpe/qpeapplication.h> 36#include <qpe/qpeapplication.h>
32#include <qpe/qpemenubar.h> 37#include <qpe/qpemenubar.h>
33#include <qpe/lnkproperties.h> 38#include <qpe/lnkproperties.h>
34#include <opie2/odebug.h> 39#include <opie2/odebug.h>
35#include <opie2/oresource.h> 40#include <opie2/oresource.h>
36 41
37/* QT */ 42/* QT */
38#include <qtoolbar.h> 43#include <qtoolbar.h>
39#include <qaction.h> 44#include <qaction.h>
40#include <qlayout.h> 45#include <qlayout.h>
41#include <qmessagebox.h> 46#include <qmessagebox.h>
42//#include <qtimer.h> 47//#include <qtimer.h>
43 48
44/* STD */ 49/* STD */
45#include <stdlib.h> 50#include <stdlib.h>
46 51
47#include <unistd.h> 52#include <unistd.h>
48#include <sys/file.h> 53#include <sys/file.h>
49#include <sys/ioctl.h> 54#include <sys/ioctl.h>
50#include <sys/soundcard.h> 55#include <sys/soundcard.h>
51 56
52// for setBacklight() 57// for setBacklight()
53#include <linux/fb.h> 58#include <linux/fb.h>
54#include <sys/types.h> 59#include <sys/types.h>
55#include <sys/stat.h> 60#include <sys/stat.h>
56#include <stdlib.h> 61#include <stdlib.h>
57 62
58#define BUTTONS_ON_TOOLBAR 63#define BUTTONS_ON_TOOLBAR
59#define SIDE_BUTTONS 64#define SIDE_BUTTONS
60#define CAN_SAVE_LOAD_PLAYLISTS 65#define CAN_SAVE_LOAD_PLAYLISTS
61 66
62extern AudioWidget *audioUI; 67extern AudioWidget *audioUI;
63extern VideoWidget *videoUI; 68extern VideoWidget *videoUI;
64extern MediaPlayerState *mediaPlayerState; 69extern MediaPlayerState *mediaPlayerState;
65 70
66static inline QString fullBaseName ( const QFileInfo &fi ) 71static inline QString fullBaseName ( const QFileInfo &fi )
67{ 72{
68 QString str = fi. fileName ( ); 73 QString str = fi. fileName ( );
69 return str. left ( str. findRev ( '.' )); 74 return str. left ( str. findRev ( '.' ));
70} 75}
71 76
72 77
73QString audioMimes ="audio/mpeg;audio/x-wav;audio/x-ogg;audio/x-mod"; 78QString audioMimes ="audio/mpeg;audio/x-wav;audio/x-ogg;audio/x-mod";
74// class myFileSelector { 79// class myFileSelector {
75 80
76// }; 81// };
77class PlayListWidgetPrivate { 82class PlayListWidgetPrivate {
@@ -445,97 +450,97 @@ void PlayListWidget::clearList() {
445} 450}
446 451
447 452
448void PlayListWidget::addAllToList() { 453void PlayListWidget::addAllToList() {
449 DocLnkSet filesAll; 454 DocLnkSet filesAll;
450 Global::findDocuments(&filesAll, "video/*;audio/*"); 455 Global::findDocuments(&filesAll, "video/*;audio/*");
451 QListIterator<DocLnk> Adit( filesAll.children() ); 456 QListIterator<DocLnk> Adit( filesAll.children() );
452 for ( ; Adit.current(); ++Adit ) 457 for ( ; Adit.current(); ++Adit )
453 if(QFileInfo(Adit.current()->file()).exists()) 458 if(QFileInfo(Adit.current()->file()).exists())
454 d->selectedFiles->addToSelection( **Adit ); 459 d->selectedFiles->addToSelection( **Adit );
455 tabWidget->setCurrentPage(0); 460 tabWidget->setCurrentPage(0);
456 461
457 writeCurrentM3u(); 462 writeCurrentM3u();
458 d->selectedFiles->first(); 463 d->selectedFiles->first();
459} 464}
460 465
461 466
462void PlayListWidget::addAllMusicToList() { 467void PlayListWidget::addAllMusicToList() {
463 QListIterator<DocLnk> dit( files.children() ); 468 QListIterator<DocLnk> dit( files.children() );
464 for ( ; dit.current(); ++dit ) 469 for ( ; dit.current(); ++dit )
465 if(QFileInfo(dit.current()->file()).exists()) 470 if(QFileInfo(dit.current()->file()).exists())
466 d->selectedFiles->addToSelection( **dit ); 471 d->selectedFiles->addToSelection( **dit );
467 tabWidget->setCurrentPage(0); 472 tabWidget->setCurrentPage(0);
468 473
469 writeCurrentM3u(); 474 writeCurrentM3u();
470 d->selectedFiles->first(); 475 d->selectedFiles->first();
471} 476}
472 477
473 478
474void PlayListWidget::addAllVideoToList() { 479void PlayListWidget::addAllVideoToList() {
475 QListIterator<DocLnk> dit( vFiles.children() ); 480 QListIterator<DocLnk> dit( vFiles.children() );
476 for ( ; dit.current(); ++dit ) 481 for ( ; dit.current(); ++dit )
477 if(QFileInfo( dit.current()->file()).exists()) 482 if(QFileInfo( dit.current()->file()).exists())
478 d->selectedFiles->addToSelection( **dit ); 483 d->selectedFiles->addToSelection( **dit );
479 tabWidget->setCurrentPage(0); 484 tabWidget->setCurrentPage(0);
480 485
481 writeCurrentM3u(); 486 writeCurrentM3u();
482 d->selectedFiles->first(); 487 d->selectedFiles->first();
483} 488}
484 489
485 490
486void PlayListWidget::setDocument(const QString& fileref) { 491void PlayListWidget::setDocument(const QString& fileref) {
487 fromSetDocument = true; 492 fromSetDocument = true;
488 d->setDocumentUsed = TRUE; 493 d->setDocumentUsed = TRUE;
489 setDocumentEx(fileref); 494 setDocumentEx(fileref);
490} 495}
491 496
492void PlayListWidget::setDocumentEx(const QString& fileref) { 497void PlayListWidget::setDocumentEx(const QString& fileref) {
493 odebug << "opieplayer receive "+fileref << oendl; 498 owarn << "opieplayer receive "+fileref << oendl;
494 clearList(); 499 clearList();
495 DocLnk lnk; 500 DocLnk lnk;
496 QFileInfo fileInfo(fileref); 501 QFileInfo fileInfo(fileref);
497 if ( !fileInfo.exists() ) { 502 if ( !fileInfo.exists() ) {
498 QMessageBox::critical( 0, tr( "Invalid File" ), 503 QMessageBox::critical( 0, tr( "Invalid File" ),
499 tr( "There was a problem in getting the file." ) ); 504 tr( "There was a problem in getting the file." ) );
500 return; 505 return;
501 } 506 }
502 // odebug << "<<<<<<<<<<<<<<<<<<<<<<setDocument "+fileref << oendl; 507 // odebug << "<<<<<<<<<<<<<<<<<<<<<<setDocument "+fileref << oendl;
503 QString extension = fileInfo.extension(false); 508 QString extension = fileInfo.extension(false);
504 if( extension.find( "m3u", 0, false) != -1) { //is m3u 509 if( extension.find( "m3u", 0, false) != -1) { //is m3u
505 readm3u( fileref); 510 readm3u( fileref);
506 } 511 }
507 else if( extension.find( "pls", 0, false) != -1 ) { //is pls 512 else if( extension.find( "pls", 0, false) != -1 ) { //is pls
508 readPls( fileref); 513 readPls( fileref);
509 } 514 }
510 else if( fileref.find("playlist",0,TRUE) != -1) {//is playlist 515 else if( fileref.find("playlist",0,TRUE) != -1) {//is playlist
511 clearList(); 516 clearList();
512 lnk.setName( fileInfo.baseName() ); //sets name 517 lnk.setName( fileInfo.baseName() ); //sets name
513 lnk.setFile( fileref ); //sets file name 518 lnk.setFile( fileref ); //sets file name
514 lnk.setIcon("Sound"); 519 lnk.setIcon("Sound");
515 //addToSelection( lnk ); 520 //addToSelection( lnk );
516 521
517 loadList( lnk); 522 loadList( lnk);
518 d->selectedFiles->first(); 523 d->selectedFiles->first();
519 } else { 524 } else {
520 if( fileref.find(".desktop",0,TRUE) != -1) { 525 if( fileref.find(".desktop",0,TRUE) != -1) {
521 lnk = DocLnk(fileref); 526 lnk = DocLnk(fileref);
522 } else { 527 } else {
523 lnk.setName( fileInfo.baseName() ); //sets name 528 lnk.setName( fileInfo.baseName() ); //sets name
524 lnk.setFile( fileref ); //sets file name 529 lnk.setFile( fileref ); //sets file name
525 lnk.setIcon("Sound"); 530 lnk.setIcon("Sound");
526 } 531 }
527 532
528 addToSelection( lnk ); 533 addToSelection( lnk );
529 // addToSelection( DocLnk( fileref ) ); 534 // addToSelection( DocLnk( fileref ) );
530 lnk.removeLinkFile(); 535 lnk.removeLinkFile();
531 // qApp->processEvents(); 536 // qApp->processEvents();
532 } 537 }
533 setCaption(tr("OpiePlayer")); 538 setCaption(tr("OpiePlayer"));
534 d->setDocumentUsed = TRUE; 539 d->setDocumentUsed = TRUE;
535 d->selectedFiles->setSelected(d->selectedFiles->firstChild(),true ); 540 d->selectedFiles->setSelected(d->selectedFiles->firstChild(),true );
536 mediaPlayerState->setPlaying( FALSE ); 541 mediaPlayerState->setPlaying( FALSE );
537 qApp->processEvents(); 542 qApp->processEvents();
538 mediaPlayerState->setPlaying( TRUE ); 543 mediaPlayerState->setPlaying( TRUE );
539 544
540} 545}
541 546
@@ -960,281 +965,192 @@ void PlayListWidget::listDelete() {
960void PlayListWidget::scanForAudio() { 965void PlayListWidget::scanForAudio() {
961 // odebug << "scan for audio" << oendl; 966 // odebug << "scan for audio" << oendl;
962 files.detachChildren(); 967 files.detachChildren();
963 QListIterator<DocLnk> sdit( files.children() ); 968 QListIterator<DocLnk> sdit( files.children() );
964 for ( ; sdit.current(); ++sdit ) { 969 for ( ; sdit.current(); ++sdit ) {
965 delete sdit.current(); 970 delete sdit.current();
966 } 971 }
967 Global::findDocuments( &files, audioMimes); 972 Global::findDocuments( &files, audioMimes);
968 audioScan = true; 973 audioScan = true;
969} 974}
970void PlayListWidget::scanForVideo() { 975void PlayListWidget::scanForVideo() {
971 // odebug << "scan for video" << oendl; 976 // odebug << "scan for video" << oendl;
972 vFiles.detachChildren(); 977 vFiles.detachChildren();
973 QListIterator<DocLnk> sdit( vFiles.children() ); 978 QListIterator<DocLnk> sdit( vFiles.children() );
974 for ( ; sdit.current(); ++sdit ) { 979 for ( ; sdit.current(); ++sdit ) {
975 delete sdit.current(); 980 delete sdit.current();
976 } 981 }
977 Global::findDocuments(&vFiles, "video/*"); 982 Global::findDocuments(&vFiles, "video/*");
978 videoScan = true; 983 videoScan = true;
979} 984}
980 985
981void PlayListWidget::populateAudioView() { 986void PlayListWidget::populateAudioView() {
982 987
983 audioView->clear(); 988 audioView->clear();
984 StorageInfo storageInfo; 989 StorageInfo storageInfo;
985 const QList<FileSystem> &fs = storageInfo.fileSystems(); 990 const QList<FileSystem> &fs = storageInfo.fileSystems();
986 if(!audioScan) scanForAudio(); 991 if(!audioScan) scanForAudio();
987 992
988 QListIterator<DocLnk> dit( files.children() ); 993 QListIterator<DocLnk> dit( files.children() );
989 QListIterator<FileSystem> it ( fs ); 994 QListIterator<FileSystem> it ( fs );
990 995
991 QString storage; 996 QString storage;
992 for ( ; dit.current(); ++dit ) { 997 for ( ; dit.current(); ++dit ) {
993 for( ; it.current(); ++it ){ 998 for( ; it.current(); ++it ){
994 const QString name = (*it)->name(); 999 const QString name = (*it)->name();
995 const QString path = (*it)->path(); 1000 const QString path = (*it)->path();
996 if(dit.current()->file().find(path) != -1 ) storage=name; 1001 if(dit.current()->file().find(path) != -1 ) storage=name;
997 } 1002 }
998 1003
999 QListViewItem * newItem; 1004 QListViewItem * newItem;
1000 if ( QFile( dit.current()->file()).exists() || dit.current()->file().left(4) == "http" ) { 1005 if ( QFile( dit.current()->file()).exists() || dit.current()->file().left(4) == "http" ) {
1001 long size; 1006 long size;
1002 if( dit.current()->file().left(4) == "http" ) 1007 if( dit.current()->file().left(4) == "http" )
1003 size=0; 1008 size=0;
1004 else 1009 else
1005 size = QFile( dit.current()->file() ).size(); 1010 size = QFile( dit.current()->file() ).size();
1006 // odebug << dit.current()->name() << oendl; 1011 // odebug << dit.current()->name() << oendl;
1007 newItem= /*(void)*/ new QListViewItem( audioView, dit.current()->name(), 1012 newItem= /*(void)*/ new QListViewItem( audioView, dit.current()->name(),
1008 QString::number(size ), storage, dit.current()->file()); 1013 QString::number(size ), storage, dit.current()->file());
1009 newItem->setPixmap(0, Opie::Core::OResource::loadPixmap( "opieplayer/musicfile", Opie::Core::OResource::SmallIcon )); 1014 newItem->setPixmap(0, Opie::Core::OResource::loadPixmap( "opieplayer/musicfile", Opie::Core::OResource::SmallIcon ));
1010 } 1015 }
1011 } 1016 }
1012 1017
1013} 1018}
1014 1019
1015void PlayListWidget::populateVideoView() { 1020void PlayListWidget::populateVideoView() {
1016 videoView->clear(); 1021 videoView->clear();
1017 StorageInfo storageInfo; 1022 StorageInfo storageInfo;
1018 const QList<FileSystem> &fs = storageInfo.fileSystems(); 1023 const QList<FileSystem> &fs = storageInfo.fileSystems();
1019 1024
1020 if(!videoScan ) scanForVideo(); 1025 if(!videoScan ) scanForVideo();
1021 1026
1022 QListIterator<DocLnk> Vdit( vFiles.children() ); 1027 QListIterator<DocLnk> Vdit( vFiles.children() );
1023 QListIterator<FileSystem> it ( fs ); 1028 QListIterator<FileSystem> it ( fs );
1024 videoView->clear(); 1029 videoView->clear();
1025 QString storage; 1030 QString storage;
1026 for ( ; Vdit.current(); ++Vdit ) { 1031 for ( ; Vdit.current(); ++Vdit ) {
1027 for( ; it.current(); ++it ){ 1032 for( ; it.current(); ++it ){
1028 const QString name = (*it)->name(); 1033 const QString name = (*it)->name();
1029 const QString path = (*it)->path(); 1034 const QString path = (*it)->path();
1030 if( Vdit.current()->file().find(path) != -1 ) storage=name; 1035 if( Vdit.current()->file().find(path) != -1 ) storage=name;
1031 } 1036 }
1032 1037
1033 QListViewItem * newItem; 1038 QListViewItem * newItem;
1034 if ( QFile( Vdit.current()->file()).exists() ) { 1039 if ( QFile( Vdit.current()->file()).exists() ) {
1035 newItem= /*(void)*/ new QListViewItem( videoView, Vdit.current()->name(), 1040 newItem= /*(void)*/ new QListViewItem( videoView, Vdit.current()->name(),
1036 QString::number( QFile( Vdit.current()->file() ).size() ), 1041 QString::number( QFile( Vdit.current()->file() ).size() ),
1037 storage, Vdit.current()->file()); 1042 storage, Vdit.current()->file());
1038 newItem->setPixmap(0, Opie::Core::OResource::loadPixmap( "opieplayer/videofile", Opie::Core::OResource::SmallIcon )); 1043 newItem->setPixmap(0, Opie::Core::OResource::loadPixmap( "opieplayer/videofile", Opie::Core::OResource::SmallIcon ));
1039 } 1044 }
1040 } 1045 }
1041} 1046}
1042 1047
1043void PlayListWidget::openFile() { 1048void PlayListWidget::openFile() {
1044 QString filename, name; 1049 QString filename, name;
1045 InputDialog *fileDlg; 1050 InputDialog *fileDlg;
1046 fileDlg = new InputDialog(this,tr("Open file or URL"),TRUE, 0); 1051 fileDlg = new InputDialog(this,tr("Open file or URL"),TRUE, 0);
1047 fileDlg->exec(); 1052 fileDlg->exec();
1048 if( fileDlg->result() == 1 ) { 1053 if( fileDlg->result() == 1 ) {
1049 filename = fileDlg->text(); 1054 filename = fileDlg->text();
1050 // odebug << "Selected filename is " + filename << oendl; 1055 // odebug << "Selected filename is " + filename << oendl;
1051 DocLnk lnk; 1056 DocLnk lnk;
1052 Config cfg( "OpiePlayer" ); 1057 Config cfg( "OpiePlayer" );
1053 cfg.setGroup("PlayList"); 1058 cfg.setGroup("PlayList");
1054 1059
1055 QString m3uFile; 1060 QString m3uFile;
1056 m3uFile = filename; 1061 m3uFile = filename;
1057 if(filename.left(4) == "http") { 1062 if(filename.left(4) == "http") {
1058 if(filename.find(":",8,TRUE) != -1) { //found a port 1063 if(filename.find(":",8,TRUE) != -1) { //found a port
1059 1064
1060 m3uFile = filename; 1065 m3uFile = filename;
1061 if( m3uFile.right( 1 ).find( '/' ) == -1) { 1066 if( m3uFile.right( 1 ).find( '/' ) == -1) {
1062 m3uFile += "/"; 1067 m3uFile += "/";
1063 } 1068 }
1064 filename = m3uFile; 1069 filename = m3uFile;
1065 } 1070 }
1066 lnk.setName( m3uFile ); //sets name 1071 if( filename.right(3) == "xml" ||
1067 lnk.setFile( filename ); //sets file name 1072 filename.find("rss" ) !=-1)
1068 lnk.setIcon("opieplayer2/musicfile"); 1073 {
1069 d->selectedFiles->addToSelection( lnk ); 1074 // readpodcast(filename );
1070 writeCurrentM3u(); 1075 downloadPodcast(filename);
1076 } else {
1077 lnk.setName( m3uFile ); //sets name
1078 lnk.setFile( filename ); //sets file name
1079 lnk.setIcon("opieplayer2/musicfile");
1080 d->selectedFiles->addToSelection( lnk );
1081 writeCurrentM3u();
1082 }
1071 } 1083 }
1072 else if( filename.right( 3) == "m3u" ) { 1084 else if( filename.right( 3) == "m3u" ) {
1073 readm3u( filename ); 1085 readm3u( filename );
1074 1086
1075 } else if( filename.right(3) == "pls" ) { 1087 } else if( filename.right(3) == "pls" ) {
1076 readPls( filename ); 1088 readPls( filename );
1089 } else if( filename.right(3) == "xml" ||
1090 filename.find("rss" ) !=-1
1091 ) {
1092 readpodcast( filename );
1077 } else { 1093 } else {
1078 lnk.setName( fullBaseName ( QFileInfo(filename)) ); //sets name 1094 lnk.setName( fullBaseName ( QFileInfo(filename)) ); //sets name
1079 lnk.setFile( filename ); //sets file name 1095 lnk.setFile( filename ); //sets file name
1080 d->selectedFiles->addToSelection( lnk); 1096 d->selectedFiles->addToSelection( lnk);
1081 lnk.removeLinkFile(); 1097 lnk.removeLinkFile();
1082 writeCurrentM3u(); 1098 writeCurrentM3u();
1083 } 1099 }
1084 } 1100 }
1085 1101
1086 if( fileDlg ) { 1102 if( fileDlg ) {
1087 delete fileDlg; 1103 delete fileDlg;
1088 } 1104 }
1089} 1105}
1090 1106
1091 1107
1092/* 1108/*
1093reads m3u and shows files/urls to playlist widget */
1094void PlayListWidget::readm3u( const QString &filename ) {
1095 // odebug << "read m3u filename " + filename << oendl;
1096
1097 Om3u *m3uList;
1098 QString s, name;
1099 m3uList = new Om3u( filename, IO_ReadOnly );
1100 m3uList->readM3u();
1101 DocLnk lnk;
1102 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) {
1103 s = *it;
1104 // odebug << "reading "+ s << oendl;
1105 if(s.left(4)=="http") {
1106 lnk.setName( s ); //sets file name
1107 lnk.setIcon("opieplayer2/musicfile");
1108
1109 // if(s.right(4) != '.' || s.right(5) != '.')
1110 if(s.right(4) != '.' || s.right(5) != '.' )
1111 if( s.right(1) != "/")
1112 lnk.setFile( s+"/"); //if url with no extension
1113 else
1114 lnk.setFile( s ); //sets file name
1115
1116 } else {
1117 // if( QFileInfo( s ).exists() ) {
1118 lnk.setName( fullBaseName ( QFileInfo(s)));
1119 // if(s.right(4) == '.') {//if regular file
1120 if(s.left(1) != "/") {
1121 // odebug << "set link "+QFileInfo(filename).dirPath()+"/"+s << oendl;
1122 lnk.setFile( QFileInfo(filename).dirPath()+"/"+s);
1123 lnk.setIcon("SoundPlayer");
1124 } else {
1125 // odebug << "set link2 "+s << oendl;
1126 lnk.setFile( s);
1127 lnk.setIcon("SoundPlayer");
1128 }
1129 }
1130 d->selectedFiles->addToSelection( lnk );
1131 }
1132 Config config( "OpiePlayer" );
1133 config.setGroup( "PlayList" );
1134
1135 config.writeEntry("CurrentPlaylist",filename);
1136 config.write();
1137 currentPlayList=filename;
1138
1139// m3uList->write();
1140 m3uList->close();
1141 if(m3uList) delete m3uList;
1142
1143 d->selectedFiles->setSelectedItem( s);
1144 setCaption(tr("OpiePlayer: ")+ fullBaseName ( QFileInfo(filename)));
1145
1146}
1147
1148/*
1149reads pls and adds files/urls to playlist */
1150void PlayListWidget::readPls( const QString &filename ) {
1151
1152 // odebug << "pls filename is " + filename << oendl;
1153 Om3u *m3uList;
1154 QString s, name;
1155 m3uList = new Om3u( filename, IO_ReadOnly );
1156 m3uList->readPls();
1157
1158 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) {
1159 s = *it;
1160 // s.replace( QRegExp( "%20" )," " );
1161 DocLnk lnk( s );
1162 QFileInfo f( s );
1163 QString name = fullBaseName ( f);
1164
1165 if( name.left( 4 ) == "http" ) {
1166 name = s.right( s.length() - 7);
1167 } else {
1168 name = s;
1169 }
1170
1171 name = name.right( name.length() - name.findRev( "\\", -1, TRUE) - 1 );
1172
1173 lnk.setName( name );
1174 if( s.at( s.length() - 4) == '.') {// if this is probably a file
1175 lnk.setFile( s );
1176 } else { //if its a url
1177 if( name.right( 1 ).find( '/' ) == -1) {
1178 s += "/";
1179 }
1180 lnk.setFile( s );
1181 }
1182 lnk.setType( "audio/x-mpegurl" );
1183
1184 lnk.writeLink();
1185 d->selectedFiles->addToSelection( lnk );
1186 }
1187
1188 m3uList->close();
1189 if(m3uList) delete m3uList;
1190}
1191
1192/*
1193 writes current playlist to current m3u file */ 1109 writes current playlist to current m3u file */
1194void PlayListWidget::writeCurrentM3u() { 1110void PlayListWidget::writeCurrentM3u() {
1195 // odebug << "writing to current m3u" << oendl; 1111 // odebug << "writing to current m3u" << oendl;
1196 Config cfg( "OpiePlayer" ); 1112 Config cfg( "OpiePlayer" );
1197 cfg.setGroup("PlayList"); 1113 cfg.setGroup("PlayList");
1198 currentPlayList = cfg.readEntry("CurrentPlaylist",""); 1114 currentPlayList = cfg.readEntry("CurrentPlaylist","");
1199 Om3u *m3uList; 1115 Om3u *m3uList;
1200 m3uList = new Om3u( currentPlayList, IO_ReadWrite | IO_Truncate ); 1116 m3uList = new Om3u( currentPlayList, IO_ReadWrite | IO_Truncate );
1201 1117
1202 if( d->selectedFiles->first()) { 1118 if( d->selectedFiles->first()) {
1203 do { 1119 do {
1204 // odebug << "writeCurrentM3u " +d->selectedFiles->current()->file() << oendl; 1120 // odebug << "writeCurrentM3u " +d->selectedFiles->current()->file() << oendl;
1205 m3uList->add( d->selectedFiles->current()->file() ); 1121 m3uList->add( d->selectedFiles->current()->file() );
1206 } 1122 }
1207 while ( d->selectedFiles->next() ); 1123 while ( d->selectedFiles->next() );
1208 // odebug << "<<<<<<<<<<<<>>>>>>>>>>>>>>>>>" << oendl; 1124 // odebug << "<<<<<<<<<<<<>>>>>>>>>>>>>>>>>" << oendl;
1209 m3uList->write(); 1125 m3uList->write();
1210 m3uList->close(); 1126 m3uList->close();
1211 1127
1212 if(m3uList) delete m3uList; 1128 if(m3uList) delete m3uList;
1213 } 1129 }
1214} 1130}
1215 1131
1216 /* 1132 /*
1217 writes current playlist to m3u file */ 1133 writes current playlist to m3u file */
1218void PlayListWidget::writem3u() { 1134void PlayListWidget::writem3u() {
1219 InputDialog *fileDlg; 1135 InputDialog *fileDlg;
1220 fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0); 1136 fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0);
1221 fileDlg->exec(); 1137 fileDlg->exec();
1222 QString name, filename, list; 1138 QString name, filename, list;
1223 Om3u *m3uList; 1139 Om3u *m3uList;
1224 1140
1225 if( fileDlg->result() == 1 ) { 1141 if( fileDlg->result() == 1 ) {
1226 name = fileDlg->text(); 1142 name = fileDlg->text();
1227 // odebug << filename << oendl; 1143 // odebug << filename << oendl;
1228 if( name.find("/",0,true) != -1) {// assume they specify a file path 1144 if( name.find("/",0,true) != -1) {// assume they specify a file path
1229 filename = name; 1145 filename = name;
1230 name = name.right(name.length()- name.findRev("/",-1,true) - 1 ); 1146 name = name.right(name.length()- name.findRev("/",-1,true) - 1 );
1231 } 1147 }
1232 else //otherwise dump it somewhere noticable 1148 else //otherwise dump it somewhere noticable
1233 filename = QPEApplication::documentDir() + "/" + name; 1149 filename = QPEApplication::documentDir() + "/" + name;
1234 1150
1235 if( filename.right( 3 ) != "m3u" ) //needs filename extension 1151 if( filename.right( 3 ) != "m3u" ) //needs filename extension
1236 filename += ".m3u"; 1152 filename += ".m3u";
1237 1153
1238 if( d->selectedFiles->first()) { 1154 if( d->selectedFiles->first()) {
1239 m3uList = new Om3u(filename, IO_ReadWrite | IO_Truncate); 1155 m3uList = new Om3u(filename, IO_ReadWrite | IO_Truncate);
1240 1156
@@ -1417,48 +1333,262 @@ void PlayListWidget::skinsMenuActivated( int item ) {
1417 1333
1418 Config cfg( "OpiePlayer" ); 1334 Config cfg( "OpiePlayer" );
1419 cfg.setGroup("Options"); 1335 cfg.setGroup("Options");
1420 cfg.writeEntry("Skin", skinsMenu->text( item ) ); 1336 cfg.writeEntry("Skin", skinsMenu->text( item ) );
1421} 1337}
1422 1338
1423void PlayListWidget::qcopReceive(const QCString &msg, const QByteArray &data) { 1339void PlayListWidget::qcopReceive(const QCString &msg, const QByteArray &data) {
1424 // odebug << "qcop message "+msg << oendl; 1340 // odebug << "qcop message "+msg << oendl;
1425 QDataStream stream ( data, IO_ReadOnly ); 1341 QDataStream stream ( data, IO_ReadOnly );
1426 if ( msg == "play()" ) { //plays current selection 1342 if ( msg == "play()" ) { //plays current selection
1427 btnPlay( true); 1343 btnPlay( true);
1428 } else if ( msg == "stop()" ) { 1344 } else if ( msg == "stop()" ) {
1429 mediaPlayerState->setPlaying( false); 1345 mediaPlayerState->setPlaying( false);
1430 } else if ( msg == "togglePause()" ) { 1346 } else if ( msg == "togglePause()" ) {
1431 mediaPlayerState->togglePaused(); 1347 mediaPlayerState->togglePaused();
1432 } else if ( msg == "next()" ) { //select next in lis 1348 } else if ( msg == "next()" ) { //select next in lis
1433 mediaPlayerState->setNext(); 1349 mediaPlayerState->setNext();
1434 } else if ( msg == "prev()" ) { //select previous in list 1350 } else if ( msg == "prev()" ) { //select previous in list
1435 mediaPlayerState->setPrev(); 1351 mediaPlayerState->setPrev();
1436 } else if ( msg == "toggleLooping()" ) { //loop or not loop 1352 } else if ( msg == "toggleLooping()" ) { //loop or not loop
1437 mediaPlayerState->toggleLooping(); 1353 mediaPlayerState->toggleLooping();
1438 } else if ( msg == "toggleShuffled()" ) { //shuffled or not shuffled 1354 } else if ( msg == "toggleShuffled()" ) { //shuffled or not shuffled
1439 mediaPlayerState->toggleShuffled(); 1355 mediaPlayerState->toggleShuffled();
1440 } else if ( msg == "volUp()" ) { //volume more 1356 } else if ( msg == "volUp()" ) { //volume more
1441 // emit moreClicked(); 1357 // emit moreClicked();
1442 // emit moreReleased(); 1358 // emit moreReleased();
1443 } else if ( msg == "volDown()" ) { //volume less 1359 } else if ( msg == "volDown()" ) { //volume less
1444 // emit lessClicked(); 1360 // emit lessClicked();
1445 // emit lessReleased(); 1361 // emit lessReleased();
1446 } else if ( msg == "play(QString)" ) { //play this now 1362 } else if ( msg == "play(QString)" ) { //play this now
1447 QString file; 1363 QString file;
1448 stream >> file; 1364 stream >> file;
1449 setDocumentEx( (const QString &) file); 1365 setDocumentEx( (const QString &) file);
1450 } else if ( msg == "add(QString)" ) { //add to playlist 1366 } else if ( msg == "add(QString)" ) { //add to playlist
1451 QString file; 1367 QString file;
1452 stream >> file; 1368 stream >> file;
1453 QFileInfo fileInfo(file); 1369 QFileInfo fileInfo(file);
1454 DocLnk lnk; 1370 DocLnk lnk;
1455 lnk.setName( fileInfo.baseName() ); //sets name 1371 lnk.setName( fileInfo.baseName() ); //sets name
1456 lnk.setFile( file ); //sets file name 1372 lnk.setFile( file ); //sets file name
1457 addToSelection( lnk ); 1373 addToSelection( lnk );
1458 } else if ( msg == "rem(QString)" ) { //remove from playlist 1374 } else if ( msg == "rem(QString)" ) { //remove from playlist
1459 QString file; 1375 QString file;
1460 stream >> file; 1376 stream >> file;
1461 } else if ( msg == "setDocument(QString)" ) { //loop or not loop 1377 } else if ( msg == "setDocument(QString)" ) { //loop or not loop
1462 QCopEnvelope h("QPE/Application/opieplayer", "raise()"); 1378 QCopEnvelope h("QPE/Application/opieplayer", "raise()");
1463 } 1379 }
1464} 1380}
1381
1382/*
1383reads m3u and shows files/urls to playlist widget */
1384void PlayListWidget::readm3u( const QString &filename ) {
1385 // odebug << "read m3u filename " + filename << oendl;
1386
1387 Om3u *m3uList;
1388 QString s, name;
1389 m3uList = new Om3u( filename, IO_ReadOnly );
1390 m3uList->readM3u();
1391 DocLnk lnk;
1392 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) {
1393 s = *it;
1394 // odebug << "reading "+ s << oendl;
1395 if(s.left(4)=="http") {
1396 lnk.setName( s ); //sets file name
1397 lnk.setIcon("opieplayer2/musicfile");
1398
1399 // if(s.right(4) != '.' || s.right(5) != '.')
1400 if(s.right(4) != '.' || s.right(5) != '.' )
1401 if( s.right(1) != "/")
1402 lnk.setFile( s+"/"); //if url with no extension
1403 else
1404 lnk.setFile( s ); //sets file name
1405
1406 } else {
1407 // if( QFileInfo( s ).exists() ) {
1408 lnk.setName( fullBaseName ( QFileInfo(s)));
1409 // if(s.right(4) == '.') {//if regular file
1410 if(s.left(1) != "/") {
1411 // odebug << "set link "+QFileInfo(filename).dirPath()+"/"+s << oendl;
1412 lnk.setFile( QFileInfo(filename).dirPath()+"/"+s);
1413 lnk.setIcon("SoundPlayer");
1414 } else {
1415 // odebug << "set link2 "+s << oendl;
1416 lnk.setFile( s);
1417 lnk.setIcon("SoundPlayer");
1418 }
1419 }
1420 d->selectedFiles->addToSelection( lnk );
1421 }
1422 Config config( "OpiePlayer" );
1423 config.setGroup( "PlayList" );
1424
1425 config.writeEntry("CurrentPlaylist",filename);
1426 config.write();
1427 currentPlayList=filename;
1428
1429// m3uList->write();
1430 m3uList->close();
1431 if(m3uList) delete m3uList;
1432
1433 d->selectedFiles->setSelectedItem( s);
1434 setCaption(tr("OpiePlayer: ")+ fullBaseName ( QFileInfo(filename)));
1435
1436}
1437
1438/*
1439reads pls and adds files/urls to playlist */
1440void PlayListWidget::readPls( const QString &filename )
1441{
1442 // odebug << "pls filename is " + filename << oendl;
1443 Om3u *m3uList;
1444 QString s, name;
1445 m3uList = new Om3u( filename, IO_ReadOnly );
1446 m3uList->readPls();
1447
1448 for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) {
1449 s = *it;
1450 // s.replace( QRegExp( "%20" )," " );
1451 DocLnk lnk( s );
1452 QFileInfo f( s );
1453 QString name = fullBaseName ( f);
1454
1455 if( name.left( 4 ) == "http" ) {
1456 name = s.right( s.length() - 7);
1457 } else {
1458 name = s;
1459 }
1460
1461 name = name.right( name.length() - name.findRev( "\\", -1, TRUE) - 1 );
1462
1463 lnk.setName( name );
1464 if( s.at( s.length() - 4) == '.') {// if this is probably a file
1465 lnk.setFile( s );
1466 } else { //if its a url
1467 if( name.right( 1 ).find( '/' ) == -1) {
1468 s += "/";
1469 }
1470 lnk.setFile( s );
1471 }
1472 lnk.setType( "audio/x-mpegurl" );
1473
1474 lnk.writeLink();
1475 d->selectedFiles->addToSelection( lnk );
1476 }
1477
1478 m3uList->close();
1479 if(m3uList) delete m3uList;
1480}
1481
1482bool PlayListWidget::readpodcast( const QString &filename )
1483{
1484 QStringList latestPodCast;
1485 //download url
1486 qWarning("podcast "+filename);
1487 QFileInfo info(filename);
1488 if (info.size() > 0) {
1489 bool result = false;
1490 // qWarning("parseDoc " + feedFile.name() );
1491 QFile file(filename);
1492 QXmlInputSource source( file);
1493 QXmlSimpleReader reader;
1494 // reader.setFeature("http://xml.org/sax/features/namespaces", true);
1495 // reader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
1496 // reader.setFeature("http://trolltech.com/xml/features/report-whitespace-only-CharData", false);
1497
1498 reader.setContentHandler( &rssHandler);
1499 reader.setErrorHandler( &rssHandler);
1500 result = reader.parse( source);
1501 if (!result) {
1502 QMessageBox::critical(0, "Error", tr("<p>Error unable to parse file.</p>"));
1503// qWarning("Error unable to parse file\n%s", handler.errorMessage.local8Bit().data());
1504 return false;
1505 } else {
1506 int size = rssHandler.getItems().size();
1507 qWarning( rssHandler.getChannelInfo().join("\n"));
1508
1509 for(int i = 0; i < size; i++) {
1510 QList<QStringList> attributesList = rssHandler.getItems().at(i)->attributes;
1511 QStringList *sList;
1512 QStringList attList;
1513 for(sList = attributesList.first(); sList !=0; sList = attributesList.next()) {
1514 for( QStringList::Iterator it = sList->begin(); it != sList->end(); ++it ) {
1515 attList << (*it);
1516 }
1517 if(i == 0) { //this assumes that the latest is the first
1518 latestPodCast << attList[2]; //this is our mp3 url
1519 latestPodCast << rssHandler.getItems().at(i)->title;
1520 latestPodCast << rssHandler.getItems().at(i)->description;
1521 latestPodCast << rssHandler.getItems().at(i)->pubdate;
1522 }
1523 }
1524 }
1525 QString s = latestPodCast[0]; //this is our mp3 url
1526
1527// http://www.davesipaq.com/podcast.xml
1528 DocLnk lnk( s );
1529 QFileInfo f( s );
1530 QString name = fullBaseName ( f);
1531
1532 if( name.left( 4 ) == "http" ) {
1533 name = s.right( s.length() - 7);
1534 } else {
1535 name = s;
1536 }
1537
1538 name = name.right( name.length() - name.findRev( "\\", -1, TRUE) - 1 );
1539
1540 lnk.setName( name );
1541 if( s.at( s.length() - 4) == '.') {// if this is probably a file
1542 lnk.setFile( s );
1543 } else { //if its a url
1544 if( name.right( 1 ).find( '/' ) == -1) {
1545 s += "/";
1546 }
1547 lnk.setFile( s );
1548 }
1549 lnk.setType( "audio/x-mpegurl" );
1550
1551 lnk.writeLink();
1552 d->selectedFiles->addToSelection( lnk );
1553
1554 }
1555 } else {
1556 QMessageBox::critical( 0, "Qtopia Rss", tr("<p>Sorry, could not find the requested document.</p>"));
1557 return false;
1558 }
1559
1560 qWarning( latestPodCast.join("\n"));
1561
1562 return true;
1563}
1564
1565bool PlayListWidget::downloadPodcast(const QString &url)
1566{
1567 qWarning("download "+url);
1568 QString localFile;
1569 localFile = url;
1570 localFile = localFile.mid(7, localFile.length()-7);
1571
1572 localFile = localFile.replace(QRegExp("/"), "_");
1573 localFile = localFile.replace(QRegExp("&"), "_");
1574 localFile = localFile.replace(QRegExp("="), "_");
1575 localFile = localFile.replace(QRegExp("\\?"), "_");
1576 localFile = localFile.replace(QRegExp("@"), "_");
1577 localFile = QDir::homeDirPath()+"/Settings/"+localFile;
1578
1579#warning FIXME
1580 QString cmd;
1581 cmd = "wget ";
1582 cmd +=" -O ";
1583 cmd += localFile + " " + url;
1584 qWarning(cmd);
1585 system(cmd.latin1());
1586// Process ipkg_status(QStringList()<< "wget" <<"-O" << localFile << url );
1587 // QString out;
1588// bool r = ipkg_status.exec("",out);
1589// if(r)
1590// qWarning(out);
1591 readpodcast(localFile);
1592 return true;
1593}
1594