ethumb: make exists client API async.
[framework/uifw/ethumb.git] / src / lib / client / Ethumb_Client.h
1 #ifndef __ETHUMB_CLIENT_H__
2 #define __ETHUMB_CLIENT_H__ 1
3
4 #include <Ecore.h>
5 #include <Ethumb.h>
6
7 #ifdef EAPI
8 # undef EAPI
9 #endif
10
11 #ifdef _WIN32
12 # ifdef EFL_ETHUMB_CLIENT_BUILD
13 #  ifdef DLL_EXPORT
14 #   define EAPI __declspec(dllexport)
15 #   define GNUC_NULL_TERMINATED
16 #  else
17 #   define EAPI
18 #   define GNUC_NULL_TERMINATED
19 #  endif /* ! DLL_EXPORT */
20 # else
21 #  define EAPI __declspec(dllimport)
22 #  define GNUC_NULL_TERMINATED
23 # endif /* ! EFL_ETHUMB_CLIENT_BUILD */
24 #else
25 # ifdef __GNUC__
26 #  if __GNUC__ >= 4
27 #   define EAPI __attribute__ ((visibility("default")))
28 #   define GNUC_NULL_TERMINATED __attribute__((__sentinel__))
29 #  else
30 #   define EAPI
31 #  define GNUC_NULL_TERMINATED
32 #  endif
33 # else
34 #  define EAPI
35 #  define GNUC_NULL_TERMINATED
36 # endif
37 #endif /* ! _WIN32 */
38
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42
43 /**
44  * @defgroup Ethumb_Client Ethumb Client
45  *
46  * @{
47  */
48
49 /**
50  * @defgroup Ethumb_Client_Basics Ethumb Client Basics
51  *
52  * Functions that all users must know of to use Ethumb_Client.
53  *
54  * @{
55  */
56
57 /**
58  * @brief client handle.
59  *
60  * The client handle is created by ethumb_client_connect() and
61  * destroyed by ethumb_client_disconnect(). The connection and
62  * requests are asynchronous and callbacks should be used to report
63  * both success and failure of calls.
64  */
65 typedef struct _Ethumb_Client Ethumb_Client;
66
67 /**
68  * @brief client exists request handle.
69  *
70  * The exists request handle is created by ethumb_client_thumb_exists(),
71  * automatically destroyed when it end and cancelled when requested by
72  * ethumb_client_thumb_exists_cancel().
73  */
74 typedef struct _Ethumb_Exists Ethumb_Exists;
75
76 /**
77  * @brief reports results of ethumb_client_connect()
78  *
79  * @param data extra context given to ethumb_client_connect().
80  * @param client handle of the current connection to server.
81  * @param success @c EINA_TRUE if connected or @c EINA_FALSE if it was
82  *        not possible.
83  */
84 typedef void (*Ethumb_Client_Connect_Cb)(void *data, Ethumb_Client *client, Eina_Bool success);
85
86 /**
87  * @brief reports server connection ended.
88  *
89  * Functions of this type may be called if they are set with
90  * ethumb_client_on_server_die_callback_set().
91  *
92  * @param data extra context given to ethumb_client_on_server_die_callback_set().
93  * @param client handle of the current connection to server.
94  */
95 typedef void (*Ethumb_Client_Die_Cb)(void *data, Ethumb_Client *client);
96
97 /**
98  * @brief reports results of ethumb_client_generate().
99  *
100  * @param data extra context given to ethumb_client_generate().
101  * @param client handle of the current connection to server.
102  * @param id identifier returned by ethumb_client_generate().
103  * @param file path set with ethumb_client_file_set().
104  * @param key value set with ethumb_client_file_set() or @c NULL.
105  * @param thumb_path where thumbnail was stored, either set with
106  *        ethumb_client_thumb_path_set() or automatically calculated
107  *        using parameters.
108  * @param thumb_key key inside thumb_path where thumbnail was stored or @c NULL.
109  * @param success @c EINA_TRUE if generated or @c EINA_FALSE on errors.
110  */
111 typedef void (*Ethumb_Client_Generate_Cb)(void *data, Ethumb_Client *client, int id, const char *file, const char *key, const char *thumb_path, const char *thumb_key, Eina_Bool success);
112
113 /**
114  * @brief report results of ethumb_client_thumb_exists().
115  *
116  * @param client handle of the current connection to server.
117  * @param exists EINA_TRUE if the thumbnail exists.
118  * @param data extra context given to ethumb_client_thumb_exists().
119  *
120  * During the execution of the callback the state of the @p client is
121  * temporarily realy restored to what it was when the call to
122  * ethumb_client_thumb_exists() was done.
123  */
124 typedef void (*Ethumb_Client_Thumb_Exists_Cb)(Ethumb_Client *client, Ethumb_Exists *thread, Eina_Bool exists, void *data);
125
126 /**
127  * @brief reports results of ethumb_client_generate_cancel()
128  *
129  * @param data extra context given to ethumb_client_generate_cancel()
130  * @param client handle of the current connection to server.
131  */
132 typedef void (*Ethumb_Client_Generate_Cancel_Cb)(void *data, Eina_Bool success);
133
134 EAPI int ethumb_client_init(void);
135 EAPI int ethumb_client_shutdown(void);
136
137 EAPI Ethumb_Client * ethumb_client_connect(Ethumb_Client_Connect_Cb connect_cb, const void *data, Eina_Free_Cb free_data);
138 EAPI void ethumb_client_disconnect(Ethumb_Client *client);
139 EAPI void ethumb_client_on_server_die_callback_set(Ethumb_Client *client, Ethumb_Client_Die_Cb server_die_cb, const void *data, Eina_Free_Cb free_data);
140
141 /**
142  * @}
143  */
144
145 /**
146  * @defgroup Ethumb_Client_Setup Ethumb Client Fine Tune Setup
147  *
148  * How to fine tune thumbnail generation, setting size, aspect, orientation,
149  * frames, quality and so on.
150  *
151  * @{
152  */
153
154 EAPI void ethumb_client_fdo_set(Ethumb_Client *client, Ethumb_Thumb_FDO_Size s);
155 EAPI void ethumb_client_size_set(Ethumb_Client *client, int tw, int th);
156 EAPI void ethumb_client_size_get(const Ethumb_Client *client, int *tw, int *th);
157 EAPI void ethumb_client_format_set(Ethumb_Client *client, Ethumb_Thumb_Format f);
158 EAPI Ethumb_Thumb_Format ethumb_client_format_get(const Ethumb_Client *client);
159 EAPI void ethumb_client_aspect_set(Ethumb_Client *client, Ethumb_Thumb_Aspect a);
160 EAPI Ethumb_Thumb_Aspect ethumb_client_aspect_get(const Ethumb_Client *client);
161 EAPI void ethumb_client_orientation_set(Ethumb_Client *client, Ethumb_Thumb_Orientation o);
162 EAPI Ethumb_Thumb_Orientation ethumb_client_orientation_get(const Ethumb_Client *client);
163 EAPI void ethumb_client_crop_align_set(Ethumb_Client *client, float x, float y);
164 EAPI void ethumb_client_crop_align_get(const Ethumb_Client *client, float *x, float *y);
165 EAPI void ethumb_client_quality_set(Ethumb_Client *client, int quality);
166 EAPI int ethumb_client_quality_get(const Ethumb_Client *client);
167 EAPI void ethumb_client_compress_set(Ethumb_Client *client, int compress);
168 EAPI int ethumb_client_compress_get(const Ethumb_Client *client);
169 EAPI Eina_Bool ethumb_client_frame_set(Ethumb_Client *client, const char *file, const char *group, const char *swallow);
170 EAPI void ethumb_client_dir_path_set(Ethumb_Client *client, const char *path);
171 EAPI const char * ethumb_client_dir_path_get(const Ethumb_Client *client);
172 EAPI void ethumb_client_category_set(Ethumb_Client *client, const char *category);
173 EAPI const char * ethumb_client_category_get(const Ethumb_Client *client);
174 EAPI void ethumb_client_video_time_set(Ethumb_Client *client, float time);
175 EAPI void ethumb_client_video_start_set(Ethumb_Client *client, float start);
176 EAPI void ethumb_client_video_interval_set(Ethumb_Client *client, float interval);
177 EAPI void ethumb_client_video_ntimes_set(Ethumb_Client *client, unsigned int ntimes);
178 EAPI void ethumb_client_video_fps_set(Ethumb_Client *client, unsigned int fps);
179 EAPI void ethumb_client_document_page_set(Ethumb_Client *client, unsigned int page);
180
181 EAPI void ethumb_client_ethumb_setup(Ethumb_Client *client);
182
183 EAPI void ethumb_client_thumb_path_set(Ethumb_Client *client, const char *path, const char *key);
184 EAPI void ethumb_client_thumb_path_get(Ethumb_Client *client, const char **path, const char **key);
185 /**
186  * @}
187  */
188
189 /**
190  * @addtogroup Ethumb_Client_Basics Ethumb Client Basics
191  * @{
192  */
193 EAPI Eina_Bool ethumb_client_file_set(Ethumb_Client *client, const char *path, const char *key);
194 EAPI void ethumb_client_file_get(Ethumb_Client *client, const char **path, const char **key);
195 EAPI void ethumb_client_file_free(Ethumb_Client *client);
196
197 EAPI Ethumb_Exists *ethumb_client_thumb_exists(Ethumb_Client *client, Ethumb_Client_Thumb_Exists_Cb exists_cb, const void *data);
198 EAPI void ethumb_client_thumb_exists_cancel(Ethumb_Exists *exists);
199 EAPI Eina_Bool ethumb_client_thumb_exists_check(Ethumb_Exists *exists);
200 EAPI int  ethumb_client_generate(Ethumb_Client *client, Ethumb_Client_Generate_Cb generated_cb, const void *data, Eina_Free_Cb free_data);
201 EAPI void ethumb_client_generate_cancel(Ethumb_Client *client, int id, Ethumb_Client_Generate_Cancel_Cb cancel_cb, const void *data, Eina_Free_Cb free_data);
202 EAPI void ethumb_client_generate_cancel_all(Ethumb_Client *client);
203 /**
204  * @}
205  */
206
207 /**
208  * @}
209  */
210
211
212 #ifdef __cplusplus
213 }
214 #endif
215 #endif /* __ETHUMB_CLIENT_H__ */