AIM-PIbd-32-Kurbanova-A-A/aimenv/Lib/site-packages/win32comext/shell/demos/IFileOperationProgressSink.py
2024-10-02 22:15:59 +04:00

182 lines
5.0 KiB
Python

# Sample implementation of IFileOperationProgressSink that just prints
# some basic info
import pythoncom
from win32com.server.policy import DesignatedWrapPolicy
from win32com.shell import shell, shellcon
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
)