private E <LocalStr> StartResource(InvokerData invoker, PlayResource play, MetaData meta = null) { play.Meta = meta ?? play.Meta ?? new MetaData(); var sourceLink = resourceResolver.RestoreLink(play.BaseData).OkOr(null); var playInfo = new PlayInfoEventArgs(invoker, play, sourceLink); BeforeResourceStarted?.Invoke(this, playInfo); if (string.IsNullOrWhiteSpace(play.PlayUri)) { Log.Error("Internal resource error: link is empty (resource:{0})", play); return(new LocalStr(strings.error_playmgr_internal_error)); } Log.Debug("AudioResource start: {0}", play); var result = playerConnection.Play(play); if (!result) { Log.Error("Error return from player: {0}", result.Error); return(new LocalStr(strings.error_playmgr_internal_error)); } playerConnection.Volume = Tools.Clamp(playerConnection.Volume, confBot.Audio.Volume.Min, confBot.Audio.Volume.Max); CurrentPlayData = playInfo; // TODO meta as readonly AfterResourceStarted?.Invoke(this, playInfo); return(R.Ok); }
public static PlaylistItemGetData ToApiFormat(this ResourceResolver resourceFactory, PlaylistItem item) { var resource = item.AudioResource; return(new PlaylistItemGetData { Link = resourceFactory.RestoreLink(resource).OkOr(null), Title = resource.ResourceTitle, AudioType = resource.AudioType, }); }