Spaces:
Sleeping
Sleeping
# ITransferAdviseSink implementation template | |
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 | |
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, | |
) | |