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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }