75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
|
# 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)
|