Esempio n. 1
0
static void client_cleanup(context_t *c)
{
    mrp_dbus_follow_name(c->dbus, SERVER_NAME, server_status_cb, c);
    mrp_del_timer(c->timer);
    mrp_dbus_subscribe_signal(c->dbus, pong_handler, c,
                              c->name, SERVER_PATH, SERVER_INTERFACE,
                              PONG, NULL);
    mrp_dbus_unref(c->dbus);
}
Esempio n. 2
0
static void client_setup(context_t *c)
{
    const char *dest;

    c->dbus = mrp_dbus_connect(c->ml, c->busaddr, NULL);

    if (c->dbus == NULL) {
        mrp_log_error("Failed to create D-BUS connection to '%s' bus.",
                      c->busaddr);
        exit(1);
    }

    c->name = mrp_dbus_get_unique_name(c->dbus);
    mrp_log_info("Our address is %s on the bus...",
                 c->name ? c->name : "unknown");

    mrp_dbus_follow_name(c->dbus, SERVER_NAME, server_status_cb, c);

    if (c->all_pongs) {
        mrp_log_info("Subscribing for all pong signals...");
        dest = NULL;
    }
    else {
        mrp_log_info("Subscribing only for pong signals to us...");
        dest = c->name;
    }

    if (!mrp_dbus_subscribe_signal(c->dbus, pong_handler, c,
                                   dest, SERVER_PATH, SERVER_INTERFACE,
                                   PONG, NULL)) {
        mrp_log_error("Failed to subscribe for signal '%s/%s.%s'.", SERVER_PATH,
                      SERVER_INTERFACE, PONG);
        exit(1);
    }

    c->timer = mrp_add_timer(c->ml, 1000, send_cb, c);

    if (c->timer == NULL) {
        mrp_log_error("Failed to create D-BUS sending timer.");
        exit(1);
    }
}
Esempio n. 3
0
static void name_follow_cb(mrp_dbus_t *dbus,
                           const char *dbus_name,
                           int error,
                           const char *owner,
                           void *user_data)
{
    context_t *ctx = (context_t *)user_data;
    dbusif_t *dbusif;
    const char *dot;

    MRP_UNUSED(dbus);
    MRP_UNUSED(error);

    if (ctx && (dbusif = ctx->dbusif) && (dot = strrchr(dbus_name, '.'))) {
        const char *name = dot + 1;

        if (owner && owner[0]) {
            if (owner[0] == ':') {
                clients_player_appeared(ctx, name, owner);

                mrp_dbus_subscribe_signal(dbusif->dbus, property_changed_cb,
                                          ctx, owner,
                                          "/org/mpris/MediaPlayer2",
                                          "org.freedesktop.DBus.Properties",
                                          "PropertiesChanged", NULL);
            }
        }
        else {
            clients_player_disappeared(ctx, name);

            mrp_dbus_unsubscribe_signal(dbusif->dbus, property_changed_cb, ctx,
                                        owner,
                                        "/org/mpris/MediaPlayer2",
                                        "org.freedesktop.DBus.Properties",
                                        "PropertiesChanged", NULL);
        }
    }
}