private static string PrepareMessage(LogPart[] parts) { _logBuilder.Clear(); for (int index = 0; index < parts.Length; index++) { LogPart part = parts[index]; Color c = part.color; _logBuilder.AppendFormat("<color=#{0:X2}{1:X2}{2:X2}>{3}</color>", LogPart.GetHex(c.r), LogPart.GetHex(c.g), LogPart.GetHex(c.b), part.message); } return(_logBuilder.ToString()); }
private static void ReadSettings() { const int BufferSize = 128; using (var fileStream = File.OpenRead(_settingsPath)) using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize)) { string line; while ((line = streamReader.ReadLine()) != null) { LogPart part = ParseEnum <LogPart>(line); _parts.Add(part); } } }
public void Update() { using (trace.NewFrame) { CheckDisposed(); if (Interlocked.CompareExchange(ref folderNeedsRescan, 0, 1) != 0) { trace.Info("Folder will be rescaned. First, disposing existing parts"); foreach (var p in parts) { trace.Info("Disposing: {0}", p.Key); p.Value.Dispose(); } parts.Clear(); trace.Info("Scanning the folder and discovering new parts"); foreach (string fname in fileSystem.GetFiles(baseDirectory, rollingStrategy.InitialSearchFilter)) { trace.Info("Found: {0}", fname); LogPart part = new LogPart(this, Path.GetFileName(fname)); parts[part.DictionaryKey] = part; } } var partsFailedToUpdate = new List <LogPart>(); trace.Info("Updating parts"); foreach (LogPart part in parts.Values) { trace.Info("Handing {0}", part.DictionaryKey); if (!part.Update()) { trace.Info("The part is not valid anymore. Disposing it"); part.Dispose(); partsFailedToUpdate.Add(part); } } if (partsFailedToUpdate.Count > 0) { trace.Info("Removing parts that failed to update ({0})", partsFailedToUpdate.Count); foreach (LogPart part in partsFailedToUpdate) { parts.Remove(part.DictionaryKey); } } var orderedParts = new List <LogPart>(parts.Values); orderedParts.Sort(LogPartsComparer.Instance); using (trace.NewNamedFrame("Sorted log parts")) { foreach (LogPart part in orderedParts) { trace.Info("Part '{0}'. First message time: {1}", part.DictionaryKey, part.FirstMessageTime); } } concatStream.Update(orderedParts.Select(f => f.SimpleMedia.DataStream)); } }