summaryrefslogtreecommitdiffstats
path: root/kftpgrabber/src/misc/customcommands/entry.h
blob: 85a97af732f8d4e26e8981425f580644103075f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
/*
 * 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 KFTPCORE_CUSTOMCOMMANDSENTRY_H
#define KFTPCORE_CUSTOMCOMMANDSENTRY_H

#include <ntqdom.h>
#include <ntqvaluelist.h>

#include <tdeaction.h>

namespace KFTPSession {
  class Session;
}

namespace KFTPCore {

namespace CustomCommands {

/**
 * This class represents a single custom command entry. A tree of
 * such objects is constructed from an XML file.
 *
 * @author Jernej Kos
 */
class Entry : public TQObject {
Q_OBJECT
public:
    /**
     * Possible parameter types.
     */
    enum ParameterType {
      String,
      Password,
      Integer
    };
    
    /**
     * Possible display types.
     */
    enum DisplayType {
      None,
      Window,
      MessageBox
    };
    
    /**
     * A single command parameter.
     */
    class Parameter {
    public:
        /**
         * Class constructor.
         */
        Parameter();
        
        /**
         * Class constructor.
         *
         * @param type Parameter type
         * @param name Parameter name
         */
        Parameter(ParameterType type, const TQString &name);
        
        /**
         * Returns the parameter type.
         */
        ParameterType type() const { return m_type; }
        
        /**
         * Returns the parameter name.
         */
        TQString name() const { return m_name; }
    private:
        ParameterType m_type;
        TQString m_name;
    };
    
    /**
     * Class constructor.
     *
     * @param name Short entry name
     */
    Entry(TQObject *parent, const TQString &name);
    
    /**
     * Returns entry's name.
     */
    TQString name() const { return m_name; }
    
    /**
     * Returns entry's description.
     */
    TQString description() const { return m_description; }
    
    /**
     * Returns entry's icon name.
     */
    TQString icon() const { return m_icon; }
    
    /**
     * Sets entry's description.
     *
     * @param description A longer entry description; can be rich text
     */
    void setDescription(const TQString &description) { m_description = description; }
    
    /**
     * Set entry's icon.
     *
     * @param icon An icon name
     */
    void setIcon(const TQString &icon) { m_icon = icon; }
    
    /**
     * Sets the raw command to be sent.
     *
     * @param command A valid FTP command with optional parameter placeholders
     */
    void setCommand(const TQString &command) { m_command = command; }
    
    /**
     * Appends a command parameter.
     *
     * @param type Parameter type
     * @param name Human readable parameter name
     */
    void appendParameter(ParameterType type, const TQString &name);
    
    /**
     * Sets response display type.
     *
     * @param type Display type
     */
    void setDisplayType(DisplayType type) { m_displayType = type; }
    
    /**
     * Sets the response handler to use.
     *
     * @param handler Handler name
     * @param args Optional argument node
     */
    void setResponseHandler(const TQString &handler, TQDomNode args);
    
    /**
     * Executes this entry. This will actually generate and show a proper
     * user input dialog, execute the command with the provided parameters,
     * pass the raw response to a selected handler and properly display
     * the result.
     *
     * @param session A remote session where command should be executed
     */
    void execute(KFTPSession::Session *session);
private slots:
    void handleResponse(const TQString &response);
private:
    TQString m_name;
    TQString m_description;
    TQString m_icon;
    TQString m_command;
    TQString m_handler;
    DisplayType m_displayType;
    
    TQValueList<Parameter> m_params;
    TQDomNode m_handlerArguments;
    
    KFTPSession::Session *m_lastSession;
};

/**
 * This class is a wrapper action, so a proper entry gets pulled and
 * executed.
 *
 * @author Jernej Kos
 */
class EntryAction : public TDEAction {
public:
    /**
     * Class constructor.
     *
     * @param entry Associated entry
     * @param session Associated session
     */
    EntryAction(Entry *entry, KFTPSession::Session *session);
    
    /**
     * Returns the associated entry instance.
     */
    Entry *entryInfo() const { return m_entryInfo; }
    
    /**
     * Returns the associated session instance.
     */
    KFTPSession::Session *session() const { return m_session; }
private:
    Entry *m_entryInfo;
    KFTPSession::Session *m_session;
};

}

}

#endif