# ITransferAdviseSink implementation template import pythoncom from win32com.shell import shell, shellcon from win32com.server.policy import DesignatedWrapPolicy tsf_flags = list((k,v) for k,v in list(shellcon.__dict__.items()) if k.startswith('TSF_')) def decode_flags(flags): if flags == 0: return 'TSF_NORMAL' flag_txt = '' for k,v in tsf_flags: if flags & v: if flag_txt: flag_txt = flag_txt + '|' + k else: flag_txt = k return flag_txt TRANSFER_ADVISE_STATES = {} for k,v in list(shellcon.__dict__.items()): if k.startswith('TS_'): TRANSFER_ADVISE_STATES[v] = k def decode_flags(flags): if flags == 0: return 'TSF_NORMAL' flag_txt = '' for k,v in tsf_flags: if flags & v: if flag_txt: flag_txt = flag_txt + '|' + k else: flag_txt = k return flag_txt class TransferAdviseSink(DesignatedWrapPolicy): _com_interfaces_ = [shell.IID_ITransferAdviseSink] _public_methods_ = [ "UpdateProgress", "UpdateTransferState", "ConfirmOverwrite", "ConfirmEncryptionLoss", "FileFailure", "SubStreamFailure", "PropertyFailure" ] def __init__(self): self._wrap_(self) def UpdateProgress(self, SizeCurrent, SizeTotal, FilesCurrent, FilesTotal, FoldersCurrent, FoldersTotal): print('UpdateProgress - processed so far:') print('\t %s out of %s bytes' %(SizeCurrent, SizeTotal)) print('\t %s out of %s files' %(FilesCurrent, FilesTotal)) print('\t %s out of %s folders' %(FoldersCurrent, FoldersTotal)) def UpdateTransferState(self, State): print('Current state: ', TRANSFER_ADVISE_STATES.get(State, '??? Unknown state %s ???' %State)) def ConfirmOverwrite(self, Source, DestParent , Name): print('ConfirmOverwrite: ', Source.GetDisplayName(shellcon.SHGDN_FORPARSING), DestParent.GetDisplayName(shellcon.SHGDN_FORPARSING), Name) def ConfirmEncryptionLoss(self, Source): print('ConfirmEncryptionLoss:', Source.GetDisplayName(shellcon.SHGDN_FORPARSING)) def FileFailure(self, Item, ItemName , Error): print('FileFailure:', Item.GetDisplayName(shellcon.SHGDN_FORPARSING), ItemName) def SubStreamFailure(self, Item, StreamName , Error): print('SubStreamFailure:\n') def PropertyFailure(self, Item, key , Error): print('PropertyFailure:\n') def CreateSink(): return pythoncom.WrapObject(TransferAdviseSink(), shell.IID_ITransferAdviseSink, shell.IID_ITransferAdviseSink)