public static ItemOperations.Result DeleteItem(UserContext userContext, StoreObjectId itemId, StoreObjectId folderId) { ItemOperations.Result result = null; ListViewViewState listViewViewState = userContext.LastClientViewState as ListViewViewState; if (listViewViewState != null && folderId.Equals(listViewViewState.FolderId)) { result = ItemOperations.GetNextViewItem(userContext, ItemOperations.Action.Delete, itemId, folderId); } if (Utilities.IsDefaultFolderId(userContext.MailboxSession, folderId, DefaultFolderType.DeletedItems)) { Utilities.DeleteItems(userContext, DeleteItemFlags.SoftDelete, new StoreId[] { itemId }); } else { Utilities.DeleteItems(userContext, DeleteItemFlags.MoveToDeletedItems, new StoreId[] { itemId }); } return(result); }
public static ItemOperations.Result GetNextViewItem(UserContext userContext, ItemOperations.Action action, StoreObjectId itemId, StoreObjectId folderId) { Folder folder = null; ItemOperations.Result result; try { MessageModuleSearchViewState messageModuleSearchViewState = userContext.LastClientViewState as MessageModuleSearchViewState; SortBy[] sortOrder; if (messageModuleSearchViewState != null) { using (Folder folder2 = Folder.Bind(userContext.MailboxSession, messageModuleSearchViewState.FolderId)) { sortOrder = ItemOperations.GetSortOrder(userContext, folder2); FolderSearch folderSearch = new FolderSearch(); folder = folderSearch.Execute(userContext, folder2, messageModuleSearchViewState.SearchScope, messageModuleSearchViewState.SearchString, userContext.ForceNewSearch, false); userContext.ForceNewSearch = false; goto IL_77; } } folder = Folder.Bind(userContext.MailboxSession, folderId); sortOrder = ItemOperations.GetSortOrder(userContext, folder); IL_77: using (QueryResult queryResult = folder.ItemQuery(ItemQueryType.None, null, sortOrder, new PropertyDefinition[] { ItemSchema.Id })) { queryResult.SeekToCondition(SeekReference.OriginBeginning, new ComparisonFilter(ComparisonOperator.Equal, ItemSchema.Id, itemId)); int num = queryResult.CurrentRow; int num2 = queryResult.EstimatedRowCount; int num3 = 0; if (num == num2 || num2 == 1) { result = null; } else { switch (action) { case ItemOperations.Action.Next: if (num + 1 == num2) { return(null); } num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, 1); break; case ItemOperations.Action.Prev: if (num == 0) { return(null); } num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, -1); break; case ItemOperations.Action.Delete: if (userContext.UserOptions.NextSelection == NextSelectionDirection.Previous) { if (num == 0) { num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, 1); num3 = 0; } else { num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, -1); } } else if (userContext.UserOptions.NextSelection == NextSelectionDirection.Next) { if (num2 - (num + 1) == 0) { num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, -1); } else { num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, 1); num3 = 0; } } else if (userContext.UserOptions.NextSelection == NextSelectionDirection.ReturnToView) { return(null); } num2--; break; } num += num3; if (messageModuleSearchViewState != null) { messageModuleSearchViewState.PageNumber = num / userContext.UserOptions.BasicViewRowCount + 1; } else { ListViewViewState listViewViewState = userContext.LastClientViewState as ListViewViewState; if (listViewViewState != null && folderId.Equals(listViewViewState.FolderId)) { listViewViewState.PageNumber = num / userContext.UserOptions.BasicViewRowCount + 1; } } object[][] rows = queryResult.GetRows(1); result = new ItemOperations.Result(((VersionedId)rows[0][0]).ObjectId, folderId); } } } catch (ObjectNotFoundException) { result = null; } finally { if (folder != null) { folder.Dispose(); } } return(result); }