// 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]);
            }
        }
예제 #2
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))
                );
        }
예제 #3
0
        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");
        }
예제 #5
0
        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}");
        }