author | zecke <zecke> | 2004-09-24 15:15:51 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-09-24 15:15:51 (UTC) |
commit | 4c53e68c3ac96baaaf39cc049c89d8ccf022ff59 (patch) (side-by-side diff) | |
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 @@ -51,12 +51,13 @@ using namespace Opie::Ui; /* STD */ #include <assert.h> PlayListWidget::PlayListWidget(QWidget* parent, const char* name, WFlags fl ) : PlayListWidgetGui( parent, "playList" ) , currentFileListView( 0 ) { + Global::statusMessage( tr( "Loading of Skin started" ) ); mediaPlayerState = new MediaPlayerState(0, "mediaPlayerState" ); m_mp = new MediaPlayer(*this, *mediaPlayerState, 0, "mediaPlayer"); d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), 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 @@ -41,27 +41,19 @@ using namespace Opie::Core; /* QT */ #include <qtimer.h> #include <qmessagebox.h> -XineControl::XineControl( XineVideoWidget *xineWidget, - MediaPlayerState &_mediaPlayerState, - QObject *parent, const char *name ) - : QObject( parent, name ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) -{ - libXine = new XINE::Lib( XINE::Lib::InitializeImmediately, xineWidget ); - - init(); -} - XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) { + m_wasError = false; + xine->ensureInitialized(); xine->setWidget( xineWidget ); init(); } @@ -93,20 +85,23 @@ XineControl::~XineControl() { void XineControl::play( const QString& fileName ) { hasVideoChannel = FALSE; hasAudioChannel = FALSE; m_fileName = fileName; + m_wasError = false; - odebug << "<<FILENAME: " + fileName + ">>>>" << oendl; + /* + * If Playing Fails we will fire up an MessgaeBox + * but present the AudioWidget so the User can + * either Quit and change the Playlist or Continue + */ if ( !libXine->play( fileName, 0, 0 ) ) { QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() ); - // toggle stop so the the play button is reset - mediaPlayerState.setPlaying( false ); - return; + m_wasError = true; } mediaPlayerState.setPlaying( true ); MediaPlayerState::DisplayType displayType; if ( !libXine->hasVideo() ) { displayType = MediaPlayerState::Audio; @@ -211,12 +206,25 @@ void XineControl::setFullscreen( bool isSet ) { QString XineControl::getMetaInfo() { QString returnString; + /* + * If there was an error let us + * change the Meta Info to contain the Error Message + */ + if ( m_wasError ) { + returnString = tr("Error on file '%1' with reason: ", + "Error when playing a file" ).arg( m_fileName ); + returnString += getErrorCode(); + returnString.replace( QRegExp("<qt>", false), "" ); + returnString.replace( QRegExp("</qt>", false), "" ); + return returnString; + } + if ( !libXine->metaInfo( 0 ).isEmpty() ) { returnString += tr( " Title: " + libXine->metaInfo( 0 ) ); } if ( !libXine->metaInfo( 1 ).isEmpty() ) { returnString += tr( " Comment: " + libXine->metaInfo( 1 ) ); @@ -244,23 +252,23 @@ QString XineControl::getErrorCode() { int errorCode = libXine->error(); odebug << QString("ERRORCODE: %1 ").arg(errorCode) << oendl; if ( errorCode == 1 ) { - return tr( "No input plugin found for this media type" ); + return tr( "<qt>No input plugin found for this media type</qt>" ); } else if ( errorCode == 2 ) { - return tr( "No demux plugin found for this media type" ); + return tr( "<qt>No demux plugin found for this media type</qt>" ); } else if ( errorCode == 3 ) { - return tr( "Demuxing failed for this media type" ); + return tr( "<qt>Demuxing failed for this media type</qt>" ); } else if ( errorCode == 4 ) { - return tr( "Malformed MRL" ); + return tr( "<qt>Malformed MRL</qt>" ); } else if ( errorCode == 5 ) { - return tr( "Input failed" ); + return tr( "<qt>Input failed</qt>" ); } else { - return tr( "Some other error" ); + return tr( "<qt>Some other error</qt>" ); } } /** * Seek to a position in the track * @param second the second to jump to 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 @@ -38,15 +38,12 @@ #include "mediaplayerstate.h" class XineControl : public QObject { Q_OBJECT public: - XineControl( XineVideoWidget *xineWidget, - MediaPlayerState &_mediaPlayerState, - QObject *parent = 0, const char *name =0 ); // note that this constructor takes over ownership of the passed // XINE::Lib object. XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, MediaPlayerState &_mediaPlayerState, QObject *parent = 0, const char *name =0 ); ~XineControl(); @@ -114,12 +111,13 @@ private: QString m_fileName; bool disabledSuspendScreenSaver : 1; bool hasVideoChannel : 1; bool hasAudioChannel : 1; MediaPlayerState &mediaPlayerState; XineVideoWidget *xineVideoWidget; + bool m_wasError : 1; // used for chaeting on the metainfo signals: void positionChanged( long ); }; |