/* This file is part of Kontact. Copyright (c) 2003-2013 Kontact Developer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, permission is given to link this program with any edition of Qt, and distribute the resulting executable, without including the source code for Qt in the source distribution. */ #include "kmail_plugin.h" #include "kmailinterface.h" #include "summarywidget.h" #include #include #include #include #include #include #include #include #include "kmailplugin_debug.h" #include #include #include #include #include using namespace KCalUtils; using namespace KCalCore; EXPORT_KONTACT_PLUGIN(KMailPlugin, kmail) KMailPlugin::KMailPlugin(KontactInterface::Core *core, const QVariantList &) : KontactInterface::Plugin(core, core, "kmail2"), m_instance(Q_NULLPTR) { setComponentName(QStringLiteral("kmail2"), QStringLiteral("kmail2")); QAction *action = new QAction(QIcon::fromTheme(QStringLiteral("mail-message-new")), i18nc("@action:inmenu", "New Message..."), this); actionCollection()->addAction(QStringLiteral("new_mail"), action); actionCollection()->setDefaultShortcut(action, QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_M)); //action->setHelpText( // i18nc( "@info:status", "Create a new mail message" ) ); action->setWhatsThis( i18nc("@info:whatsthis", "You will be presented with a dialog where you can create " "and send a new email message.")); connect(action, &QAction::triggered, this, &KMailPlugin::slotNewMail); insertNewAction(action); QAction *syncAction = new QAction(QIcon::fromTheme(QStringLiteral("view-refresh")), i18nc("@action:inmenu", "Sync Mail"), this); //syncAction->setHelpText( // i18nc( "@info:status", "Synchronize groupware mail" ) ); syncAction->setWhatsThis( i18nc("@info:whatsthis", "Choose this option to synchronize your groupware email.")); connect(syncAction, &QAction::triggered, this, &KMailPlugin::slotSyncFolders); actionCollection()->addAction(QStringLiteral("sync_mail"), syncAction); insertSyncAction(syncAction); mUniqueAppWatcher = new KontactInterface::UniqueAppWatcher( new KontactInterface::UniqueAppHandlerFactory(), this); } bool KMailPlugin::canDecodeMimeData(const QMimeData *mimeData) const { return ICalDrag::canDecode(mimeData) || VCalDrag::canDecode(mimeData) || KContacts::VCardDrag::canDecode(mimeData); } void KMailPlugin::shortcutChanged() { KParts::ReadOnlyPart *localPart = part(); if (localPart) { if (localPart->metaObject()->indexOfMethod("updateQuickSearchText()") == -1) { qCWarning(KMAILPLUGIN_LOG) << "KMailPart part is missing slot updateQuickSearchText()"; return; } QMetaObject::invokeMethod(localPart, "updateQuickSearchText"); } } void KMailPlugin::processDropEvent(QDropEvent *de) { MemoryCalendar::Ptr cal(new MemoryCalendar(QStringLiteral("UTC"))); KContacts::Addressee::List list; const QMimeData *md = de->mimeData(); if (VCalDrag::fromMimeData(md, cal) || ICalDrag::fromMimeData(md, cal)) { QTemporaryFile tmp(QStringLiteral("incidences-kmail_XXXXXX.ics")); tmp.setAutoRemove(false); tmp.open(); FileStorage storage(cal, tmp.fileName()); storage.save(); openComposer(QUrl::fromLocalFile(tmp.fileName())); } else if (KContacts::VCardDrag::fromMimeData(md, list)) { KContacts::Addressee::List::ConstIterator it; QStringList to; to.reserve(list.count()); KContacts::Addressee::List::ConstIterator end(list.constEnd()); for (it = list.constBegin(); it != end; ++it) { to.append((*it).fullEmail()); } openComposer(to.join(QStringLiteral(", "))); } qCWarning(KMAILPLUGIN_LOG) << QStringLiteral("Cannot handle drop events of type '%1'.").arg(de->mimeData()->formats().join(QLatin1Char(';'))); } void KMailPlugin::openComposer(const QUrl &attach) { (void) part(); // ensure part is loaded Q_ASSERT(m_instance); if (m_instance) { if (attach.isValid()) { m_instance->newMessage(QString(), QString(), QString(), false, true, QString(), attach.isLocalFile() ? attach.toLocalFile() : attach.path()); } else { m_instance->newMessage(QString(), QString(), QString(), false, true, QString(), QString()); } } } void KMailPlugin::openComposer(const QString &to) { (void) part(); // ensure part is loaded Q_ASSERT(m_instance); if (m_instance) { m_instance->newMessage(to, QString(), QString(), false, true, QString(), QString()); } } void KMailPlugin::slotNewMail() { openComposer(QString()); } void KMailPlugin::slotSyncFolders() { QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kmail"), QStringLiteral("/KMail"), QStringLiteral("org.kde.kmail.kmail"), QStringLiteral("checkMail")); QDBusConnection::sessionBus().send(message); } KMailPlugin::~KMailPlugin() { delete m_instance; m_instance = Q_NULLPTR; } bool KMailPlugin::createDBUSInterface(const QString &serviceType) { if (serviceType == QLatin1String("DBUS/Mailer")) { if (part()) { return true; } } return false; } KParts::ReadOnlyPart *KMailPlugin::createPart() { KParts::ReadOnlyPart *part = loadPart(); if (!part) { return Q_NULLPTR; } m_instance = new OrgKdeKmailKmailInterface( QStringLiteral("org.kde.kmail"), QStringLiteral("/KMail"), QDBusConnection::sessionBus()); return part; } QStringList KMailPlugin::invisibleToolbarActions() const { return QStringList() << QStringLiteral("new_message"); } bool KMailPlugin::isRunningStandalone() const { return mUniqueAppWatcher->isRunningStandalone(); } KontactInterface::Summary *KMailPlugin::createSummaryWidget(QWidget *parent) { return new SummaryWidget(this, parent); } //// #include "../kmail_options.h" void KMailUniqueAppHandler::loadCommandLineOptions(QCommandLineParser *parser) { kmail_options(parser); } int KMailUniqueAppHandler::activate(const QStringList &args, const QString &workingDir) { // Ensure part is loaded (void)plugin()->part(); org::kde::kmail::kmail kmail(QStringLiteral("org.kde.kmail"), QStringLiteral("/KMail"), QDBusConnection::sessionBus()); QDBusReply reply = kmail.handleCommandLine(false, args, workingDir); if (reply.isValid()) { bool handled = reply; if (!handled) { // no args -> simply bring kmail plugin to front return KontactInterface::UniqueAppHandler::activate(args, workingDir); } } return 0; } bool KMailPlugin::queryClose() const { org::kde::kmail::kmail kmail(QStringLiteral("org.kde.kmail"), QStringLiteral("/KMail"), QDBusConnection::sessionBus()); QDBusReply canClose = kmail.canQueryClose(); return canClose; } #include "kmail_plugin.moc"