about summary refs log blame commit diff
path: root/IrcStates/ISupport.cs
blob: afb633db9420ded4a742a03fc1d29e8e1d4eec0a (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                                          
 



                                 



                         






















                                                                                          
                                                     
         

                                       































                                                                                                       

                                                                                            


















                                                                             

     
// ReSharper disable InconsistentNaming

using System;
using System.Collections.Generic;
using System.Globalization;

namespace IrcStates
{
    public class ISupport
    {
        public ISupport()
        {
            Raw         = new Dictionary<string, string>();
            Modes       = 3;
            CaseMapping = Casemap.CaseMapping.Rfc1459;
            // TODO: add remaining defaults, change properties to normal members as needed
        }

        public Dictionary<string, string> Raw { get; set; }
        public string Network { get; set; }
        public ISupportChanModes ChanModes { get; set; }
        public ISupportPrefix Prefix { get; set; }
        public int? Modes { get; set; }
        public Casemap.CaseMapping CaseMapping { get; set; }
        public List<string> ChanTypes { get; set; }
        public List<string> StatusMsg { get; set; }
        public string CallerId { get; set; }
        public string Excepts { get; set; }
        public string Invex { get; set; }
        public int? Monitor { get; set; }
        public int? Watch { get; set; }
        public bool Whox { get; set; }

        public void Parse(IEnumerable<string> tokens)
        {
            if (tokens == null) return;
            
            foreach (var token in tokens)
            {
                var split = token.Split('=', 2);
                var key   = split[0];
                var value = split[1];

                if (split.Length > 1) Raw[key] = value;

                switch (split[0])
                {
                    case "NETWORK":
                        Network = value;
                        break;
                    case "CHANMODES":
                        ChanModes = new ISupportChanModes(value);
                        break;
                    case "PREFIX":
                        Prefix = new ISupportPrefix(value);
                        break;
                    case "STATUSMSG":
                        StatusMsg = new List<string> {value};
                        break;
                    case "MODES":
                        Modes = int.Parse(value, NumberStyles.Integer, CultureInfo.InvariantCulture);
                        break;
                    case "MONITOR":
                        Monitor = int.Parse(value, NumberStyles.Integer, CultureInfo.InvariantCulture);
                        break;
                    case "WATCH":
                        Watch = int.Parse(value, NumberStyles.Integer, CultureInfo.InvariantCulture);
                        break;
                    case "CASEMAPPING":
                        if (Enum.TryParse(value, true, out Casemap.CaseMapping caseMapping))
                            CaseMapping = caseMapping;
                        break;
                    case "CHANTYPES":
                        ChanTypes = new List<string> {value};
                        break;
                    case "CALLERID":
                        CallerId = string.IsNullOrEmpty(value) ? value : "g";
                        break;
                    case "EXCEPTS":
                        Excepts = string.IsNullOrEmpty(value) ? value : "e";
                        break;
                    case "INVEX":
                        Invex = string.IsNullOrEmpty(value) ? value : "I";
                        break;
                    case "WHOX":
                        Whox = true;
                        break;
                }
            }
        }
    }
}