mpris2-client: add multi player support
authorJanos Kovacs <jankovac503@gmail.com>
Thu, 6 Jun 2013 13:43:27 +0000 (16:43 +0300)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Thu, 6 Jun 2013 13:57:25 +0000 (16:57 +0300)
src/plugins/mpris2-client/clients.c
src/plugins/mpris2-client/mpris2-plugin.c
src/plugins/search-client/search-plugin.c
src/plugins/sphinx-speech-engine/sphinx-plugin.c

index e2456f3..d9d8e86 100644 (file)
@@ -19,6 +19,7 @@ struct clients_s {
         mrp_htbl_t *name;
         mrp_htbl_t *addr;
     } player;
+    player_t *deflt;
     player_t *current;
 };
 
@@ -153,8 +154,8 @@ int clients_register_player(context_t *ctx,
                  player->name, player->service ? player->service : "none",
                  player->object ? player->object : "none");
 
-    if (!clients->current) {
-        clients->current = player;
+    if (!clients->deflt) {
+        clients->current = clients->deflt = player;
         mrp_log_info("'%s' become the default player", player->name);
     }
 
@@ -243,8 +244,21 @@ void clients_player_disappeared(context_t *ctx, const char *name)
 
 void clients_player_state_changed(player_t *player, player_state_t state)
 {
-    if (player)
-        player->state = state;
+    context_t *ctx;
+    clients_t *clients;
+    player_state_t old_state;
+
+    if (!player || !(ctx = player->ctx) || !(clients = ctx->clients))
+        return;
+
+    old_state = player->state;
+    player->state = state;
+
+    if (old_state != PLAY && state == PLAY) {
+        if (clients->current != player)
+            clients->current = player;
+        return;
+    }
 }
 
 void clients_player_status_changed(player_t *player, bool ready)
@@ -358,8 +372,19 @@ void clients_player_show(player_t *player)
 
 void clients_player_quit(player_t *player)
 {
-    if (player && player->address)
+    context_t *ctx;
+    clients_t *clients;
+
+    if (!player || !(ctx = player->ctx) || !(clients = ctx->clients))
+        return;
+
+    if (clients->current == player)
+        clients->current = clients->deflt;
+
+    if (player->address) {
+        dbusif_set_player_state(player, STOP);
         dbusif_quit_player(player);
+    }
 }
 
 static int notify_focus(srs_client_t *srs_client, srs_voice_focus_t focus)
@@ -544,6 +569,7 @@ static void playlist_free(size_t nlist, playlist_t *lists)
 }
 
 
+
 static uint64_t get_current_time(void)
 {
     struct timeval tv;
index 51aecb7..63e2104 100644 (file)
@@ -94,7 +94,7 @@ static int config_mpris2(srs_plugin_t *plugin, srs_cfg_t *settings)
     for (i = 0, success = TRUE;   i < n ;   i++) {
         c = cfgs + i;
 
-        if (!strcmp("player", c->key + pfxlen)) {
+        if (!strncmp("player", c->key + pfxlen, 6)) {
             snprintf(srv, sizeof(srv), "%s%s", c->value, ".service");
             snprintf(obj, sizeof(obj), "%s%s", c->value, ".object");
             for (j = 0, service = object = NULL;
index 19b7d55..b6717ad 100644 (file)
@@ -40,7 +40,7 @@
 #define SEARCH_VERSION "0.0.1"
 
 #define DICTIONARY     "general"
-#define COMMAND        "chromium-browser \"http://google.com/search?q=__url__\""
+#define COMMAND        "google-chrome \"http://google.com/search?q=__url__\""
 
 typedef struct {
     srs_plugin_t *self;                  /* us */
index 2803421..13c292b 100644 (file)
@@ -101,7 +101,7 @@ static int flush(uint32_t start, uint32_t end, void *user_data)
 
     MRP_UNUSED(ctx);
 
-    mrp_debug("flushing CMU Sphinx backend buffer (%u - %u)", start, end);
+    mrp_log_info("flushing CMU Sphinx backend buffer (%u - %u)", start, end);
 
     return TRUE;
 }
@@ -113,7 +113,7 @@ static int rescan(uint32_t start, uint32_t end, void *user_data)
 
     MRP_UNUSED(ctx);
 
-    mrp_debug("scheduling CMU Sphinx backend buffer rescan (%u - %u)",
+    mrp_log_info("scheduling CMU Sphinx backend buffer rescan (%u - %u)",
               start, end);
 
     return TRUE;
@@ -149,7 +149,7 @@ static int check_decoder(const char *decoder, void *user_data)
     context_t *ctx = (context_t *)user_data;
     int available;
 
-    mrp_debug("checking availability of decoder '%s' for CMU Sphinx backend",
+    mrp_log_info("checking availability of decoder '%s' for CMU Sphinx backend",
               decoder);
 
     available = decoder_set_contains(ctx, decoder);
@@ -164,7 +164,7 @@ static int select_decoder(const char *decoder, void *user_data)
 {
     context_t *ctx = (context_t *)user_data;
 
-    mrp_debug("selecting decoder '%s' for CMU Sphinx backend", decoder);
+    mrp_log_info("selecting decoder '%s' for CMU Sphinx backend", decoder);
 
     if (decoder_set_use(ctx, decoder) < 0)
         return FALSE;
@@ -178,7 +178,7 @@ static const char *active_decoder(void *user_data)
     context_t *ctx = (context_t *)user_data;
     const char *decoder;
 
-    mrp_debug("querying active CMU Sphinx backend decoder");
+    mrp_log_info("querying active CMU Sphinx backend decoder");
 
     decoder = decoder_set_name(ctx);