public static async Task AddTag(this IGameDatabase db, string unicode, string fancyName, ITagsList tagsList = null)
        {
            string emojiDatabaseIndex = string.Join(" ", Encoding.UTF8.GetBytes(unicode));

            //now check if we exist
            TagData tagData = await db.GetData <TagData>(emojiDatabaseIndex);

            if (tagData == null)
            {
                tagData = new TagData()
                {
                    Name      = emojiDatabaseIndex,
                    Emoji     = unicode,
                    FancyName = fancyName,
                };

                await db.SaveData(tagData);
            }

            await db.Add(tagData);

            if (tagsList != null && !tagsList.Tags.Contains(emojiDatabaseIndex))
            {
                tagsList.Tags.Add(emojiDatabaseIndex);
            }
        }
        public static async Task Add <T>(this IGameDatabase db, params string [] databaseIndexes) where T : IDatabaseEntry
        {
            var entryListData = await db.GetData <EntryListData>(typeof(T).Name);

            bool doAdd = false;

            if (entryListData == null)
            {
                entryListData = new EntryListData()
                {
                    Type = typeof(T).Name
                };

                //signal that we need to add this to the EntryListData itself
                doAdd = entryListData.Type != entryListData.GetType().Name;
            }

            foreach (var dbEntry in databaseIndexes)
            {
                if (!entryListData.Entries.Contains(dbEntry))
                {
                    entryListData.Entries.Add(dbEntry);
                }
            }

            if (doAdd)
            {
                await db.Add(entryListData);
            }

            await db.SaveData(entryListData);
        }
        public static async Task ImportBackup(this IGameDatabase db, Dictionary <string, Dictionary <string, IDatabaseEntry> > backup)
        {
            foreach (var dataTypeKV in backup)
            {
                var dataTypeName  = dataTypeKV.Key;
                var dataTypeValue = dataTypeKV.Value;

                foreach (var dataEntry in dataTypeValue)
                {
                    await db.SaveData(dataEntry.Value);
                }
            }
        }