private void ControllerOnClipboardContentChanged(bool fromView, string newContent) { if (!_isGameActivated) { return; } // The channel filter has done in WindowsMessagePump.cs by enable / disable // clipboard monitoring, which means this function will be called only if // the filter for clipboard is set to show, so here we don't need to check // the filter as we do in OnLogLineRead(). var chat = new ChattingLine { RawEventCode = (byte)EventCode.Clipboard, EventCode = EventCode.Clipboard, RawSender = strings.checkBoxChannelFilterClipboard, RawContent = newContent, Timestamp = DateTime.Now, }; TranslateService.SubmitNewLine(chat); }
public static string BuildQuote(ChattingLine chatting, bool showLabel) { var extractedName = ExtractName(chatting.RawSender); var eventCode = chatting.RawEventCode; var knownCode = Enum.IsDefined(typeof(EventCode), (byte)(eventCode & byte.MaxValue)); if (knownCode) { var codeEnum = (EventCode)eventCode; if (codeEnum == EventCode.TellFrom) { return($"{extractedName.Item1} >> "); } else if (codeEnum == EventCode.TellTo) { return($">>{extractedName.Item1}:"); } else { if (showLabel) { var nameWithWorld = extractedName.Item2 == null ? extractedName.Item1 : $"{extractedName.Item1}@{extractedName.Item2}"; switch (codeEnum) { case EventCode.LS1: return($"[1]<{nameWithWorld}> "); case EventCode.LS2: return($"[2]<{nameWithWorld}> "); case EventCode.LS3: return($"[3]<{nameWithWorld}> "); case EventCode.LS4: return($"[4]<{nameWithWorld}> "); case EventCode.LS5: return($"[5]<{nameWithWorld}> "); case EventCode.LS6: return($"[6]<{nameWithWorld}> "); case EventCode.LS7: return($"[7]<{nameWithWorld}> "); case EventCode.LS8: return($"[8]<{nameWithWorld}> "); case EventCode.CWLS1: return($"[{GetCWLSLabel(1)}]<{nameWithWorld}> "); case EventCode.CWLS2: return($"[{GetCWLSLabel(2)}]<{nameWithWorld}> "); case EventCode.CWLS3: return($"[{GetCWLSLabel(3)}]<{nameWithWorld}> "); case EventCode.CWLS4: return($"[{GetCWLSLabel(4)}]<{nameWithWorld}> "); case EventCode.CWLS5: return($"[{GetCWLSLabel(5)}]<{nameWithWorld}> "); case EventCode.CWLS6: return($"[{GetCWLSLabel(6)}]<{nameWithWorld}> "); case EventCode.CWLS7: return($"[{GetCWLSLabel(7)}]<{nameWithWorld}> "); case EventCode.CWLS8: return($"[{GetCWLSLabel(8)}]<{nameWithWorld}> "); case EventCode.FreeCompany: return($"[FC]<{nameWithWorld}> "); case EventCode.Party: return($"({nameWithWorld}) "); case EventCode.Alliance: return($"(({nameWithWorld})) "); } } } } return($"{extractedName.Item1}: "); }
private void OnLogLineRead(string line) { // Parse log line // The legal talking log line has the following format: // 00|[timestamp]|[event code]|[name or to?]|[content]<|[MD5]> // eg: // 00|2017-07-13T22:26:50.0000000+08:00|0010|Pinoko Fox|哈呀|f94872989411d9f173c9e9b36e29c9d1 // or // 00|2017-07-13T22:26:50.0000000+08:00|0010|Pinoko Fox|哈呀 var data = line.Split('|'); if (data.Length < 5) { return; } if (!"00".Equals(data[0])) { return; } if (string.IsNullOrEmpty(data[3])) { return; } if (!int.TryParse(data[2], NumberStyles.HexNumber, null, out var eventCode)) { return; } var knownCode = Enum.IsDefined(typeof(EventCode), (byte)(eventCode & byte.MaxValue)); var name = data[3]; var content = data[4]; Debug.WriteLine(line); Debug.WriteLine($"eventCode={data[2]}, known={knownCode}, {name} says: {content}"); // Controller.NotifyOverlayContentUpdated(false, // $"eventCode={data[2]}, known={knownCode}, {name} says: {content}\n"); if (!knownCode) { return; } var eventCodeKnown = (EventCode)(byte)(eventCode & byte.MaxValue); // Filter by event code if (!GetChannelSettings(eventCodeKnown).Show) { return; } var chat = new ChattingLine { RawEventCode = (byte)(eventCode & byte.MaxValue), EventCode = eventCodeKnown, RawSender = name, RawContent = content, Timestamp = DateTime.Parse(data[1]), }; TranslateService.SubmitNewLine(chat); }
public static string BuildQuote(ChattingLine chatting, bool showLabel) { var cleanedName = NaiveCleanText(chatting.RawSender); var eventCode = chatting.RawEventCode; var knownCode = Enum.IsDefined(typeof(EventCode), (byte)(eventCode & byte.MaxValue)); if (knownCode) { var codeEnum = (EventCode)eventCode; if (codeEnum == EventCode.TellFrom) { return($"{cleanedName} >> "); } else if (codeEnum == EventCode.TellTo) { return($">>{cleanedName}:"); } else { if (showLabel) { switch (codeEnum) { case EventCode.LS1: return($"[1]<{cleanedName}> "); case EventCode.LS2: return($"[2]<{cleanedName}> "); case EventCode.LS3: return($"[3]<{cleanedName}> "); case EventCode.LS4: return($"[4]<{cleanedName}> "); case EventCode.LS5: return($"[5]<{cleanedName}> "); case EventCode.LS6: return($"[6]<{cleanedName}> "); case EventCode.LS7: return($"[7]<{cleanedName}> "); case EventCode.LS8: return($"[8]<{cleanedName}> "); case EventCode.FreeCompany: return($"[FC]<{cleanedName}> "); case EventCode.Party: return($"({cleanedName}) "); } } } } return($"{cleanedName}: "); }
private void OnLogLineRead(string line) { // Parse log line // The legal talking log line has the following format: // [HH:mm:ss.fff] ChatLog 00:<event code>:<name or to?>:<content> // eg: // [21:34:27.000] ChatLog 00:0018:Pinoko Fox:哇 if (line.Length < 23) { return; } var timestampStr = line.Substring(0, 15); if (!(timestampStr.StartsWith("[") && timestampStr.EndsWith("] "))) { return; } var data = line.Substring(15).Split(':'); if (data.Length < 4) { return; } if (!("00".Equals(data[0]) || "ChatLog 00".Equals(data[0]))) { return; } if (string.IsNullOrEmpty(data[2])) { return; } if (!int.TryParse(data[1], NumberStyles.HexNumber, null, out var eventCode)) { return; } var knownCode = Enum.IsDefined(typeof(EventCode), (byte)(eventCode & byte.MaxValue)); var name = data[2]; var content = string.Join(":", data.Skip(3).ToArray()); Debug.WriteLine(line); Debug.WriteLine($"eventCode={data[1]}, known={knownCode}, {name} says: {content}"); Controller.NotifyLogMessageAppend(false, $"eventCode={data[1]}, known={knownCode}, {name} says: {content}"); // Controller.NotifyOverlayContentUpdated(false, // $"eventCode={data[2]}, known={knownCode}, {name} says: {content}\n"); if (!knownCode) { return; } var eventCodeKnown = (EventCode)(byte)(eventCode & byte.MaxValue); // Filter by event code if (!GetChannelSettings(eventCodeKnown).Show) { return; } timestampStr = timestampStr.Substring(1, timestampStr.Length - 3); if (!DateTime.TryParseExact(timestampStr, "HH:mm:ss.fff", null, DateTimeStyles.None, out var timestamp)) { return; } var chat = new ChattingLine { RawEventCode = (byte)(eventCode & byte.MaxValue), EventCode = eventCodeKnown, RawSender = name, RawContent = content, Timestamp = timestamp, }; TranslateService.SubmitNewLine(chat); }