author | zecke <zecke> | 2004-09-24 15:15:51 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-09-24 15:15:51 (UTC) |
commit | 4c53e68c3ac96baaaf39cc049c89d8ccf022ff59 (patch) (unidiff) | |
tree | 8273ae338f0d611c28438a4f8a6a6fc8329e90e8 | |
parent | a214128c01e38ffd50edc4ed5b5c72593796eab2 (diff) | |
download | opie-4c53e68c3ac96baaaf39cc049c89d8ccf022ff59.zip opie-4c53e68c3ac96baaaf39cc049c89d8ccf022ff59.tar.gz opie-4c53e68c3ac96baaaf39cc049c89d8ccf022ff59.tar.bz2 |
Handling of Errors is a bit problematic with the current design.
We can start playing from multiple contexts. This are the PlayList context
and single file context. Now the problem is that
MediapPlayerState::setPlaying emits a signal. If started from the
the PlayList setPlaying(false) would trigger an infite loop together
with the Play ToggleButton, in single file context setPlaying(false)
is the right choiche.
The intermediate solution is to show an Error MessageBox and to raise
the Audio Widget and leave it to the user to close it or go to the next
file.
-rw-r--r-- | noncore/multimedia/opieplayer2/playlistwidget.cpp | 1 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/xinecontrol.cpp | 48 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/xinecontrol.h | 4 |
3 files changed, 30 insertions, 23 deletions
diff --git a/noncore/multimedia/opieplayer2/playlistwidget.cpp b/noncore/multimedia/opieplayer2/playlistwidget.cpp index d73f0cd..37b998f 100644 --- a/noncore/multimedia/opieplayer2/playlistwidget.cpp +++ b/noncore/multimedia/opieplayer2/playlistwidget.cpp | |||
@@ -54,6 +54,7 @@ using namespace Opie::Ui; | |||
54 | PlayListWidget::PlayListWidget(QWidget* parent, const char* name, WFlags fl ) | 54 | PlayListWidget::PlayListWidget(QWidget* parent, const char* name, WFlags fl ) |
55 | : PlayListWidgetGui( parent, "playList" ) , currentFileListView( 0 ) | 55 | : PlayListWidgetGui( parent, "playList" ) , currentFileListView( 0 ) |
56 | { | 56 | { |
57 | Global::statusMessage( tr( "Loading of Skin started" ) ); | ||
57 | mediaPlayerState = new MediaPlayerState(0, "mediaPlayerState" ); | 58 | mediaPlayerState = new MediaPlayerState(0, "mediaPlayerState" ); |
58 | m_mp = new MediaPlayer(*this, *mediaPlayerState, 0, "mediaPlayer"); | 59 | m_mp = new MediaPlayer(*this, *mediaPlayerState, 0, "mediaPlayer"); |
59 | 60 | ||
diff --git a/noncore/multimedia/opieplayer2/xinecontrol.cpp b/noncore/multimedia/opieplayer2/xinecontrol.cpp index e1816c8..c47a773 100644 --- a/noncore/multimedia/opieplayer2/xinecontrol.cpp +++ b/noncore/multimedia/opieplayer2/xinecontrol.cpp | |||
@@ -44,21 +44,13 @@ using namespace Opie::Core; | |||
44 | #include <qtimer.h> | 44 | #include <qtimer.h> |
45 | #include <qmessagebox.h> | 45 | #include <qmessagebox.h> |
46 | 46 | ||
47 | XineControl::XineControl( XineVideoWidget *xineWidget, | ||
48 | MediaPlayerState &_mediaPlayerState, | ||
49 | QObject *parent, const char *name ) | ||
50 | : QObject( parent, name ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) | ||
51 | { | ||
52 | libXine = new XINE::Lib( XINE::Lib::InitializeImmediately, xineWidget ); | ||
53 | |||
54 | init(); | ||
55 | } | ||
56 | |||
57 | XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, | 47 | XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, |
58 | MediaPlayerState &_mediaPlayerState, | 48 | MediaPlayerState &_mediaPlayerState, |
59 | QObject *parent, const char *name ) | 49 | QObject *parent, const char *name ) |
60 | : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) | 50 | : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) |
61 | { | 51 | { |
52 | m_wasError = false; | ||
53 | |||
62 | xine->ensureInitialized(); | 54 | xine->ensureInitialized(); |
63 | 55 | ||
64 | xine->setWidget( xineWidget ); | 56 | xine->setWidget( xineWidget ); |
@@ -96,14 +88,17 @@ void XineControl::play( const QString& fileName ) { | |||
96 | hasVideoChannel = FALSE; | 88 | hasVideoChannel = FALSE; |
97 | hasAudioChannel = FALSE; | 89 | hasAudioChannel = FALSE; |
98 | m_fileName = fileName; | 90 | m_fileName = fileName; |
91 | m_wasError = false; | ||
99 | 92 | ||
100 | odebug << "<<FILENAME: " + fileName + ">>>>" << oendl; | ||
101 | 93 | ||
94 | /* | ||
95 | * If Playing Fails we will fire up an MessgaeBox | ||
96 | * but present the AudioWidget so the User can | ||
97 | * either Quit and change the Playlist or Continue | ||
98 | */ | ||
102 | if ( !libXine->play( fileName, 0, 0 ) ) { | 99 | if ( !libXine->play( fileName, 0, 0 ) ) { |
103 | QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() ); | 100 | QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() ); |
104 | // toggle stop so the the play button is reset | 101 | m_wasError = true; |
105 | mediaPlayerState.setPlaying( false ); | ||
106 | return; | ||
107 | } | 102 | } |
108 | mediaPlayerState.setPlaying( true ); | 103 | mediaPlayerState.setPlaying( true ); |
109 | 104 | ||
@@ -214,6 +209,19 @@ QString XineControl::getMetaInfo() { | |||
214 | 209 | ||
215 | QString returnString; | 210 | QString returnString; |
216 | 211 | ||
212 | /* | ||
213 | * If there was an error let us | ||
214 | * change the Meta Info to contain the Error Message | ||
215 | */ | ||
216 | if ( m_wasError ) { | ||
217 | returnString = tr("Error on file '%1' with reason: ", | ||
218 | "Error when playing a file" ).arg( m_fileName ); | ||
219 | returnString += getErrorCode(); | ||
220 | returnString.replace( QRegExp("<qt>", false), "" ); | ||
221 | returnString.replace( QRegExp("</qt>", false), "" ); | ||
222 | return returnString; | ||
223 | } | ||
224 | |||
217 | if ( !libXine->metaInfo( 0 ).isEmpty() ) { | 225 | if ( !libXine->metaInfo( 0 ).isEmpty() ) { |
218 | returnString += tr( " Title: " + libXine->metaInfo( 0 ) ); | 226 | returnString += tr( " Title: " + libXine->metaInfo( 0 ) ); |
219 | } | 227 | } |
@@ -247,17 +255,17 @@ QString XineControl::getErrorCode() { | |||
247 | odebug << QString("ERRORCODE: %1 ").arg(errorCode) << oendl; | 255 | odebug << QString("ERRORCODE: %1 ").arg(errorCode) << oendl; |
248 | 256 | ||
249 | if ( errorCode == 1 ) { | 257 | if ( errorCode == 1 ) { |
250 | return tr( "No input plugin found for this media type" ); | 258 | return tr( "<qt>No input plugin found for this media type</qt>" ); |
251 | } else if ( errorCode == 2 ) { | 259 | } else if ( errorCode == 2 ) { |
252 | return tr( "No demux plugin found for this media type" ); | 260 | return tr( "<qt>No demux plugin found for this media type</qt>" ); |
253 | } else if ( errorCode == 3 ) { | 261 | } else if ( errorCode == 3 ) { |
254 | return tr( "Demuxing failed for this media type" ); | 262 | return tr( "<qt>Demuxing failed for this media type</qt>" ); |
255 | } else if ( errorCode == 4 ) { | 263 | } else if ( errorCode == 4 ) { |
256 | return tr( "Malformed MRL" ); | 264 | return tr( "<qt>Malformed MRL</qt>" ); |
257 | } else if ( errorCode == 5 ) { | 265 | } else if ( errorCode == 5 ) { |
258 | return tr( "Input failed" ); | 266 | return tr( "<qt>Input failed</qt>" ); |
259 | } else { | 267 | } else { |
260 | return tr( "Some other error" ); | 268 | return tr( "<qt>Some other error</qt>" ); |
261 | } | 269 | } |
262 | } | 270 | } |
263 | 271 | ||
diff --git a/noncore/multimedia/opieplayer2/xinecontrol.h b/noncore/multimedia/opieplayer2/xinecontrol.h index 3f44f2e..848bd05 100644 --- a/noncore/multimedia/opieplayer2/xinecontrol.h +++ b/noncore/multimedia/opieplayer2/xinecontrol.h | |||
@@ -41,9 +41,6 @@ | |||
41 | class XineControl : public QObject { | 41 | class XineControl : public QObject { |
42 | Q_OBJECT | 42 | Q_OBJECT |
43 | public: | 43 | public: |
44 | XineControl( XineVideoWidget *xineWidget, | ||
45 | MediaPlayerState &_mediaPlayerState, | ||
46 | QObject *parent = 0, const char *name =0 ); | ||
47 | // note that this constructor takes over ownership of the passed | 44 | // note that this constructor takes over ownership of the passed |
48 | // XINE::Lib object. | 45 | // XINE::Lib object. |
49 | XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, | 46 | XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, |
@@ -117,6 +114,7 @@ private: | |||
117 | bool hasAudioChannel : 1; | 114 | bool hasAudioChannel : 1; |
118 | MediaPlayerState &mediaPlayerState; | 115 | MediaPlayerState &mediaPlayerState; |
119 | XineVideoWidget *xineVideoWidget; | 116 | XineVideoWidget *xineVideoWidget; |
117 | bool m_wasError : 1; // used for chaeting on the metainfo | ||
120 | 118 | ||
121 | signals: | 119 | signals: |
122 | void positionChanged( long ); | 120 | void positionChanged( long ); |