public static List<Record> GetRecordsFromSession(Session session, TimePeriod period, bool filterRecords = true)
{
var res = new List<Record>();
using (var mutex = Utils.TryLockFile(session.FileName))
using (var stream = new FileStream(session.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var encoding = DetectEncoding(stream);
if (filterRecords)
{
while (true)
{
var startPos = stream.Position;
var line = ReadLine(stream, encoding);
if (line == null)
break;
var record = ParseLine(line);
if (!IsServiceMessage(record.Name))
{
stream.Position = startPos;
break;
}
record.SessionId = session.Id;
res.Add(record);
}
SkipOutdatedRecords(stream, encoding, period.StartTime);
}
using (var reader = new StreamReader(stream, encoding, true))
{
while (true)
{
var line = reader.ReadLine();
if (line == null)
break;
var record = ParseLine(line);
if (filterRecords && record.Time > period.EndTime)
break;
if (filterRecords && record.Time < period.StartTime)
continue;
record.SessionId = session.Id;
res.Add(record);
}
}
}
return res;
}