/// <summary> /// Returns a deep-copy list of filtered kaomojis from a single category. /// </summary> /// <param name="filter"></param> /// <param name="flag"></param> /// <returns></returns> public static List <Kaomoji> GetKaomojis(RegistryFilter filter, KaomojiFlags.Category flag) { //Load data if not already loaded. if (!KaomojiDataHandler.IsLoaded) { KaomojiDataHandler.Load(); } List <Kaomoji> filterCopy = new List <Kaomoji>(); foreach (Kaomoji kaomoji in Registry) { if (filter == RegistryFilter.AllowOnly) { if (!kaomoji.Flags.ContainsFlag(flag)) { continue; } } //if(filter == RegistryFilter.Exclude) //TODO change this if more filters are added! else { if (kaomoji.Flags.ContainsFlag(flag)) { continue; } } filterCopy.Add((Kaomoji)kaomoji.Clone()); } return(filterCopy); }
/// <summary> /// Loads a KaomojiSharp data JSON file from the specified path. /// </summary> /// <param name="path"></param> /// <returns></returns> public static void Load(string path) { using (StreamReader file = File.OpenText(path)) { JsonSerializer serializer = new JsonSerializer(); DataSet dataSet = (DataSet)serializer.Deserialize(file, typeof(DataSet)); DataTable dataTable = dataSet.Tables["Kaomoji"]; foreach (DataRow row in dataTable.Rows) { long[] rawCategories = (long[])row["Categories"]; //Create a new KaomojiCategory array with the same length as rawCategories. KaomojiFlags.Category[] categories = new KaomojiFlags.Category[rawCategories.Length]; for (int i = 0; i < categories.Length; i++) { //Get an integer representation of the long value. int rawCategory = (int)rawCategories[i]; //Check if the integer value is definited in KaomojiCategory if (!Enum.IsDefined(typeof(KaomojiFlags.Category), rawCategory)) { throw new Exception($"Category is invalid at emoticon {row["Categories"]}"); } //Set the enum value based on the integer. categories[i] = (KaomojiFlags.Category)rawCategory; } new Kaomoji((string)row["Emoticon"], new KaomojiFlags(categories)).Register(); } } IsLoaded = true; }
/// <summary> /// Finds a random Kaomoji with the specified filter parameters. /// </summary> public static Kaomoji GetRandom(RegistryFilter filter, KaomojiFlags.Category flag) { Kaomoji kaomoji = GetRandom(false); if (filter == RegistryFilter.AllowOnly) { while (!kaomoji.Flags.ContainsFlag(flag)) { kaomoji = GetRandom(false); } } //if(filter == RegistryFilter.Exclude) //TODO change this if more filters are added! else { while (kaomoji.Flags.ContainsFlag(flag)) { kaomoji = GetRandom(false); } } return((Kaomoji)kaomoji.Clone()); }