Ejemplo n.º 1
0
        public ChatBuffer.MessageData Deserialize(Stream stream)
        {
            if (!stream.CanRead)
            {
                return(null);                // TODO: Exceptions
            }
            ChatBuffer.MessageData ret = new ChatBuffer.MessageData();

            using (var read = new StreamReader(stream))
            {
                if (read.Read() == '[')
                {
                    var data = read.ReadLine();

                    var timestamp = data.Substring(0, data.IndexOf(']'));
                    data = data.Remove(0, data.IndexOf(']') + 2);
                    var type = data.Substring(0, 3);
                    data = data.Remove(0, 5);
                    var sender = data.Substring(0, data.IndexOf(':'));
                    data = data.Remove(0, data.IndexOf(':') + 2);

                    ret.Timestamp  = DateTime.ParseExact(timestamp, "u", CultureInfo.InvariantCulture);
                    ret.Type       = _TypeDict.FirstOrDefault(k => k.Value == type).Key;
                    ret.Sender     = (sender == "System" ? null : Chat.GetOrCreateCharacter(sender));
                    ret.RawMessage = new Parser {
                        Validity = NodeValidity.FChat
                    }.ParseMessage(data);
                }
            }

            return(ret);
        }
Ejemplo n.º 2
0
		public ChatBuffer.MessageData Deserialize(Stream stream)
		{
			if (!stream.CanRead)
				return null; // TODO: Exceptions

			ChatBuffer.MessageData ret = new ChatBuffer.MessageData();

			using (var read = new StreamReader(stream))
			{
				if (read.Read() == '[')
				{
					var data = read.ReadLine();

					var timestamp = data.Substring(0, data.IndexOf(']'));
					data = data.Remove(0, data.IndexOf(']') + 2);
					var type = data.Substring(0, 3);
					data = data.Remove(0, 5);
					var sender = data.Substring(0, data.IndexOf(':'));
					data = data.Remove(0, data.IndexOf(':') + 2);

					ret.Timestamp = DateTime.ParseExact(timestamp, "u", CultureInfo.InvariantCulture);
					ret.Type = _TypeDict.FirstOrDefault(k => k.Value == type).Key;
					ret.Sender = (sender == "System" ? null : Chat.GetOrCreateCharacter(sender));
					ret.RawMessage = new Parser { Validity = NodeValidity.FChat }.ParseMessage(data);
				}
			}

			return ret;
		}
Ejemplo n.º 3
0
 public void Serialize(Stream stream, ChatBuffer.MessageData message)
 {
     if (message.Type == MessageType.Preview || !stream.CanWrite)
     {
         return;                 // TODO: Exceptions
     }
     using (var write = new StreamWriter(stream))
         write.WriteLine($"[{message.Timestamp.ToString("u", CultureInfo.InvariantCulture)}] {_TypeDict[message.Type]}, {message.Sender?.Name ?? "System"}: {new libflist.Message.Renderers.BBCode().Render(message.RawMessage)}");
 }
Ejemplo n.º 4
0
        // TODO: Pre-render messages into row-lists, split on \n and width.
        ANSIString RenderMessage(ChatBuffer.MessageData msg)
        {
            if (msg.RenderedMessage == null)
            {
                var build = new ANSIString();

                if (msg.Timestamp.Date == DateTime.Now.Date)
                {
                    build.Append($"[{msg.Timestamp.ToString("HH:mm")}]".Color(ConsoleColor.Gray));
                }
                else
                {
                    build.Append($"[{msg.Timestamp.ToString("yyyy-MM-dd")}]".Color(ConsoleColor.Gray));
                }

                ANSIString message = new ANSIRenderer().Render(msg.RawMessage);
                bool       action  = message.PlainString.StartsWith("/me", StringComparison.CurrentCultureIgnoreCase);
                build.Append(action ? "*" : " ");

                if (msg.Sender?.Name != null)
                {
                    build.Append(msg.Sender.ToANSIString(Channel, true));
                }
                else
                {
                    build.Append("System".Color(ConsoleColor.DarkGray));
                }

                if (action)
                {
                    if (message.PlainString.StartsWith("/me's", StringComparison.CurrentCultureIgnoreCase))
                    {
                        build.Append(message.Substring(3));
                    }
                    else
                    {
                        build.Append(new ANSIString(" ") + message.Substring(4));
                    }
                }
                else
                {
                    build.Append(new ANSIString(": ") + message);
                }

                msg.RenderedMessage = build;
            }

            return(msg.RenderedMessage);
        }