Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 23be1ce

Browse files
committed
Added CFPreferences support. Added these as functions, not methods, which seemed counter-intuitive.
1 parent 4402241 commit 23be1ce

3 files changed

Lines changed: 372 additions & 3 deletions

File tree

Mac/Modules/cf/_CFmodule.c

Lines changed: 357 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <CFString.h>
2929
#include <CFURL.h>
3030
#include <CFPropertyList.h>
31+
#include <CFPreferences.h>
3132
#else
3233
#include <CoreServices/CoreServices.h>
3334
#endif
@@ -3320,6 +3321,323 @@ static PyObject *CF_CFDictionaryCreateMutableCopy(PyObject *_self, PyObject *_ar
33203321
return _res;
33213322
}
33223323

3324+
static PyObject *CF_CFPreferencesCopyAppValue(PyObject *_self, PyObject *_args)
3325+
{
3326+
PyObject *_res = NULL;
3327+
CFTypeRef _rv;
3328+
CFStringRef key;
3329+
CFStringRef applicationID;
3330+
#ifndef CFPreferencesCopyAppValue
3331+
PyMac_PRECHECK(CFPreferencesCopyAppValue);
3332+
#endif
3333+
if (!PyArg_ParseTuple(_args, "O&O&",
3334+
CFStringRefObj_Convert, &key,
3335+
CFStringRefObj_Convert, &applicationID))
3336+
return NULL;
3337+
_rv = CFPreferencesCopyAppValue(key,
3338+
applicationID);
3339+
_res = Py_BuildValue("O&",
3340+
CFTypeRefObj_New, _rv);
3341+
return _res;
3342+
}
3343+
3344+
static PyObject *CF_CFPreferencesGetAppBooleanValue(PyObject *_self, PyObject *_args)
3345+
{
3346+
PyObject *_res = NULL;
3347+
Boolean _rv;
3348+
CFStringRef key;
3349+
CFStringRef applicationID;
3350+
Boolean keyExistsAndHasValidFormat;
3351+
#ifndef CFPreferencesGetAppBooleanValue
3352+
PyMac_PRECHECK(CFPreferencesGetAppBooleanValue);
3353+
#endif
3354+
if (!PyArg_ParseTuple(_args, "O&O&",
3355+
CFStringRefObj_Convert, &key,
3356+
CFStringRefObj_Convert, &applicationID))
3357+
return NULL;
3358+
_rv = CFPreferencesGetAppBooleanValue(key,
3359+
applicationID,
3360+
&keyExistsAndHasValidFormat);
3361+
_res = Py_BuildValue("ll",
3362+
_rv,
3363+
keyExistsAndHasValidFormat);
3364+
return _res;
3365+
}
3366+
3367+
static PyObject *CF_CFPreferencesGetAppIntegerValue(PyObject *_self, PyObject *_args)
3368+
{
3369+
PyObject *_res = NULL;
3370+
CFIndex _rv;
3371+
CFStringRef key;
3372+
CFStringRef applicationID;
3373+
Boolean keyExistsAndHasValidFormat;
3374+
#ifndef CFPreferencesGetAppIntegerValue
3375+
PyMac_PRECHECK(CFPreferencesGetAppIntegerValue);
3376+
#endif
3377+
if (!PyArg_ParseTuple(_args, "O&O&",
3378+
CFStringRefObj_Convert, &key,
3379+
CFStringRefObj_Convert, &applicationID))
3380+
return NULL;
3381+
_rv = CFPreferencesGetAppIntegerValue(key,
3382+
applicationID,
3383+
&keyExistsAndHasValidFormat);
3384+
_res = Py_BuildValue("ll",
3385+
_rv,
3386+
keyExistsAndHasValidFormat);
3387+
return _res;
3388+
}
3389+
3390+
static PyObject *CF_CFPreferencesSetAppValue(PyObject *_self, PyObject *_args)
3391+
{
3392+
PyObject *_res = NULL;
3393+
CFStringRef key;
3394+
CFTypeRef value;
3395+
CFStringRef applicationID;
3396+
#ifndef CFPreferencesSetAppValue
3397+
PyMac_PRECHECK(CFPreferencesSetAppValue);
3398+
#endif
3399+
if (!PyArg_ParseTuple(_args, "O&O&O&",
3400+
CFStringRefObj_Convert, &key,
3401+
CFTypeRefObj_Convert, &value,
3402+
CFStringRefObj_Convert, &applicationID))
3403+
return NULL;
3404+
CFPreferencesSetAppValue(key,
3405+
value,
3406+
applicationID);
3407+
Py_INCREF(Py_None);
3408+
_res = Py_None;
3409+
return _res;
3410+
}
3411+
3412+
static PyObject *CF_CFPreferencesAddSuitePreferencesToApp(PyObject *_self, PyObject *_args)
3413+
{
3414+
PyObject *_res = NULL;
3415+
CFStringRef applicationID;
3416+
CFStringRef suiteID;
3417+
#ifndef CFPreferencesAddSuitePreferencesToApp
3418+
PyMac_PRECHECK(CFPreferencesAddSuitePreferencesToApp);
3419+
#endif
3420+
if (!PyArg_ParseTuple(_args, "O&O&",
3421+
CFStringRefObj_Convert, &applicationID,
3422+
CFStringRefObj_Convert, &suiteID))
3423+
return NULL;
3424+
CFPreferencesAddSuitePreferencesToApp(applicationID,
3425+
suiteID);
3426+
Py_INCREF(Py_None);
3427+
_res = Py_None;
3428+
return _res;
3429+
}
3430+
3431+
static PyObject *CF_CFPreferencesRemoveSuitePreferencesFromApp(PyObject *_self, PyObject *_args)
3432+
{
3433+
PyObject *_res = NULL;
3434+
CFStringRef applicationID;
3435+
CFStringRef suiteID;
3436+
#ifndef CFPreferencesRemoveSuitePreferencesFromApp
3437+
PyMac_PRECHECK(CFPreferencesRemoveSuitePreferencesFromApp);
3438+
#endif
3439+
if (!PyArg_ParseTuple(_args, "O&O&",
3440+
CFStringRefObj_Convert, &applicationID,
3441+
CFStringRefObj_Convert, &suiteID))
3442+
return NULL;
3443+
CFPreferencesRemoveSuitePreferencesFromApp(applicationID,
3444+
suiteID);
3445+
Py_INCREF(Py_None);
3446+
_res = Py_None;
3447+
return _res;
3448+
}
3449+
3450+
static PyObject *CF_CFPreferencesAppSynchronize(PyObject *_self, PyObject *_args)
3451+
{
3452+
PyObject *_res = NULL;
3453+
Boolean _rv;
3454+
CFStringRef applicationID;
3455+
#ifndef CFPreferencesAppSynchronize
3456+
PyMac_PRECHECK(CFPreferencesAppSynchronize);
3457+
#endif
3458+
if (!PyArg_ParseTuple(_args, "O&",
3459+
CFStringRefObj_Convert, &applicationID))
3460+
return NULL;
3461+
_rv = CFPreferencesAppSynchronize(applicationID);
3462+
_res = Py_BuildValue("l",
3463+
_rv);
3464+
return _res;
3465+
}
3466+
3467+
static PyObject *CF_CFPreferencesCopyValue(PyObject *_self, PyObject *_args)
3468+
{
3469+
PyObject *_res = NULL;
3470+
CFTypeRef _rv;
3471+
CFStringRef key;
3472+
CFStringRef applicationID;
3473+
CFStringRef userName;
3474+
CFStringRef hostName;
3475+
#ifndef CFPreferencesCopyValue
3476+
PyMac_PRECHECK(CFPreferencesCopyValue);
3477+
#endif
3478+
if (!PyArg_ParseTuple(_args, "O&O&O&O&",
3479+
CFStringRefObj_Convert, &key,
3480+
CFStringRefObj_Convert, &applicationID,
3481+
CFStringRefObj_Convert, &userName,
3482+
CFStringRefObj_Convert, &hostName))
3483+
return NULL;
3484+
_rv = CFPreferencesCopyValue(key,
3485+
applicationID,
3486+
userName,
3487+
hostName);
3488+
_res = Py_BuildValue("O&",
3489+
CFTypeRefObj_New, _rv);
3490+
return _res;
3491+
}
3492+
3493+
static PyObject *CF_CFPreferencesCopyMultiple(PyObject *_self, PyObject *_args)
3494+
{
3495+
PyObject *_res = NULL;
3496+
CFDictionaryRef _rv;
3497+
CFArrayRef keysToFetch;
3498+
CFStringRef applicationID;
3499+
CFStringRef userName;
3500+
CFStringRef hostName;
3501+
#ifndef CFPreferencesCopyMultiple
3502+
PyMac_PRECHECK(CFPreferencesCopyMultiple);
3503+
#endif
3504+
if (!PyArg_ParseTuple(_args, "O&O&O&O&",
3505+
CFArrayRefObj_Convert, &keysToFetch,
3506+
CFStringRefObj_Convert, &applicationID,
3507+
CFStringRefObj_Convert, &userName,
3508+
CFStringRefObj_Convert, &hostName))
3509+
return NULL;
3510+
_rv = CFPreferencesCopyMultiple(keysToFetch,
3511+
applicationID,
3512+
userName,
3513+
hostName);
3514+
_res = Py_BuildValue("O&",
3515+
CFDictionaryRefObj_New, _rv);
3516+
return _res;
3517+
}
3518+
3519+
static PyObject *CF_CFPreferencesSetValue(PyObject *_self, PyObject *_args)
3520+
{
3521+
PyObject *_res = NULL;
3522+
CFStringRef key;
3523+
CFTypeRef value;
3524+
CFStringRef applicationID;
3525+
CFStringRef userName;
3526+
CFStringRef hostName;
3527+
#ifndef CFPreferencesSetValue
3528+
PyMac_PRECHECK(CFPreferencesSetValue);
3529+
#endif
3530+
if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
3531+
CFStringRefObj_Convert, &key,
3532+
CFTypeRefObj_Convert, &value,
3533+
CFStringRefObj_Convert, &applicationID,
3534+
CFStringRefObj_Convert, &userName,
3535+
CFStringRefObj_Convert, &hostName))
3536+
return NULL;
3537+
CFPreferencesSetValue(key,
3538+
value,
3539+
applicationID,
3540+
userName,
3541+
hostName);
3542+
Py_INCREF(Py_None);
3543+
_res = Py_None;
3544+
return _res;
3545+
}
3546+
3547+
static PyObject *CF_CFPreferencesSetMultiple(PyObject *_self, PyObject *_args)
3548+
{
3549+
PyObject *_res = NULL;
3550+
CFDictionaryRef keysToSet;
3551+
CFArrayRef keysToRemove;
3552+
CFStringRef applicationID;
3553+
CFStringRef userName;
3554+
CFStringRef hostName;
3555+
#ifndef CFPreferencesSetMultiple
3556+
PyMac_PRECHECK(CFPreferencesSetMultiple);
3557+
#endif
3558+
if (!PyArg_ParseTuple(_args, "O&O&O&O&O&",
3559+
CFDictionaryRefObj_Convert, &keysToSet,
3560+
CFArrayRefObj_Convert, &keysToRemove,
3561+
CFStringRefObj_Convert, &applicationID,
3562+
CFStringRefObj_Convert, &userName,
3563+
CFStringRefObj_Convert, &hostName))
3564+
return NULL;
3565+
CFPreferencesSetMultiple(keysToSet,
3566+
keysToRemove,
3567+
applicationID,
3568+
userName,
3569+
hostName);
3570+
Py_INCREF(Py_None);
3571+
_res = Py_None;
3572+
return _res;
3573+
}
3574+
3575+
static PyObject *CF_CFPreferencesSynchronize(PyObject *_self, PyObject *_args)
3576+
{
3577+
PyObject *_res = NULL;
3578+
Boolean _rv;
3579+
CFStringRef applicationID;
3580+
CFStringRef userName;
3581+
CFStringRef hostName;
3582+
#ifndef CFPreferencesSynchronize
3583+
PyMac_PRECHECK(CFPreferencesSynchronize);
3584+
#endif
3585+
if (!PyArg_ParseTuple(_args, "O&O&O&",
3586+
CFStringRefObj_Convert, &applicationID,
3587+
CFStringRefObj_Convert, &userName,
3588+
CFStringRefObj_Convert, &hostName))
3589+
return NULL;
3590+
_rv = CFPreferencesSynchronize(applicationID,
3591+
userName,
3592+
hostName);
3593+
_res = Py_BuildValue("l",
3594+
_rv);
3595+
return _res;
3596+
}
3597+
3598+
static PyObject *CF_CFPreferencesCopyApplicationList(PyObject *_self, PyObject *_args)
3599+
{
3600+
PyObject *_res = NULL;
3601+
CFArrayRef _rv;
3602+
CFStringRef userName;
3603+
CFStringRef hostName;
3604+
#ifndef CFPreferencesCopyApplicationList
3605+
PyMac_PRECHECK(CFPreferencesCopyApplicationList);
3606+
#endif
3607+
if (!PyArg_ParseTuple(_args, "O&O&",
3608+
CFStringRefObj_Convert, &userName,
3609+
CFStringRefObj_Convert, &hostName))
3610+
return NULL;
3611+
_rv = CFPreferencesCopyApplicationList(userName,
3612+
hostName);
3613+
_res = Py_BuildValue("O&",
3614+
CFArrayRefObj_New, _rv);
3615+
return _res;
3616+
}
3617+
3618+
static PyObject *CF_CFPreferencesCopyKeyList(PyObject *_self, PyObject *_args)
3619+
{
3620+
PyObject *_res = NULL;
3621+
CFArrayRef _rv;
3622+
CFStringRef applicationID;
3623+
CFStringRef userName;
3624+
CFStringRef hostName;
3625+
#ifndef CFPreferencesCopyKeyList
3626+
PyMac_PRECHECK(CFPreferencesCopyKeyList);
3627+
#endif
3628+
if (!PyArg_ParseTuple(_args, "O&O&O&",
3629+
CFStringRefObj_Convert, &applicationID,
3630+
CFStringRefObj_Convert, &userName,
3631+
CFStringRefObj_Convert, &hostName))
3632+
return NULL;
3633+
_rv = CFPreferencesCopyKeyList(applicationID,
3634+
userName,
3635+
hostName);
3636+
_res = Py_BuildValue("O&",
3637+
CFArrayRefObj_New, _rv);
3638+
return _res;
3639+
}
3640+
33233641
static PyObject *CF_CFStringGetTypeID(PyObject *_self, PyObject *_args)
33243642
{
33253643
PyObject *_res = NULL;
@@ -3884,6 +4202,34 @@ static PyMethodDef CF_methods[] = {
38844202
"(CFIndex capacity) -> (CFMutableDictionaryRef _rv)"},
38854203
{"CFDictionaryCreateMutableCopy", (PyCFunction)CF_CFDictionaryCreateMutableCopy, 1,
38864204
"(CFIndex capacity, CFDictionaryRef theDict) -> (CFMutableDictionaryRef _rv)"},
4205+
{"CFPreferencesCopyAppValue", (PyCFunction)CF_CFPreferencesCopyAppValue, 1,
4206+
"(CFStringRef key, CFStringRef applicationID) -> (CFTypeRef _rv)"},
4207+
{"CFPreferencesGetAppBooleanValue", (PyCFunction)CF_CFPreferencesGetAppBooleanValue, 1,
4208+
"(CFStringRef key, CFStringRef applicationID) -> (Boolean _rv, Boolean keyExistsAndHasValidFormat)"},
4209+
{"CFPreferencesGetAppIntegerValue", (PyCFunction)CF_CFPreferencesGetAppIntegerValue, 1,
4210+
"(CFStringRef key, CFStringRef applicationID) -> (CFIndex _rv, Boolean keyExistsAndHasValidFormat)"},
4211+
{"CFPreferencesSetAppValue", (PyCFunction)CF_CFPreferencesSetAppValue, 1,
4212+
"(CFStringRef key, CFTypeRef value, CFStringRef applicationID) -> None"},
4213+
{"CFPreferencesAddSuitePreferencesToApp", (PyCFunction)CF_CFPreferencesAddSuitePreferencesToApp, 1,
4214+
"(CFStringRef applicationID, CFStringRef suiteID) -> None"},
4215+
{"CFPreferencesRemoveSuitePreferencesFromApp", (PyCFunction)CF_CFPreferencesRemoveSuitePreferencesFromApp, 1,
4216+
"(CFStringRef applicationID, CFStringRef suiteID) -> None"},
4217+
{"CFPreferencesAppSynchronize", (PyCFunction)CF_CFPreferencesAppSynchronize, 1,
4218+
"(CFStringRef applicationID) -> (Boolean _rv)"},
4219+
{"CFPreferencesCopyValue", (PyCFunction)CF_CFPreferencesCopyValue, 1,
4220+
"(CFStringRef key, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFTypeRef _rv)"},
4221+
{"CFPreferencesCopyMultiple", (PyCFunction)CF_CFPreferencesCopyMultiple, 1,
4222+
"(CFArrayRef keysToFetch, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFDictionaryRef _rv)"},
4223+
{"CFPreferencesSetValue", (PyCFunction)CF_CFPreferencesSetValue, 1,
4224+
"(CFStringRef key, CFTypeRef value, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None"},
4225+
{"CFPreferencesSetMultiple", (PyCFunction)CF_CFPreferencesSetMultiple, 1,
4226+
"(CFDictionaryRef keysToSet, CFArrayRef keysToRemove, CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> None"},
4227+
{"CFPreferencesSynchronize", (PyCFunction)CF_CFPreferencesSynchronize, 1,
4228+
"(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (Boolean _rv)"},
4229+
{"CFPreferencesCopyApplicationList", (PyCFunction)CF_CFPreferencesCopyApplicationList, 1,
4230+
"(CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)"},
4231+
{"CFPreferencesCopyKeyList", (PyCFunction)CF_CFPreferencesCopyKeyList, 1,
4232+
"(CFStringRef applicationID, CFStringRef userName, CFStringRef hostName) -> (CFArrayRef _rv)"},
38874233
{"CFStringGetTypeID", (PyCFunction)CF_CFStringGetTypeID, 1,
38884234
"() -> (CFTypeID _rv)"},
38894235
{"CFStringCreateWithPascalString", (PyCFunction)CF_CFStringCreateWithPascalString, 1,
@@ -4017,6 +4363,17 @@ void init_CF(void)
40174363
Py_INCREF(&CFURLRef_Type);
40184364
if (PyDict_SetItemString(d, "CFURLRefType", (PyObject *)&CFURLRef_Type) != 0)
40194365
Py_FatalError("can't initialize CFURLRefType");
4366+
4367+
#define _STRINGCONST(name) PyModule_AddObject(m, #name, CFStringRefObj_New(name))
4368+
_STRINGCONST(kCFPreferencesAnyApplication);
4369+
_STRINGCONST(kCFPreferencesCurrentApplication);
4370+
_STRINGCONST(kCFPreferencesAnyHost);
4371+
_STRINGCONST(kCFPreferencesCurrentHost);
4372+
_STRINGCONST(kCFPreferencesAnyUser);
4373+
_STRINGCONST(kCFPreferencesCurrentUser);
4374+
4375+
4376+
40204377
}
40214378

40224379
/* ========================= End module _CF ========================= */

0 commit comments

Comments
 (0)