void AddEmoji(Gtk.TextBuffer buffer, ref Gtk.TextIter iter, ImageMessagePartModel imgPart, string shortName) { var unicode = Emojione.ShortnameToUnicode(shortName); if (unicode == null) { AddAlternativeText(buffer, ref iter, imgPart); return; } // A mark here serves two pusposes. One is to allow us to apply the // tag across the pixbuf. It also lets us know later where to put // the pixbuf if we need to load it from the network var mark = new Gtk.TextMark(null, true); buffer.AddMark(mark, iter); var emojiName = unicode + ".png"; string emojiPath; if (EmojiCache.TryGetIcon("emojione", emojiName, out emojiPath)) { var emojiFile = new FileInfo(emojiPath); if (emojiFile.Exists && emojiFile.Length > 0) { AddEmoji(buffer, ref iter, imgPart, shortName, mark, emojiPath); } else { AddAlternativeText(buffer, ref iter, imgPart); } return; } var emojiUrl = Emojione.UnicodeToUrl(unicode); EmojiCache.BeginDownloadFile("emojione", emojiName, emojiUrl, (path) => { GLib.Idle.Add(delegate { var markIter = buffer.GetIterAtMark(mark); AddEmoji(buffer, ref markIter, imgPart, shortName, mark, path); return(false); }); }, (ex) => { GLib.Idle.Add(delegate { var markIter = buffer.GetIterAtMark(mark); buffer.DeleteMark(mark); AddAlternativeText(buffer, ref markIter, imgPart); return(false); }); } ); }
public async Task <ActionResult <Dictionary <string, long> > > Get() { var context = ControllerContext.HttpContext; var isSocket = context.WebSockets.IsWebSocketRequest; if (isSocket) { var socket = await context.WebSockets.AcceptWebSocketAsync(); await WebSocketTracker.RegisterSocket(context, socket); } return(EmojiCache.Map()); }
IEnumerator UpdateEmoji() { yield return(new WaitForEndOfFrame()); if (EmojiCache != null) { for (int i = 0; i < mUsingEomjiItem.size; ++i) { EmojiCache.CacheChatEmojiItem(mUsingEomjiItem[i]); } mUsingEomjiItem.Clear(); } if (EmojiCache != null) { for (int i = 0; i < EmojiPosList.size; ++i) { var emojiItem = EmojiCache.GetChatEmojiItem(); emojiItem.UpdateContent(EmojiPosList[i], new Vector2(mTopLeftX, mTopLeftY), transform.parent); mUsingEomjiItem.Add(emojiItem); } } }
void AddEmoji(Gtk.TextBuffer buffer, ref Gtk.TextIter iter, ImageMessagePartModel imgPart, string shortName) { var unicode = Emojione.ShortnameToUnicode(shortName); if (unicode == null) { AddAlternativeText(buffer, ref iter, imgPart); return; } int width, height; int descent; using (var layout = CreatePangoLayout(null)) { layout.GetPixelSize(out width, out height); descent = layout.Context.GetMetrics(layout.FontDescription, null).Descent; } // A mark here serves two pusposes. One is to allow us to apply the // tag across the pixbuf. It also lets us know later where to put // the pixbuf if we need to load it from the network var mark = new Gtk.TextMark(null, true); buffer.AddMark(mark, iter); var emojiName = unicode + ".png"; string emojiPath; if (EmojiCache.TryGetIcon("emojione", emojiName, out emojiPath)) { var emojiFile = new FileInfo(emojiPath); if (emojiFile.Exists && emojiFile.Length > 0) { var pix = new Gdk.Pixbuf(emojiPath, -1, height); buffer.InsertPixbuf(ref iter, pix); var beforeIter = buffer.GetIterAtMark(mark); var imgTag = new EmojiTag(mark, emojiFile.FullName); imgTag.Rise = -descent; _MessageTextTagTable.Add(imgTag); buffer.ApplyTag(imgTag, beforeIter, iter); } else { AddAlternativeText(buffer, ref iter, imgPart); } return; } var emojiUrl = Emojione.UnicodeToUrl(unicode); EmojiCache.BeginDownloadFile("emojione", emojiName, emojiUrl, (path) => { GLib.Idle.Add(delegate { var afterIter = buffer.GetIterAtMark(mark); buffer.InsertPixbuf(ref afterIter, new Gdk.Pixbuf(path, -1, height)); var beforeIter = buffer.GetIterAtMark(mark); var emojiTag = new EmojiTag(mark, path); _MessageTextTagTable.Add(emojiTag); emojiTag.Rise = -descent; buffer.ApplyTag(emojiTag, beforeIter, afterIter); return(false); }); }, (ex) => { GLib.Idle.Add(delegate { var markIter = buffer.GetIterAtMark(mark); buffer.DeleteMark(mark); AddAlternativeText(buffer, ref markIter, imgPart); return(false); }); } ); }
static void Main(string[] args) { const string UrlBase = "http://www.unicode.org/Public/emoji/"; const string version = "11.0"; const string RawFolderName = "Raw"; const string EditedFolderName = "Formatted"; string FullUrl = UrlBase + version + "/emoji-test.txt"; string BaseDirectory = Directory.GetParent(Directory.GetParent(Environment.CurrentDirectory).FullName).FullName; if (!Directory.Exists(Path.Combine(BaseDirectory, RawFolderName, version))) { Directory.CreateDirectory(Path.Combine(BaseDirectory, RawFolderName, version)); } if (!File.Exists(Path.Combine(BaseDirectory, RawFolderName, version) + "/emoji-test.txt")) { Console.WriteLine("emoji-test.txt doesn't exist, downloading..."); using (var wb = new WebClient()) { wb.DownloadFile(FullUrl, Path.Combine(BaseDirectory, RawFolderName, version) + "/emoji-test.txt"); } Console.WriteLine("Downloaded file"); } else { Console.WriteLine("emoji-test.txt exists"); } if (!Directory.Exists(Path.Combine(BaseDirectory, EditedFolderName, version))) { Directory.CreateDirectory(Path.Combine(BaseDirectory, EditedFolderName, version)); } if (!File.Exists(Path.Combine(BaseDirectory, EditedFolderName, version) + "/emojis.ts")) { Console.WriteLine("emojis.ts doesn't exist, formatting..."); EmojiCache Cache = new EmojiCache(); using (StreamWriter file = new StreamWriter(Path.Combine(BaseDirectory, EditedFolderName, version) + "/emojis.ts")) { string[] lines = File.ReadAllLines(Path.Combine(BaseDirectory, RawFolderName, version) + "/emoji-test.txt"); file.WriteLine("export var Emojis = {"); foreach (string line in lines) { if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#") ^ (line.StartsWith("# group:") || line.StartsWith("# subgroup:"))) { continue; } string res = ""; if (line.StartsWith("#")) { file.WriteLine(); res = "\t" + line.Substring(1).Insert(0, "//"); } else { res = Cache.add(line); file.WriteLine(); } file.WriteLine(res); } file.WriteLine("};"); } Console.WriteLine("Formatted file"); } else { Console.WriteLine("emojis.ts already formatted"); } Console.WriteLine("Press any key to exit..."); Console.ReadKey(); }