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 184 #ifdef USE_LDAP 185 GSList *addrindex_get_password_protected_ldap_servers(); 186 #endif 187 188 #endif /* __ADDRINDEX_H__ */ 189 190 /* 191 * End of Source. 192 */ 193