Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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;
        }
Пример #3
0
        /// <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());
        }