1
<refentry id="camel-camel-operation">
3
<refentrytitle role="top_of_page" id="camel-camel-operation.top_of_page">camel-operation</refentrytitle>
4
<manvolnum>3</manvolnum>
5
<refmiscinfo>CAMEL Library</refmiscinfo>
9
<refname>camel-operation</refname>
10
<refpurpose></refpurpose>
13
<refsynopsisdiv id="camel-camel-operation.synopsis" role="synopsis">
14
<title role="synopsis.title">Synopsis</title>
17
<link linkend="CamelOperation">CamelOperation</link>;
18
<link linkend="void">void</link> (<link linkend="CamelOperationStatusFunc">*CamelOperationStatusFunc</link>) (<link linkend="struct--CamelOperation">struct _CamelOperation</link> *op,
19
const <link linkend="gchar">gchar</link> *what,
20
<link linkend="gint">gint</link> pc,
21
<link linkend="gpointer">gpointer</link> data);
22
enum <link linkend="camel-operation-status-t">camel_operation_status_t</link>;
23
<link linkend="CamelOperation">CamelOperation</link> * <link linkend="camel-operation-new">camel_operation_new</link> (<link linkend="CamelOperationStatusFunc">CamelOperationStatusFunc</link> status,
24
<link linkend="gpointer">gpointer</link> status_data);
25
<link linkend="void">void</link> <link linkend="camel-operation-mute">camel_operation_mute</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
26
<link linkend="void">void</link> <link linkend="camel-operation-ref">camel_operation_ref</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
27
<link linkend="void">void</link> <link linkend="camel-operation-unref">camel_operation_unref</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
28
<link linkend="void">void</link> <link linkend="camel-operation-cancel">camel_operation_cancel</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
29
<link linkend="void">void</link> <link linkend="camel-operation-uncancel">camel_operation_uncancel</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
30
<link linkend="CamelOperation">CamelOperation</link> * <link linkend="camel-operation-register">camel_operation_register</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
31
<link linkend="void">void</link> <link linkend="camel-operation-unregister">camel_operation_unregister</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
32
<link linkend="void">void</link> <link linkend="camel-operation-cancel-block">camel_operation_cancel_block</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
33
<link linkend="void">void</link> <link linkend="camel-operation-cancel-unblock">camel_operation_cancel_unblock</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
34
<link linkend="gint">gint</link> <link linkend="camel-operation-cancel-check">camel_operation_cancel_check</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
35
<link linkend="gint">gint</link> <link linkend="camel-operation-cancel-fd">camel_operation_cancel_fd</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
36
struct <link linkend="PRFileDesc">PRFileDesc</link> * <link linkend="camel-operation-cancel-prfd">camel_operation_cancel_prfd</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
37
<link linkend="CamelOperation">CamelOperation</link> * <link linkend="camel-operation-registered">camel_operation_registered</link> (void);
38
<link linkend="void">void</link> <link linkend="camel-operation-start">camel_operation_start</link> (<link linkend="CamelOperation">CamelOperation</link> *cc,
39
const <link linkend="gchar">gchar</link> *what,
41
<link linkend="void">void</link> <link linkend="camel-operation-start-transient">camel_operation_start_transient</link> (<link linkend="CamelOperation">CamelOperation</link> *cc,
42
const <link linkend="gchar">gchar</link> *what,
44
<link linkend="void">void</link> <link linkend="camel-operation-progress">camel_operation_progress</link> (<link linkend="CamelOperation">CamelOperation</link> *cc,
45
<link linkend="gint">gint</link> pc);
46
<link linkend="void">void</link> <link linkend="camel-operation-progress-count">camel_operation_progress_count</link> (<link linkend="CamelOperation">CamelOperation</link> *cc,
47
<link linkend="gint">gint</link> sofar);
48
<link linkend="void">void</link> <link linkend="camel-operation-end">camel_operation_end</link> (<link linkend="CamelOperation">CamelOperation</link> *cc);
60
<refsect1 id="camel-camel-operation.description" role="desc">
61
<title role="desc.title">Description</title>
66
<refsect1 id="camel-camel-operation.details" role="details">
67
<title role="details.title">Details</title>
68
<refsect2 id="CamelOperation" role="struct">
69
<title>CamelOperation</title>
70
<indexterm zone="CamelOperation"><primary sortas="CamelOperation">CamelOperation</primary></indexterm><programlisting>typedef struct _CamelOperation CamelOperation;</programlisting>
73
<refsect2 id="CamelOperationStatusFunc" role="function">
74
<title>CamelOperationStatusFunc ()</title>
75
<indexterm zone="CamelOperationStatusFunc"><primary sortas="CamelOperationStatusFunc">CamelOperationStatusFunc</primary></indexterm><programlisting><link linkend="void">void</link> (*CamelOperationStatusFunc) (<link linkend="struct--CamelOperation">struct _CamelOperation</link> *op,
76
const <link linkend="gchar">gchar</link> *what,
77
<link linkend="gint">gint</link> pc,
78
<link linkend="gpointer">gpointer</link> data);</programlisting>
80
</para><variablelist role="params">
81
<varlistentry><term><parameter>op</parameter> :</term>
83
</simpara></listitem></varlistentry>
84
<varlistentry><term><parameter>what</parameter> :</term>
86
</simpara></listitem></varlistentry>
87
<varlistentry><term><parameter>pc</parameter> :</term>
89
</simpara></listitem></varlistentry>
90
<varlistentry><term><parameter>data</parameter> :</term>
92
</simpara></listitem></varlistentry>
93
</variablelist></refsect2>
94
<refsect2 id="camel-operation-status-t" role="enum">
95
<title>enum camel_operation_status_t</title>
96
<indexterm zone="camel-operation-status-t"><primary sortas="camel_operation_status_t">camel_operation_status_t</primary></indexterm><programlisting>typedef enum _camel_operation_status_t {
97
CAMEL_OPERATION_START = -1,
98
CAMEL_OPERATION_END = -2
99
} camel_operation_status_t;
103
<refsect2 id="camel-operation-new" role="function">
104
<title>camel_operation_new ()</title>
105
<indexterm zone="camel-operation-new"><primary sortas="camel_operation_new">camel_operation_new</primary></indexterm><programlisting><link linkend="CamelOperation">CamelOperation</link> * camel_operation_new (<link linkend="CamelOperationStatusFunc">CamelOperationStatusFunc</link> status,
106
<link linkend="gpointer">gpointer</link> status_data);</programlisting>
108
Create a new camel operation handle. Camel operation handles can
109
be used in a multithreaded application (or a single operation
110
handle can be used in a non threaded appliation) to cancel running
111
operations and to obtain notification messages of the internal
112
status of messages.</para>
114
</para><variablelist role="params">
115
<varlistentry><term><parameter>status</parameter> :</term>
116
<listitem><simpara> Callback for receiving status messages. This will always
117
be called with an internal lock held.
118
</simpara></listitem></varlistentry>
119
<varlistentry><term><parameter>status_data</parameter> :</term>
120
<listitem><simpara> User data.
121
</simpara></listitem></varlistentry>
122
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> A new operation handle.
123
</simpara></listitem></varlistentry>
124
</variablelist></refsect2>
125
<refsect2 id="camel-operation-mute" role="function">
126
<title>camel_operation_mute ()</title>
127
<indexterm zone="camel-operation-mute"><primary sortas="camel_operation_mute">camel_operation_mute</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_mute (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
129
mutes a camel operation permanently. from this point on you will never
130
receive operation updates, even if more are sent.</para>
132
</para><variablelist role="params">
133
<varlistentry><term><parameter>cc</parameter> :</term>
135
</simpara></listitem></varlistentry>
136
</variablelist></refsect2>
137
<refsect2 id="camel-operation-ref" role="function">
138
<title>camel_operation_ref ()</title>
139
<indexterm zone="camel-operation-ref"><primary sortas="camel_operation_ref">camel_operation_ref</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_ref (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
141
Add a reference to the CamelOperation <parameter>cc</parameter>.</para>
143
</para><variablelist role="params">
144
<varlistentry><term><parameter>cc</parameter> :</term>
145
<listitem><simpara> operation context
146
</simpara></listitem></varlistentry>
147
</variablelist></refsect2>
148
<refsect2 id="camel-operation-unref" role="function">
149
<title>camel_operation_unref ()</title>
150
<indexterm zone="camel-operation-unref"><primary sortas="camel_operation_unref">camel_operation_unref</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_unref (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
152
Unref and potentially free <parameter>cc</parameter>.</para>
154
</para><variablelist role="params">
155
<varlistentry><term><parameter>cc</parameter> :</term>
156
<listitem><simpara> operation context
157
</simpara></listitem></varlistentry>
158
</variablelist></refsect2>
159
<refsect2 id="camel-operation-cancel" role="function">
160
<title>camel_operation_cancel ()</title>
161
<indexterm zone="camel-operation-cancel"><primary sortas="camel_operation_cancel">camel_operation_cancel</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_cancel (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
163
Cancel a given operation. If <parameter>cc</parameter> is NULL then all outstanding
164
operations are cancelled.</para>
166
</para><variablelist role="params">
167
<varlistentry><term><parameter>cc</parameter> :</term>
168
<listitem><simpara> operation context
169
</simpara></listitem></varlistentry>
170
</variablelist></refsect2>
171
<refsect2 id="camel-operation-uncancel" role="function">
172
<title>camel_operation_uncancel ()</title>
173
<indexterm zone="camel-operation-uncancel"><primary sortas="camel_operation_uncancel">camel_operation_uncancel</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_uncancel (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
175
Uncancel a cancelled operation. If <parameter>cc</parameter> is NULL then the current
176
operation is uncancelled.
179
This is useful, if e.g. you need to do some cleaning up where a
180
cancellation lying around in the same thread will abort any
183
</para><variablelist role="params">
184
<varlistentry><term><parameter>cc</parameter> :</term>
185
<listitem><simpara> operation context
186
</simpara></listitem></varlistentry>
187
</variablelist></refsect2>
188
<refsect2 id="camel-operation-register" role="function">
189
<title>camel_operation_register ()</title>
190
<indexterm zone="camel-operation-register"><primary sortas="camel_operation_register">camel_operation_register</primary></indexterm><programlisting><link linkend="CamelOperation">CamelOperation</link> * camel_operation_register (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
192
Register a thread or the main thread for cancellation through <parameter>cc</parameter>.
193
If <parameter>cc</parameter> is NULL, then a new cancellation is created for this thread.
196
All calls to <link linkend="operation-register"><function>operation_register()</function></link> should save their value and call
197
operation_register again with that, to automatically stack
198
registrations.</para>
200
</para><variablelist role="params">
201
<varlistentry><term><parameter>cc</parameter> :</term>
202
<listitem><simpara> operation context
203
</simpara></listitem></varlistentry>
204
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the previously registered operatoin.
206
</simpara></listitem></varlistentry>
207
</variablelist></refsect2>
208
<refsect2 id="camel-operation-unregister" role="function">
209
<title>camel_operation_unregister ()</title>
210
<indexterm zone="camel-operation-unregister"><primary sortas="camel_operation_unregister">camel_operation_unregister</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_unregister (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
212
Unregister the current thread for all cancellations.</para>
214
</para><variablelist role="params">
215
<varlistentry><term><parameter>cc</parameter> :</term>
216
<listitem><simpara> operation context
217
</simpara></listitem></varlistentry>
218
</variablelist></refsect2>
219
<refsect2 id="camel-operation-cancel-block" role="function">
220
<title>camel_operation_cancel_block ()</title>
221
<indexterm zone="camel-operation-cancel-block"><primary sortas="camel_operation_cancel_block">camel_operation_cancel_block</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_cancel_block (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
223
Block cancellation for this operation. If <parameter>cc</parameter> is NULL, then the
224
current thread is blocked.</para>
226
</para><variablelist role="params">
227
<varlistentry><term><parameter>cc</parameter> :</term>
228
<listitem><simpara> operation context
229
</simpara></listitem></varlistentry>
230
</variablelist></refsect2>
231
<refsect2 id="camel-operation-cancel-unblock" role="function">
232
<title>camel_operation_cancel_unblock ()</title>
233
<indexterm zone="camel-operation-cancel-unblock"><primary sortas="camel_operation_cancel_unblock">camel_operation_cancel_unblock</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_cancel_unblock (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
235
Unblock cancellation, when the unblock count reaches the block
236
count, then this operation can be cancelled. If <parameter>cc</parameter> is NULL, then
237
the current thread is unblocked.</para>
239
</para><variablelist role="params">
240
<varlistentry><term><parameter>cc</parameter> :</term>
241
<listitem><simpara> operation context
242
</simpara></listitem></varlistentry>
243
</variablelist></refsect2>
244
<refsect2 id="camel-operation-cancel-check" role="function">
245
<title>camel_operation_cancel_check ()</title>
246
<indexterm zone="camel-operation-cancel-check"><primary sortas="camel_operation_cancel_check">camel_operation_cancel_check</primary></indexterm><programlisting><link linkend="gint">gint</link> camel_operation_cancel_check (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
248
Check if cancellation has been applied to <parameter>cc</parameter>. If <parameter>cc</parameter> is NULL,
249
then the CamelOperation registered for the current thread is used.</para>
251
</para><variablelist role="params">
252
<varlistentry><term><parameter>cc</parameter> :</term>
253
<listitem><simpara> operation context
254
</simpara></listitem></varlistentry>
255
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> TRUE if the operation has been cancelled.
256
</simpara></listitem></varlistentry>
257
</variablelist></refsect2>
258
<refsect2 id="camel-operation-cancel-fd" role="function">
259
<title>camel_operation_cancel_fd ()</title>
260
<indexterm zone="camel-operation-cancel-fd"><primary sortas="camel_operation_cancel_fd">camel_operation_cancel_fd</primary></indexterm><programlisting><link linkend="gint">gint</link> camel_operation_cancel_fd (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
262
Retrieve a file descriptor that can be waited on (select, or poll)
263
for read, to asynchronously detect cancellation.</para>
265
</para><variablelist role="params">
266
<varlistentry><term><parameter>cc</parameter> :</term>
267
<listitem><simpara> operation context
268
</simpara></listitem></varlistentry>
269
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The fd, or -1 if cancellation is not available
270
(blocked, or has not been registered for this thread).
271
</simpara></listitem></varlistentry>
272
</variablelist></refsect2>
273
<refsect2 id="camel-operation-cancel-prfd" role="function">
274
<title>camel_operation_cancel_prfd ()</title>
275
<indexterm zone="camel-operation-cancel-prfd"><primary sortas="camel_operation_cancel_prfd">camel_operation_cancel_prfd</primary></indexterm><programlisting>struct <link linkend="PRFileDesc">PRFileDesc</link> * camel_operation_cancel_prfd (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
277
Retrieve a file descriptor that can be waited on (select, or poll)
278
for read, to asynchronously detect cancellation.</para>
280
</para><variablelist role="params">
281
<varlistentry><term><parameter>cc</parameter> :</term>
282
<listitem><simpara> operation context
283
</simpara></listitem></varlistentry>
284
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The fd, or NULL if cancellation is not available
285
(blocked, or has not been registered for this thread).
286
</simpara></listitem></varlistentry>
287
</variablelist></refsect2>
288
<refsect2 id="camel-operation-registered" role="function">
289
<title>camel_operation_registered ()</title>
290
<indexterm zone="camel-operation-registered"><primary sortas="camel_operation_registered">camel_operation_registered</primary></indexterm><programlisting><link linkend="CamelOperation">CamelOperation</link> * camel_operation_registered (void);</programlisting>
294
</para><variablelist role="params">
295
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the registered operation, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if none registered.
296
</simpara></listitem></varlistentry>
297
</variablelist></refsect2>
298
<refsect2 id="camel-operation-start" role="function">
299
<title>camel_operation_start ()</title>
300
<indexterm zone="camel-operation-start"><primary sortas="camel_operation_start">camel_operation_start</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_start (<link linkend="CamelOperation">CamelOperation</link> *cc,
301
const <link linkend="gchar">gchar</link> *what,
302
...);</programlisting>
304
Report the start of an operation. All start operations should have
305
similar end operations.</para>
307
</para><variablelist role="params">
308
<varlistentry><term><parameter>cc</parameter> :</term>
309
<listitem><simpara> operation context
310
</simpara></listitem></varlistentry>
311
<varlistentry><term><parameter>what</parameter> :</term>
312
<listitem><simpara> action being performed (printf-style format string)
313
</simpara></listitem></varlistentry>
314
<varlistentry><term><parameter>...</parameter> :</term>
315
<listitem><simpara> varargs
316
</simpara></listitem></varlistentry>
317
</variablelist></refsect2>
318
<refsect2 id="camel-operation-start-transient" role="function">
319
<title>camel_operation_start_transient ()</title>
320
<indexterm zone="camel-operation-start-transient"><primary sortas="camel_operation_start_transient">camel_operation_start_transient</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_start_transient (<link linkend="CamelOperation">CamelOperation</link> *cc,
321
const <link linkend="gchar">gchar</link> *what,
322
...);</programlisting>
324
Start a transient event. We only update this to the display if it
325
takes very long to process, and if we do, we then go back to the
326
previous state when finished.</para>
328
</para><variablelist role="params">
329
<varlistentry><term><parameter>cc</parameter> :</term>
330
<listitem><simpara> operation context
331
</simpara></listitem></varlistentry>
332
<varlistentry><term><parameter>what</parameter> :</term>
333
<listitem><simpara> printf-style format string describing the action being performed
334
</simpara></listitem></varlistentry>
335
<varlistentry><term><parameter>...</parameter> :</term>
336
<listitem><simpara> varargs
337
</simpara></listitem></varlistentry>
338
</variablelist></refsect2>
339
<refsect2 id="camel-operation-progress" role="function">
340
<title>camel_operation_progress ()</title>
341
<indexterm zone="camel-operation-progress"><primary sortas="camel_operation_progress">camel_operation_progress</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_progress (<link linkend="CamelOperation">CamelOperation</link> *cc,
342
<link linkend="gint">gint</link> pc);</programlisting>
344
Report progress on the current operation. If <parameter>cc</parameter> is NULL, then the
345
currently registered operation is used. <parameter>pc</parameter> reports the current
346
percentage of completion, which should be in the range of 0 to 100.
349
If the total percentage is not know, then use
350
<link linkend="camel-operation-progress-count"><function>camel_operation_progress_count()</function></link>.</para>
352
</para><variablelist role="params">
353
<varlistentry><term><parameter>cc</parameter> :</term>
354
<listitem><simpara> Operation to report to.
355
</simpara></listitem></varlistentry>
356
<varlistentry><term><parameter>pc</parameter> :</term>
357
<listitem><simpara> Percent complete, 0 to 100.
358
</simpara></listitem></varlistentry>
359
</variablelist></refsect2>
360
<refsect2 id="camel-operation-progress-count" role="function">
361
<title>camel_operation_progress_count ()</title>
362
<indexterm zone="camel-operation-progress-count"><primary sortas="camel_operation_progress_count">camel_operation_progress_count</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_progress_count (<link linkend="CamelOperation">CamelOperation</link> *cc,
363
<link linkend="gint">gint</link> sofar);</programlisting>
367
</para><variablelist role="params">
368
<varlistentry><term><parameter>cc</parameter> :</term>
369
<listitem><simpara> operation context
370
</simpara></listitem></varlistentry>
371
<varlistentry><term><parameter>sofar</parameter> :</term>
373
</simpara></listitem></varlistentry>
374
</variablelist></refsect2>
375
<refsect2 id="camel-operation-end" role="function">
376
<title>camel_operation_end ()</title>
377
<indexterm zone="camel-operation-end"><primary sortas="camel_operation_end">camel_operation_end</primary></indexterm><programlisting><link linkend="void">void</link> camel_operation_end (<link linkend="CamelOperation">CamelOperation</link> *cc);</programlisting>
379
Report the end of an operation. If <parameter>cc</parameter> is NULL, then the currently
380
registered operation is notified.</para>
382
</para><variablelist role="params">
383
<varlistentry><term><parameter>cc</parameter> :</term>
384
<listitem><simpara> operation context
385
</simpara></listitem></varlistentry>
386
</variablelist></refsect2>