ยปCore Development>Code coverage>Mac/Modules/launch/_Launchmodule.c

Python code coverage for Mac/Modules/launch/_Launchmodule.c

#countcontent
1n/a
2n/a/* ========================= Module _Launch ========================= */
3n/a
4n/a#include "Python.h"
5n/a
6n/a
7n/a
8n/a#include "pymactoolbox.h"
9n/a
10n/a/* Macro to test whether a weak-loaded CFM function exists */
11n/a#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
12n/a PyErr_SetString(PyExc_NotImplementedError, \
13n/a "Not available in this shared library/OS version"); \
14n/a return NULL; \
15n/a }} while(0)
16n/a
17n/a
18n/a#if PY_VERSION_HEX < 0x02040000
19n/aPyObject *PyMac_GetOSErrException(void);
20n/a#endif
21n/a
22n/a#include <ApplicationServices/ApplicationServices.h>
23n/a
24n/a/*
25n/a** Optional CFStringRef. None will pass NULL
26n/a*/
27n/astatic int
28n/aOptCFStringRefObj_Convert(PyObject *v, CFStringRef *spec)
29n/a{
30n/a if (v == Py_None) {
31n/a *spec = NULL;
32n/a return 1;
33n/a }
34n/a return CFStringRefObj_Convert(v, spec);
35n/a}
36n/a
37n/aPyObject *
38n/aOptCFStringRefObj_New(CFStringRef it)
39n/a{
40n/a if (it == NULL) {
41n/a Py_INCREF(Py_None);
42n/a return Py_None;
43n/a }
44n/a return CFStringRefObj_New(it);
45n/a}
46n/a
47n/a/*
48n/a** Convert LSItemInfoRecord to Python.
49n/a*/
50n/aPyObject *
51n/aLSItemInfoRecord_New(LSItemInfoRecord *it)
52n/a{
53n/a#ifndef __LP64__
54n/a return Py_BuildValue("{s:is:O&s:O&s:O&s:O&s:i}",
55n/a "flags", it->flags,
56n/a "filetype", PyMac_BuildOSType, it->filetype,
57n/a "creator", PyMac_BuildOSType, it->creator,
58n/a "extension", OptCFStringRefObj_New, it->extension,
59n/a "iconFileName", OptCFStringRefObj_New, it->iconFileName,
60n/a "kindID", it->kindID);
61n/a#else
62n/a return Py_BuildValue("{s:is:O&s:O&s:O&}",
63n/a "flags", it->flags,
64n/a "filetype", PyMac_BuildOSType, it->filetype,
65n/a "creator", PyMac_BuildOSType, it->creator,
66n/a "extension", OptCFStringRefObj_New, it->extension);
67n/a#endif
68n/a}
69n/a
70n/astatic PyObject *Launch_Error;
71n/a
72n/astatic PyObject *Launch_LSCopyItemInfoForRef(PyObject *_self, PyObject *_args)
73n/a{
74n/a PyObject *_res = NULL;
75n/a OSStatus _err;
76n/a FSRef inItemRef;
77n/a LSRequestedInfo inWhichInfo;
78n/a LSItemInfoRecord outItemInfo;
79n/a if (!PyArg_ParseTuple(_args, "O&l",
80n/a PyMac_GetFSRef, &inItemRef,
81n/a &inWhichInfo))
82n/a return NULL;
83n/a _err = LSCopyItemInfoForRef(&inItemRef,
84n/a inWhichInfo,
85n/a &outItemInfo);
86n/a if (_err != noErr) return PyMac_Error(_err);
87n/a _res = Py_BuildValue("O&",
88n/a LSItemInfoRecord_New, &outItemInfo);
89n/a return _res;
90n/a}
91n/a
92n/astatic PyObject *Launch_LSCopyItemInfoForURL(PyObject *_self, PyObject *_args)
93n/a{
94n/a PyObject *_res = NULL;
95n/a OSStatus _err;
96n/a CFURLRef inURL;
97n/a LSRequestedInfo inWhichInfo;
98n/a LSItemInfoRecord outItemInfo;
99n/a if (!PyArg_ParseTuple(_args, "O&l",
100n/a CFURLRefObj_Convert, &inURL,
101n/a &inWhichInfo))
102n/a return NULL;
103n/a _err = LSCopyItemInfoForURL(inURL,
104n/a inWhichInfo,
105n/a &outItemInfo);
106n/a if (_err != noErr) return PyMac_Error(_err);
107n/a _res = Py_BuildValue("O&",
108n/a LSItemInfoRecord_New, &outItemInfo);
109n/a return _res;
110n/a}
111n/a
112n/astatic PyObject *Launch_LSGetExtensionInfo(PyObject *_self, PyObject *_args)
113n/a{
114n/a PyObject *_res = NULL;
115n/a OSStatus _err;
116n/a UniChar *inNameLen__in__;
117n/a UniCharCount inNameLen__len__;
118n/a int inNameLen__in_len__;
119n/a UniCharCount outExtStartIndex;
120n/a if (!PyArg_ParseTuple(_args, "u#",
121n/a &inNameLen__in__, &inNameLen__in_len__))
122n/a return NULL;
123n/a inNameLen__len__ = inNameLen__in_len__;
124n/a _err = LSGetExtensionInfo(inNameLen__len__, inNameLen__in__,
125n/a &outExtStartIndex);
126n/a if (_err != noErr) return PyMac_Error(_err);
127n/a _res = Py_BuildValue("l",
128n/a outExtStartIndex);
129n/a return _res;
130n/a}
131n/a
132n/astatic PyObject *Launch_LSCopyDisplayNameForRef(PyObject *_self, PyObject *_args)
133n/a{
134n/a PyObject *_res = NULL;
135n/a OSStatus _err;
136n/a FSRef inRef;
137n/a CFStringRef outDisplayName;
138n/a if (!PyArg_ParseTuple(_args, "O&",
139n/a PyMac_GetFSRef, &inRef))
140n/a return NULL;
141n/a _err = LSCopyDisplayNameForRef(&inRef,
142n/a &outDisplayName);
143n/a if (_err != noErr) return PyMac_Error(_err);
144n/a _res = Py_BuildValue("O&",
145n/a CFStringRefObj_New, outDisplayName);
146n/a return _res;
147n/a}
148n/a
149n/astatic PyObject *Launch_LSCopyDisplayNameForURL(PyObject *_self, PyObject *_args)
150n/a{
151n/a PyObject *_res = NULL;
152n/a OSStatus _err;
153n/a CFURLRef inURL;
154n/a CFStringRef outDisplayName;
155n/a if (!PyArg_ParseTuple(_args, "O&",
156n/a CFURLRefObj_Convert, &inURL))
157n/a return NULL;
158n/a _err = LSCopyDisplayNameForURL(inURL,
159n/a &outDisplayName);
160n/a if (_err != noErr) return PyMac_Error(_err);
161n/a _res = Py_BuildValue("O&",
162n/a CFStringRefObj_New, outDisplayName);
163n/a return _res;
164n/a}
165n/a
166n/astatic PyObject *Launch_LSSetExtensionHiddenForRef(PyObject *_self, PyObject *_args)
167n/a{
168n/a PyObject *_res = NULL;
169n/a OSStatus _err;
170n/a FSRef inRef;
171n/a Boolean inHide;
172n/a if (!PyArg_ParseTuple(_args, "O&b",
173n/a PyMac_GetFSRef, &inRef,
174n/a &inHide))
175n/a return NULL;
176n/a _err = LSSetExtensionHiddenForRef(&inRef,
177n/a inHide);
178n/a if (_err != noErr) return PyMac_Error(_err);
179n/a Py_INCREF(Py_None);
180n/a _res = Py_None;
181n/a return _res;
182n/a}
183n/a
184n/astatic PyObject *Launch_LSSetExtensionHiddenForURL(PyObject *_self, PyObject *_args)
185n/a{
186n/a PyObject *_res = NULL;
187n/a OSStatus _err;
188n/a CFURLRef inURL;
189n/a Boolean inHide;
190n/a if (!PyArg_ParseTuple(_args, "O&b",
191n/a CFURLRefObj_Convert, &inURL,
192n/a &inHide))
193n/a return NULL;
194n/a _err = LSSetExtensionHiddenForURL(inURL,
195n/a inHide);
196n/a if (_err != noErr) return PyMac_Error(_err);
197n/a Py_INCREF(Py_None);
198n/a _res = Py_None;
199n/a return _res;
200n/a}
201n/a
202n/astatic PyObject *Launch_LSCopyKindStringForRef(PyObject *_self, PyObject *_args)
203n/a{
204n/a PyObject *_res = NULL;
205n/a OSStatus _err;
206n/a FSRef inFSRef;
207n/a CFStringRef outKindString;
208n/a if (!PyArg_ParseTuple(_args, "O&",
209n/a PyMac_GetFSRef, &inFSRef))
210n/a return NULL;
211n/a _err = LSCopyKindStringForRef(&inFSRef,
212n/a &outKindString);
213n/a if (_err != noErr) return PyMac_Error(_err);
214n/a _res = Py_BuildValue("O&",
215n/a CFStringRefObj_New, outKindString);
216n/a return _res;
217n/a}
218n/a
219n/astatic PyObject *Launch_LSCopyKindStringForURL(PyObject *_self, PyObject *_args)
220n/a{
221n/a PyObject *_res = NULL;
222n/a OSStatus _err;
223n/a CFURLRef inURL;
224n/a CFStringRef outKindString;
225n/a if (!PyArg_ParseTuple(_args, "O&",
226n/a CFURLRefObj_Convert, &inURL))
227n/a return NULL;
228n/a _err = LSCopyKindStringForURL(inURL,
229n/a &outKindString);
230n/a if (_err != noErr) return PyMac_Error(_err);
231n/a _res = Py_BuildValue("O&",
232n/a CFStringRefObj_New, outKindString);
233n/a return _res;
234n/a}
235n/a
236n/astatic PyObject *Launch_LSGetApplicationForItem(PyObject *_self, PyObject *_args)
237n/a{
238n/a PyObject *_res = NULL;
239n/a OSStatus _err;
240n/a FSRef inItemRef;
241n/a LSRolesMask inRoleMask;
242n/a FSRef outAppRef;
243n/a CFURLRef outAppURL;
244n/a if (!PyArg_ParseTuple(_args, "O&l",
245n/a PyMac_GetFSRef, &inItemRef,
246n/a &inRoleMask))
247n/a return NULL;
248n/a _err = LSGetApplicationForItem(&inItemRef,
249n/a inRoleMask,
250n/a &outAppRef,
251n/a &outAppURL);
252n/a if (_err != noErr) return PyMac_Error(_err);
253n/a _res = Py_BuildValue("O&O&",
254n/a PyMac_BuildFSRef, &outAppRef,
255n/a CFURLRefObj_New, outAppURL);
256n/a return _res;
257n/a}
258n/a
259n/astatic PyObject *Launch_LSGetApplicationForInfo(PyObject *_self, PyObject *_args)
260n/a{
261n/a PyObject *_res = NULL;
262n/a OSStatus _err;
263n/a OSType inType;
264n/a OSType inCreator;
265n/a CFStringRef inExtension;
266n/a LSRolesMask inRoleMask;
267n/a FSRef outAppRef;
268n/a CFURLRef outAppURL;
269n/a if (!PyArg_ParseTuple(_args, "O&O&O&l",
270n/a PyMac_GetOSType, &inType,
271n/a PyMac_GetOSType, &inCreator,
272n/a OptCFStringRefObj_Convert, &inExtension,
273n/a &inRoleMask))
274n/a return NULL;
275n/a _err = LSGetApplicationForInfo(inType,
276n/a inCreator,
277n/a inExtension,
278n/a inRoleMask,
279n/a &outAppRef,
280n/a &outAppURL);
281n/a if (_err != noErr) return PyMac_Error(_err);
282n/a _res = Py_BuildValue("O&O&",
283n/a PyMac_BuildFSRef, &outAppRef,
284n/a CFURLRefObj_New, outAppURL);
285n/a return _res;
286n/a}
287n/a
288n/astatic PyObject *Launch_LSGetApplicationForURL(PyObject *_self, PyObject *_args)
289n/a{
290n/a PyObject *_res = NULL;
291n/a OSStatus _err;
292n/a CFURLRef inURL;
293n/a LSRolesMask inRoleMask;
294n/a FSRef outAppRef;
295n/a CFURLRef outAppURL;
296n/a if (!PyArg_ParseTuple(_args, "O&l",
297n/a CFURLRefObj_Convert, &inURL,
298n/a &inRoleMask))
299n/a return NULL;
300n/a _err = LSGetApplicationForURL(inURL,
301n/a inRoleMask,
302n/a &outAppRef,
303n/a &outAppURL);
304n/a if (_err != noErr) return PyMac_Error(_err);
305n/a _res = Py_BuildValue("O&O&",
306n/a PyMac_BuildFSRef, &outAppRef,
307n/a CFURLRefObj_New, outAppURL);
308n/a return _res;
309n/a}
310n/a
311n/astatic PyObject *Launch_LSFindApplicationForInfo(PyObject *_self, PyObject *_args)
312n/a{
313n/a PyObject *_res = NULL;
314n/a OSStatus _err;
315n/a OSType inCreator;
316n/a CFStringRef inBundleID;
317n/a CFStringRef inName;
318n/a FSRef outAppRef;
319n/a CFURLRef outAppURL;
320n/a if (!PyArg_ParseTuple(_args, "O&O&O&",
321n/a PyMac_GetOSType, &inCreator,
322n/a OptCFStringRefObj_Convert, &inBundleID,
323n/a OptCFStringRefObj_Convert, &inName))
324n/a return NULL;
325n/a _err = LSFindApplicationForInfo(inCreator,
326n/a inBundleID,
327n/a inName,
328n/a &outAppRef,
329n/a &outAppURL);
330n/a if (_err != noErr) return PyMac_Error(_err);
331n/a _res = Py_BuildValue("O&O&",
332n/a PyMac_BuildFSRef, &outAppRef,
333n/a CFURLRefObj_New, outAppURL);
334n/a return _res;
335n/a}
336n/a
337n/astatic PyObject *Launch_LSCanRefAcceptItem(PyObject *_self, PyObject *_args)
338n/a{
339n/a PyObject *_res = NULL;
340n/a OSStatus _err;
341n/a FSRef inItemFSRef;
342n/a FSRef inTargetRef;
343n/a LSRolesMask inRoleMask;
344n/a LSAcceptanceFlags inFlags;
345n/a Boolean outAcceptsItem;
346n/a if (!PyArg_ParseTuple(_args, "O&O&ll",
347n/a PyMac_GetFSRef, &inItemFSRef,
348n/a PyMac_GetFSRef, &inTargetRef,
349n/a &inRoleMask,
350n/a &inFlags))
351n/a return NULL;
352n/a _err = LSCanRefAcceptItem(&inItemFSRef,
353n/a &inTargetRef,
354n/a inRoleMask,
355n/a inFlags,
356n/a &outAcceptsItem);
357n/a if (_err != noErr) return PyMac_Error(_err);
358n/a _res = Py_BuildValue("b",
359n/a outAcceptsItem);
360n/a return _res;
361n/a}
362n/a
363n/astatic PyObject *Launch_LSCanURLAcceptURL(PyObject *_self, PyObject *_args)
364n/a{
365n/a PyObject *_res = NULL;
366n/a OSStatus _err;
367n/a CFURLRef inItemURL;
368n/a CFURLRef inTargetURL;
369n/a LSRolesMask inRoleMask;
370n/a LSAcceptanceFlags inFlags;
371n/a Boolean outAcceptsItem;
372n/a if (!PyArg_ParseTuple(_args, "O&O&ll",
373n/a CFURLRefObj_Convert, &inItemURL,
374n/a CFURLRefObj_Convert, &inTargetURL,
375n/a &inRoleMask,
376n/a &inFlags))
377n/a return NULL;
378n/a _err = LSCanURLAcceptURL(inItemURL,
379n/a inTargetURL,
380n/a inRoleMask,
381n/a inFlags,
382n/a &outAcceptsItem);
383n/a if (_err != noErr) return PyMac_Error(_err);
384n/a _res = Py_BuildValue("b",
385n/a outAcceptsItem);
386n/a return _res;
387n/a}
388n/a
389n/astatic PyObject *Launch_LSOpenFSRef(PyObject *_self, PyObject *_args)
390n/a{
391n/a PyObject *_res = NULL;
392n/a OSStatus _err;
393n/a FSRef inRef;
394n/a FSRef outLaunchedRef;
395n/a if (!PyArg_ParseTuple(_args, "O&",
396n/a PyMac_GetFSRef, &inRef))
397n/a return NULL;
398n/a _err = LSOpenFSRef(&inRef,
399n/a &outLaunchedRef);
400n/a if (_err != noErr) return PyMac_Error(_err);
401n/a _res = Py_BuildValue("O&",
402n/a PyMac_BuildFSRef, &outLaunchedRef);
403n/a return _res;
404n/a}
405n/a
406n/astatic PyObject *Launch_LSOpenCFURLRef(PyObject *_self, PyObject *_args)
407n/a{
408n/a PyObject *_res = NULL;
409n/a OSStatus _err;
410n/a CFURLRef inURL;
411n/a CFURLRef outLaunchedURL;
412n/a if (!PyArg_ParseTuple(_args, "O&",
413n/a CFURLRefObj_Convert, &inURL))
414n/a return NULL;
415n/a _err = LSOpenCFURLRef(inURL,
416n/a &outLaunchedURL);
417n/a if (_err != noErr) return PyMac_Error(_err);
418n/a _res = Py_BuildValue("O&",
419n/a CFURLRefObj_New, outLaunchedURL);
420n/a return _res;
421n/a}
422n/a
423n/astatic PyMethodDef Launch_methods[] = {
424n/a {"LSCopyItemInfoForRef", (PyCFunction)Launch_LSCopyItemInfoForRef, 1,
425n/a PyDoc_STR("(FSRef inItemRef, LSRequestedInfo inWhichInfo) -> (LSItemInfoRecord outItemInfo)")},
426n/a {"LSCopyItemInfoForURL", (PyCFunction)Launch_LSCopyItemInfoForURL, 1,
427n/a PyDoc_STR("(CFURLRef inURL, LSRequestedInfo inWhichInfo) -> (LSItemInfoRecord outItemInfo)")},
428n/a {"LSGetExtensionInfo", (PyCFunction)Launch_LSGetExtensionInfo, 1,
429n/a PyDoc_STR("(Buffer inNameLen) -> (UniCharCount outExtStartIndex)")},
430n/a {"LSCopyDisplayNameForRef", (PyCFunction)Launch_LSCopyDisplayNameForRef, 1,
431n/a PyDoc_STR("(FSRef inRef) -> (CFStringRef outDisplayName)")},
432n/a {"LSCopyDisplayNameForURL", (PyCFunction)Launch_LSCopyDisplayNameForURL, 1,
433n/a PyDoc_STR("(CFURLRef inURL) -> (CFStringRef outDisplayName)")},
434n/a {"LSSetExtensionHiddenForRef", (PyCFunction)Launch_LSSetExtensionHiddenForRef, 1,
435n/a PyDoc_STR("(FSRef inRef, Boolean inHide) -> None")},
436n/a {"LSSetExtensionHiddenForURL", (PyCFunction)Launch_LSSetExtensionHiddenForURL, 1,
437n/a PyDoc_STR("(CFURLRef inURL, Boolean inHide) -> None")},
438n/a {"LSCopyKindStringForRef", (PyCFunction)Launch_LSCopyKindStringForRef, 1,
439n/a PyDoc_STR("(FSRef inFSRef) -> (CFStringRef outKindString)")},
440n/a {"LSCopyKindStringForURL", (PyCFunction)Launch_LSCopyKindStringForURL, 1,
441n/a PyDoc_STR("(CFURLRef inURL) -> (CFStringRef outKindString)")},
442n/a {"LSGetApplicationForItem", (PyCFunction)Launch_LSGetApplicationForItem, 1,
443n/a PyDoc_STR("(FSRef inItemRef, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
444n/a {"LSGetApplicationForInfo", (PyCFunction)Launch_LSGetApplicationForInfo, 1,
445n/a PyDoc_STR("(OSType inType, OSType inCreator, CFStringRef inExtension, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
446n/a {"LSGetApplicationForURL", (PyCFunction)Launch_LSGetApplicationForURL, 1,
447n/a PyDoc_STR("(CFURLRef inURL, LSRolesMask inRoleMask) -> (FSRef outAppRef, CFURLRef outAppURL)")},
448n/a {"LSFindApplicationForInfo", (PyCFunction)Launch_LSFindApplicationForInfo, 1,
449n/a PyDoc_STR("(OSType inCreator, CFStringRef inBundleID, CFStringRef inName) -> (FSRef outAppRef, CFURLRef outAppURL)")},
450n/a {"LSCanRefAcceptItem", (PyCFunction)Launch_LSCanRefAcceptItem, 1,
451n/a PyDoc_STR("(FSRef inItemFSRef, FSRef inTargetRef, LSRolesMask inRoleMask, LSAcceptanceFlags inFlags) -> (Boolean outAcceptsItem)")},
452n/a {"LSCanURLAcceptURL", (PyCFunction)Launch_LSCanURLAcceptURL, 1,
453n/a PyDoc_STR("(CFURLRef inItemURL, CFURLRef inTargetURL, LSRolesMask inRoleMask, LSAcceptanceFlags inFlags) -> (Boolean outAcceptsItem)")},
454n/a {"LSOpenFSRef", (PyCFunction)Launch_LSOpenFSRef, 1,
455n/a PyDoc_STR("(FSRef inRef) -> (FSRef outLaunchedRef)")},
456n/a {"LSOpenCFURLRef", (PyCFunction)Launch_LSOpenCFURLRef, 1,
457n/a PyDoc_STR("(CFURLRef inURL) -> (CFURLRef outLaunchedURL)")},
458n/a {NULL, NULL, 0}
459n/a};
460n/a
461n/a
462n/a
463n/a
464n/avoid init_Launch(void)
465n/a{
466n/a PyObject *m;
467n/a PyObject *d;
468n/a
469n/a
470n/a
471n/a
472n/a m = Py_InitModule("_Launch", Launch_methods);
473n/a d = PyModule_GetDict(m);
474n/a Launch_Error = PyMac_GetOSErrException();
475n/a if (Launch_Error == NULL ||
476n/a PyDict_SetItemString(d, "Error", Launch_Error) != 0)
477n/a return;
478n/a}
479n/a
480n/a/* ======================= End module _Launch ======================= */
481n/a