async void chimneyMpdServer_OnFind(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]);
}
}
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.Contains(searchstring));
break;
case ("artist"):
queryFiles = Dbconnection.Table<File>().Where(o => o.Artist.Contains(searchstring));
break;
case ("genre"):
queryFiles = Dbconnection.Table<File>().Where(o => o.Genre.Contains(searchstring));
break;
case ("albumartist"):
queryFiles = Dbconnection.Table<File>().Where(o => o.AlbumArtist.Contains(searchstring));
break;
case ("file"):
queryFiles = Dbconnection.Table<File>().Where(o => o.RelativePath.Contains(searchstring));
break;
case ("Title"):
queryFiles = Dbconnection.Table<File>().Where(o => o.Title.Contains(searchstring));
break;
case("any"):
queryFiles = Dbconnection.Table<File>().Where(o =>
o.Title.Contains(searchstring) ||
o.Name.Contains(searchstring) ||
o.AlbumArtist.Contains(searchstring) ||
o.Genre.Contains(searchstring) ||
o.Artist.Contains(searchstring) ||
o.Album.Contains(searchstring));
break;
default:
break;
}
if (queryFiles != null)
{
var result = await queryFiles.ToListAsync();
if (result != null)
{
foreach (File file in result)
{
response += file.ToResponseString();
}
}
}
}
if (suc) chimneyMpdServer.AppendResponse(response, e.id, e.position);
else
{
string errorfile = (e.arguments.Count > 0) ? e.arguments.First<string>() : string.Empty;
chimneyMpdServer.ErrorResponse(MPDKeyWords.Response.ACK + " [50@0] {listall} could not find path:" + " \"" + errorfile + "\"", e.id, e.position);
}
}