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

List:       kde-commits
Subject:    playground/ioslaves/kio_torrent
From:       Christian Weilbach <christian () whiletaker ! homeip ! net>
Date:       2010-08-29 21:06:30
Message-ID: 20100829210630.8C3CDAC86C () svn ! kde ! org
[Download RAW message or body]

SVN commit 1169691 by weilbach:

first working proof of concept hack.


 M  +1 -1      CMakeLists.txt  
 M  +4 -69     dbusthread.cpp  
 M  +3 -17     dbusthread.h  
 M  +37 -10    kio_torrent.cpp  
 M  +6 -6      kio_torrent.h  


--- trunk/playground/ioslaves/kio_torrent/CMakeLists.txt #1169690:1169691
@@ -25,7 +25,7 @@
 
 ########### kio_torrent ###############
 
-set(kio_torrent_SRCS kio_torrent.cpp dbusthread.cpp )
+set(kio_torrent_SRCS kio_torrent.cpp ktorrentdbusinterface.cpp dbusthread.cpp )
 
 kde4_add_plugin(kio_torrent ${kio_torrent_SRCS})
 
--- trunk/playground/ioslaves/kio_torrent/dbusthread.cpp #1169690:1169691
@@ -18,89 +18,24 @@
 */
 
 #include "dbusthread.h"
-#include "kio_torrent.h"
+#include "ktorrentdbusinterface.h"
 
-#include <QtCore/QMutex>
 #include <QtCore/QThread>
-#include <QtDBus/QDBusInterface>
-#include <QtDBus/QDBusConnection>
-#include <QtDBus/QDBusConnectionInterface>
-#include <QtDBus/QDBusReply>
 
-#include <kcomponentdata.h>
-#include <kstandarddirs.h>
-#include <KUrl>
 #include <kdebug.h>
 
-DBusThread::DBusThread(TorrentProtocol* slave)
+DBusThread::DBusThread(KTorrentDBusInterface* i)
 {
     kDebug();
-    m_slave = slave;
+    m_interface = i;
 }
 
 
 void DBusThread::run()
 {
     kDebug();
-    initializeDBus();
+    m_interface->initializeDBus();
     kDebug() << " starting event loop.";
     exec();
     kDebug() << " event loop finished.";
 }
-
-void DBusThread::initializeDBus()
-{
-    kDebug();
-    m_mutex.lock();
-    QDBusConnection bus = QDBusConnection::sessionBus();
-    m_coreKtInterface = new QDBusInterface("org.ktorrent.ktorrent", "/core", \
                "org.ktorrent.core", bus );
-    QDBusReply<QStringList>groupList = m_coreKtInterface->call("groups");
-    if (!groupList.isValid()) {
-        kError() << "Could not get the group list, do you have a compatible KTorrent \
                version running?";
-    } else {
-        kDebug() << groupList.value();
-        if (!groupList.value().contains("kio_torrent")) {
-            m_coreKtInterface->call("addGroup","kio_torrent");
-        }
-        QDBusInterface groupInt("org.ktorrent.ktorrent", "/group/kio_torrent", \
                "org.ktorrent.group");
-        KStandardDirs *dirs = new KStandardDirs();
-        groupInt.call("setDefaultSaveLocation",dirs->saveLocation("data","kio_torrent"));
                
-    }
-
-/*    if (!connect(m_coreKtInterface, SIGNAL(finished(const QString&)),
-                 this, SLOT(slotFinished(const QString&)))) {
-        kDebug() << "Could not connect to finished().";
-    }
-    if (!connect(m_coreKtInterface, SIGNAL(torrentAdded(const QString&)),
-                 this, SLOT(slotTorrentAdded(const QString&)))) {
-        kDebug() << "Could not connect to torrentAdded().:";
-    }*/
-    bus.connect("org.ktorrent.ktorrent","/core","org.ktorrent.core","torrentAdded",this,SLOT(slotTorrentAdded(const \
                QString &)));
-    bus.connect("org.ktorrent.ktorrent","/core","org.ktorrent.core","torrentRemoved",this,SLOT(slotTorrentRemoved(const \
                QString &)));
-    m_mutex.unlock();
-}
-
-void DBusThread::load(const QString& url)
-{
-    kDebug() << url;
-    QString httpUrl = url;
-    httpUrl.replace("torrent:","http:");
-    QStringList splitUrl = httpUrl.split(QRegExp(".torrent(/)"));
-    kDebug() << splitUrl[0]+".torrent";
-    m_coreKtInterface->call("loadSilently", splitUrl[0]+".torrent","kio_torrent");
-}
-
-
-void DBusThread::slotFinished(const QString& tor)
-{
-    kDebug()<< tor;
-    m_slave->finishGet();
-}
-
-void DBusThread::slotTorrentAdded(const QString& tor)
-{
-    kDebug()<< tor;
-    m_slave->finishGet();
-}
-
-#include "dbusthread.moc"
--- trunk/playground/ioslaves/kio_torrent/dbusthread.h #1169690:1169691
@@ -20,31 +20,17 @@
 #ifndef DBUSTHREAD_H
 #define DBUSTHREAD_H
 
