All pastes #1893568 Raw Edit

Someone

public cpp v1 · immutable
#1893568 ·published 2010-07-02 20:34 UTC
rendered paste body
diff --git a/kget/extensions/konqueror/CMakeLists.txt b/kget/extensions/konqueror/CMakeLists.txtindex 57d6ad7..ba47ba4 100644--- a/kget/extensions/konqueror/CMakeLists.txt+++ b/kget/extensions/konqueror/CMakeLists.txt@@ -26,7 +26,7 @@ QT4_ADD_DBUS_INTERFACE(kget_browser_integration_SRCS ../../dbus/org.kde.kget.mai  kde4_add_plugin(kget_browser_integration ${kget_browser_integration_SRCS}) -target_link_libraries(kget_browser_integration ${KDE4_KHTML_LIBS})+target_link_libraries(kget_browser_integration ${KDE4_KHTML_LIBS} ${KDE4_KIO_LIBRARY})  if(KWEBKITPART_FOUND)     target_link_libraries(kget_browser_integration ${KWEBKITPART_LIBRARIES} ${KDE4_KDEUI_LIBRARY} ${QT_QTWEBKIT_LIBRARY})@@ -37,6 +37,7 @@ install(TARGETS kget_browser_integration DESTINATION ${PLUGIN_INSTALL_DIR}) ########### install files ###############  install(FILES kget_plug_in.rc DESTINATION ${DATA_INSTALL_DIR}/khtml/kpartplugins)+install(FILES kget_plug_in.rc DESTINATION ${DATA_INSTALL_DIR}/dolphinpart/kpartplugins)  if (KWEBKITPART_FOUND)     install(FILES kget_plug_in.rc DESTINATION ${DATA_INSTALL_DIR}/kwebkitpart/kpartplugins)diff --git a/kget/extensions/konqueror/kget_plug_in.cpp b/kget/extensions/konqueror/kget_plug_in.cppindex a0ff509..f7f2f9d 100644--- a/kget/extensions/konqueror/kget_plug_in.cpp+++ b/kget/extensions/konqueror/kget_plug_in.cpp@@ -41,15 +41,167 @@ #include <QtWebKit/QWebElementCollection> #endif +KGet_plug_in::KGet_plug_in( QObject* parent )+  : Plugin(parent),+    m_dolphinPart(0),+    m_type(None)+{+    KActionMenu *menu = new KActionMenu(KIcon("kget"), i18n("Download Manager"),+                                        actionCollection());+    actionCollection()->addAction("kget_menu", menu);++    menu->setDelayed( false );+    connect( menu->menu(), SIGNAL( aboutToShow() ), SLOT( showPopup() ));++    m_dropTargetAction = new KToggleAction(i18n("Show Drop Target"), actionCollection());++    connect(m_dropTargetAction, SIGNAL(triggered()), this, SLOT(slotShowDrop()));+    actionCollection()->addAction("show_drop", m_dropTargetAction);+    menu->addAction(m_dropTargetAction);++    QAction *showLinksAction = actionCollection()->addAction("show_links");+    showLinksAction->setText(i18n("List All Links"));+    connect(showLinksAction, SIGNAL(triggered()), SLOT(slotShowLinks()));+    menu->addAction(showLinksAction);++    QAction *showSelectedLinksAction = actionCollection()->addAction("show_selected_links");+    showSelectedLinksAction->setText(i18n("List Selected Links"));+    connect(showSelectedLinksAction, SIGNAL(triggered()), SLOT(slotShowSelectedLinks()));+    menu->addAction(showSelectedLinksAction);++    if (parent) {+        if (parent->inherits("KHTMLPart")) {+            m_type = KHTMLType;+        } else if (parent->inherits("KWebKitPart")) {+            m_type = KWebkitType;+        } else if (parent->inherits("DolphinPart")) {+            m_type = DolphinType;+        }+    }++    //FIXME once DolphinPart gets exported+    if ((m_type != KHTMLType) && (m_type != KWebkitType))//TODO support also for DolphinPart? --> DolphinView::selectedUrls()+        actionCollection()->action("show_selected_links")->setVisible(false);++    if (m_type == DolphinType) {+        m_dolphinPart = qobject_cast<KParts::ReadOnlyPart*>(parent);+        connect(m_dolphinPart, SIGNAL(started(KIO::Job*)), this, SLOT(slotCheckUrlDolphin()));//TODO use aboutToOpenURL from DolphinPart instead?+    }+}+++KGet_plug_in::~KGet_plug_in()+{+}++void KGet_plug_in::slotCheckUrlDolphin()+{+    m_dolphinPartUrl = m_dolphinPart->url();+    const QString protocol = m_dolphinPartUrl.protocol();+    const bool visible = protocol.contains("ftp");+    actionCollection()->action("kget_menu")->setVisible(visible);+}+ -QStringList getLinks(QObject *obj, bool selectedOnly = false)+void KGet_plug_in::showPopup() {+    bool hasDropTarget = false;++    if(QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kget"))+    {+        OrgKdeKgetMainInterface kgetInterface("org.kde.kget", "/KGet", QDBusConnection::sessionBus());+        QDBusReply<bool> reply = kgetInterface.dropTargetVisible();+        if (reply.isValid())+            hasDropTarget = reply.value();+    }++    m_dropTargetAction->setChecked(hasDropTarget);++    bool enabled = false;+    if (m_type == KHTMLType) {+        const QString selectedHtml = qobject_cast<KHTMLPart*>(parent())->selectedTextAsHTML();+        DOM::HTMLDocument document;+        document.open();+        document.write( selectedHtml );+        document.close();+        enabled = (document.getElementsByTagName("a").length() > 0);+    }+#ifdef HAVE_KWEBKITPART+    else if (m_type == KWebkitType)+    {+        // TODO: Find a way to find links and images in selected content.+        // No straight forward way to accomplish this in QtWebKit without+        // resorting to javascript based hacks right now!+    }+#endif+    actionCollection()->action("show_selected_links")->setEnabled(enabled);+}++void KGet_plug_in::slotShowDrop()+{+    if(!QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kget")) {+        QWidget *parentWidget = 0;+        if (m_type == KHTMLType)+            parentWidget = qobject_cast<KHTMLPart*>(parent())->widget();+#ifdef HAVE_KWEBKITPART+        else if (m_type == KWebkitType)+            parentWidget = qobject_cast<KWebKitPart*>(parent())->view();+#endif+        else if (m_type == DolphinType) {+            parentWidget = qobject_cast<KParts::ReadOnlyPart*>(parent())->widget();+        }+        KRun::runCommand("kget --showDropTarget --hideMainWindow", "kget", "kget", parentWidget);+    } else {+        OrgKdeKgetMainInterface kgetInterface("org.kde.kget", "/KGet", QDBusConnection::sessionBus());+        kgetInterface.setDropTargetVisible(m_dropTargetAction->isChecked());+    }+}++void KGet_plug_in::slotShowLinks()+{+    getLinks(false);+}++void KGet_plug_in::slotShowSelectedLinks()+{+    getLinks(true);+}++void KGet_plug_in::slotImportLinks()+{+    if (m_linkList.isEmpty()) {+        KParts::ReadOnlyPart *part = qobject_cast<KParts::ReadOnlyPart *>(parent());+        KMessageBox::sorry(part ? part->widget() : 0,+                           i18n("There are no links in the active frame of the current HTML page."),+                           i18n("No Links"));+        return;+    }++    // Remove any duplicates links from the list...+    m_linkList.removeDuplicates();++    if (!QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kget") &&+        KToolInvocation::kdeinitExecWait("kget") != 0)+    {+        KParts::ReadOnlyPart *part = qobject_cast<KParts::ReadOnlyPart *>(parent());+        KMessageBox::sorry(part ? part->widget() : 0,+                           i18n("Unable to communicate with the KGet download manager."),+                           i18n("Communication Error"));+        return;+    }++    OrgKdeKgetMainInterface kgetInterface("org.kde.kget", "/KGet", QDBusConnection::sessionBus());+    kgetInterface.importLinks(m_linkList);+}++void KGet_plug_in::getLinks(bool selectedOnly)+{+    QObject *obj = parent();     Q_ASSERT(obj); -    QStringList linkList;+    m_linkList.clear(); -    if (obj->inherits("KHTMLPart"))-    { +    if (m_type == KHTMLType) {         KHTMLPart *htmlPart = qobject_cast<KHTMLPart*>(obj);         KParts::Part *activePart = 0;         @@ -86,9 +238,9 @@ QStringList getLinks(QObject *obj, bool selectedOnly = false)                 if ( link.isNull() || link.nodeType() != DOM::Node::ELEMENT_NODE )                     continue; -                LinkItem *item = new LinkItem( (DOM::Element) link );+                LinkItem *item = new LinkItem( (DOM::Element) link );//TODO remove C cast                 if (item->isValid())-                    linkList.append(item->url.url());+                    m_linkList.append(item->url.url());                 else                     delete item;             }@@ -97,20 +249,20 @@ QStringList getLinks(QObject *obj, bool selectedOnly = false)             for ( uint i = 0; i < images.length(); i++ )             {                 DOM::Node image  = images.item( i );-                if ( image.isNull() || image.nodeType() != DOM::Node::ELEMENT_NODE )+                if ( image.isNull() || image.nodeType() != DOM::Node::ELEMENT_NODE )//TODO remove C cast                     continue;                  LinkItem *item = new LinkItem( (DOM::Element) image );                 if (item->isValid())-                    linkList.append(item->url.url());+                    m_linkList.append(item->url.url());                 else                     delete item;             }         }+        slotImportLinks();     } #ifdef HAVE_KWEBKITPART-    else if (obj->inherits("KWebKitPart"))-    {+    else if (m_type == KWebkitType) {         KWebKitPart *part = qobject_cast<KWebKitPart*>(obj);         Q_ASSERT(part); @@ -146,149 +298,36 @@ QStringList getLinks(QObject *obj, bool selectedOnly = false)                      const QUrl url = frame->baseUrl().resolved(QUrl(element.attribute("href")));                     if (url.isValid())-                        linkList << url.toString();+                        m_linkList << url.toString();                 }             }         }+        slotImportLinks();     } #endif--    return linkList;-}--KGet_plug_in::KGet_plug_in( QObject* parent )-             :Plugin(parent)-{-    KActionMenu *menu = new KActionMenu(KIcon("kget"), i18n("Download Manager"),-                                        actionCollection());-    actionCollection()->addAction("kget_menu", menu);--    menu->setDelayed( false );-    connect( menu->menu(), SIGNAL( aboutToShow() ), SLOT( showPopup() ));--    m_dropTargetAction = new KToggleAction(i18n("Show Drop Target"), actionCollection());--    connect(m_dropTargetAction, SIGNAL(triggered()), this, SLOT(slotShowDrop()));-    actionCollection()->addAction("show_drop", m_dropTargetAction);-    menu->addAction(m_dropTargetAction);--    QAction *showLinksAction = actionCollection()->addAction("show_links");-    showLinksAction->setText(i18n("List All Links"));-    connect(showLinksAction, SIGNAL(triggered()), SLOT(slotShowLinks()));-    menu->addAction(showLinksAction);--    QAction *showSelectedLinksAction = actionCollection()->addAction("show_selected_links");-    showSelectedLinksAction->setText(i18n("List Selected Links"));-    connect(showSelectedLinksAction, SIGNAL(triggered()), SLOT(slotShowSelectedLinks()));-    menu->addAction(showSelectedLinksAction);--    if (parent && !parent->inherits("KHTMLPart") && !parent->inherits("KWebKitPart"))-        actionCollection()->action("show_selected_links")->setVisible(false);-}---KGet_plug_in::~KGet_plug_in()-{-}---void KGet_plug_in::showPopup()-{-    bool hasDropTarget = false;--    if(QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kget"))-    {-        OrgKdeKgetMainInterface kgetInterface("org.kde.kget", "/KGet", QDBusConnection::sessionBus());-        QDBusReply<bool> reply = kgetInterface.dropTargetVisible();-        if (reply.isValid())-            hasDropTarget = reply.value();-    }--    m_dropTargetAction->setChecked(hasDropTarget);--    if ( parent() )-    {-        bool enabled = false;-        if (parent()->inherits("KHTMLPart"))-        {-            const QString selectedHtml = qobject_cast<KHTMLPart*>(parent())->selectedTextAsHTML();-            DOM::HTMLDocument document;-            document.open();-            document.write( selectedHtml );-            document.close();-            enabled = (document.getElementsByTagName("a").length() > 0);-        }-#ifdef HAVE_KWEBKITPART-        else if (parent()->inherits("KWebKitPart"))-        {-          // TODO: Find a way to find links and images in selected content.-          // No straight forward way to accomplish this in QtWebKit without-          // resorting to javascript based hacks right now!-        }-#endif-        actionCollection()->action("show_selected_links")->setEnabled(enabled);+    else if (m_type == DolphinType) {+        const KUrl url = qobject_cast<KParts::ReadOnlyPart*>(obj)->url();+        KIO::ListJob *list = KIO::listDir(m_dolphinPartUrl, KIO::HideProgressInfo);//TODO link with KIO?+        connect(list, SIGNAL(entries(KIO::Job*,KIO::UDSEntryList)), this, SLOT(slotEntries(KIO::Job*,KIO::UDSEntryList)));+        connect(list, SIGNAL(finished(KJob*)), this, SLOT(slotImportLinks()));     } } -void KGet_plug_in::slotShowDrop()+void KGet_plug_in::slotEntries(KIO::Job *job, const KIO::UDSEntryList &entries) {-    if(!QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kget")) {-        QWidget *parentWidget = 0;-        if (parent())-        {-            if (parent()->inherits("KHTMLPart"))-                parentWidget = qobject_cast<KHTMLPart*>(parent())->widget();-#ifdef HAVE_KWEBKITPART-            else if (parent()->inherits("KWebKitPart"))-                parentWidget = qobject_cast<KWebKitPart*>(parent())->view();-#endif-            KRun::runCommand("kget --showDropTarget --hideMainWindow", "kget", "kget", parentWidget);+    Q_UNUSED(job)++    const QString baseUrl = m_dolphinPartUrl.url(KUrl::AddTrailingSlash);+    foreach (const KIO::UDSEntry &entry, entries) {+        //skip all found dirs+        if (!entry.isDir()) {+            const QString name = entry.stringValue(KIO::UDSEntry::UDS_NAME);+            m_linkList << baseUrl + name;         }-    } else {-        OrgKdeKgetMainInterface kgetInterface("org.kde.kget", "/KGet", QDBusConnection::sessionBus());-        kgetInterface.setDropTargetVisible(m_dropTargetAction->isChecked());     } } -void KGet_plug_in::slotShowLinks()-{-    showLinks(false);-} -void KGet_plug_in::slotShowSelectedLinks()-{-    showLinks(true);-}--void KGet_plug_in::showLinks( bool selectedOnly )-{-    QStringList linkList = getLinks(parent(), selectedOnly);--    if ( linkList.isEmpty() )-    {-        KParts::ReadOnlyPart *part = qobject_cast<KParts::ReadOnlyPart *>(parent());-        KMessageBox::sorry(part ? part->widget() : 0,-                           i18n("There are no links in the active frame of the current HTML page."),-                           i18n("No Links"));-        return;-    }--    // Remove any duplicates links from the list...-    linkList.removeDuplicates();--    if (!QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.kget") &&-        KToolInvocation::kdeinitExecWait("kget") != 0)-    {-        KParts::ReadOnlyPart *part = qobject_cast<KParts::ReadOnlyPart *>(parent());-        KMessageBox::sorry(part ? part->widget() : 0,-                           i18n("Unable to communicate with the KGet download manager."),-                           i18n("Communication Error"));-        return;-    }--    OrgKdeKgetMainInterface kgetInterface("org.kde.kget", "/KGet", QDBusConnection::sessionBus());-    kgetInterface.importLinks(linkList);-}  KGetPluginFactory::KGetPluginFactory( QObject* parent )                   :KPluginFactory("kget", "kget", parent)diff --git a/kget/extensions/konqueror/kget_plug_in.h b/kget/extensions/konqueror/kget_plug_in.hindex 78a7a9e..ec45a40 100644--- a/kget/extensions/konqueror/kget_plug_in.h+++ b/kget/extensions/konqueror/kget_plug_in.h@@ -11,11 +11,16 @@ #ifndef PLUGIN_KGET_PLUG_IN_H #define PLUGIN_KGET_PLUG_IN_H +#include <KIO/Job> #include <kparts/plugin.h> #include <KPluginFactory>  class KToggleAction; +namespace KParts {+    class ReadOnlyPart;+}+  class KGet_plug_in : public KParts::Plugin {@@ -25,14 +30,37 @@ public:     KToggleAction *m_dropTargetAction;     virtual ~KGet_plug_in(); +    enum PartType {+        None = 0,+        KHTMLType,+        KWebkitType,+        DolphinType+    };+ private:-    void showLinks( bool );+    void getLinks(bool selectedOnly = false);  private slots:     void slotShowDrop();     void slotShowLinks();     void slotShowSelectedLinks();+    void slotImportLinks();+    /**+     * Only show the KGet Plugin in the DolphinPart, if the selected Url is ftp or sftp+     */+    void slotCheckUrlDolphin();++    /**+     * Links of the DolphinPart, gotten by a listJob+     */+    void slotEntries(KIO::Job *job, const KIO::UDSEntryList &entries);     void showPopup();++private:+    KParts::ReadOnlyPart *m_dolphinPart;+    KUrl m_dolphinPartUrl;+    PartType m_type;+    QStringList m_linkList; };