def delete(self, objects, soft=False): # XXX associated """Delete items, subfolders, properties or permissions from folder. :param objects: The object(s) to delete :param soft: In case of items or folders, are they soft-deleted """ objects = _utils.arg_objects(objects, (_item.Item, Folder, Permission, Property, Occurrence), 'Folder.delete') item_entryids, folder_entryids, perms, props, occs = self._get_entryids(objects) if item_entryids: if soft: self.mapiobj.DeleteMessages(item_entryids, 0, None, 0) else: self.mapiobj.DeleteMessages(item_entryids, 0, None, DELETE_HARD_DELETE) for entryid in folder_entryids: if soft: self.mapiobj.DeleteFolder(entryid, 0, None, DEL_FOLDERS | DEL_MESSAGES) else: self.mapiobj.DeleteFolder(entryid, 0, None, DEL_FOLDERS | DEL_MESSAGES | DELETE_HARD_DELETE) for perm in perms: acl_table = self.mapiobj.OpenProperty(PR_ACL_TABLE, IID_IExchangeModifyTable, 0, 0) acl_table.ModifyTable(0, [ROWENTRY(ROW_REMOVE, [SPropValue(PR_MEMBER_ID, perm.mapirow[PR_MEMBER_ID])])]) if props: self.mapiobj.DeleteProps([prop.proptag for prop in props]) for occ in occs: occ.item.delete(occ)
def delete(self, objects, soft=False): """Delete properties, delegations, permissions, folders or items from store. :param props: The object(s) to delete """ objects = _utils.arg_objects(objects, (_folder.Folder, _item.Item, Property, Delegation, Permission), 'Store.delete') # XXX directly delete inbox rule? props = [o for o in objects if isinstance(o, Property)] if props: self.mapiobj.DeleteProps([p.proptag for p in props]) self.mapiobj.SaveChanges(KEEP_OPEN_READWRITE) delgs = [o for o in objects if isinstance(o, Delegation)] for d in delgs: d._delete() perms = [o for o in objects if isinstance(o, Permission)] for perm in perms: acl_table = self.mapiobj.OpenProperty(PR_ACL_TABLE, IID_IExchangeModifyTable, 0, 0) acl_table.ModifyTable(0, [ROWENTRY(ROW_REMOVE, [SPropValue(PR_MEMBER_ID, perm.mapirow[PR_MEMBER_ID])])]) others = [o for o in objects if isinstance(o, (_item.Item, _folder.Folder))] if others: self.root.delete(others, soft=soft)
def delete(self, objects): objects = _utils.arg_objects(objects, (_prop.Property, ), 'Attachment.delete') proptags = [ item.proptag for item in objects if isinstance(item, _prop.Property) ] if proptags: self.mapiobj.DeleteProps(proptags) _utils._save(self.parent.mapiobj)
def copy(self, objects, folder, _delete=False): """Copy items or subfolders to folder. :param objects: The items or subfolders to copy :param folder: The target folder """ objects = _utils.arg_objects(objects, (_item.Item, Folder), 'Folder.copy') item_entryids, folder_entryids, _, _, _ = self._get_entryids(objects) # XXX copy/move perms?? XXX error for perms/props if item_entryids: self.mapiobj.CopyMessages(item_entryids, IID_IMAPIFolder, folder.mapiobj, 0, None, (MESSAGE_MOVE if _delete else 0)) for entryid in folder_entryids: self.mapiobj.CopyFolder(entryid, IID_IMAPIFolder, folder.mapiobj, None, 0, None, (FOLDER_MOVE if _delete else 0))
def delete(self, objects): """Delete users, groups, companies or stores from server. :param objects: The object(s) to delete """ objects = _utils.arg_objects(objects, (_user.User, Group, Company, _store.Store), 'Server.delete') for item in objects: if isinstance(item, _user.User): self.remove_user(item.name) elif isinstance(item, Group): self.remove_group(item.name) elif isinstance(item, Company): self.remove_company(item.name) elif isinstance(item, _store.Store): self.remove_store(item)
def delete(self, objects): """Delete properties or attachments from item. :param objects: The object(s) to delete """ objects = _utils.arg_objects(objects, (Attachment, _prop.Property, Occurrence), 'Item.delete') # XXX embedded items? attach_ids = [item.number for item in objects if isinstance(item, Attachment)] proptags = [item.proptag for item in objects if isinstance(item, _prop.Property)] occs = [item for item in objects if isinstance(item, Occurrence)] for occ in occs: self.recurrence._delete_exception(occ.start, self, _copytags(self.mapiobj)) if proptags: self.mapiobj.DeleteProps(proptags) for attach_id in attach_ids: self._arch_item.DeleteAttach(attach_id, 0, None, 0) # XXX: refresh the mapiobj since PR_ATTACH_NUM is updated when opening # a message? PR_HASATTACH is also updated by the server. _utils._save(self.mapiobj)
def delete(self, objects): """Delete properties or attachments from item. :param objects: The object(s) to delete """ objects = _utils.arg_objects(objects, (Attachment, _prop.Property), 'Item.delete') # XXX embedded items? attach_ids = [ item.number for item in objects if isinstance(item, Attachment) ] proptags = [ item.proptag for item in objects if isinstance(item, _prop.Property) ] if proptags: self.mapiobj.DeleteProps(proptags) for attach_id in attach_ids: self._arch_item.DeleteAttach(attach_id, 0, None, 0) # XXX: refresh the mapiobj since PR_ATTACH_NUM is updated when opening # a message? PR_HASATTACH is also updated by the server. self.mapiobj.SaveChanges(KEEP_OPEN_READWRITE)