Ejemplo n.º 1
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "emoji/{emoji}")] HttpRequest req,
            string emoji,
            ILogger log)
        {
            if (!string.IsNullOrWhiteSpace(emoji) && EmojiMetadata.Lookup.ContainsKey(emoji))
            {
                var emojiEntity = await EmojiTable.GetEmoji(
                    EmojiMetadata.Lookup[emoji].groupId.ToString(EmojiMetadata.IdFormat),
                    EmojiMetadata.Lookup[emoji].emojiId.ToString(EmojiMetadata.IdFormat));

                if (emojiEntity != null)
                {
                    var jsonObject = new
                    {
                        Group    = emojiEntity.Group,
                        SubGroup = emojiEntity.SubGroup,
                        Emoji    = emojiEntity.Emoji,
                        Cldr     = emojiEntity.Cldr,
                        Codes    = emojiEntity.Code.Split('_'),
                        Keywords = emojiEntity.Keywords
                    };
                    var serializerSettings = new JsonSerializerSettings();
                    serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                    return(new JsonResult(jsonObject, serializerSettings));
                }
            }

            return(new NotFoundResult());
        }
Ejemplo n.º 2
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "emoji")] HttpRequest req,
            ILogger log)
        {
            var emojiList = await EmojiTable.GetAllEmojis();

            var groupedEmojis =
                emojiList.GroupBy(e => e.Group)
                .Select(g => new
            {
                Group     = g.Key,
                SubGroups = g.GroupBy(e => e.SubGroup)
                            .Select(sg => new {
                    SubGroup = sg.Key,
                    Emojis   = sg.Select(e => new {
                        Emoji    = e.Emoji,
                        Cldr     = e.Cldr,
                        Codes    = e.Code.Split('_'),
                        Keywords = e.Keywords,
                    })
                })
            });

            var serializerSettings = new JsonSerializerSettings();

            serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            return(new JsonResult(groupedEmojis, serializerSettings));
        }
Ejemplo n.º 3
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "emoji/random")] HttpRequest req,
            ILogger log)
        {
            var numOfGroups     = EmojiMetadata.Groups.Count;
            var randomPartition = Random.Next(0, numOfGroups - 1);
            var gk           = EmojiMetadata.Groups.Keys.ElementAt(randomPartition);
            var randomRowKey = Random.Next(EmojiMetadata.Groups[gk].min, EmojiMetadata.Groups[gk].max);

            var emoji = await EmojiTable.GetEmoji(
                randomPartition.ToString(EmojiMetadata.IdFormat),
                randomRowKey.ToString(EmojiMetadata.IdFormat));

            var serializerSettings = new JsonSerializerSettings();

            serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            return(new JsonResult(new { emoji.Emoji, emoji.Cldr }, serializerSettings));
        }
Ejemplo n.º 4
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "emoji/palettes")] HttpRequest req,
            ILogger log)
        {
            var emojiList = await EmojiTable.GetAllEmojis();

            var groupedEmojis =
                emojiList.GroupBy(e => e.Group)
                .Select(g => new
            {
                Group = g.Key,
                Emoji = g.Select(e => e.Emoji)
            });

            var serializerSettings = new JsonSerializerSettings();

            serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            return(new JsonResult(groupedEmojis, serializerSettings));
        }
Ejemplo n.º 5
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "img/{emoji}")] HttpRequest req,
            string emoji,
            ILogger log)
        {
            if (!string.IsNullOrWhiteSpace(emoji) && EmojiMetadata.Lookup.ContainsKey(emoji))
            {
                var emojiImg = await EmojiTable.GetEmojiImg(
                    EmojiMetadata.Lookup[emoji].groupId.ToString(EmojiMetadata.IdFormat),
                    EmojiMetadata.Lookup[emoji].emojiId.ToString(EmojiMetadata.IdFormat));

                if (!string.IsNullOrWhiteSpace(emojiImg?.ImageBase64))
                {
                    var etag = new EntityTagHeaderValue($"\"{Convert.ToString(emojiImg.Timestamp.ToFileTime() ^ emojiImg.ImageBase64.Length, 16)}\"");
                    return(new FileContentResult(Convert.FromBase64String(emojiImg.ImageBase64), "image/png")
                    {
                        EntityTag = etag,
                        LastModified = emojiImg.Timestamp
                    });
                }
            }

            return(new NotFoundResult());
        }
