protected override FolderCreateResponse HandleRequest() { #region Parse SyncKey SyncKey syncKeyObject; if (!StateManagement.SyncKey.TryParse(SyncKey, out syncKeyObject)) { //TODO: Log Exception return(ErrorResponse(eFolderCreateStatus.SyncKeyError)); } #endregion #region Load Folder State var folderState = StateManager.LoadFolderState(syncKeyObject); if (folderState == null) { //TODO: Log Folder State Not Found return(ErrorResponse(eFolderCreateStatus.SyncKeyError)); } #endregion #region Export Changes To Server try { var folderInfo = new SyncableFolder { DisplayName = this.DisplayName, ParentId = this.ParentId, Type = this.Type }; string createdFolderId; var result = FolderService.CreateFolder(StateManager.Credential, folderInfo, out createdFolderId); var response = new FolderCreateResponse { SyncKey = this.SyncKey, Status = ParseResult(result) }; if (response.Status == eFolderCreateStatus.Success) { var newSyncKey = StateManager.GetNewSyncKey(syncKeyObject); #region Update FolderState var parentFolderState = folderState.Folders.FirstOrDefault(x => x.ServerId == ParentId); if (parentFolderState == null) { return(ErrorResponse(eFolderCreateStatus.ParentNotFound)); } else { folderState.Folders.Add(new FolderState { ParentId = ParentId, ServerId = createdFolderId, FolderType = (int)Type, Name = DisplayName }); StateManager.SaveFolderState(newSyncKey, folderState); } #endregion response.SyncKey = newSyncKey; response.ServerId = createdFolderId; } return(response); } catch (Exception ex) { return(ErrorResponse(eFolderCreateStatus.UnknownError)); } #endregion }
protected override PingResponse HandleRequest() { return(new PingResponse { Status = ePingStatus.HeartbeatExpiredWithNoChanges }); var foundChanges = false; var changedFolderServerIds = new List <string>(); foreach (var pingRequestFolder in this.Folders) { SyncableFolder folder = null; try { folder = FolderService.GetFolder(StateManager.Credential, pingRequestFolder.Id); } catch (Exception) { //TODO: Add Fail Satus Collection continue; } if (folder == null) { //TODO: Add Fail Satus Collection continue; } var allServerAppData = new List <AppData>(); var newAddedAppdata = new List <AppData>(); var newDeletedServerIds = new List <string>(); var newChangedAppData = new List <AppData>(); if (folder.Type == eFolderType.DefaultContacts) { var contacts = ContactService.GetContacts(StateManager.Credential, folder.Id); allServerAppData.AddRange((contacts.Select(contact => new ContactAppData(contact) { ServerId = contact.Id }))); } else { var emails = EmailService.GetEmails(StateManager.Credential, folder.Id); allServerAppData.AddRange(emails.Select(email => new EmailAppData(email) { ServerId = email.Id })); } string syncKey = FileStateMachine.LastSyncKey; var oldCollectionState = StateManager.LoadCollectionState(syncKey, folder.Id) ?? new CollectionState(); newAddedAppdata = GetNewDataItems(oldCollectionState, allServerAppData.ToArray()); newDeletedServerIds = GetNewDeleteDataItems(oldCollectionState, allServerAppData.ToArray()); newChangedAppData = GetChangeDataItems(oldCollectionState, allServerAppData.ToArray()); if (newAddedAppdata.Count > 0 || newDeletedServerIds.Count > 0 || newChangedAppData.Count > 0) { changedFolderServerIds.Add(folder.Id); } } var pingResponse = new PingResponse() { }; if (changedFolderServerIds.Count == 0) { return(pingResponse); } pingResponse.Status = ePingStatus.ChangeOccurred; pingResponse.FolderServerIds = changedFolderServerIds; return(pingResponse); }
public CreateFolderResult CreateFolder(UserCredential userCredential, SyncableFolder syncFolder, out string createdFolderId) { throw new NotImplementedException(); }
protected override FolderUpdateResponse HandleRequest() { #region Parse SyncKey SyncKey syncKeyObject; if (!StateManagement.SyncKey.TryParse(SyncKey, out syncKeyObject)) { //TODO: Log Exception return(ErrorResponse(eFolderUpdateStatus.SyncKeyError)); } #endregion #region Load Folder State var folderState = StateManager.LoadFolderState(syncKeyObject); if (folderState == null) { //TODO: Log Folder State Not Found return(ErrorResponse(eFolderUpdateStatus.SyncKeyError)); } #endregion var folderInfo = new SyncableFolder { DisplayName = this.DisplayName, ParentId = this.ParentId, Id = this.ServerId }; try { var result = FolderService.UpdateFolder(StateManager.Credential, folderInfo); var response = new FolderUpdateResponse { SyncKey = this.SyncKey, Status = ParseResult(result) }; if (response.Status == eFolderUpdateStatus.Success) { var newSyncKey = StateManager.GetNewSyncKey(syncKeyObject); #region Update FolderState var folderToUpdate = folderState.Folders.FirstOrDefault(x => x.ServerId == ServerId); if (folderToUpdate == null) { return(ErrorResponse(eFolderUpdateStatus.FolderNotExist)); } else { folderToUpdate.Name = this.DisplayName; folderToUpdate.ParentId = this.ParentId; StateManager.SaveFolderState(newSyncKey, folderState); } #endregion response.SyncKey = newSyncKey; } return(response); } catch (Exception) { return(ErrorResponse(eFolderUpdateStatus.UnknownError)); } }
public UpdateFolderResult UpdateFolder(UserCredential userCredential, SyncableFolder syncFolder) { throw new NotImplementedException(); }