openmedialibrary_platform_w.../Lib/site-packages/win32comext/shell/demos/IFileOperationProgressSink.py

108 lines
4.1 KiB
Python
Raw Normal View History

2016-04-14 19:54:42 +00:00
# Sample implementation of IFileOperationProgressSink that just prints
# some basic info
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
class FileOperationProgressSink(DesignatedWrapPolicy):
_com_interfaces_ = [shell.IID_IFileOperationProgressSink]
_public_methods_ = [
"StartOperations", "FinishOperations", "PreRenameItem", "PostRenameItem",
"PreMoveItem", "PostMoveItem", "PreCopyItem", "PostCopyItem", "PreDeleteItem",
"PostDeleteItem", "PreNewItem", "PostNewItem", "UpdateProgress",
"ResetTimer", "PauseTimer", "ResumeTimer"
]
def __init__(self):
self._wrap_(self)
def StartOperations(self):
print ('StartOperations')
def FinishOperations(self, Result):
print(('FinishOperations: HRESULT ', Result))
def PreRenameItem(self, Flags, Item, NewName):
print(('PreRenameItem: Renaming ' + Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + \
' to ' + NewName))
def PostRenameItem(self, Flags, Item, NewName, hrRename, NewlyCreated):
if NewlyCreated is not None:
newfile = NewlyCreated.GetDisplayName(shellcon.SHGDN_FORPARSING)
else:
newfile = 'not renamed, HRESULT ' + str(hrRename)
print(('PostRenameItem: renamed ' + \
Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + newfile))
def PreMoveItem(self, Flags, Item, DestinationFolder, NewName):
print(('PreMoveItem: Moving ' + \
Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + \
DestinationFolder.GetDisplayName(shellcon.SHGDN_FORPARSING) + '\\' + str(NewName)))
def PostMoveItem(self, Flags, Item, DestinationFolder, NewName, hrMove, NewlyCreated):
if NewlyCreated is not None:
newfile = NewlyCreated.GetDisplayName(shellcon.SHGDN_FORPARSING)
else:
newfile = 'not copied, HRESULT ' + str(hrMove)
print(('PostMoveItem: Moved ' + \
Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + newfile))
def PreCopyItem(self, Flags, Item, DestinationFolder, NewName):
if not NewName:
NewName = ''
print(('PreCopyItem: Copying ' + \
Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + \
DestinationFolder.GetDisplayName(shellcon.SHGDN_FORPARSING) + '\\' + NewName))
print(('Flags: ', decode_flags(Flags)))
def PostCopyItem(self, Flags, Item, DestinationFolder, NewName, hrCopy, NewlyCreated):
if NewlyCreated is not None:
newfile = NewlyCreated.GetDisplayName(shellcon.SHGDN_FORPARSING)
else:
newfile = 'not copied, HRESULT ' + str(hrCopy)
print(('PostCopyItem: Copied ' + Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + newfile))
print(('Flags: ', decode_flags(Flags)))
def PreDeleteItem(self, Flags, Item):
print(('PreDeleteItem: Deleting ' + Item.GetDisplayName(shellcon.SHGDN_FORPARSING)))
def PostDeleteItem(self, Flags, Item, hrDelete, NewlyCreated):
print(('PostDeleteItem: Deleted ' + Item.GetDisplayName(shellcon.SHGDN_FORPARSING)))
if NewlyCreated:
print((' Moved to recycle bin - ' + NewlyCreated.GetDisplayName(shellcon.SHGDN_FORPARSING)))
def PreNewItem(self, Flags, DestinationFolder, NewName):
print(('PreNewItem: Creating ' + DestinationFolder.GetDisplayName(shellcon.SHGDN_FORPARSING) + '\\' + NewName))
def PostNewItem(self, Flags, DestinationFolder, NewName, TemplateName, FileAttributes, hrNew, NewItem):
print(('PostNewItem: Created ' + NewItem.GetDisplayName(shellcon.SHGDN_FORPARSING)))
def UpdateProgress(self, WorkTotal, WorkSoFar):
print(('UpdateProgress: ', WorkSoFar, WorkTotal))
def ResetTimer(self):
print ('ResetTimer')
def PauseTimer(self):
print ('PauseTimer')
def ResumeTimer(self):
print ('ResumeTimer')
def CreateSink():
return pythoncom.WrapObject(FileOperationProgressSink(), shell.IID_IFileOperationProgressSink)