summaryrefslogtreecommitdiffstats
path: root/kftpgrabber/src/engine/event.h
diff options
context:
space:
mode:
Diffstat (limited to 'kftpgrabber/src/engine/event.h')
-rw-r--r--kftpgrabber/src/engine/event.h372
1 files changed, 372 insertions, 0 deletions
diff --git a/kftpgrabber/src/engine/event.h b/kftpgrabber/src/engine/event.h
new file mode 100644
index 0000000..e21a45e
--- /dev/null
+++ b/kftpgrabber/src/engine/event.h
@@ -0,0 +1,372 @@
+/*
+ * This file is part of the KFTPGrabber project
+ *
+ * Copyright (C) 2003-2006 by the KFTPGrabber developers
+ * Copyright (C) 2003-2006 Jernej Kos <kostko@jweb-network.net>
+ *
+ * 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
+ * is provided AS IS, WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, and
+ * NON-INFRINGEMENT. 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 Steet, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * In addition, as a special exception, the copyright holders give
+ * permission to link the code of portions of this program with the
+ * OpenSSL library under certain conditions as described in each
+ * individual source file, and distribute linked combinations
+ * including the two.
+ *
+ * You must obey the GNU General Public License in all respects
+ * for all of the code used other than OpenSSL. If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so. If you
+ * do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source
+ * files in the program, then also delete it here.
+ */
+
+#ifndef KFTPNETWORKEVENT_H
+#define KFTPNETWORKEVENT_H
+
+#include <qobject.h>
+#include <qevent.h>
+#include <qshared.h>
+
+#include "directorylisting.h"
+
+namespace KFTPEngine {
+
+/**
+ * Engine reset codes. TODO description of each reset code.
+ */
+enum ResetCode {
+ Ok,
+ UserAbort,
+ Failed,
+ FailedSilently
+};
+
+/**
+ * Engine error codes. TODO: description of each error code.
+ */
+enum ErrorCode {
+ ConnectFailed,
+ LoginFailed,
+ PermissionDenied,
+ FileNotFound,
+ OperationFailed,
+ ListFailed,
+ FileOpenFailed
+};
+
+/**
+ * This class is used for event parameter passing between the socket
+ * thread and the main thread. It supports multiple parameter types.
+ *
+ * @author Jernej Kos <kostko@jweb-network.net>
+ */
+class EventParameter {
+public:
+ /**
+ * Parameter type enum.
+ */
+ enum Type {
+ ParamString,
+ ParamUrl,
+ ParamDirListing,
+ ParamDirTree,
+ ParamErrorCode,
+ ParamSize,
+ ParamData
+ };
+
+ EventParameter();
+
+ /**
+ * Constructs a new string parameter.
+ *
+ * @param string The QString value
+ */
+ EventParameter(const QString &string);
+
+ /**
+ * Construct a new url parameter.
+ *
+ * @param url The KURL value
+ */
+ EventParameter(const KURL &url);
+
+ /**
+ * Construct a new directory listing parameter.
+ *
+ * @param listing The DirectoryListing value
+ */
+ EventParameter(DirectoryListing listing);
+
+ /**
+ * Construct a new directory tree parameter.
+ *
+ * @param tree The DirectoryTree value
+ */
+ EventParameter(DirectoryTree tree);
+
+ /**
+ * Construct a new error code parameter.
+ *
+ * @param error The ErrorCode value
+ */
+ EventParameter(ErrorCode error);
+
+ /**
+ * Construct a new filesize parameter.
+ *
+ * @param size The filesize_t value
+ */
+ EventParameter(filesize_t size);
+
+ /**
+ * Constructs a new data parameter.
+ *
+ * @param data A pointer to some data.
+ */
+ EventParameter(void *data);
+
+ /**
+ * Returns the parameter's string value.
+ *
+ * @return Parameter's string value
+ */
+ QString asString() const;
+
+ /**
+ * Returns the parameter's url value.
+ *
+ * @return Parameter's url value
+ */
+ KURL asUrl() const;
+
+ /**
+ * Returns the parameter's directory listing value.
+ *
+ * @return Parameter's directory listing value
+ */
+ DirectoryListing asDirectoryListing() const;
+
+ /**
+ * Returns the parameter's directory tree value.
+ *
+ * @return Parameter's directory tree value.
+ */
+ DirectoryTree asDirectoryTree() const;
+
+ /**
+ * Returns the parameter's error code value.
+ *
+ * @return Parameter's error code value
+ */
+ ErrorCode asErrorCode() const;
+
+ /**
+ * Returns the parameter's filesize value.
+ *
+ * @return Parameter's filesize value
+ */
+ filesize_t asFileSize() const;
+
+ /**
+ * Returns the parameter's boolean value.
+ *
+ * @return Parameter's boolean value
+ */
+ bool asBoolean() const;
+
+ /**
+ * Returns raw parameter data pointer.
+ *
+ * @return Raw parameter data pointer
+ */
+ void *asData() const;
+private:
+ Type m_type;
+
+ QString m_string;
+ KURL m_url;
+ DirectoryListing m_directoryListing;
+ DirectoryTree m_directoryTree;
+ ErrorCode m_errorCode;
+ filesize_t m_fileSize;
+ void *m_data;
+};
+
+/**
+ * A wakeup event is a special type event used to transfer some response from
+ * the GUI to the engine that has been temporarly suspended. After receiving
+ * this event, the current command handler's wakeup() method will be called
+ * with this event as a parameter.
+ *
+ * @author Jernej Kos <kostko@jweb-network.net>
+ */
+class WakeupEvent {
+public:
+ /**
+ * Possible wakeup event types. Each type should subclass this class to
+ * provide any custom methods needed.
+ */
+ enum Type {
+ WakeupFileExists,
+ WakeupPubkey
+ };
+
+ /**
+ * Constructs a new wakeup event of specified type.
+ *
+ * @param type Event type
+ */
+ WakeupEvent(Type type) : m_type(type) {}
+private:
+ Type m_type;
+};
+
+/**
+ * A file exists wakeup event that is used to continue pending transfers.
+ *
+ * @author Jernej Kos <kostko@jweb-network.net>
+ */
+class FileExistsWakeupEvent : public WakeupEvent {
+public:
+ /**
+ * Possible actions the engine can take.
+ */
+ enum Action {
+ Overwrite,
+ Rename,
+ Resume,
+ Skip
+ };
+
+ /**
+ * Constructs a new file exists wakeup event with Skip action as default.
+ */
+ FileExistsWakeupEvent() : WakeupEvent(WakeupFileExists), action(Skip) {}
+
+ Action action;
+ QString newFileName;
+};
+
+/**
+ * A public key password request event for SFTP connections.
+ *
+ * @author Jernej Kos <kostko@jweb-network.net>
+ */
+class PubkeyWakeupEvent : public WakeupEvent {
+public:
+ /**
+ * Constructs a new public key wakeup event.
+ */
+ PubkeyWakeupEvent() : WakeupEvent(WakeupPubkey) {}
+
+ QString password;
+};
+
+/**
+ * This class represents an event that is passed to the EventHandler for
+ * processing. It can have multiple EventParameters.
+ *
+ * @author Jernej Kos <kostko@jweb-network.net>
+ */
+class Event : public QCustomEvent {
+public:
+ enum Type {
+ EventMessage,
+ EventCommand,
+ EventResponse,
+ EventMultiline,
+ EventRaw,
+ EventDirectoryListing,
+ EventDisconnect,
+ EventError,
+ EventConnect,
+ EventReady,
+ EventState,
+ EventScanComplete,
+ EventRetrySuccess,
+ EventReloadNeeded,
+
+ // Transfer events
+ EventTransferComplete,
+ EventResumeOffset,
+
+ // Events that require wakeup events
+ EventFileExists,
+ EventPubkeyPassword
+ };
+
+ /**
+ * Construct a new event with a parameter list.
+ *
+ * @param params Parameter list
+ */
+ Event(Type type, QValueList<EventParameter> params);
+ ~Event();
+
+ /**
+ * Return the event's type.
+ *
+ * @return Event's type
+ */
+ Type type() { return m_type; }
+
+ /**
+ * Returns the parameter with a specific index.
+ *
+ * @param index Parameter's index
+ * @return An EventParameter object
+ */
+ EventParameter getParameter(int index) { return m_params[index]; }
+protected:
+ Type m_type;
+ QValueList<EventParameter> m_params;
+};
+
+class Thread;
+
+/**
+ * This class handles events receieved from the thread and passes them
+ * on to the GUI as normal Qt signals.
+ *
+ * @author Jernej Kos <kostko@jweb-network.net>
+ */
+class EventHandler : public QObject {
+Q_OBJECT
+public:
+ /**
+ * Construct a new event handler.
+ *
+ * @param thread The thread this event handler belongs to
+ */
+ EventHandler(Thread *thread);
+protected:
+ void customEvent(QCustomEvent *e);
+protected:
+ Thread *m_thread;
+signals:
+ void engineEvent(KFTPEngine::Event *event);
+
+ void connected();
+ void disconnected();
+ void gotResponse(const QString &text);
+ void gotRawResponse(const QString &text);
+};
+
+}
+
+#endif