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); }
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); } }
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); } } }