private void StartFileServer()
{
if (!Description.Active)
{
state = State.Stopped;
return;
}
try {
state = State.Loading;
var ids = new Identifiers(ComparerRepository.Lookup(Description.Order), Description.OrderDescending);
foreach (var v in Description.Views)
{
ids.AddView(v);
}
var dirs = (from i in Description.Directories
let d = new DirectoryInfo(i)
where d.Exists
select d).ToArray();
if (dirs.Length == 0)
{
throw new InvalidOperationException("No remaining directories");
}
fileServer = new FileServer(Description.Types, ids, dirs)
{
FriendlyName = Description.Name
};
#if !DEBUG
if (cacheFile != null)
{
fileServer.SetCacheFile(cacheFile);
}
#endif
fileServer.Changing += (o, e) =>
{
state = State.Refreshing;
};
fileServer.Changed += (o, e) =>
{
state = Description.Active ? State.Running : State.Stopped;
};
fileServer.Load();
server.RegisterMediaServer(fileServer);
state = State.Running;
}
catch (Exception ex) {
server.ErrorFormat("Failed to start {0}, {1}", Description.Name, ex);
Description.ToggleActive();
state = State.Stopped;
}
}