mirror of
https://github.com/SickGear/SickGear.git
synced 2024-11-25 22:35:05 +00:00
46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
# Sample implementation of IFileOperationProgressSink that just prints
|
|
# some basic info
|
|
|
|
import pythoncom
|
|
from win32com.shell import shell, shellcon
|
|
from win32com.server.policy import DesignatedWrapPolicy
|
|
|
|
|
|
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)
|
|
self.newItem = None
|
|
|
|
def PreDeleteItem(self, flags, item):
|
|
# Can detect cases where to stop via flags and condition below, however the operation
|
|
# does not actual stop, we can resort to raising an exception as that does stop things
|
|
# but that may need some additional considerations before implementing.
|
|
return 0 if flags & shellcon.TSF_DELETE_RECYCLE_IF_POSSIBLE else 0x80004005 # S_OK, or E_FAIL
|
|
|
|
def PostDeleteItem(self, flags, item, hr_delete, newly_created):
|
|
if newly_created:
|
|
self.newItem = newly_created.GetDisplayName(shellcon.SHGDN_FORPARSING)
|
|
|
|
|
|
def create_sink():
|
|
return pythoncom.WrapObject(FileOperationProgressSink(), shell.IID_IFileOperationProgressSink)
|