Ejemplo n.º 6
0
        private void Render(Image image)
        {
            // TODO: Dynamically determine height
            double height = 22;

            image.Source = _emoji switch
            {
                SurrogateEmoji se => new SvgImageSource(new Uri($"ms-appx:///Quarrel.Markdown/Assets/Emoji/{EmojiTable.ToCodePoint(se.Surrogate).ToLower()}.svg")),
                Emoji e => new BitmapImage(new Uri($"https://cdn.discordapp.com/emojis/{e.Id}.webp?size={2 * height}&quality=lossless")),
                AnimatedEmoji ae => new BitmapImage(new Uri($"https://cdn.discordapp.com/emojis/{ae.Id}.gif?size={2 * height}&quality=lossless"))
                {
                    AutoPlay = true,
                },

                _ => null,
            };
        }
Ejemplo n.º 7
0
        async static Task CreateTableAndPopulate(Emojis emojisToLoad)
        {
            var table    = EmojiTable.Get();
            var imgTable = EmojiTable.GetImg();

            // Drop and recreate table
            await table.DeleteIfExistsAsync();

            await table.CreateIfNotExistsAsync();

            await imgTable.DeleteIfExistsAsync();

            await imgTable.CreateIfNotExistsAsync();

            //Entities
            var emojis = new List <EmojiEntity>();
            //Create the batch operation
            var batchOps    = new List <TableBatchOperation>();
            var imgBatchOps = new List <TableBatchOperation>();

            foreach (var g in emojisToLoad.Groups)
            {
                var batchOp    = new TableBatchOperation();
                var imgBatchOp = new TableBatchOperation();
                var groupId    = emojisToLoad.Groups.IndexOf(g).ToString(EmojiMetadata.IdFormat);

                foreach (var sg in g.SubGroups)
                {
                    foreach (var e in sg.Emojis)
                    {
                        var entity = new EmojiEntity(groupId, e.Id.ToString(EmojiMetadata.IdFormat))
                        {
                            Group    = g.Name,
                            SubGroup = sg.Name,
                            Code     = e.CodeString,
                            Emoji    = e.Emoji,
                            Cldr     = e.Cldr,
                            Keywords = e.Haystack,
                            IsNew    = e.IsNew
                        };
                        emojis.Add(entity);
                        batchOp.Insert(entity);

                        if (!string.IsNullOrWhiteSpace(e.ImageBase64))
                        {
                            var imgEntity = new EmojiImageEntity(groupId, e.Id.ToString(EmojiMetadata.IdFormat))
                            {
                                Emoji       = e.Emoji,
                                ImageBase64 = e.ImageBase64
                            };

                            imgBatchOp.Insert(imgEntity);
                        }

                        // Maximum operations in a batch
                        if (batchOp.Count == 100)
                        {
                            batchOps.Add(batchOp);
                            batchOp = new TableBatchOperation();

                            imgBatchOps.Add(imgBatchOp);
                            imgBatchOp = new TableBatchOperation();
                        }
                    }
                }

                // Batch can only contain operations in the same partition
                if (batchOp.Count > 0)
                {
                    batchOps.Add(batchOp);
                }
            }

            var sw             = new System.Diagnostics.Stopwatch();
            var processedCount = 0;

            foreach (var bo in batchOps)
            {
                sw.Reset();
                Console.WriteLine($"Inserting batch for group {bo.First().Entity.PartitionKey}, {bo.Count} entries");
                sw.Start();
                var result = await table.ExecuteBatchAsync(bo);

                processedCount += bo.Count;
                sw.Stop();
                Console.WriteLine($"  Insert complete: {sw.ElapsedMilliseconds}ms");
                Console.WriteLine($"  Processed: {processedCount} emojis");
            }

            processedCount = 0;
            Console.WriteLine($"###IMAGES###");
            foreach (var bo in imgBatchOps)
            {
                sw.Reset();
                Console.WriteLine($"Inserting image batch for group {bo.First().Entity.PartitionKey}, {bo.Count} entries");
                sw.Start();
                var result = await imgTable.ExecuteBatchAsync(bo);

                sw.Stop();
                processedCount += bo.Count;
                Console.WriteLine($"  Insert complete: {sw.ElapsedMilliseconds}ms");
                Console.WriteLine($"  Processed: {processedCount} emojis");
            }
        }