예제 #1
0
        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
        }
예제 #2
0
        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);
        }
예제 #3
0
 public CreateFolderResult CreateFolder(UserCredential userCredential, SyncableFolder syncFolder, out string createdFolderId)
 {
     throw new NotImplementedException();
 }
예제 #4
0
        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));
            }
        }
예제 #5
0
 public UpdateFolderResult UpdateFolder(UserCredential userCredential, SyncableFolder syncFolder)
 {
     throw new NotImplementedException();
 }