b5b9e9af33b1edc663368f279d70b2b04a18aa9d
[claws.git] / src / addrindex.h
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 2001-2012 Match Grun and the Claws Mail team
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  * 
18  */
19
20 /*
21  * General functions for accessing address index file.
22  */
23
24 #ifndef __ADDRINDEX_H__
25 #define __ADDRINDEX_H__
26
27 #include <stdio.h>
28 #include <glib.h>
29 #include "addritem.h"
30 #include "addrcache.h"
31 #include "addrquery.h"
32
33 #define ADDRESSBOOK_MAX_IFACE  4
34 #define ADDRESSBOOK_INDEX_FILE "addrbook--index.xml"
35 #define ADDRESSBOOK_OLD_FILE   "addressbook.xml"
36
37 typedef enum {
38         ADDR_IF_NONE,
39         ADDR_IF_BOOK,
40         ADDR_IF_VCARD,
41         ADDR_IF_JPILOT,
42         ADDR_IF_LDAP,
43         ADDR_IF_COMMON,
44         ADDR_IF_PERSONAL
45 } AddressIfType;
46
47 typedef struct _AddressIndex AddressIndex;
48 struct _AddressIndex {
49         AddrItemObject obj;
50         gchar *filePath;
51         gchar *fileName;
52         gint  retVal;
53         gboolean needsConversion;
54         gboolean wasConverted;
55         gboolean conversionError;
56         AddressIfType lastType;
57         gboolean dirtyFlag;
58         GList *interfaceList;
59         GHashTable *hashCache;
60         gboolean loadedFlag;
61         GList *searchOrder;
62 };
63
64 typedef struct _AddressInterface AddressInterface;
65 struct _AddressInterface {
66         AddrItemObject obj;
67         AddressIfType type;
68         gchar *name;
69         gchar *listTag;
70         gchar *itemTag;
71         gboolean legacyFlag;
72         gboolean useInterface;
73         gboolean haveLibrary;
74         gboolean readOnly;
75         GList *listSource;
76         gboolean (*getModifyFlag)( void * );
77         gboolean (*getAccessFlag)( void * );
78         gboolean (*getReadFlag)( void * );
79         gint (*getStatusCode)( void * );
80         gint (*getReadData)( void * );
81         ItemFolder *(*getRootFolder)( void * );
82         GList *(*getListFolder)( void * );
83         GList *(*getListPerson)( void * );
84         GList *(*getAllPersons)( void * );
85         GList *(*getAllGroups)( void * );
86         gchar *(*getName)( void * );
87         void (*setAccessFlag)( void *, void * );
88         gboolean externalQuery;
89         gint searchOrder;
90         void (*startSearch)( void * );
91         void (*stopSearch)( void * );
92 };
93
94 #ifdef G_OS_WIN32
95 /* W32 headers define INTERFACE to "struct".  */
96 #undef interface
97 #endif
98
99 typedef struct _AddressDataSource AddressDataSource;
100 struct _AddressDataSource {
101         AddrItemObject obj;
102         AddressIfType type;
103         AddressInterface *interface;
104         gpointer rawDataSource;
105 };
106
107 void addrindex_initialize               ( void );
108 void addrindex_teardown                 ( void );
109
110 AddressIndex *addrindex_create_index    ( void );
111 void addrindex_set_file_path            ( AddressIndex *addrIndex,
112                                           const gchar *value );
113 void addrindex_set_file_name            ( AddressIndex *addrIndex,
114                                           const gchar *value );
115
116 GList *addrindex_get_interface_list     ( AddressIndex *addrIndex );
117 void addrindex_free_index               ( AddressIndex *addrIndex );
118 void addrindex_print_index              ( AddressIndex *addrIndex, FILE *stream );
119
120
121 AddressDataSource *addrindex_index_add_datasource       ( AddressIndex *addrIndex,
122                                                           AddressIfType ifType,
123                                                           gpointer dataSource );
124 AddressDataSource *addrindex_index_remove_datasource    ( AddressIndex *addrIndex,
125                                                           AddressDataSource *dataSource );
126
127 void addrindex_free_datasource          ( AddressDataSource *ds );
128 gchar *addrindex_get_cache_id           ( AddressIndex *addrIndex,
129                                           AddressDataSource *ds );
130 AddressCache *addrindex_get_cache       ( AddressIndex *addrIndex,
131                                           const gchar *cacheID );
132
133 gint addrindex_read_data                ( AddressIndex *addrIndex );
134 gint addrindex_save_data                ( AddressIndex *addrIndex );
135 gint addrindex_create_new_books         ( AddressIndex *addrIndex );
136 gint addrindex_save_all_books           ( AddressIndex *addrIndex );
137
138 gboolean addrindex_ds_get_modify_flag   ( AddressDataSource *ds );
139 gboolean addrindex_ds_get_access_flag   ( AddressDataSource *ds );
140 gboolean addrindex_ds_get_read_flag     ( AddressDataSource *ds );
141 gint addrindex_ds_get_status_code       ( AddressDataSource *ds );
142 gint addrindex_ds_read_data             ( AddressDataSource *ds );
143 ItemFolder *addrindex_ds_get_root_folder( AddressDataSource *ds );
144 gchar *addrindex_ds_get_name            ( AddressDataSource *ds );
145 void addrindex_ds_set_access_flag       ( AddressDataSource *ds,
146                                           gboolean *value );
147 gboolean addrindex_ds_get_readonly      ( AddressDataSource *ds );
148
149 /* Search support */
150 gint addrindex_setup_search             ( const gchar *searchTerm,
151                                           void *callBackEnd,
152                                           void *callBackEntry );
153
154 gint addrindex_setup_static_search      ( AddressDataSource *ds,
155                                           const gchar *searchTerm,
156                                           ItemFolder *folder,
157                                           void *callBackEnd,
158                                           void *callBackEntry );
159
160 gboolean addrindex_start_search         ( const gint queryID );
161 void addrindex_stop_search              ( const gint queryID );
162 gint addrindex_setup_explicit_search    ( AddressDataSource *ds, 
163                                           const gchar *searchTerm, 
164                                           ItemFolder *folder,
165                                           void *callBackEnd,
166                                           void *callBackEntry );
167 void addrindex_remove_results           ( AddressDataSource *ds,
168                                           ItemFolder *folder );
169
170 gboolean addrindex_load_completion(
171                 gint (*callBackFunc)
172                         ( const gchar *, const gchar *, 
173                           const gchar *, const gchar *, GList * ),
174                         gchar *folderpath );
175
176 gboolean addrindex_load_person_attribute( const gchar *attr,
177                 gint (*callBackFunc)
178                         ( ItemPerson *, const gchar * ) );
179
180 gboolean addrindex_load_person_ds( gint (*callBackFunc)
181                         ( ItemPerson *, AddressDataSource * ) );
182 gchar *addrindex_get_picture_file(const gchar *emailaddr);              
183 #endif /* __ADDRINDEX_H__ */
184
185 /*
186 * End of Source.
187 */