async void chimneyMpdServer_OnAddId(object sender, ResponseEventArgs e)
{
bool suc = false;
int id = 0;
File file = null;
if (e.arguments.Count > 0)
{
string uri = e.arguments[0];
//var files = await Dbconnection.QueryAsync<File>("SELECT * FROM Files WHERE RelativePath = \"" + uri + "\"");
//file = (files.Count > 0) ? files[0] : null;
file = await Dbconnection.FindAsync<File>(o => o.RelativePath.Equals(uri));
//var query = Dbconnection.Table<File>().Where(o => o.RelativePath.Equals(uri));
//file = await query.FirstAsync();
}
int position = -1;
if (e.arguments.Count > 1) suc = int.TryParse(e.arguments[1], out position);
else suc = false;
position = (suc) ? position : -1;
if (file != null)
{
int currentPlaylistCount = await Dbconnection.ExecuteScalarAsync<int>("SELECT COUNT(*) FROM CurrentPlaylist");
position = (position <= currentPlaylistCount && position >= 0) ? position : currentPlaylistCount;
if (position != currentPlaylistCount)
{
var affectedFiles = await Dbconnection.QueryAsync<CurrentPlaylist>("UPDATE CurrentPlaylist SET PositionId=PositionId+1 WHERE PositionId >= " + position);
}
CurrentPlaylist newCurrentPlaylistItem = new CurrentPlaylist()
{
FileId = file.FileId,
PositionId = position,
Bitrate = file.Bitrate,
IsUri = false,
Uri = file.FilePath
};
await Dbconnection.InsertAsync(newCurrentPlaylistItem);
suc = true;
id = file.FileId;
}
if (suc)
{
chimneyMpdServer.AppendResponse("Id: " + id + "\n", e.id, e.position);
}
else
{
string errorfile = string.Empty;
if (e.arguments.Count > 0) errorfile = e.arguments.First<string>();
chimneyMpdServer.ErrorResponse(MPDKeyWords.Response.ACK + " [50@0] {add} could not add file:" + " \"" + errorfile + "\"", e.id, e.position);
}
if (OnIdleEvent != null) OnIdleEvent(this, new IdleEventArgs("playlist"));
}