2007-10-07 [colin] 3.0.2cvs31
[claws.git] / src / addrindex.h
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 2001-2007 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 typedef struct _AddressDataSource AddressDataSource;
95 struct _AddressDataSource {
96         AddrItemObject obj;
97         AddressIfType type;
98         AddressInterface *interface;
99         gpointer rawDataSource;
100 };
101
102 void addrindex_initialize               ( void );
103 void addrindex_teardown                 ( void );
104
105 AddressIndex *addrindex_create_index    ( void );
106 void addrindex_set_file_path            ( AddressIndex *addrIndex,
107                                           const gchar *value );
108 void addrindex_set_file_name            ( AddressIndex *addrIndex,
109                                           const gchar *value );
110
111 GList *addrindex_get_interface_list     ( AddressIndex *addrIndex );
112 void addrindex_free_index               ( AddressIndex *addrIndex );
113 void addrindex_print_index              ( AddressIndex *addrIndex, FILE *stream );
114
115
116 AddressDataSource *addrindex_index_add_datasource       ( AddressIndex *addrIndex,
117                                                           AddressIfType ifType,
118                                                           gpointer dataSource );
119 AddressDataSource *addrindex_index_remove_datasource    ( AddressIndex *addrIndex,
120                                                           AddressDataSource *dataSource );
121
122 void addrindex_free_datasource          ( AddressDataSource *ds );
123 gchar *addrindex_get_cache_id           ( AddressIndex *addrIndex,
124                                           AddressDataSource *ds );
125 AddressCache *addrindex_get_cache       ( AddressIndex *addrIndex,
126                                           const gchar *cacheID );
127
128 gint addrindex_read_data                ( AddressIndex *addrIndex );
129 gint addrindex_save_data                ( AddressIndex *addrIndex );
130 gint addrindex_create_new_books         ( AddressIndex *addrIndex );
131 gint addrindex_save_all_books           ( AddressIndex *addrIndex );
132
133 gboolean addrindex_ds_get_modify_flag   ( AddressDataSource *ds );
134 gboolean addrindex_ds_get_access_flag   ( AddressDataSource *ds );
135 gboolean addrindex_ds_get_read_flag     ( AddressDataSource *ds );
136 gint addrindex_ds_get_status_code       ( AddressDataSource *ds );
137 gint addrindex_ds_read_data             ( AddressDataSource *ds );
138 ItemFolder *addrindex_ds_get_root_folder( AddressDataSource *ds );
139 gchar *addrindex_ds_get_name            ( AddressDataSource *ds );
140 void addrindex_ds_set_access_flag       ( AddressDataSource *ds,
141                                           gboolean *value );
142 gboolean addrindex_ds_get_readonly      ( AddressDataSource *ds );
143
144 /* Search support */
145 gint addrindex_setup_search             ( const gchar *searchTerm,
146                                           void *callBackEnd,
147                                           void *callBackEntry );
148
149 gint addrindex_setup_static_search      ( AddressDataSource *ds,
150                                           const gchar *searchTerm,
151                                           ItemFolder *folder,
152                                           void *callBackEnd,
153                                           void *callBackEntry );
154
155 gboolean addrindex_start_search         ( const gint queryID );
156 void addrindex_stop_search              ( const gint queryID );
157 gint addrindex_setup_explicit_search    ( AddressDataSource *ds, 
158                                           const gchar *searchTerm, 
159                                           ItemFolder *folder,
160                                           void *callBackEnd,
161                                           void *callBackEntry );
162 void addrindex_remove_results           ( AddressDataSource *ds,
163                                           ItemFolder *folder );
164
165 gboolean addrindex_load_completion(
166                 gint (*callBackFunc)
167                         ( const gchar *, const gchar *, 
168                           const gchar *, const gchar *, GList * ),
169                         gchar *folderpath );
170
171 gboolean addrindex_load_person_attribute( const gchar *attr,
172                 gint (*callBackFunc)
173                         ( ItemPerson *, const gchar * ) );
174
175 gboolean addrindex_load_person_ds( gint (*callBackFunc)
176                         ( ItemPerson *, AddressDataSource * ) );
177                         
178 #endif /* __ADDRINDEX_H__ */
179
180 /*
181 * End of Source.
182 */