/Mac/Modules/launch/_Launchmodule.c
http://unladen-swallow.googlecode.com/ · C · 481 lines · 431 code · 41 blank · 9 comment · 61 complexity · ca35062ed9cfad18e3a27dc5197ccd89 MD5 · raw file
- /* ========================= Module _Launch ========================= */
- #include "Python.h"
- #include "pymactoolbox.h"
- /* Macro to test whether a weak-loaded CFM function exists */
- #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
- PyErr_SetString(PyExc_NotImplementedError, \
- "Not available in this shared library/OS version"); \
- return NULL; \
- }} while(0)
- #if PY_VERSION_HEX < 0x02040000
- PyObject *PyMac_GetOSErrException(void);
- #endif
- #include <ApplicationServices/ApplicationServices.h>
- /*
- ** Optional CFStringRef. None will pass NULL
- */
- static int
- OptCFStringRefObj_Convert(PyObject *v, CFStringRef *spec)
- {
- if (v == Py_None) {
- *spec = NULL;
- return 1;
- }
- return CFStringRefObj_Convert(v, spec);
- }
- PyObject *
- OptCFStringRefObj_New(CFStringRef it)
- {
- if (it == NULL) {
- Py_INCREF(Py_None);
- return Py_None;
- }
- return CFStringRefObj_New(it);
- }
- /*
- ** Convert LSItemInfoRecord to Python.
- */
- PyObject *
- LSItemInfoRecord_New(LSItemInfoRecord *it)
- {
- #ifndef __LP64__
- return Py_BuildValue("{s:is:O&s:O&s:O&s:O&s:i}",
- "flags", it->flags,
- "filetype", PyMac_BuildOSType, it->filetype,
- "creator", PyMac_BuildOSType, it->creator,
- "extension", OptCFStringRefObj_New, it->extension,
- "iconFileName", OptCFStringRefObj_New, it->iconFileName,
- "kindID", it->kindID);
- #else
- return Py_BuildValue("{s:is:O&s:O&s:O&}",
- "flags", it->flags,
- "filetype", PyMac_BuildOSType, it->filetype,
- "creator", PyMac_BuildOSType, it->creator,
- "extension", OptCFStringRefObj_New, it->extension);
- #endif
- }
- static PyObject *Launch_Error;
- static PyObject *Launch_LSCopyItemInfoForRef(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- FSRef inItemRef;
- LSRequestedInfo inWhichInfo;
- LSItemInfoRecord outItemInfo;
- if (!PyArg_ParseTuple(_args, "O&l",
- PyMac_GetFSRef, &inItemRef,
- &inWhichInfo))
- return NULL;
- _err = LSCopyItemInfoForRef(&inItemRef,
- inWhichInfo,
- &outItemInfo);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&",
- LSItemInfoRecord_New, &outItemInfo);
- return _res;
- }
- static PyObject *Launch_LSCopyItemInfoForURL(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- CFURLRef inURL;
- LSRequestedInfo inWhichInfo;
- LSItemInfoRecord outItemInfo;
- if (!PyArg_ParseTuple(_args, "O&l",
- CFURLRefObj_Convert, &inURL,
- &inWhichInfo))
- return NULL;
- _err = LSCopyItemInfoForURL(inURL,
- inWhichInfo,
- &outItemInfo);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&",
- LSItemInfoRecord_New, &outItemInfo);
- return _res;
- }
- static PyObject *Launch_LSGetExtensionInfo(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- UniChar *inNameLen__in__;
- UniCharCount inNameLen__len__;
- int inNameLen__in_len__;
- UniCharCount outExtStartIndex;
- if (!PyArg_ParseTuple(_args, "u#",
- &inNameLen__in__, &inNameLen__in_len__))
- return NULL;
- inNameLen__len__ = inNameLen__in_len__;
- _err = LSGetExtensionInfo(inNameLen__len__, inNameLen__in__,
- &outExtStartIndex);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("l",
- outExtStartIndex);
- return _res;
- }
- static PyObject *Launch_LSCopyDisplayNameForRef(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- FSRef inRef;
- CFStringRef outDisplayName;
- if (!PyArg_ParseTuple(_args, "O&",
- PyMac_GetFSRef, &inRef))
- return NULL;
- _err = LSCopyDisplayNameForRef(&inRef,
- &outDisplayName);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&",
- CFStringRefObj_New, outDisplayName);
- return _res;
- }
- static PyObject *Launch_LSCopyDisplayNameForURL(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- CFURLRef inURL;
- CFStringRef outDisplayName;
- if (!PyArg_ParseTuple(_args, "O&",
- CFURLRefObj_Convert, &inURL))
- return NULL;
- _err = LSCopyDisplayNameForURL(inURL,
- &outDisplayName);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&",
- CFStringRefObj_New, outDisplayName);
- return _res;
- }
- static PyObject *Launch_LSSetExtensionHiddenForRef(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- FSRef inRef;
- Boolean inHide;
- if (!PyArg_ParseTuple(_args, "O&b",
- PyMac_GetFSRef, &inRef,
- &inHide))
- return NULL;
- _err = LSSetExtensionHiddenForRef(&inRef,
- inHide);
- if (_err != noErr) return PyMac_Error(_err);
- Py_INCREF(Py_None);
- _res = Py_None;
- return _res;
- }
- static PyObject *Launch_LSSetExtensionHiddenForURL(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- CFURLRef inURL;
- Boolean inHide;
- if (!PyArg_ParseTuple(_args, "O&b",
- CFURLRefObj_Convert, &inURL,
- &inHide))
- return NULL;
- _err = LSSetExtensionHiddenForURL(inURL,
- inHide);
- if (_err != noErr) return PyMac_Error(_err);
- Py_INCREF(Py_None);
- _res = Py_None;
- return _res;
- }
- static PyObject *Launch_LSCopyKindStringForRef(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- FSRef inFSRef;
- CFStringRef outKindString;
- if (!PyArg_ParseTuple(_args, "O&",
- PyMac_GetFSRef, &inFSRef))
- return NULL;
- _err = LSCopyKindStringForRef(&inFSRef,
- &outKindString);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&",
- CFStringRefObj_New, outKindString);
- return _res;
- }
- static PyObject *Launch_LSCopyKindStringForURL(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- CFURLRef inURL;
- CFStringRef outKindString;
- if (!PyArg_ParseTuple(_args, "O&",
- CFURLRefObj_Convert, &inURL))
- return NULL;
- _err = LSCopyKindStringForURL(inURL,
- &outKindString);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&",
- CFStringRefObj_New, outKindString);
- return _res;
- }
- static PyObject *Launch_LSGetApplicationForItem(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- FSRef inItemRef;
- LSRolesMask inRoleMask;
- FSRef outAppRef;
- CFURLRef outAppURL;
- if (!PyArg_ParseTuple(_args, "O&l",
- PyMac_GetFSRef, &inItemRef,
- &inRoleMask))
- return NULL;
- _err = LSGetApplicationForItem(&inItemRef,
- inRoleMask,
- &outAppRef,
- &outAppURL);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&O&",
- PyMac_BuildFSRef, &outAppRef,
- CFURLRefObj_New, outAppURL);
- return _res;
- }
- static PyObject *Launch_LSGetApplicationForInfo(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- OSType inType;
- OSType inCreator;
- CFStringRef inExtension;
- LSRolesMask inRoleMask;
- FSRef outAppRef;
- CFURLRef outAppURL;
- if (!PyArg_ParseTuple(_args, "O&O&O&l",
- PyMac_GetOSType, &inType,
- PyMac_GetOSType, &inCreator,
- OptCFStringRefObj_Convert, &inExtension,
- &inRoleMask))
- return NULL;
- _err = LSGetApplicationForInfo(inType,
- inCreator,
- inExtension,
- inRoleMask,
- &outAppRef,
- &outAppURL);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&O&",
- PyMac_BuildFSRef, &outAppRef,
- CFURLRefObj_New, outAppURL);
- return _res;
- }
- static PyObject *Launch_LSGetApplicationForURL(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- CFURLRef inURL;
- LSRolesMask inRoleMask;
- FSRef outAppRef;
- CFURLRef outAppURL;
- if (!PyArg_ParseTuple(_args, "O&l",
- CFURLRefObj_Convert, &inURL,
- &inRoleMask))
- return NULL;
- _err = LSGetApplicationForURL(inURL,
- inRoleMask,
- &outAppRef,
- &outAppURL);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&O&",
- PyMac_BuildFSRef, &outAppRef,
- CFURLRefObj_New, outAppURL);
- return _res;
- }
- static PyObject *Launch_LSFindApplicationForInfo(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- OSType inCreator;
- CFStringRef inBundleID;
- CFStringRef inName;
- FSRef outAppRef;
- CFURLRef outAppURL;
- if (!PyArg_ParseTuple(_args, "O&O&O&",
- PyMac_GetOSType, &inCreator,
- OptCFStringRefObj_Convert, &inBundleID,
- OptCFStringRefObj_Convert, &inName))
- return NULL;
- _err = LSFindApplicationForInfo(inCreator,
- inBundleID,
- inName,
- &outAppRef,
- &outAppURL);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&O&",
- PyMac_BuildFSRef, &outAppRef,
- CFURLRefObj_New, outAppURL);
- return _res;
- }
- static PyObject *Launch_LSCanRefAcceptItem(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- FSRef inItemFSRef;
- FSRef inTargetRef;
- LSRolesMask inRoleMask;
- LSAcceptanceFlags inFlags;
- Boolean outAcceptsItem;
- if (!PyArg_ParseTuple(_args, "O&O&ll",
- PyMac_GetFSRef, &inItemFSRef,
- PyMac_GetFSRef, &inTargetRef,
- &inRoleMask,
- &inFlags))
- return NULL;
- _err = LSCanRefAcceptItem(&inItemFSRef,
- &inTargetRef,
- inRoleMask,
- inFlags,
- &outAcceptsItem);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("b",
- outAcceptsItem);
- return _res;
- }
- static PyObject *Launch_LSCanURLAcceptURL(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- CFURLRef inItemURL;
- CFURLRef inTargetURL;
- LSRolesMask inRoleMask;
- LSAcceptanceFlags inFlags;
- Boolean outAcceptsItem;
- if (!PyArg_ParseTuple(_args, "O&O&ll",
- CFURLRefObj_Convert, &inItemURL,
- CFURLRefObj_Convert, &inTargetURL,
- &inRoleMask,
- &inFlags))
- return NULL;
- _err = LSCanURLAcceptURL(inItemURL,
- inTargetURL,
- inRoleMask,
- inFlags,
- &outAcceptsItem);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("b",
- outAcceptsItem);
- return _res;
- }
- static PyObject *Launch_LSOpenFSRef(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- FSRef inRef;
- FSRef outLaunchedRef;
- if (!PyArg_ParseTuple(_args, "O&",
- PyMac_GetFSRef, &inRef))
- return NULL;
- _err = LSOpenFSRef(&inRef,
- &outLaunchedRef);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&",
- PyMac_BuildFSRef, &outLaunchedRef);
- return _res;
- }
- static PyObject *Launch_LSOpenCFURLRef(PyObject *_self, PyObject *_args)
- {
- PyObject *_res = NULL;
- OSStatus _err;
- CFURLRef inURL;
- CFURLRef outLaunchedURL;
- if (!PyArg_ParseTuple(_args, "O&",
- CFURLRefObj_Convert, &inURL))
- return NULL;
- _err = LSOpenCFURLRef(inURL,
- &outLaunchedURL);
- if (_err != noErr) return PyMac_Error(_err);
- _res = Py_BuildValue("O&",
- CFURLRefObj_New, outLaunchedURL);
- return _res;
- }
- static PyMethodDef Launch_methods[] = {
- {"LSCopyItemInfoForRef", (PyCFunction)Launch_LSCopyItemInfoForRef, 1,
- PyDoc_STR("(FSRef inItemRef, LSRequestedInfo inWhichInfo) -> (LSItemInfoRecord outItemInfo)")},
- {"LSCopyItemInfoForURL", (PyCFunction)Launch_LSCopyItemInfoForURL, 1,
- PyDoc_STR("(CFURLRef inURL, LSRequestedInfo inWhichInfo) -> (LSItemInfoRecord outItemInfo)")},
- {"LSGetExtensionInfo", (PyCFunction)Launch_LSGetExtensionInfo, 1,
- PyDoc_STR("(Buffer inNameLen) -> (UniCharCount outExtStartIndex)")},
- {"LSCopyDisplayNameForRef", (PyCFunction)Launch_LSCopyDisplayNameForRef, 1,
- PyDoc_STR("(FSRef inRef) -> (CFStringRef outDisplayName)")},
- {"LSCopyDisplayNameForURL", (PyCFunction)Launch_LSCopyDisplayNameForURL, 1,
- PyDoc_STR("(CFURLRef inURL) -> (CFStringRef outDisplayName)")},
- {"LSSetExtensionHiddenForRef", (PyCFunction)Launch_LSSetExtensionHiddenForRef, 1,
- PyDoc_STR("(FSRef inRef, Boolean inHide) -> None")},
- {"LSSetExtensionHiddenForURL", (PyCFunction)Launch_LSSetExtensionHiddenForURL, 1,
- PyDoc_STR("(CFURLRef inURL, Boolean inHide) -> None")},
- {"LSCopyKindStringForRef", (PyCFunction)Launch_LSCopyKindStringForRef, 1,
- PyDoc_STR("(FSRef inFSRef) -> (CFStringRef outKindString)")},
- {"LSCopyKindStringForURL", (PyCFunction)Launch_LSCopyKindStringForURL, 1,
- PyDoc_STR("(CFURLRef inURL) -> (CFStringRef outKindString)")},
- {"LSGetApplicationForItem", (PyCFunction)Launch_LSGetApplicationForItem, 1,
- PyDoc_STR("(FSRef inItemRef, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
- {"LSGetApplicationForInfo", (PyCFunction)Launch_LSGetApplicationForInfo, 1,
- PyDoc_STR("(OSType inType, OSType inCreator, CFStringRef inExtension, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
- {"LSGetApplicationForURL", (PyCFunction)Launch_LSGetApplicationForURL, 1,
- PyDoc_STR("(CFURLRef inURL, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
- {"LSFindApplicationForInfo", (PyCFunction)Launch_LSFindApplicationForInfo, 1,
- PyDoc_STR("(OSType inCreator, CFStringRef inBundleID, CFStringRef inName) -> (FSRef outAppRef, CFURLRef outAppURL)")},
- {"LSCanRefAcceptItem", (PyCFunction)Launch_LSCanRefAcceptItem, 1,
- PyDoc_STR("(FSRef inItemFSRef, FSRef inTargetRef, LSRolesMask inRoleMask, LSAcceptanceFlags inFlags) -> (Boolean outAcceptsItem)")},
- {"LSCanURLAcceptURL", (PyCFunction)Launch_LSCanURLAcceptURL, 1,
- PyDoc_STR("(CFURLRef inItemURL, CFURLRef inTargetURL, LSRolesMask inRoleMask, LSAcceptanceFlags inFlags) -> (Boolean outAcceptsItem)")},
- {"LSOpenFSRef", (PyCFunction)Launch_LSOpenFSRef, 1,
- PyDoc_STR("(FSRef inRef) -> (FSRef outLaunchedRef)")},
- {"LSOpenCFURLRef", (PyCFunction)Launch_LSOpenCFURLRef, 1,
- PyDoc_STR("(CFURLRef inURL) -> (CFURLRef outLaunchedURL)")},
- {NULL, NULL, 0}
- };
- void init_Launch(void)
- {
- PyObject *m;
- PyObject *d;
- m = Py_InitModule("_Launch", Launch_methods);
- d = PyModule_GetDict(m);
- Launch_Error = PyMac_GetOSErrException();
- if (Launch_Error == NULL ||
- PyDict_SetItemString(d, "Error", Launch_Error) != 0)
- return;
- }
- /* ======================= End module _Launch ======================= */