summaryrefslogtreecommitdiffstats
path: root/kipi-plugins/sendimages/plugin_sendimages.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kipi-plugins/sendimages/plugin_sendimages.cpp')
-rw-r--r--kipi-plugins/sendimages/plugin_sendimages.cpp292
1 files changed, 292 insertions, 0 deletions
diff --git a/kipi-plugins/sendimages/plugin_sendimages.cpp b/kipi-plugins/sendimages/plugin_sendimages.cpp
new file mode 100644
index 0000000..f6441a0
--- /dev/null
+++ b/kipi-plugins/sendimages/plugin_sendimages.cpp
@@ -0,0 +1,292 @@
+/* ============================================================
+ *
+ * This file is a part of kipi-plugins project
+ * http://www.kipi-plugins.org
+ *
+ * Date : 2003-10-01
+ * Description : a kipi plugin to e-mailing images
+ *
+ * Copyright (C) 2003-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
+ *
+ * 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, 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.
+ *
+ * ============================================================ */
+
+// C Ansi includes
+
+extern "C"
+{
+#include <unistd.h>
+}
+
+// Include files for KDE
+
+#include <klocale.h>
+#include <kapplication.h>
+#include <kglobal.h>
+#include <kaction.h>
+#include <kgenericfactory.h>
+#include <klibloader.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <kinstance.h>
+#include <kmessagebox.h>
+#include <kstandarddirs.h>
+#include <ktempfile.h>
+#include <kimageio.h>
+#include <kdeversion.h>
+
+// LibKipi includes.
+
+#include <libkipi/batchprogressdialog.h>
+
+// Local includes
+
+#include "actions.h"
+#include "sendimages.h"
+#include "plugin_sendimages.h"
+#include "plugin_sendimages.moc"
+
+typedef KGenericFactory<Plugin_SendImages> Factory;
+
+K_EXPORT_COMPONENT_FACTORY( kipiplugin_sendimages,
+ Factory("kipiplugin_sendimages"))
+
+// -----------------------------------------------------------
+Plugin_SendImages::Plugin_SendImages(QObject *parent, const char*, const QStringList&)
+ : KIPI::Plugin( Factory::instance(), parent, "SendImages")
+{
+ kdDebug( 51001 ) << "Plugin_SendImages plugin loaded" << endl;
+
+}
+
+void Plugin_SendImages::setup( QWidget* widget )
+{
+ KIPI::Plugin::setup( widget );
+
+ m_action_sendimages = new KAction (i18n("Email Images..."), // Menu message.
+ "mail_new", // Menu icon.
+ 0,
+ this,
+ SLOT(slotActivate()),
+ actionCollection(),
+ "send_images");
+
+ addAction( m_action_sendimages );
+
+ KIPI::Interface* interface = dynamic_cast< KIPI::Interface* >( parent() );
+ if ( !interface )
+ {
+ kdError( 51000 ) << "Kipi interface is null!" << endl;
+ return;
+ }
+
+ KIPI::ImageCollection selection = interface->currentSelection();
+ m_action_sendimages->setEnabled( selection.isValid() &&
+ !selection.images().isEmpty() );
+
+ connect( interface, SIGNAL(selectionChanged(bool)),
+ m_action_sendimages, SLOT(setEnabled(bool)));
+}
+
+Plugin_SendImages::~Plugin_SendImages()
+{
+}
+
+void Plugin_SendImages::slotActivate()
+{
+ m_progressDlg = 0;
+
+ KIPI::Interface* interface = dynamic_cast<KIPI::Interface*>( parent() );
+ if ( !interface )
+ {
+ kdError( 51000 ) << "Kipi interface is null!" << endl;
+ return;
+ }
+
+ KIPI::ImageCollection images = interface->currentSelection();
+
+ if ( !images.isValid() || images.images().isEmpty() )
+ return;
+
+ KStandardDirs dir;
+ QString Tmp = dir.saveLocation("tmp", "kipi-sendimagesplugin-" + QString::number(getpid()) + "/");
+
+ m_sendImagesOperation = new KIPISendimagesPlugin::SendImages( interface, Tmp, images, this );
+
+ m_sendImagesOperation->showDialog();
+}
+
+void Plugin_SendImages::slotAcceptedConfigDlg()
+{
+ m_sendImagesOperation->prepare();
+ m_sendImagesOperation->start();
+}
+
+void Plugin_SendImages::slotCancel()
+{
+ m_sendImagesOperation->terminate();
+ m_sendImagesOperation->wait();
+ m_sendImagesOperation->removeTmpFiles();
+}
+
+void Plugin_SendImages::customEvent(QCustomEvent *event)
+{
+ if (!event) return;
+
+ if (!m_progressDlg)
+ {
+ m_progressDlg = new KIPI::BatchProgressDialog(kapp->activeWindow(), i18n("Preparing images to send"));
+
+ connect(m_progressDlg, SIGNAL(cancelClicked()),
+ this, SLOT(slotCancel()));
+
+ m_current = 0;
+ m_progressDlg->show();
+ }
+
+ KIPISendimagesPlugin::EventData *d = (KIPISendimagesPlugin::EventData*) event->data();
+
+ if (!d) return;
+
+ if (d->starting)
+ {
+ QString text;
+
+ switch (d->action)
+ {
+ case(KIPISendimagesPlugin::Initialize):
+ {
+ m_total = d->total;
+ text = i18n("Preparing 1 image to send....", "Preparing %n images to send....", d->total);
+ break;
+ }
+
+ case(KIPISendimagesPlugin::ResizeImages):
+ {
+ text = i18n("Resizing '%1' from Album '%2'...")
+ .arg(d->fileName).arg(d->albumName);
+ break;
+ }
+
+ case(KIPISendimagesPlugin::Progress):
+ {
+ text = i18n("Using '%1' from Album '%2' without resizing...")
+ .arg(d->fileName).arg(d->albumName);
+ break;
+ }
+
+ default:
+ {
+ kdWarning( 51000 ) << "Plugin_SendImages: Unknown 'Starting' event: " << d->action << endl;
+ }
+ }
+
+ m_progressDlg->addedAction(text, KIPI::StartingMessage);
+ }
+ else
+ {
+ QString text;
+
+ if (!d->success)
+ {
+ switch (d->action)
+ {
+ case(KIPISendimagesPlugin::ResizeImages):
+ {
+ text = i18n("Failed to resize '%1' from Album '%2'")
+ .arg(d->fileName).arg(d->albumName);
+ break;
+ }
+
+ default:
+ {
+ kdWarning( 51000 ) << "Plugin_SendImages: Unknown 'Failed' event: " << d->action << endl;
+ }
+ }
+
+ m_progressDlg->addedAction(text, KIPI::WarningMessage);
+ }
+ else
+ {
+ switch (d->action)
+ {
+ case(KIPISendimagesPlugin::ResizeImages):
+ {
+ text = i18n("Resizing '%1' from Album '%2' completed.")
+ .arg(d->fileName).arg(d->albumName);
+ break;
+ }
+
+ case(KIPISendimagesPlugin::Progress):
+ {
+ text = i18n("All preparatory operations completed.");
+ break;
+ }
+
+ default:
+ {
+ kdWarning( 51000 ) << "Plugin_CDArchiving: Unknown 'Success' event: " << d->action << endl;
+ }
+ }
+
+ m_progressDlg->addedAction(text, KIPI::SuccessMessage);
+ }
+
+ ++m_current;
+ m_progressDlg->setProgress(m_current, m_total);
+
+ if( d->action == KIPISendimagesPlugin::Progress )
+ {
+ // If we have some errors during the resizing images process, show an error dialog.
+
+ if ( m_sendImagesOperation->showErrors() == false )
+ {
+ delete m_progressDlg;
+ return;
+ }
+
+#if KDE_VERSION >= 0x30200
+ m_progressDlg->setButtonCancel( KStdGuiItem::close() );
+#else
+ m_progressDlg->setButtonCancelText( i18n("&Close") );
+#endif
+
+ disconnect(m_progressDlg, SIGNAL(cancelClicked()),
+ this, SLOT(slotCancel()));
+
+ // Create a text file with images comments if necessary.
+
+ m_sendImagesOperation->makeCommentsFile();
+ m_progressDlg->addedAction(i18n("Creating comments file if necessary..."),
+ KIPI::StartingMessage);
+
+ // Invoke mailer agent call.
+ int type = m_sendImagesOperation->invokeMailAgent() ? KIPI::SuccessMessage : KIPI::ErrorMessage;
+ m_progressDlg->addedAction(i18n("Starting mailer agent..."), type);
+
+ m_progressDlg->setProgress(m_total, m_total);
+ }
+ }
+
+ kapp->processEvents();
+ delete d;
+}
+
+KIPI::Category Plugin_SendImages::category( KAction* action ) const
+{
+ if ( action == m_action_sendimages )
+ return KIPI::IMAGESPLUGIN;
+
+ kdWarning( 51000 ) << "Unrecognized action for plugin category identification" << endl;
+ return KIPI::IMAGESPLUGIN; // no warning from compiler, please
+}