~ubuntu-branches/ubuntu/saucy/xmms2/saucy-proposed

« back to all changes in this revision

Viewing changes to src/clients/lib/ruby/rb_xmmsclient.c

  • Committer: Bazaar Package Importer
  • Author(s): Florian Ragwitz
  • Date: 2009-05-02 08:31:32 UTC
  • mto: (1.1.6 upstream) (6.1.3 sid)
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: james.westby@ubuntu.com-20090502083132-y0ulwiqbk4lxfd4z
ImportĀ upstreamĀ versionĀ 0.6DrMattDestruction

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*  XMMS2 - X Music Multiplexer System
2
 
 *  Copyright (C) 2003-2008 XMMS2 Team
 
2
 *  Copyright (C) 2003-2009 XMMS2 Team
3
3
 *
4
4
 *  PLUGINS ARE NOT CONSIDERED TO BE DERIVED WORK !!!
5
5
 *
84
84
static void
85
85
c_mark (RbXmmsClient *xmms)
86
86
{
87
 
        rb_gc_mark (xmms->results);
 
87
        rb_gc_mark (xmms->result_callbacks);
88
88
 
89
89
        if (!NIL_P (xmms->disconnect_cb))
90
90
                rb_gc_mark (xmms->disconnect_cb);
130
130
        }
131
131
 
132
132
        xmms->deleted = false;
133
 
        xmms->results = rb_ary_new ();
 
133
        xmms->result_callbacks = rb_ary_new ();
134
134
        xmms->disconnect_cb = Qnil;
135
135
        xmms->io_need_out_cb = Qnil;
136
136
 
160
160
        if (!NIL_P (path))
161
161
                p = StringValuePtr (path);
162
162
 
163
 
        if (!xmmsc_connect (xmms->real, p))
164
 
                rb_raise (eClientError, "cannot connect to daemon");
 
163
        if (!xmmsc_connect (xmms->real, p)) {
 
164
                char buf[255];
 
165
 
 
166
                snprintf (buf, sizeof (buf), "cannot connect to daemon (%s)\n",
 
167
                          xmmsc_get_last_error (xmms->real));
 
168
 
 
169
                rb_raise (eClientError, buf);
 
170
        }
165
171
 
166
172
        return self;
167
173
}
1280
1286
c_coll_query_ids (int argc, VALUE *argv, VALUE self)
1281
1287
{
1282
1288
        VALUE coll, order = Qnil, start, len = Qnil;
1283
 
        const char **corder = NULL;
 
1289
        xmmsv_t *corder = NULL;
1284
1290
        METHOD_HANDLER_HEADER
1285
1291
 
1286
1292
        rb_scan_args (argc, argv, "13", &coll, &order, &start, &len);
1287
1293
 
1288
1294
        if (!NIL_P (order))
1289
 
                corder = parse_string_array (order);
 
1295
                corder = parse_string_array2 (order);
1290
1296
 
1291
1297
        res = xmmsc_coll_query_ids (xmms->real,
1292
1298
                                    FROM_XMMS_CLIENT_COLLECTION (coll),
1293
1299
                                    corder,
1294
1300
                                    NIL_P (start) ? 0 : NUM2UINT (start),
1295
1301
                                    NIL_P (start) ? 0 : NUM2UINT (len));
1296
 
        free (corder);
 
1302
 
 
1303
        xmmsv_unref (corder);
 
1304
 
1297
1305
        METHOD_HANDLER_FOOTER
1298
1306
}
1299
1307
 
1312
1320
c_coll_query_info (int argc, VALUE *argv, VALUE self)
1313
1321
{
1314
1322
        VALUE coll, order = Qnil, start, len, fetch, group = Qnil;
1315
 
        const char **cfetch, **corder = NULL, **cgroup = NULL;
 
1323
        xmmsv_t *cfetch = NULL, *corder = NULL, *cgroup = NULL;
1316
1324
        METHOD_HANDLER_HEADER
1317
1325
 
1318
1326
        rb_scan_args (argc, argv, "24", &coll, &fetch, &order, &start, &len,
1319
1327
                      &group);
1320
1328
 
1321
 
        cfetch = parse_string_array (fetch);
 
1329
        cfetch = parse_string_array2 (fetch);
1322
1330
 
1323
1331
        if (!NIL_P (order))
1324
 
                corder = parse_string_array (order);
 
1332
                corder = parse_string_array2 (order);
1325
1333
 
1326
1334
        if (!NIL_P (group))
1327
 
                cgroup = parse_string_array (group);
 
1335
                cgroup = parse_string_array2 (group);
1328
1336
 
1329
1337
        res = xmmsc_coll_query_infos (xmms->real,
1330
1338
                                    FROM_XMMS_CLIENT_COLLECTION (coll),
1333
1341
                                    NIL_P (start) ? 0 : NUM2UINT (len),
1334
1342
                                    cfetch,
1335
1343
                                    cgroup);
1336
 
        free (cfetch);
1337
 
        free (corder);
1338
 
        free (cgroup);
 
1344
        xmmsv_unref (cfetch);
 
1345
        xmmsv_unref (corder);
 
1346
        xmmsv_unref (cgroup);
1339
1347
 
1340
1348
        METHOD_HANDLER_FOOTER
1341
1349
}
1431
1439
        return ret;
1432
1440
}
1433
1441
 
 
1442
xmmsv_t *
 
1443
parse_string_array2 (VALUE value)
 
1444
{
 
1445
        xmmsv_t *list;
 
1446
 
 
1447
 
 
1448
        list = xmmsv_new_list ();
 
1449
 
 
1450
        if (!NIL_P (rb_check_array_type (value))) {
 
1451
                struct RArray *ary = RARRAY (value);
 
1452
                int i;
 
1453
 
 
1454
                for (i = 0; i < ary->len; i++) {
 
1455
                        xmmsv_t *elem;
 
1456
 
 
1457
                        elem = xmmsv_new_string (StringValuePtr (ary->ptr[i]));
 
1458
                        xmmsv_list_append (list, elem);
 
1459
                        xmmsv_unref (elem);
 
1460
                }
 
1461
        } else {
 
1462
                xmmsv_t *elem;
 
1463
 
 
1464
                elem = xmmsv_new_string (StringValuePtr (value));
 
1465
                xmmsv_list_append (list, elem);
 
1466
                xmmsv_unref (elem);
 
1467
        }
 
1468
 
 
1469
        return list;
 
1470
}
 
1471
 
1434
1472
void
1435
1473
Init_Client (VALUE mXmms)
1436
1474
{