Merge pull request #372 from sragavan/master
authorHalton Huo <halton.huo@intel.com>
Fri, 12 Sep 2014 01:35:14 +0000 (09:35 +0800)
committerHalton Huo <halton.huo@intel.com>
Fri, 12 Sep 2014 01:35:14 +0000 (09:35 +0800)
[MediaRenderer] Fix issues with Mute and Volume apis.

examples/media_renderer.html
media_renderer/media_renderer.cc
media_renderer/media_renderer.h
media_renderer/media_renderer_api.js
media_renderer/media_renderer_instance.cc

index d307475..2fc431b 100644 (file)
@@ -60,32 +60,23 @@ function previous(id) {
   renderers[id].controller.previous();
 }
 
-function mute(id) {
+function setMute(id) {
   mute = !mute;
   renderers[id].controller.mute(mute);
 }
 
 function setSpeed(id) {
-  if (speed > 0.9)
-    speed = 0.5;
-  else
-    speed = 1.0;
+  speed = (speed > 1.0) ? 1.0 : 2.0;
   renderers[id].controller.setSpeed(speed);
 }
 
 function setVolume(id) {
-  if (volume > 0.9)
-    volume = 0.5;
-  else
-    volume = 1.0;
+  volume = (volume > 0.5) ? 0.5 : 1.0;
   renderers[id].controller.setVolume(volume);
 }
 
 function gotoTrack(id) {
-  if (track == 1)
-    track = 2;
-  else
-    track = 1;
+  track = (track == 1) ? 2 : 1;
   var renderer = renderers[id];
   var controller = renderer.controller;
   renderers[id].controller.gotoTrack(track);
@@ -115,7 +106,7 @@ function onRendererFound(event) {
   addButton(rendererControls, event, 'Stop', 'stop(this.id)');
   addButton(rendererControls, event, 'Next', 'next(this.id)');
   addButton(rendererControls, event, 'Previous', 'openURI(this.id)');
-  addButton(rendererControls, event, 'Mute', 'mute(this.id)');  
+  addButton(rendererControls, event, 'Mute', 'setMute(this.id)');
   addButton(rendererControls, event, 'setSpeed', 'setSpeed(this.id)');
   addButton(rendererControls, event, 'setVolume', 'setVolume(this.id)');
   addButton(rendererControls, event, 'gotoTrack', 'gotoTrack(this.id)');
index 385ce13..aac9de0 100644 (file)
@@ -23,14 +23,25 @@ static picojson::value toJSONValueArray(GVariant* values) {
   picojson::array array;
   GVariantIter iter;
   GVariant* child;
-  gint value;
+  gdouble value;
+
+  if (!values)
+    return picojson::value(array);
 
   g_variant_iter_init(&iter, values);
-  while (g_variant_iter_next(&iter, "{d}", &value))
-    array.push_back(picojson::value(static_cast<double>(value)));
+  while (g_variant_iter_next(&iter, "d", &value))
+    array.push_back(picojson::value(value));
+
   return picojson::value(array);
 }
 
+void
+MediaRenderer::PropertyChanged(GDBusProxy* proxy,
+    GVariant* changed_properties,
+    GStrv invalidated_properties,
+    gpointer user_data) {
+}
+
 MediaRenderer::MediaRenderer(common::Instance* instance,
                              const std::string& object_path)
     : instance_(instance),
@@ -75,6 +86,12 @@ MediaRenderer::MediaRenderer(common::Instance* instance,
       NULL,
       &gerror);
 
+  g_signal_connect(
+      mprisplayer_proxy_,
+      "g-properties-changed",
+      G_CALLBACK(MediaRenderer::PropertyChanged),
+      this);
+
   if (gerror) {
     g_error_free(gerror);
     return;
@@ -129,7 +146,9 @@ picojson::value MediaRenderer::ToJSON() {
       (mprismediaplayer2_player_get_current_track(mprisplayer_proxy_)));
   controller_object["speed"] = picojson::value(
       mprismediaplayer2_player_get_rate(mprisplayer_proxy_));
-
+  controller_object["playSpeeds"] = toJSONValueArray(
+      mprismediaplayer2_player_get_transport_play_speeds(
+          mprisplayer_proxy_));
   object_["controller"] = picojson::value(controller_object);
 
   return picojson::value(object_);
@@ -279,7 +298,7 @@ void MediaRenderer::Mute(const picojson::value& value) {
 
   mprismediaplayer2_player_set_mute(
       mprisplayer_proxy_,
-      (gboolean)value.get("mute").get<double>());
+      (gboolean)value.get("mute").get<bool>());
   PostResult("setMuteCompleted", value.get("asyncCallId").get<double>());
 }
 
@@ -304,7 +323,7 @@ void MediaRenderer::SetVolume(const picojson::value& value) {
     PostError(async_call_id);
     return;
   }
-  mprismediaplayer2_player_set_rate(
+  mprismediaplayer2_player_set_volume(
       mprisplayer_proxy_,
       value.get("volume").get<double>());
   PostResult("setVolumeCompleted", value.get("asyncCallId").get<double>());
index 632d35a..4fdecc4 100644 (file)
@@ -46,7 +46,7 @@ class MediaRenderer {
   void PostResult(const std::string& completed_operation,
                   double async_operation_id);
   void PostError(double async_operation_id);
-
+  static void PropertyChanged(GDBusProxy* proxy, GVariant*, GStrv, gpointer);
   CALLBACK_METHOD_WITH_ID(OnOpenURI, GObject*, GAsyncResult*, MediaRenderer);
   CALLBACK_METHOD_WITH_ID(OnPrefetchURI, GObject*,
       GAsyncResult*, MediaRenderer);
index 95d0712..45e0ee1 100644 (file)
@@ -104,7 +104,7 @@ function handleMediaRendererFound(msg) {
 
 function handleMediaRendererLost(msg) {
   var event = new CustomEvent('rendererlost');
-  _addConstProperty(event, 'id', msg.lostRendererId);
+  _addConstProperty(event, 'id', msg.rendererId);
   g_media_renderer_manager.dispatchEvent(event);
   if (g_media_renderer_manager.onrendererlost)
     g_media_renderer_manager.onrendererlost(event);
@@ -198,7 +198,6 @@ function MediaRenderer(obj) {
   _addConstPropertyFromObject(this, 'deviceType', obj);
   _addConstPropertyFromObject(this, 'protocolInfo', obj);
   _addConstProperty(this, 'controller', new MediaController(obj.controller));
-  this.oncontainerchanged = null;
 }
 
 MediaRenderer.prototype.openURI = function(mediaURI, metaData) {
@@ -286,7 +285,7 @@ MediaController.prototype.previous = function() {
 
 MediaController.prototype.mute = function(mute) {
   var msg = {
-    'cmd': 'mute',
+    'cmd': 'setMute',
     'rendererId': this.id,
     'mute': mute
   };
index 98c8ddc..4a8c5bb 100644 (file)
@@ -47,7 +47,7 @@ void MediaRendererInstance::HandleMessage(const char* message) {
     media_renderer_manager_->HandleNext(v);
   else if (cmd == "previous")
     media_renderer_manager_->HandlePrevious(v);
-  else if (cmd == "mute")
+  else if (cmd == "setMute")
     media_renderer_manager_->HandleMute(v);
   else if (cmd == "setSpeed")
     media_renderer_manager_->HandleSetSpeed(v);