Exemplo n.º 1
0
void
search_complete(sp_search * search, Callback * st)
{
    PyObject *res, *results;
    PyGILState_STATE gstate;

    gstate = PyGILState_Ensure();
    results = Results_FromSpotify(search);
    res = PyObject_CallFunctionObjArgs(st->callback, results, st->userdata, NULL);
    if (!res)
        PyErr_WriteUnraisable(st->callback);
    delete_trampoline(st);
    Py_XDECREF(res);
    Py_DECREF(results);
    PyGILState_Release(gstate);
}
Exemplo n.º 2
0
static PyObject *
Session_search(PyObject *self, PyObject *args, PyObject *kwds)
{
    PyObject *callback, *userdata = NULL;
    Callback *trampoline;

    char *query;
    sp_search *search;
    sp_search_type search_type = SP_SEARCH_STANDARD;

    int track_offset = 0, track_count = 32, album_offset = 0, album_count = 32,
        artist_offset = 0, artist_count = 32, playlist_offset = 0,
        playlist_count = 32;

    static char *kwlist[] = {
        "query", "callback", "track_offset", "track_count", "album_offset",
        "album_count", "artist_offset", "artist_count", "playlist_offset",
        "playlist_count", "search_type", "userdata", NULL };

    if (!PyArg_ParseTupleAndKeywords(args, kwds, "esO|iiiiiiiiO&O", kwlist,
                                     ENCODING, &query, &callback,
                                     &track_offset, &track_count,
                                     &album_offset, &album_count,
                                     &artist_offset, &artist_count,
                                     &playlist_offset, &playlist_count,
                                     &sp_search_type_converter,
                                     (void *)&search_type, &userdata))
        return NULL;

    trampoline = create_trampoline(callback, userdata);

    Py_BEGIN_ALLOW_THREADS;
    search = sp_search_create(Session_SP_SESSION(self), query, track_offset,
                              track_count, album_offset, album_count,
                              artist_offset, artist_count, playlist_offset,
                              playlist_count, search_type,
                              Session_search_complete, (void *)trampoline);
    Py_END_ALLOW_THREADS;
    PyMem_Free(query);

    return Results_FromSpotify(search, 0 /* add_ref */);
}
Exemplo n.º 3
0
static PyObject *
Session_search(Session * self, PyObject *args, PyObject *kwds)
{
    char *query;
    sp_search *search;
    PyObject *callback, *userdata = NULL;
    int track_offset = 0, track_count = 32,
        album_offset = 0, album_count = 32, artist_offset = 0, artist_count =
        32;
    Callback *st;
    PyObject *results;

    static char *kwlist[] = { "query", "callback",
        "track_offset", "track_count",
        "album_offset", "album_count",
        "artist_offset", "artist_count",
        "userdata", NULL
    };
    if (!PyArg_ParseTupleAndKeywords(args, kwds, "esO|iiiiiiO", kwlist,
                                     ENCODING, &query, &callback,
                                     &track_offset, &track_count,
                                     &album_offset, &album_count,
                                     &artist_offset, &artist_count, &userdata))
        return NULL;
    if (!userdata)
        userdata = Py_None;
    st = create_trampoline(callback, NULL, userdata);
    Py_BEGIN_ALLOW_THREADS;
    search = sp_search_create(self->_session, query,
                              track_offset, track_count,
                              album_offset, album_count,
                              artist_offset, artist_count,
                              (search_complete_cb *) search_complete,
                              (void *)st);
    Py_END_ALLOW_THREADS;
    results = Results_FromSpotify(search);
    return results;
}
Exemplo n.º 4
0
void
Session_search_complete(sp_search *search, void *data)
{
    Callback *trampoline = (Callback *)data;
    debug_printf(">> search complete (%p, %p)", search, trampoline);

    if (trampoline == NULL)
        return;

    PyObject *result, *search_results;
    PyGILState_STATE gstate = PyGILState_Ensure();

    search_results = Results_FromSpotify(search, 1 /* add_ref */);
    result = PyObject_CallFunction(trampoline->callback, "NO", search_results,
                                   trampoline->userdata);

    if (result != NULL)
        Py_DECREF(result);
    else
        PyErr_WriteUnraisable(trampoline->callback);

    delete_trampoline(trampoline);
    PyGILState_Release(gstate);
}