async void chimneyMpdServer_OnSearch(object sender, ResponseEventArgs e)
{
bool suc = true;
List<string> searchstrings = new List<string>();
string searchtype = null;
if (e.arguments.Count > 1)
{
searchtype = e.arguments[0].ToLower();
for (int i = 1; i < e.arguments.Count; i++ )
{
searchstrings.Add(e.arguments[i].ToLower());
}
}
string response = string.Empty;
foreach(string searchstring in searchstrings)
{
AsyncTableQuery<File> queryFiles = null;
switch(searchtype)
{
case ("album"):
queryFiles = Dbconnection.Table<File>().Where(o => o.Album.ToLower().Contains(searchstring));
break;
case ("artist"):
queryFiles = Dbconnection.Table<File>().Where(o => o.Artist.ToLower().Contains(searchstring));
break;
case ("genre"):
queryFiles = Dbconnection.Table<File>().Where(o => o.Genre.ToLower().Contains(searchstring));
break;
case ("albumartist"):
queryFiles = Dbconnection.Table<File>().Where(o => o.AlbumArtist.ToLower().Contains(searchstring));
break;
case ("file"):
queryFiles = Dbconnection.Table<File>().Where(o => o.Name.ToLower().Contains(searchstring));
break;
case ("any"):
queryFiles = Dbconnection.Table<File>().Where(o =>
o.Title.ToLower().Contains(searchstring) ||
o.Name.ToLower().Contains(searchstring) ||
o.AlbumArtist.ToLower().Contains(searchstring) ||
o.Genre.ToLower().Contains(searchstring) ||
o.Artist.ToLower().Contains(searchstring) ||
o.Album.ToLower().Contains(searchstring));
break;
default:
break;
}
if (queryFiles != null)
{
var result = await queryFiles.ToListAsync();
foreach (File file in result)
{
response += file.ToResponseString();
}
}
}
if (suc) chimneyMpdServer.AppendResponse(response, e.id, e.position);
else
{
string errorfile = (e.arguments.Count > 0) ? errorfile = e.arguments.First<string>(): string.Empty;
chimneyMpdServer.ErrorResponse(MPDKeyWords.Response.ACK + " [50@0] {listall} could not find path:" + " \"" + errorfile + "\"", e.id, e.position);
}
}