-#include <QtCore/QMutex>
 #include <QtCore/QThread>
-#include <QtDBus/QDBusInterface>
-#include <QtDBus/QDBusConnection>
-#include <KUrl>
 
-class TorrentProtocol;
+class KTorrentDBusInterface;
 
 class DBusThread : public QThread
 {
-    Q_OBJECT
     public:
-        DBusThread( TorrentProtocol* );
+        DBusThread( KTorrentDBusInterface* );
         void run();
-	void initializeDBus();
-	void load(const QString&);
-
-    private slots:
-        void slotFinished(const QString&);
-        void slotTorrentAdded(const QString&);
     private:
-        QDBusInterface* m_coreKtInterface;
-        KUrl m_url;
-	QMutex m_mutex;
-	TorrentProtocol* m_slave;
+	KTorrentDBusInterface* m_interface;
 };
 
 #endif // DBUSTHREAD_H
--- trunk/playground/ioslaves/kio_torrent/kio_torrent.cpp #1169690:1169691
@@ -18,16 +18,18 @@
 */
 
 #include "kio_torrent.h"
-#include "dbusthread.h"
+#include "ktorrentdbusinterface.h"
 
 #include <stdlib.h>
 #include <unistd.h>
 
 #include <QCoreApplication>
+#include <QFile>
 
 #include <kcomponentdata.h>
 #include <kstandarddirs.h>
 #include <KUrl>
+#include <KMimeType>
 #include <kdebug.h>
 
 using namespace KIO;
@@ -53,17 +55,16 @@
 }
 
 TorrentProtocol::TorrentProtocol( const QByteArray &pool, const QByteArray &app ) : \
SlaveBase("torrent", pool, app ) +    , m_finishStat(false)
     , m_finishGet(false)
 {
     kDebug();
-    m_dbusThread = new DBusThread(this);
-    m_dbusThread->start();
+    m_ktorrentDBusInterface = new KTorrentDBusInterface(this);
 }
 
 TorrentProtocol::~TorrentProtocol()
 {
-    m_dbusThread->quit();
-    delete m_dbusThread;
+    delete m_ktorrentDBusInterface;
     kDebug();
 }
 
@@ -76,26 +77,52 @@
 void TorrentProtocol::stat( const KUrl& url )
 {
     kDebug() << url.url();
+    m_ktorrentDBusInterface->load( url );
+    while( true ){
+        if(m_finishStat){
+            m_finishStat = false;
     finished();
+            break;
 }
+        usleep (100);
+    }
+}
 
 void TorrentProtocol::get( const KUrl& url )
 {
     kDebug() << url.url();
-    m_dbusThread->load( url.url() );
     while( true ){
       if(m_finishGet){
 	m_finishGet = false;
-	finished();
 	break;
       }
-      sleep (1000);
+        usleep (100);
     }
+    
+    KMimeType::Ptr mt = KMimeType::findByUrl( m_path, 0, true /* local URL */ );
+    emit mimeType( mt->name() );
+
+    QFile file(m_path);
+    if (!file.open(QIODevice::ReadOnly))
+        return;
+
+    while (!file.atEnd()) {
+        QByteArray d = file.read(1024*32);
+        data(d);
 }
+    file.close();
+    finished();
+}
 
-void TorrentProtocol::finishGet()
+void TorrentProtocol::finishStat()
 {
     kDebug();
+    m_finishStat = true;
+}
+
+void TorrentProtocol::finishGet(const QString& path)
+{
+  kDebug() << p;
     m_finishGet = true;
+  m_path = path;
 }
-
--- trunk/playground/ioslaves/kio_torrent/kio_torrent.h #1169690:1169691
@@ -24,8 +24,7 @@
 #include <kio/global.h>
 #include <kio/slavebase.h>
 
-class DBusThread;
-class QDBusInterface;
+class KTorrentDBusInterface;
 
 class TorrentProtocol : public KIO::SlaveBase
 {
@@ -36,12 +35,13 @@
         virtual void listDir( const KUrl & url );
         virtual void stat( const KUrl & url );
         virtual void get( const KUrl & url );
-	virtual void finishGet();
+	virtual void finishStat();
+	virtual void finishGet(const QString& );
     private:
         KUrl m_url;
-        DBusThread* m_dbusThread;
-	QDBusInterface* m_coreKtInterface;
-	bool m_finishGet;
+        KTorrentDBusInterface* m_ktorrentDBusInterface;
+	bool m_finishStat, m_finishGet;
+	QString m_path;
 };
 
 #endif // KIO_TORRENT_H


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

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