private void MenuItemBackgroundLogging_Checked(object sender, RoutedEventArgs e) { if (((MenuItem)sender).IsChecked) { Trace.Listeners.Add(new TextWriterTraceListener($"SyncMLStream-BackgroundLogging-{Environment.MachineName}-{DateTime.Now:MM-dd-yy_H-mm-ss}.xml", "listenerSyncMLStream")); Trace.AutoFlush = true; SyncMlSessions.Clear(); ListBoxMessages.ItemsSource = null; TextEditorStream.Clear(); TextEditorMessages.Clear(); TextEditorStream.IsEnabled = false; TextEditorStream.AppendText(Environment.NewLine + "\t'Background Logging Mode' enabled."); } }
private void WorkerProgressChanged(object sender, ProgressChangedEventArgs e) { try { if (!(e.UserState is TraceEvent userState)) { throw new ArgumentException("No TraceEvent received."); } // show all events if (CheckBoxShowTraceEvents.IsChecked == true) { // filter a bit otherwise too much noise... if (!string.Equals(userState.EventName, "FunctionEntry", StringComparison.CurrentCultureIgnoreCase) && !string.Equals(userState.EventName, "FunctionExit", StringComparison.CurrentCultureIgnoreCase) && !string.Equals(userState.EventName, "GenericLogEvent", StringComparison.CurrentCultureIgnoreCase)) { TextEditorStream.AppendText(userState.EventName + " "); } } // we are interested in just a few events with relevant data if (string.Equals(userState.EventName, "OmaDmClientExeStart", StringComparison.CurrentCultureIgnoreCase) || string.Equals(userState.EventName, "OmaDmSyncmlVerboseTrace", StringComparison.CurrentCultureIgnoreCase)) { SyncMlProgress.NotInProgress = false; LabelStatus.Visibility = Visibility.Visible; string eventDataText = null; try { eventDataText = Encoding.UTF8.GetString(userState.EventData()); } catch (Exception) { // ignored } if (eventDataText == null) { return; } var startIndex = eventDataText.IndexOf("<SyncML", StringComparison.CurrentCultureIgnoreCase); if (startIndex == -1) { return; } var valueSyncMl = TryFormatXml(eventDataText.Substring(startIndex, eventDataText.Length - startIndex - 1)); if (TextEditorStream.Text.Length == 0) { TextEditorStream.AppendText(valueSyncMl + Environment.NewLine); } else { TextEditorStream.AppendText(Environment.NewLine + valueSyncMl + Environment.NewLine); } TextEditorMessages.Text = valueSyncMl; _foldingStrategy.UpdateFoldings(_foldingManager, TextEditorMessages.Document); var valueSessionId = "0"; var matchSessionId = new Regex("<SessionID>([0-9a-zA-Z]+)</SessionID>").Match(valueSyncMl); if (matchSessionId.Success) { valueSessionId = matchSessionId.Groups[1].Value; } if (!SyncMlSessions.Any(item => item.SessionId == valueSessionId)) { var syncMlSession = new SyncMlSession(valueSessionId); SyncMlSessions.Add(syncMlSession); SyncMlMlMessages.Clear(); } var valueMsgId = "0"; var matchMsgId = new Regex("<MsgID>([0-9]+)</MsgID>").Match(valueSyncMl); if (matchMsgId.Success) { valueMsgId = matchMsgId.Groups[1].Value; } var syncMlMessage = new SyncMlMessage(valueSessionId, valueMsgId, valueSyncMl); SyncMlSessions.FirstOrDefault(item => item.SessionId == valueSessionId)?.Messages .Add(syncMlMessage); SyncMlMlMessages.Add(syncMlMessage); } else if (string.Equals(userState.EventName, "OmaDmSessionStart", StringComparison.CurrentCultureIgnoreCase)) { TextEditorStream.AppendText("<!--- OmaDmSessionStart --->" + Environment.NewLine); } else if (string.Equals(userState.EventName, "OmaDmSessionComplete", StringComparison.CurrentCultureIgnoreCase)) { TextEditorStream.AppendText(Environment.NewLine + "<!--- OmaDmSessionComplete --->" + Environment.NewLine); SyncMlProgress.NotInProgress = true; LabelStatus.Visibility = Visibility.Hidden; } } catch (Exception) { // ignored } }