private void OnEngineEventChanged(PlayerEventArgs args) { if (CurrentTrack != null) { if (args.Event == PlayerEvent.Error && CurrentTrack.PlaybackError == StreamPlaybackError.None) { CurrentTrack.SavePlaybackError(StreamPlaybackError.Unknown); } else if (args.Event == PlayerEvent.Iterate && CurrentTrack.PlaybackError != StreamPlaybackError.None) { CurrentTrack.SavePlaybackError(StreamPlaybackError.None); } } if (args.Event == PlayerEvent.StartOfStream) { incremented_last_played = false; } else if (args.Event == PlayerEvent.EndOfStream) { IncrementLastPlayed(); } RaiseEvent(args); // Do not raise iterate across DBus to avoid so many calls; // DBus clients should do their own iterating and // event/state checking locally if (args.Event == PlayerEvent.Iterate) { return; } DBusPlayerEventHandler dbus_handler = dbus_event_changed; if (dbus_handler != null) { dbus_handler(args.Event.ToString().ToLower(), args is PlayerEventErrorArgs ? ((PlayerEventErrorArgs)args).Message : String.Empty, args is PlayerEventBufferingArgs ? ((PlayerEventBufferingArgs)args).Progress : 0 ); } }
private void HandleError(Enum domain, string error_message, string debug) { Close(true); error_message = error_message ?? Catalog.GetString("Unknown Error"); if (domain is ResourceError) { ResourceError domain_code = (ResourceError)domain; if (CurrentTrack != null) { switch (domain_code) { case ResourceError.NotFound: CurrentTrack.SavePlaybackError(StreamPlaybackError.ResourceNotFound); break; default: break; } } Log.Error(String.Format("GStreamer resource error: {0}", domain_code), false); } else if (domain is StreamError) { StreamError domain_code = (StreamError)domain; if (CurrentTrack != null) { switch (domain_code) { case StreamError.CodecNotFound: CurrentTrack.SavePlaybackError(StreamPlaybackError.CodecNotFound); break; default: break; } } Log.Error(String.Format("GStreamer stream error: {0}", domain_code), false); } else if (domain is CoreError) { CoreError domain_code = (CoreError)domain; if (CurrentTrack != null) { switch (domain_code) { case CoreError.MissingPlugin: CurrentTrack.SavePlaybackError(StreamPlaybackError.CodecNotFound); break; default: break; } } if (domain_code != CoreError.MissingPlugin) { Log.Error(String.Format("GStreamer core error: {0}", (CoreError)domain), false); } } else if (domain is LibraryError) { Log.Error(String.Format("GStreamer library error: {0}", (LibraryError)domain), false); } OnEventChanged(new PlayerEventErrorArgs(error_message)); }
private void OnError(IntPtr player, uint domain, int code, IntPtr error, IntPtr debug) { Close(true); string error_message = error == IntPtr.Zero ? Catalog.GetString("Unknown Error") : GLib.Marshaller.Utf8PtrToString(error); if (domain == GST_RESOURCE_ERROR) { GstResourceError domain_code = (GstResourceError)code; if (CurrentTrack != null) { switch (domain_code) { case GstResourceError.NotFound: CurrentTrack.SavePlaybackError(StreamPlaybackError.ResourceNotFound); break; default: break; } } Log.Error(String.Format("GStreamer resource error: {0}", domain_code), false); } else if (domain == GST_STREAM_ERROR) { GstStreamError domain_code = (GstStreamError)code; if (CurrentTrack != null) { switch (domain_code) { case GstStreamError.CodecNotFound: CurrentTrack.SavePlaybackError(StreamPlaybackError.CodecNotFound); break; default: break; } } Log.Error(String.Format("GStreamer stream error: {0}", domain_code), false); } else if (domain == GST_CORE_ERROR) { GstCoreError domain_code = (GstCoreError)code; if (CurrentTrack != null) { switch (domain_code) { case GstCoreError.MissingPlugin: CurrentTrack.SavePlaybackError(StreamPlaybackError.CodecNotFound); break; default: break; } } if (domain_code != GstCoreError.MissingPlugin) { Log.Error(String.Format("GStreamer core error: {0}", (GstCoreError)code), false); } } else if (domain == GST_LIBRARY_ERROR) { Log.Error(String.Format("GStreamer library error: {0}", (GstLibraryError)code), false); } OnEventChanged(new PlayerEventErrorArgs(error_message)); }