// Is there a way to have a Task/void override protected override async void Run(Cmd cmd) { // We know track has value from checks before var track = cmd.Arg.GetValueOrDefault().Lexeme; var album = cmd.FlagArgs.ContainsKey(albumFlag) ? cmd.FlagArgs[albumFlag].Lexeme : null; var artist = cmd.FlagArgs.ContainsKey(artistFlag) ? cmd.FlagArgs[artistFlag].Lexeme : null; Clti.WriteLine($"Finding: {track} {album} {artist}"); var tracks = (await db.LoadTracks()) .Where(x => artist?.Equals(x.Artist ?? "", StringComparison.OrdinalIgnoreCase) ?? true) .Where(x => album?.Equals(x.Album ?? "", StringComparison.OrdinalIgnoreCase) ?? true) .Where(x => track.Equals(x.Title ?? "", StringComparison.OrdinalIgnoreCase)).ToList(); if (tracks.Count == 0) { Clti.WriteError("No tracks found matching criterion"); } else if (tracks.Count > 1) { Clti.WriteLine("Multiple tracks found, please narrow criterion"); } tracks.ForEach(Clti.WriteLine); if (tracks.Count == 1) { Mp.SetTrack(tracks[0]); } }
// ReSharper disable once UnusedMember.Local private async void RunQuery <T>(Cmd cmd) { var res = await db.ExecuteQueryAsync <T>(cmd.Arg?.Lexeme ?? ""); res.Match( e => Clti.WriteError(e.Message), xs => xs.ForEach(x => Clti.WriteLine(x)) ); }
protected override void Run(Cmd cmd) { Clti.WriteLine("Running query"); var typeString = cmd.FlagArgs[typeToken].Lexeme; var type = TypeOf(typeString); var method = GetType().GetMethod("RunQuery", BindingFlags.Instance | BindingFlags.NonPublic); method?.MakeGenericMethod(type).Invoke(this, new object[] { cmd }); }
protected override void Run(Cmd cmd) { if (Mp.CurrentTrack == null) { Clti.WriteLine("No track is currently playing"); return; } Mp.Pause(); Clti.WriteLine("Paused"); }
protected override void Run(Cmd cmd) { if (Mp.CurrentTrack == null) { Clti.WriteLine("No track is currently playing"); return; } Clti.WriteLine($"Playing '{Mp.CurrentTrack.Title}'"); Mp.Play(); }
protected override void Run(Cmd cmd) { if (Mp.CurrentTrack == null) { Clti.WriteError("There is no currently playing track"); return; } if (Mp.Queue.IndexOf(Mp.CurrentTrack) == 0) { Clti.WriteError("There is no previous track in queue"); return; } Mp.SkipToPrev(); Clti.WriteLine($"Playing previous track {Mp.CurrentTrack.Title}"); }