-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add initial pyobjc version for macOS
This is to help with issue #51. Will not help in the case of python 2 or older python 3 version < 3.6.
- Loading branch information
Showing
4 changed files
with
100 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# Copyright 2017 Virgil Dupras | ||
|
||
# This software is licensed under the "BSD" License as described in the "LICENSE" file, | ||
# which should be included with this package. The terms are also available at | ||
# http://www.hardcoded.net/licenses/bsd_license | ||
|
||
from __future__ import unicode_literals | ||
|
||
from ctypes import cdll, byref, Structure, c_char, c_char_p | ||
from ctypes.util import find_library | ||
|
||
from .compat import binary_type | ||
|
||
Foundation = cdll.LoadLibrary(find_library("Foundation")) | ||
CoreServices = cdll.LoadLibrary(find_library("CoreServices")) | ||
|
||
GetMacOSStatusCommentString = Foundation.GetMacOSStatusCommentString | ||
GetMacOSStatusCommentString.restype = c_char_p | ||
FSPathMakeRefWithOptions = CoreServices.FSPathMakeRefWithOptions | ||
FSMoveObjectToTrashSync = CoreServices.FSMoveObjectToTrashSync | ||
|
||
kFSPathMakeRefDefaultOptions = 0 | ||
kFSPathMakeRefDoNotFollowLeafSymlink = 0x01 | ||
|
||
kFSFileOperationDefaultOptions = 0 | ||
kFSFileOperationOverwrite = 0x01 | ||
kFSFileOperationSkipSourcePermissionErrors = 0x02 | ||
kFSFileOperationDoNotMoveAcrossVolumes = 0x04 | ||
kFSFileOperationSkipPreflight = 0x08 | ||
|
||
|
||
class FSRef(Structure): | ||
_fields_ = [("hidden", c_char * 80)] | ||
|
||
|
||
def check_op_result(op_result): | ||
if op_result: | ||
msg = GetMacOSStatusCommentString(op_result).decode("utf-8") | ||
raise OSError(msg) | ||
|
||
|
||
def send2trash(paths): | ||
if not isinstance(paths, list): | ||
paths = [paths] | ||
paths = [ | ||
path.encode("utf-8") if not isinstance(path, binary_type) else path | ||
for path in paths | ||
] | ||
for path in paths: | ||
fp = FSRef() | ||
opts = kFSPathMakeRefDoNotFollowLeafSymlink | ||
op_result = FSPathMakeRefWithOptions(path, opts, byref(fp), None) | ||
check_op_result(op_result) | ||
opts = kFSFileOperationDefaultOptions | ||
op_result = FSMoveObjectToTrashSync(byref(fp), None, opts) | ||
check_op_result(op_result) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# Copyright 2017 Virgil Dupras | ||
|
||
# This software is licensed under the "BSD" License as described in the "LICENSE" file, | ||
# which should be included with this package. The terms are also available at | ||
# http://www.hardcoded.net/licenses/bsd_license | ||
|
||
from Foundation import NSFileManager, NSURL | ||
from .compat import text_type | ||
|
||
|
||
def check_op_result(op_result): | ||
# First value will be false on failure | ||
if not op_result[0]: | ||
# Error is in third value, localized failure reason matchs ctypes version | ||
raise OSError(op_result[2].localizedFailureReason()) | ||
|
||
|
||
def send2trash(paths): | ||
if not isinstance(paths, list): | ||
paths = [paths] | ||
paths = [ | ||
path.decode("utf-8") if not isinstance(path, text_type) else path | ||
for path in paths | ||
] | ||
for path in paths: | ||
file_url = NSURL.fileURLWithPath_(path) | ||
fm = NSFileManager.defaultManager() | ||
op_result = fm.trashItemAtURL_resultingItemURL_error_(file_url, None, None) | ||
check_op_result(op_result) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters