using System.Collections.Generic; using System.Linq; namespace LibMpc { public partial class Commands { /// /// https://www.musicpd.org/doc/protocol/database.html /// public class Database { // TODO: count public class Find : IMpcCommand>> { private readonly ITag _tag; private readonly string _searchText; public Find(ITag tag, string searchText) { _tag = tag; _searchText = searchText; } public string Value => string.Join(" ", "find", _tag.Value, _searchText); public IDictionary>> FormatResponse(IList> response) { var results = new Dictionary>> { { "files", new List>() } }; foreach (var line in response) { if (line.Key.Equals("file")) { results["files"].Add(new Dictionary { { "file", line.Value } }); } else { results["files"].Last().Add(line.Key, line.Value); } } return results; } } public class List : IMpcCommand { private readonly ITag _tag; public List(ITag tag) { _tag = tag; } public string Value => string.Join(" ", "list", _tag); public IDictionary FormatResponse(IList> response) { return response.ToDefaultDictionary(); } } // TODO: findadd public class ListAll : IMpcCommand>>> { public string Value => "listall"; public IDictionary>>> FormatResponse(IList> response) { var results = new Dictionary>>> { { "directories", new List>>() } }; // Add by default the root directory results["directories"].Add(new Dictionary> { { "path", new List() }, { "files", new List() } }); foreach (var line in response) { if (line.Key.Equals("file")) { results["directories"].Last()["files"].Add(line.Value); } if (line.Key.Equals("directory")) { results["directories"].Add(new Dictionary> { { "path", new []{ line.Value } }, { "files", new List() } }); } } return results; } } // TODO: listallinfo // TODO: listfiles // TODO: lsinfo // TODO: readcomments // TODO: search // TODO: searchadd // TODO: searchaddpl public class Update : IMpcCommand { // TODO: Extend command: < update [URI] > public string Value => "update"; public IDictionary FormatResponse(IList> response) { return response.ToDefaultDictionary(); } } // TODO: rescan } } }