Statistics
| Revision:

root / trunk / client / gui_qt / QNNTPGrabGlue.h @ 1717

History | View | Annotate | Download (11.7 KB)

1
#ifndef QNNTPGRAB_GLUE_H
2
#define QNNTPGRAB_GLUE_H
3

                
4
#include 
5
#include 
6
#include 
7
#include 
8

                
9
#include "nntpgrab_glue.h"
10

                
11
class QNNTPGrabGlueThread : public QThread
12
{
13
    Q_OBJECT
14

                
15
private:
16
    NNTPGrabGlue *glue;
17

                
18
public:
19
    QNNTPGrabGlueThread (NNTPGrabGlue *glue);
20
    ~QNNTPGrabGlueThread();
21

                
22
protected:
23
    void run();
24
};
25

                
26
class QNNTPGrabGlue : public QObject
27
{
28
    Q_OBJECT
29

                
30
public:
31
    QNNTPGrabGlue();
32
    ~QNNTPGrabGlue();
33

                
34
    enum NNTPDisconnectType {
35
        DISCONNECT_NORMAL,
36
        DISCONNECT_NO_SUCH_HOST,
37
        DISCONNECT_CONNECTION_REFUSED,
38
        DISCONNECT_TOO_MANY_CONNECTIONS,
39
        DISCONNECT_CONNECT_TIMEOUT,
40
        DISCONNECT_READ_ERROR,
41
        DISCONNECT_READ_TIMEOUT,
42
        DISCONNECT_WRITE_ERROR,
43
        DISCONNECT_IDLE_TIMEOUT,
44
        DISCONNECT_INVALID_MSG,
45
        DISCONNECT_LOGIN_FAILURE,
46
        DISCONNECT_ERROR_SSL_INITIALISE,
47
        DISCONNECT_UNEXPECTED
48
    };
49

                
50
    enum TaskState {
51
        TASK_STATE_WAITING_FOR_DOWNLOAD,
52
        TASK_STATE_DOWNLOADING,
53
        TASK_STATE_WAITING_FOR_DECODE,
54
        TASK_STATE_DECODING,
55
        TASK_STATE_FINISHED_COMPLETE,
56
        TASK_STATE_FINISHED_INCOMPLETE,
57
        TASK_STATE_FINISHED_NO_PARTS_AVAIL,
58
        TASK_STATE_SKIPPED
59
    };
60

                
61
    enum LogLevel {
62
        LOG_LEVEL_ALL = 0,
63
        LOG_LEVEL_INFO,
64
        LOG_LEVEL_WARNING,
65
        LOG_LEVEL_ERROR,
66
        LOG_LEVEL_FATAL,
67
        LOG_LEVEL_DEBUG,
68
    };
69

                
70
    enum SchedularState {
71
        SCHEDULAR_STATE_RUNNING,
72
        SCHEDULAR_STATE_STOPPING,
73
        SCHEDULAR_STATE_STOPPED
74
    };
75

                
76
    struct Folder {
77
        QString folder;
78
        bool has_subfolders;
79
    };
80

                
81
    struct File {
82
        QString collection_name;
83
        QString subject;
84
        QString poster;
85
        QDateTime stamp;
86
        quint64 file_size;
87
        quint64 file_size_remaining;
88
        int position;
89
        int num_parts_total;
90
        int num_parts_downloaded;
91
        int num_parts_failed;
92
        QNNTPGrabGlue::TaskState status;
93
        QString filename;
94
        QList groups;
95
    };
96

                
97
    struct Collection {
98
        QString collection_name;
99
        QString poster;
100
        quint64 total_size;
101
        quint64 total_size_remaining;
102
        int position;
103
        QList files;
104
    };
105

                
106
    struct Part {
107
        QString message_id;
108
        int size;
109
        int part_num;
110
    };
111

                
112
    struct NZBFile {
113
        QString subject;
114
        QString poster;
115
        QDateTime stamp;
116
        quint64 file_size;
117
        QList groups;
118
        QList segments;
119
    };
120

                
121
    struct NZB {
122
        QList files;
123
    };
124

                
125
    bool init(QString hostname, int port, QString username, QString password, bool use_ssl, QString &errmsg, QString &warnings);
126
    bool getIsConnected();
127
    bool getIsStandalone();
128

                
129
    QList configGetAvailServers();
130
    bool configGetServerInfo(QString servername, ConfigServer *server);
131
    bool configAddServer(ConfigServer new_server, QString &errmsg);
132
    bool configDelServer(QString servername, QString &errmsg);
133
    bool configEditServer(QString servername, ConfigServer server, QString &errmsg);
134

                
135
    ConfigOpts configGetOpts();
136
    void configSetOpts(ConfigOpts opts);
137

                
138
    bool configGetFolderListing(QString parent, QList folders);
139

                
140
    bool startSchedular();
141
    bool stopSchedular(bool wait);
142
    SchedularState getSchedularState();
143

                
144
    bool schedularAddTaskToQueue(QString collection_name, QString subject, QString poster, QDateTime stamp, quint64 file_size, QList groups, QList parts, QString &errmsg);
145
    bool schedularDelTaskFromQueue(QString collection_name, QString subject, QString &errmsg);
146
    bool schedularRestartTask(QString collection_name, QString subject, QString &errmsg);
147
    bool schedularMarkTaskOptional(QString collection_name, QString subject, bool is_optional);
148
    bool schedularSaveQueue(char **errmsg);
149

                
150
    QList schedularGetAllTasks(void);
151

                
152
    bool schedularMoveTask(QString collection_name_src, QString subject_src, QString collection_name_dest, int position_dest);
153
    bool schedularMoveCollection(QString collection_name, int new_position);
154

                
155
    QList getAvailPlugins();
156
    bool getPluginInfo(QString plugin_name, NNTPGrabPluginInfo *plugin_info);
157
    bool loadPlugin(QString plugin_name, QString *errmsg);
158
    bool unloadPlugin(QString plugin_name, char **errmsg);
159
    bool setPluginPersistent(QString plugin_name, bool persistent);
160

                
161
    QString utilsCalculateFileSize(quint64 file_size);
162
    int utilsCalculateEstimatedTimeRemaining(int bytes_received1, int bytes_received2, int bytes_received3, int bytes_received4, int bytes_received5, int bytes_received6, int bytes_received7, int bytes_received8, int bytes_received9, int bytes_received10, quint64 file_size);
163
    QString utilsGetReadableTimeRemaining(int estimated_time_remaining);
164
    QString utilsGetReadableFinishedTime(int estimated_time_remaining);
165

                
166
    bool utilsParseNZBFile(QString nzb_data, QNNTPGrabGlue::NZB &nzbfile, QString &errmsg);
167
    QString utilsSanitizeCollectionName(QString collection_name);
168

                
169
private:
170
    NNTPGrabGlue *glue;
171
    QNNTPGrabGlueThread *callbacks_thread;
172

                
173
    static void configChangedWrapper(NNTPGrabGlue *glue, void *data);
174
    static void allDownloadsCompletedWrapper(NNTPGrabGlue *glue, void *data);
175
    static void partDownloadStartWrapper(NNTPGrabGlue *glue, const char *servername, int conn_id, const char *collection_name, const char *subject, int part_num, void *data);
176
    static void partDoneWrapper(NNTPGrabGlue *glue, const char *servername, int conn_id, const char *collection_name, const char *subject, int part_num, int size, void *data);
177
    static void partFailedWrapper(NNTPGrabGlue *glue, const char *servername, int conn_id, const char *collection_name, const char *subject, int part_num,int size, bool all_servers_tried, void *data);
178
    static void trafficMonitorUpdateWrapper(NNTPGrabGlue *glue, int bytes_received1, int bytes_received2, int bytes_received3, int bytes_received4, int bytes_received5, int bytes_received6, int bytes_received7, int bytes_received8, int bytes_received9, int bytes_received10, nguint64 stamp, double average, void *data);
179
    static void partProgressUpdateWrapper(NNTPGrabGlue *glue, const char *servername, int conn_id, const char *collection_name, const char *subject, int part_num, int bytes_downloaded, int bytes_total, void *data);
180
    static void collectionAddedWrapper(NNTPGrabGlue *glue, const char *collection_name, const char *poster, void *data);
181
    static void collectionModifiedWrapper(NNTPGrabGlue *glue, const char *collection_name, const char *poster, void *data);
182
    static void collectionRemovedWrapper(NNTPGrabGlue *glue, const char *collection_name, void *data);
183
    static void fileAddedWrapper(NNTPGrabGlue *glue, const char *collection_name, const char *subject, const char *poster, nguint64 stamp, nguint64 file_size, nguint64 total_size, nguint64 total_size_remaining, TaskState state, int num_parts, NGList *groups, void *data);
184
    static void fileRemovedWrapper(NNTPGrabGlue *glue, const char *collection_name, const char *subject, nguint64 total_size, nguint64 total_size_remaining, void *data);
185
    static void fileDownloadStateUpdateWrapper(NNTPGrabGlue *glue, const char *collection_name, const char *subject, int num_parts_total, int num_parts_done, int num_parts_failed, nguint64 file_size, nguint64 file_size_remaining, nguint64 total_size, nguint64 total_size_remaining, void *data);
186
    static void fileStateChangedWrapper(NNTPGrabGlue *glue, const char *collection_name, const char *subject, const char *real_filename, TaskState old_state, TaskState new_state, void *data);
187
    static void connectionConnectingWrapper(NNTPGrabGlue *glue, const char *servername, int conn_id, void *data);
188
    static void connectionConnectedWrapper(NNTPGrabGlue *glue, const char *servername, int conn_id, const char *welcome_msg, void *data);
189
    static void connectionDisconnectWrapper(NNTPGrabGlue *glue, const char *servername, int conn_id, NNTPDisconnectType disconnect_type, const char *reason, void *data);
190
    static void schedularStateChangedWrapper(NNTPGrabGlue *glue, NGSchedularState new_state, const char *reason, void *data);
191
    static void logMessageWrapper(NNTPGrabGlue *glue, const char *component, NGLogLevel log_level, const char *msg, void *data);
192
    static void fileMovedWrapper(NNTPGrabGlue *glue, const char *orig_collection_name, const char *subject, const char *new_collection_name, int old_position, int new_position, void *data);
193
    static void collectionMovedWrapper(NNTPGrabGlue *glue, const char *collection_name, int old_position, int new_position, void *data);
194
    static void collectionDownloadedWrapper(NNTPGrabGlue *glue, const char *collection_name, void *data);
195
    static void pluginLoadedWrapper(NNTPGrabGlue *glue, const char *plugin_name, bool is_persistent, void *data);
196
    static void pluginUnloadedWrapper(NNTPGrabGlue *glue, const char *plugin_name, void *data);
197
    static void pluginEventWrapper(NNTPGrabGlue *glue, const char *plugin_name, const char *event_name, const char **values, void *data);
198

                
199
signals:
200
    void configChanged();
201
    void allDownloadsCompleted();
202
    void partDownloadStart(QString servername, int conn_id, QString collection_name, QString subject, int part_num);
203
    void partDone(QString servername, int conn_id, QString collection_name, QString subject, int part_num, int size);
204
    void partFailed(QString servername, int conn_id, QString collection_name, QString subject, int part_num, int size, bool all_servers_tried);
205
    void partProgressUpdate(QString servername, int conn_id, QString collection_name, QString subject, int part_num, int bytes_downloaded, int bytes_total);
206
    void trafficMonitorUpdate(int bytes_received1, int bytes_received2, int bytes_received3, int bytes_received4, int bytes_received5, int bytes_received6, int bytes_received7, int bytes_received8, int bytes_received9, int bytes_received10, time_t stamp, double average);
207
    void collectionAdded(QString collection_name, QString poster);
208
    void collectionModified(QString collection_name, QString poster);
209
    void collectionRemoved(QString collection_name);
210
    void fileAdded(QString collection_name, QString subject, QString poster, time_t stamp, quint64 file_size, quint64 total_size, quint64 total_size_remaining, QNNTPGrabGlue::TaskState state, int num_parts, QList groups);
211
    void fileRemoved(QString collection_name, QString subject, quint64 total_size, quint64 total_size_remaining);
212
    void fileDownloadStateUpdate(QString collection_name, QString subject, int num_parts_total, int num_parts_done, int num_parts_failed, quint64 file_size, quint64 file_size_remaining, quint64 total_size, quint64 total_size_remaining);
213
    void fileStateChanged(QString collection_name, QString subject, QString real_filename, QNNTPGrabGlue::TaskState old_state, QNNTPGrabGlue::TaskState new_state);
214
    void connectionConnecting(QString servername, int conn_id);
215
    void connectionConnected(QString servername, int conn_id, QString welcome_msg);
216
    void connectionDisconnect(QString servername, int conn_id, QNNTPGrabGlue::NNTPDisconnectType disconnect_type, QString reason);
217
    void schedularStateChanged(QNNTPGrabGlue::SchedularState new_state, QString reason);
218
    void logMessage(QString component, QNNTPGrabGlue::LogLevel log_level, QString msg);
219
    void fileMoved(QString orig_collection_name, QString subject, QString new_collection_name, int old_position, int new_position);
220
    void collectionMoved(QString collection_name, int old_position, int new_position);
221
    void collectionDownloaded(QString collection_name);
222
    void pluginLoaded(QString plugin_name, bool is_persistent);
223
    void pluginUnloaded(QString plugin_name);
224
    void pluginEvent(QString plugin_name, QString event_name, QList values);
225
};
226

                
227
#endif // QNNTPGRAB_GLUE_H