Beispiel #1
0
        public List <IMessageChunk> SplitMessageToChunks(string message)
        {
            var chunks = new List <IMessageChunk>
            {
                new TextMessageChunk(message)
            };
            var eventArgs = new MessageChunkingEventArgs(chunks);

            SplitToChunks(this, eventArgs);
            return(eventArgs.Chunks);
        }
Beispiel #2
0
        protected void HandleSplitToChunks(object sender, MessageChunkingEventArgs e)
        {
            var newChunks = new List <IMessageChunk>();

            foreach (IMessageChunk chunk in e.Chunks)
            {
                if (!(chunk is TextMessageChunk))
                {
                    newChunks.Add(chunk);
                    continue;
                }

                var textChunk = (TextMessageChunk)chunk;

                var wordChunks = new List <IMessageChunk>();
                foreach (string word in textChunk.Text.Split(' '))
                {
                    Uri uri;
                    if (Uri.TryCreate(word, UriKind.Absolute, out uri))
                    {
                        if (uri.Scheme != "http" && uri.Scheme != "https")
                        {
                            wordChunks.Add(new TextMessageChunk(word));
                            continue;
                        }
                        // Uri verifies that http(s) URIs are at least minimal (http://a)
                        wordChunks.Add(new UriMessageChunk(word, uri));
                    }
                    else if (TryCreateUriHeuristically(word, out uri))
                    {
                        wordChunks.Add(new UriMessageChunk(word, uri));
                    }
                    else
                    {
                        wordChunks.Add(new TextMessageChunk(word));
                    }
                }

                var spaceChunk = new TextMessageChunk(" ");
                for (int i = 0; i < wordChunks.Count; ++i)
                {
                    newChunks.Add(wordChunks[i]);
                    if (i < wordChunks.Count - 1)
                    {
                        newChunks.Add(spaceChunk);
                    }
                }
            }

            e.Chunks = SharpIrcBotUtil.SimplifyAdjacentTextChunks(newChunks);
        }
 protected virtual void OnSplitToChunks(MessageChunkingEventArgs e)
 {
     HandleEvent(SplitToChunksSubscribers, e, "splitting message to chunks");
 }