rendered paste bodydiff --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; };