Changeset 153
- Timestamp:
- 01/17/08 23:13:03 (7 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
Mulberry/branches/v4.1d1/Sources_Common/Mail/Protocols/CAdbkProtocol.cp
r149 r153 45 45 46 46 #include "CVCardAddressBook.h" 47 #include "CVCardMapper.h" 47 48 #include "CVCardSync.h" 49 #include "CVCardVCard.h" 48 50 49 51 #include "cdfstream.h" … … 679 681 break; 680 682 case CINETAccount::eCardDAVAdbk: 681 for(CAddressBookList::const_iterator niter = mStoreRoot.GetChildren()->begin(); 682 niter != mStoreRoot.GetChildren()->end(); niter++) 683 if (mStoreRoot.GetChildren() != NULL) 683 684 { 684 if ((*niter)->IsAdbk()) 685 for(CAddressBookList::const_iterator niter = mStoreRoot.GetChildren()->begin(); 686 niter != mStoreRoot.GetChildren()->end(); niter++) 685 687 { 686 if ( adbk)688 if ((*niter)->IsAdbk()) 687 689 { 688 adbk = NULL; 689 break; 690 if (adbk) 691 { 692 adbk = NULL; 693 break; 694 } 695 else 696 adbk = *niter; 690 697 } 691 else692 adbk = *niter;693 698 } 694 699 } … … 1087 1092 void CAdbkProtocol::SyncComponentsFromServer(CAddressBook* adbk) 1088 1093 { 1089 #if 01090 1094 // We need to do this as a proper transaction with locking 1091 1095 try … … 1098 1102 // 2.1 Add new components to server and cache info 1099 1103 // 2.2 Remove deleted components from server and cached server info if still present on server 1100 // 2.3 Cache info for changed items for later sync (or change them immediately if the server has not changed 1104 // 2.3 Cache info for changed items for later sync (or change them immediately if the server has not changed) 1101 1105 // 1102 1106 // 3. Scan list of local components … … 1118 1122 1119 1123 // Step 1 1124 vCard::CVCardAddressBook* vadbk = adbk->GetVCardAdbk(); 1125 CCardDAVVCardClient* cardclient = static_cast<CCardDAVVCardClient*>(mClient); 1120 1126 cdstrmap comps; 1121 1127 bool server_changed = mClient->_AdbkChanged(adbk); 1122 1128 if (server_changed) 1123 mClient->_GetComponentInfo(adbk,vadbk, comps);1129 cardclient->_GetComponentInfo(adbk, *vadbk, comps); 1124 1130 else 1125 1131 { … … 1130 1136 cdstrmap cache_added; 1131 1137 cdstrmap cache_changed; 1132 for(v card::CVCardComponentRecordDB::const_iterator iter = adbk->GetRecording().begin(); iter !=adbk->GetRecording().end(); iter++)1138 for(vCard::CVCardComponentRecordDB::const_iterator iter = vadbk->GetRecording().begin(); iter != vadbk->GetRecording().end(); iter++) 1133 1139 { 1134 1140 // Step 2.1 1135 if ((*iter).second.GetAction() == v card::CVCardComponentRecord::eAdded)1141 if ((*iter).second.GetAction() == vCard::CVCardComponentRecord::eAdded) 1136 1142 { 1137 1143 // Add component to server 1138 const iCal::CICalendarComponent* comp = cal.GetComponentByKey((*iter).first);1144 const vCard::CVCardVCard* comp = vadbk->GetCardByKey((*iter).first); 1139 1145 if (comp != NULL) 1140 1146 { 1141 1147 // Add component to server 1142 mClient->_AddComponent(node, cal, *comp);1148 cardclient->_AddComponent(adbk, *vadbk, *comp); 1143 1149 1144 1150 // Add to added cache … … 1148 1154 1149 1155 // Step 2.2 1150 else if ((*iter).second.GetAction() == iCal::CICalendarComponentRecord::eRemoved)1156 else if ((*iter).second.GetAction() == vCard::CVCardComponentRecord::eRemoved) 1151 1157 { 1152 1158 // Is it still present on the server … … 1154 1160 { 1155 1161 // Remove component from server 1156 mClient->_RemoveComponent(node, cal, (*iter).second.GetRURL());1162 cardclient->_RemoveComponent(adbk, *vadbk, (*iter).second.GetRURL()); 1157 1163 1158 1164 // Remove from server component info … … 1162 1168 1163 1169 // Step 2.3 1164 else if ((*iter).second.GetAction() == iCal::CICalendarComponentRecord::eChanged)1170 else if ((*iter).second.GetAction() == vCard::CVCardComponentRecord::eChanged) 1165 1171 { 1166 1172 if (server_changed) … … 1169 1175 { 1170 1176 // Change it on the server 1171 const iCal::CICalendarComponent* comp = cal.GetComponentByKey((*iter).first);1172 mClient->_ChangeComponent(node, cal, *comp);1177 const vCard::CVCardVCard* comp = vadbk->GetCardByKey((*iter).first); 1178 cardclient->_ChangeComponent(adbk, *vadbk, *comp); 1173 1179 cache_changed.insert(cdstrmap::value_type((*iter).second.GetRURL(), (*iter).second.GetETag())); 1174 1180 } … … 1181 1187 { 1182 1188 // Get component info from cache 1183 iCal::CICalendarComponentDBList dbs;1184 cal.GetAllDBs(dbs);1185 1189 cdstrvect component_keys; 1186 for( iCal::CICalendarComponentDBList::const_iterator iter1 = dbs.begin(); iter1 != dbs.end(); iter1++)1190 for(vCard::CVCardComponentDB::const_iterator iter = vadbk->GetVCards().begin(); iter != vadbk->GetVCards().end(); iter++) 1187 1191 { 1188 for(iCal::CICalendarComponentDB::const_iterator iter2 = (*iter1)->begin(); iter2 != (*iter1)->end(); iter2++) 1189 { 1190 component_keys.push_back((*iter2).second->GetMapKey()); 1191 } 1192 component_keys.push_back((*iter).second->GetMapKey()); 1192 1193 } 1193 1194 … … 1196 1197 for(cdstrvect::const_iterator iter = component_keys.begin(); iter != component_keys.end(); iter++) 1197 1198 { 1198 iCal::CICalendarComponent* cache_comp = cal.GetComponentByKey(*iter);1199 vCard::CVCardVCard* cache_comp = vadbk->GetCardByKey(*iter); 1199 1200 if (cache_comp == NULL) 1200 1201 continue; … … 1225 1226 { 1226 1227 // Write changed cache component to server 1227 mClient->_ChangeComponent(node, cal, *cache_comp);1228 cardclient->_ChangeComponent(adbk, *vadbk, *cache_comp); 1228 1229 } 1229 1230 … … 1233 1234 // Do iCal SEQ etc comparison 1234 1235 1235 // First read in component from server into temp calendar1236 iCal::CICalendar tempcal;1237 iCal::CICalendarComponent* server_comp = mClient->_ReadComponent(node, tempcal, server_rurl);1236 // First read in component from server into temp addressbook 1237 vCard::CVCardAddressBook tempvcard; 1238 vCard::CVCardVCard* server_comp = cardclient->_ReadComponent(adbk, tempvcard, server_rurl); 1238 1239 if (server_comp != NULL) 1239 1240 { 1240 int result = iCal::CICalendarSync::CompareComponentVersions(server_comp, cache_comp);1241 int result = -1; //iCal::CICalendarSync::CompareComponentVersions(server_comp, cache_comp); 1241 1242 1242 1243 if (result == 1) 1243 1244 { 1244 1245 // Cache is newer than server - cache overwrites to server 1245 mClient->_ChangeComponent(node, cal, *cache_comp);1246 cardclient->_ChangeComponent(adbk, *vadbk, *cache_comp); 1246 1247 } 1247 1248 else if (result == -1) … … 1250 1251 1251 1252 // Remove the cached component first 1252 cal.RemoveComponentByKey(cache_comp->GetMapKey());1253 vadbk->RemoveCardByKey(cache_comp->GetMapKey()); 1253 1254 cache_comp = NULL; 1254 1255 1255 1256 // Copy component from server into local cache effectively replacing old one 1256 iCal::CICalendarComponent* new_comp = server_comp->clone();1257 new_comp->Set Calendar(cal.GetRef());1258 cal.AddComponent(new_comp);1257 vCard::CVCardComponent* new_comp = server_comp->clone(); 1258 new_comp->SetAddressBook(vadbk->GetRef()); 1259 vadbk->AddCard(new_comp); 1259 1260 } 1260 1261 } … … 1271 1272 1272 1273 // Remove the cached component first 1273 cal.RemoveComponentByKey(cache_comp->GetMapKey());1274 vadbk->RemoveCardByKey(cache_comp->GetMapKey()); 1274 1275 cache_comp = NULL; 1275 1276 1276 1277 // Read component from server into local cache effectively replacing old one 1277 mClient->_ReadComponent(node, cal, server_rurl);1278 cardclient->_ReadComponent(adbk, *vadbk, server_rurl); 1278 1279 } 1279 1280 } … … 1283 1284 { 1284 1285 // comp is deleted in this call 1285 cal.RemoveComponentByKey(cache_comp->GetMapKey());1286 vadbk->RemoveCardByKey(cache_comp->GetMapKey()); 1286 1287 cache_comp = NULL; 1287 1288 } … … 1303 1304 // Read components from server into local cache as its a new one on the server 1304 1305 if (rurls.size() != 0) 1305 mClient->_ReadComponents(node, cal, rurls);1306 cardclient->_ReadComponents(adbk, *vadbk, rurls); 1306 1307 } 1307 1308 1308 1309 // Clear out cache recording 1309 cal.ClearRecording();1310 vadbk->ClearRecording(); 1310 1311 1311 1312 // Get the current server sync token 1312 mClient->_UpdateSyncToken(node, cal);1313 cardclient->_UpdateSyncToken(adbk); 1313 1314 1314 1315 // Now write back cache 1315 if (!mCacheClient->_TouchCalendar(node)) 1316 DumpCalendars(); 1317 mCacheClient->_WriteFullCalendar(node, cal); 1316 if (!mCacheClient->_TouchAdbk(adbk)) 1317 DumpAddressBooks(); 1318 mCacheClient->_WriteFullAddressBook(adbk); 1319 1320 // Now map VCards into internal addresses 1321 vcardstore::MapFromVCards(adbk); 1318 1322 } 1319 1323 catch(...) … … 1324 1328 throw; 1325 1329 } 1326 #endif1327 1330 } 1328 1331