// ReSharper disable InconsistentNaming using System; using System.Collections.Generic; using System.Globalization; namespace IrcStates { public class ISupport { public ISupport() { Raw = new Dictionary(); Modes = 3; CaseMapping = Casemap.CaseMapping.Rfc1459; // TODO: add remaining defaults, change properties to normal members as needed } public Dictionary 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 ChanTypes { get; set; } public List 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 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 {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 {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; } } } } }