From kde-commits Wed Aug 22 18:11:59 2007 From: Matthias Kretz Date: Wed, 22 Aug 2007 18:11:59 +0000 To: kde-commits Subject: KDE/kdelibs/phonon/platform_kde Message-Id: <1187806319.939360.28960.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=118780632925693 SVN commit 703514 by mkretz: Yay, playback over sftp:/ works again: the job would emit result and delete itself and the KioMediaStream has to recreate the job when it wants to seek back. :'( M +14 -9 kiomediastream.cpp M +0 -1 kiomediastream.h M +0 -1 kiomediastream_p.h --- trunk/KDE/kdelibs/phonon/platform_kde/kiomediastream.cpp #703513:703514 @@ -78,6 +78,10 @@ void KioMediaStream::needData() { Q_D(KioMediaStream); + if (!d->kiojob) { + // no job => job is finished and endOfData was already sent + return; + } KIO::FileJob *filejob = qobject_cast(d->kiojob); if (filejob) { // while d->seeking the backend won't get any data @@ -109,6 +113,11 @@ void KioMediaStream::seekStream(qint64 position) { Q_D(KioMediaStream); + if (!d->kiojob) { + // no job => job is finished and endOfData was already sent + reset(); + } + Q_ASSERT(d->kiojob); kDebug(600) << position << " = " << qulonglong(position); d->seeking = true; if (d->open) { @@ -122,6 +131,7 @@ void KioMediaStreamPrivate::_k_bytestreamData(KIO::Job *, const QByteArray &data) { Q_Q(KioMediaStream); + Q_ASSERT(kiojob); if (seeking) { // seek doesn't block, so don't send data to the backend until it signals us // that the seek is done @@ -151,6 +161,7 @@ void KioMediaStreamPrivate::_k_bytestreamResult(KJob *job) { Q_Q(KioMediaStream); + Q_ASSERT(kiojob == job); if (job->error()) { QString kioErrorString = job->errorString(); kDebug(600) << "KIO Job error: " << kioErrorString; @@ -172,6 +183,7 @@ q->error(NormalError, kioErrorString); } kiojob = 0; + kDebug(600) << "KIO Job is done (will delete itself) and d->kiojob reset to 0"; endOfDataSent = true; q->endOfData(); reading = false; @@ -184,18 +196,10 @@ q->setStreamSize(size); } -void KioMediaStreamPrivate::_k_cleanupByteStream() -{ - if (kiojob) { - kiojob->kill(); - kiojob = 0; - reading = false; - } -} - void KioMediaStreamPrivate::_k_bytestreamFileJobOpen(KIO::Job *) { Q_Q(KioMediaStream); + Q_ASSERT(kiojob); open = true; endOfDataSent = false; KIO::FileJob *filejob = static_cast(kiojob); @@ -211,6 +215,7 @@ void KioMediaStreamPrivate::_k_bytestreamSeekDone(KIO::Job *, KIO::filesize_t offset) { + Q_ASSERT(kiojob); kDebug(600) << offset; seeking = false; endOfDataSent = false; --- trunk/KDE/kdelibs/phonon/platform_kde/kiomediastream.h #703513:703514 @@ -47,7 +47,6 @@ Q_PRIVATE_SLOT(d_func(), void _k_bytestreamData(KIO::Job *, const QByteArray &)) Q_PRIVATE_SLOT(d_func(), void _k_bytestreamResult(KJob *)) Q_PRIVATE_SLOT(d_func(), void _k_bytestreamTotalSize(KJob *, qulonglong)) - Q_PRIVATE_SLOT(d_func(), void _k_cleanupByteStream()) Q_PRIVATE_SLOT(d_func(), void _k_bytestreamFileJobOpen(KIO::Job *)) Q_PRIVATE_SLOT(d_func(), void _k_bytestreamSeekDone(KIO::Job *, KIO::filesize_t)) }; --- trunk/KDE/kdelibs/phonon/platform_kde/kiomediastream_p.h #703513:703514 @@ -56,7 +56,6 @@ void _k_bytestreamData(KIO::Job *, const QByteArray &); void _k_bytestreamResult(KJob *); void _k_bytestreamTotalSize(KJob *, qulonglong); - void _k_cleanupByteStream(); void _k_bytestreamSeekStream(qint64); void _k_bytestreamFileJobOpen(KIO::Job *); void _k_bytestreamSeekDone(KIO::Job *, KIO::filesize_t);