[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/phonon/platform_kde
From:       Matthias Kretz <kretz () kde ! org>
Date:       2007-08-22 18:11:59
Message-ID: 1187806319.939360.28960.nullmailer () svn ! kde ! org
[Download RAW message or body]

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<KIO::FileJob *>(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<KIO::FileJob *>(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);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic