internal void GenerateFileList()
{
string dir = Dir.Entry + "audio\\" +Micobject.directory + "\\";
if (!Directory.Exists(dir))
{
try
{
Directory.CreateDirectory(dir);
}
catch (Exception ex)
{
ErrorHandler?.Invoke(ex.Message);
_filelist = new List<FilesFile>();
FileListUpdated?.Invoke(this);
return;
}
}
bool failed = false;
if (File.Exists(dir + "data.xml"))
{
var s = new XmlSerializer(typeof(Files));
try
{
using (var fs = new FileStream(dir + "data.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
{
try
{
using (TextReader reader = new StreamReader(fs))
{
fs.Position = 0;
lock (_lockobject)
{
var t = ((Files)s.Deserialize(reader));
if (t.File == null || !t.File.Any())
{
_filelist = new List<FilesFile>();
}
else
_filelist = t.File.ToList();
}
reader.Close();
}
ScanForMissingFiles();
}
catch (Exception ex)
{
ErrorHandler?.Invoke(ex.Message);
failed = true;
}
fs.Close();
}
}
catch (Exception ex)
{
ErrorHandler?.Invoke(ex.Message);
failed = true;
}
if (!failed)
{
FileListUpdated?.Invoke(this);
return;
}
}
//else build from directory contents
_filelist = new List<FilesFile>();
lock (_lockobject)
{
var dirinfo = new DirectoryInfo(Dir.Entry + "audio\\" + Micobject.directory + "\\");
var lFi = new List<FileInfo>();
lFi.AddRange(dirinfo.GetFiles());
lFi = lFi.FindAll(f => f.Extension.ToLower() == ".mp3");
lFi = lFi.OrderByDescending(f => f.CreationTime).ToList();
//sanity check existing data
foreach (FileInfo fi in lFi)
{
FileInfo fi1 = fi;
if (_filelist.Count(p => p.Filename == fi1.Name) == 0)
{
_filelist.Add(new FilesFile
{
CreatedDateTicks = fi.CreationTime.Ticks,
Filename = fi.Name,
SizeBytes = fi.Length,
MaxAlarm = 0,
AlertData = "0",
DurationSeconds = 0,
IsTimelapse = false,
IsMergeFile = fi.Name.ToLower().IndexOf("merge", StringComparison.Ordinal) != -1
});
}
}
for (int index = 0; index < _filelist.Count; index++)
{
FilesFile ff = _filelist[index];
if (lFi.All(p => p.Name != ff.Filename))
{
_filelist.Remove(ff);
index--;
}
}
_filelist = _filelist.OrderByDescending(p => p.CreatedDateTicks).ToList();
}
FileListUpdated?.Invoke(this);
}