Updated emoji loading to be faster; added auto fill option

This commit is contained in:
2024-08-31 00:46:53 -05:00
parent c3c85a3040
commit e688416244
5 changed files with 149 additions and 26 deletions

View File

@@ -1,11 +1,13 @@
# Python imports
from collections import defaultdict
import json
import asyncio
from collections import defaultdict
# Lib imports
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import GLib
# Application imports
from .key import Key
@@ -19,7 +21,7 @@ class Emoji_Notebook(Gtk.Notebook):
def __init__(self):
super(Emoji_Notebook, self).__init__()
self.load_ui( self.get_data(EMOJI_FILE) )
self.load_ui()
self.setup_styling()
self.show_all()
@@ -29,26 +31,52 @@ class Emoji_Notebook(Gtk.Notebook):
self.set_current_page(0)
self.set_scrollable(True)
def get_data(self, file):
emoji_grouping = defaultdict(list)
with open(file, 'r') as f:
@daemon_threaded
def load_ui(self):
emoji_data = None
with open(EMOJI_FILE, 'r') as f:
emoji_data = json.load(f)
for emoji in emoji_data:
category = emoji['category']
del emoji['category']
del emoji['unicode_version']
del emoji['ios_version']
emoji_grouping[category].append(emoji)
if not emoji_data:
print("No emoji data found in file...")
return
try:
loop = asyncio.get_running_loop()
except RuntimeError:
loop = None
if loop and loop.is_running():
loop = asyncio.get_event_loop()
loop.create_task( self._async_load_ui(emoji_data) )
else:
asyncio.run( self._async_load_ui(emoji_data) )
async def _async_load_ui(self, emoji_data):
emoji_grouping = await self._get_emoji_grouping(emoji_data)
GLib.idle_add(self._populate_ui, emoji_grouping)
async def _get_emoji_grouping(self, emoji_data):
emoji_grouping = defaultdict(list)
async def add_to_group(emoji):
category = emoji['category']
key = Key( emoji["emoji"], emoji["emoji"] )
key._is_emoji = True
emoji_grouping[category].append(key)
tasks = [ add_to_group(emoji) for emoji in emoji_data]
await asyncio.gather(*tasks)
return emoji_grouping
def load_ui(self, emoji_grouping):
def _populate_ui(self, emoji_grouping):
width = 1
height = 1
for group in emoji_grouping:
tab_widget = Gtk.Label(label=group)
scroll, grid = self.create_scroll_and_grid()
self.append_page(scroll, tab_widget)
self.set_tab_reorderable(scroll, False)
self.set_tab_detachable(scroll, False)
@@ -56,16 +84,15 @@ class Emoji_Notebook(Gtk.Notebook):
top = 0
left = 0
for emoji in emoji_grouping[group]:
key = Key(emoji["emoji"], emoji["emoji"])
key._is_emoji = True
key.show()
grid.attach(key, left, top, width, height)
grid.attach(emoji, left, top, width, height)
left += 1
if left > 8:
left = 0
top += 1
self.show_all()
del emoji_grouping
def create_scroll_and_grid(self):
scroll = Gtk.ScrolledWindow()
@@ -114,4 +141,4 @@ class Emoji_Popover(Gtk.Popover):
self.popup()
def hide_emoji_view(self):
self.popdown()
self.popdown()