00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef INCL_ADDRESSBOOKSOURCE
00020 #define INCL_ADDRESSBOOKSOURCE
00021
00022 #include <config.h>
00023 #include "TrackingSyncSource.h"
00024
00025 #ifdef ENABLE_ADDRESSBOOK
00026
00027 #include <AddressBook/ABAddressBookC.h>
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 template<class T, bool doRelease =
00039 #ifdef IPHONE
00040
00041
00042 false
00043 #else
00044 true
00045 #endif
00046 > class ref {
00047
00048 ref( const ref &other) {};
00049
00050
00051 void operator = ( const ref &other ) {}
00052
00053 protected:
00054 T m_pointer;
00055
00056 public:
00057
00058
00059
00060
00061 ref(T pointer = NULL, const char *objectName = NULL) :
00062 m_pointer( pointer )
00063 {
00064 if (!pointer && objectName ) {
00065 throw std::runtime_error(std::string("Error allocating ") + objectName);
00066 }
00067 };
00068 ~ref()
00069 {
00070 set( NULL );
00071 }
00072
00073
00074
00075
00076
00077
00078 void set( T pointer, const char *objectName = NULL )
00079 {
00080 if (m_pointer && doRelease) {
00081 CFRelease(m_pointer);
00082 }
00083 if (!pointer && objectName) {
00084 throw std::runtime_error(std::string("Error allocating ") + objectName);
00085 }
00086 m_pointer = pointer;
00087 }
00088
00089 ref<T> &operator = ( T pointer ) { set( pointer ); return *this; }
00090 T operator-> () { return m_pointer; }
00091 T operator * () { return m_pointer; }
00092 operator T () { return m_pointer; }
00093 operator bool () { return m_pointer != NULL; }
00094
00095 T release() {
00096 T res = m_pointer;
00097 m_pointer = NULL;
00098 return res;
00099 }
00100 };
00101
00102 #if 0
00103
00104 #ifdef IPHONE
00105
00106 template<class T> typedef ref<T, false> iphoneref;
00107 #else
00108 template<class T> typedef ref<T, true> iphoneref;
00109 #endif
00110
00111 #else
00112
00113 #ifdef IPHONE
00114 # define IPHONE_RELEASE false
00115 #else
00116 # define IPHONE_RELEASE true
00117 #endif
00118
00119 #endif
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156 class AddressBookSource : public TrackingSyncSource
00157 {
00158 public:
00159 AddressBookSource(const EvolutionSyncSourceParams ¶ms, bool asVCard30);
00160 virtual ~AddressBookSource() { close(); }
00161
00162 void setVCard30(bool asVCard30) { m_asVCard30 = asVCard30; }
00163 bool getVCard30() { return m_asVCard30; }
00164
00165 virtual Databases getDatabases();
00166 virtual void open();
00167 virtual void listAllItems(RevisionMap_t &revisions);
00168 virtual void exportData(ostream &out);
00169 virtual InsertItemResult insertItem(const string &uid, const SyncItem &item);
00170 virtual SyncItem *createItem(const string &uid) { return createItem(uid, m_asVCard30); }
00171 virtual SyncItem *createItem(const string &uid, bool asVCard30);
00172 virtual void deleteItem(const string &uid);
00173 virtual void flush() {}
00174 virtual void close();
00175
00176 virtual string fileSuffix() const { return "vcf"; }
00177 virtual const char *getMimeType() const { return m_asVCard30 ? "text/vcard" : "text/x-vcard"; }
00178 virtual const char *getMimeVersion() const { return m_asVCard30 ? "3.0" : "2.1"; }
00179 virtual const char *getSupportedTypes() const { return m_asVCard30 ? "text/vcard:3.0" : "text/x-vcard:2.1"; }
00180
00181 protected:
00182 virtual void logItem(const string &uid, const string &info, bool debug = false);
00183 virtual void logItem(const SyncItem &item, const string &info, bool debug = false);
00184
00185
00186 private:
00187
00188 ABAddressBookRef m_addressbook;
00189
00190
00191 string getModTime(ABRecordRef record);
00192
00193
00194 bool m_asVCard30;
00195 };
00196
00197 #endif // ENABLE_EBOOK
00198
00199 #endif // INCL_ADDRESSBOOKSOURCE