コード例 #1
0
ファイル: MessageTextView.cs プロジェクト: shubhtr/smuxi
        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);
                });
            }
                                         );
        }
コード例 #2
0
        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());
        }
コード例 #3
0
    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);
            }
        }
    }
コード例 #4
0
ファイル: MessageTextView.cs プロジェクト: kvsm/smuxi
        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);
                });
            }
                                         );
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: Birdboat/discord_assbot
        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();
        }