async void chimneyMpdServer_OnAdd(object sender, ResponseEventArgs e)
{
bool suc = true;
string uri = string.Empty;
File file = null;
bool addasUri = false;
if(e.arguments.Count > 0)
{
uri = e.arguments[0];
file = await Dbconnection.FindAsync<File>(o => o.RelativePath.Equals(uri));
if (file == null) addasUri = true;
}
if (file != null || addasUri)
{
CurrentPlaylist newCurrentPlaylistItem = new CurrentPlaylist()
{
FileId = (addasUri) ? -1 : file.FileId,
IsUri = addasUri,
Uri = (addasUri) ? uri : file.FilePath,
Bitrate = (addasUri) ? 0 : file.Bitrate,
PositionId = await Dbconnection.ExecuteScalarAsync<int>("SELECT COUNT(*) FROM CurrentPlaylist")
};
await Dbconnection.InsertAsync(newCurrentPlaylistItem);
}
else
{
//
// Get the uri from arguments, if empty uri is empty
//
var directory = (e.arguments.Count > 0) ? await Dbconnection.Table<Directory>().Where(o => o.RelativePath.Equals(e.arguments[0])).FirstAsync() : null;
//
// Get the sub directories for the the uri directories
//
var subDirQuery = Dbconnection.Table<Directory>().Where(o => o.RelativePath.StartsWith(directory.RelativePath) || directory.RelativePath.Equals(string.Empty));
var subDirectories = await subDirQuery.ToListAsync();
foreach (Directory subdir in subDirectories)
{
//
// Get all files in the current uri
//
var subfiles = await Dbconnection.QueryAsync<File>("SELECT * FROM Files WHERE Files.DirectoryId = " + subdir.DirectoryId);
foreach (File subfile in subfiles)
{
CurrentPlaylist newCurrentPlaylistItem = new CurrentPlaylist()
{
FileId = subfile.FileId,
PositionId = await Dbconnection.ExecuteScalarAsync<int>("SELECT COUNT(*) FROM CurrentPlaylist")
};
await Dbconnection.InsertAsync(newCurrentPlaylistItem);
}
}
}
if (suc) chimneyMpdServer.AppendResponse(string.Empty, 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"));
}