private bool OnBusMessage (Bus bus, Message msg) { switch (msg.Type) { case MessageType.Eos: StopIterating (); Close (false); OnEventChanged (PlayerEvent.EndOfStream); OnEventChanged (PlayerEvent.RequestNextTrack); break; case MessageType.StateChanged: if (msg.Src == playbin) { State old_state, new_state, pending_state; msg.ParseStateChanged (out old_state, out new_state, out pending_state); HandleStateChange (old_state, new_state, pending_state); } break; case MessageType.Buffering: int buffer_percent; msg.ParseBuffering (out buffer_percent); HandleBuffering (buffer_percent); break; case MessageType.Tag: Pad pad; TagList tag_list; msg.ParseTag (out pad, out tag_list); HandleTag (pad, tag_list); break; case MessageType.Error: Enum error_type; string err_msg, debug; msg.ParseError (out error_type, out err_msg, out debug); HandleError (error_type, err_msg, debug); break; case MessageType.Element: if (MissingPluginMessage.IsMissingPluginMessage (msg)) { string detail = MissingPluginMessage.GetInstallerDetail (msg); if (detail == null) return false; if (missing_details.Contains (detail)) { Log.DebugFormat ("Ignoring missing element details, already prompted ('{0}')", detail); return false; } Log.DebugFormat ("Saving missing element details ('{0}')", detail); missing_details.Add (detail); Log.Error ("Missing GStreamer Plugin", MissingPluginMessage.GetDescription (msg), true); InstallPluginsContext install_context = new InstallPluginsContext (); Install.InstallPlugins (missing_details.ToArray (), install_context, OnInstallPluginsReturn); } else if (msg.Src == playbin && msg.Structure.Name == "playbin2-stream-changed") { HandleStreamChanged (); } else if (NavigationMessage.MessageGetType (msg) == NavigationMessageType.CommandsChanged) { dvd_manager.HandleCommandsChanged (playbin); } break; case MessageType.Application: string name; Structure s = msg.Structure; name = s.Name; if (String.IsNullOrEmpty (name) && name == "stream-changed") { video_manager.ParseStreamInfo (); } break; } return true; }
private bool OnBusMessage(Bus bus, Message msg) { switch (msg.Type) { case MessageType.Eos: StopIterating (); Close (false); OnEventChanged (PlayerEvent.EndOfStream); OnEos (); break; case MessageType.StateChanged: if (msg.Src == playbin) { State old_state, new_state, pending_state; msg.ParseStateChanged (out old_state, out new_state, out pending_state); HandleStateChange (old_state, new_state, pending_state); } break; case MessageType.Buffering: int buffer_percent = msg.ParseBuffering (); HandleBuffering (buffer_percent); break; case MessageType.Tag: TagList tag_list = msg.ParseTag (); tag_list.Foreach (HandleTag); break; case MessageType.Error: GLib.GException err; string debug; msg.ParseError (out err, out debug); HandleError (err); break; case MessageType.Element: if (Gst.PbUtils.Global.IsMissingPluginMessage (msg)) { string detail = Gst.PbUtils.Global.MissingPluginMessageGetInstallerDetail (msg); if (detail == null) return false; if (missing_details.Contains (detail)) { Log.DebugFormat ("Ignoring missing element details, already prompted ('{0}')", detail); return false; } Log.DebugFormat ("Saving missing element details ('{0}')", detail); missing_details.Add (detail); Log.Error ("Missing GStreamer Plugin", Gst.PbUtils.Global.MissingPluginMessageGetDescription (msg), true); InstallPluginsContext install_context = new InstallPluginsContext (); Gst.PbUtils.Global.InstallPluginsAsync (missing_details.ToArray (), install_context, OnInstallPluginsReturn); } else if (NavigationAdapter.MessageGetType (msg) == NavigationMessageType.CommandsChanged) { dvd_manager.HandleCommandsChanged (playbin); } break; case MessageType.StreamStart: HandleStreamStart (); break; case MessageType.Application: string name; Structure s = msg.Structure; name = s.Name; if (String.IsNullOrEmpty (name) && name == "stream-changed") { video_manager.ParseStreamInfo (); } break; } return true; }