Skip to content

Commit 670f040

Browse files
committed
fix: error while generating emojis icons
- If the conversion of an emoji fails to be converted by pillow, link the emoji to the default unicode logo #8 - force the api refresh when upgrading version - remove unnecessary conditions for tags
1 parent 3959264 commit 670f040

File tree

6 files changed

+99
-78
lines changed

6 files changed

+99
-78
lines changed

src/api.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import os
22
import sys
3+
import shutil
34
import subprocess
4-
from utils import api_file_path, data_folder_path, icons_folder_path, assets_folder_path, display_notification, language, padding, custom_logger, langs
5+
from utils import api_file_path, data_folder_path, icons_folder_path, assets_folder_path, display_notification, language, padding, custom_logger, langs, workflow_version
56

67
def get_homebrew_prefix():
78
try:
@@ -36,9 +37,13 @@ def get_homebrew_prefix():
3637

3738
display_notification('⏳ Please wait !', 'Emojis data is beeing gathered, this can take some time...')
3839

39-
for folder in [data_folder_path, icons_folder_path]:
40-
if not os.path.exists(folder):
41-
os.mkdir(folder)
40+
if os.path.exists(icons_folder_path):
41+
shutil.rmtree(icons_folder_path)
42+
43+
os.mkdir(icons_folder_path)
44+
45+
if not os.path.exists(data_folder_path):
46+
os.mkdir(data_folder_path)
4247

4348
check_e_type = ['flag:', 'keycap:']
4449

@@ -85,19 +90,25 @@ def convert_emoji_to_png(emoji, name):
8590
tags = tags_list.text.split(' | ')
8691
tags.append(emoji)
8792
break
93+
try:
94+
convert_emoji_to_png(emoji, name)
95+
image = True
96+
except Exception as e:
97+
custom_logger('error', f'{emoji} cannot be transform into an image, {e}')
98+
image = False
8899
items.append({
89100
'name': name,
90101
'emoji': emoji,
91102
'title': title,
92-
'tags': tags
103+
'tags': tags,
104+
'image': image
93105
})
94-
convert_emoji_to_png(emoji, name)
95106

96107
for item in langs:
97108
if item["value"] == language:
98109
lang = item["title"]
99110
break
100-
info = {'time': datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S"), 'lang': {'title': lang, 'value': language}}
111+
info = {'time': datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S"), 'lang': {'title': lang, 'value': language}, 'workflow_version': workflow_version}
101112
with open(api_file_path, 'w', encoding='utf-8') as file:
102113
json.dump({'info': info, 'items': items}, file, ensure_ascii=False, indent=4)
103114

src/harvest.py

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
import json
33
from utils import config, api_file_path, tags_file_path, icons_folder_path, language, data_folder_path, langs
44

5+
def get_title(obj):
6+
title = obj['title'] if obj['title'] else obj['name']
7+
return title
8+
9+
def get_icon_path(obj):
10+
icon_path = f'{icons_folder_path}/{obj["name"].replace(":", "")}.png' if obj["image"] else f'{icons_folder_path}/unicode.png'
11+
return icon_path
12+
513
api_data = config(api_file_path)
614
tags_data = config(tags_file_path)
715
items = []
@@ -48,7 +56,7 @@
4856
},
4957
{
5058
'title': 'API information',
51-
'subtitle': f'Last update : {api_data["info"]["time"]} ǀ {num_object} Emojis ǀ {api_data["info"]["lang"]["title"]}',
59+
'subtitle': f'Last update : {api_data["info"]["time"]} ǀ {num_object} Emojis ǀ {api_data["info"]["lang"]["title"]} ǀ Version : {api_data["info"].get("workflow_version", "unknown")}',
5260
'valid': False,
5361
'icon': {
5462
'path': 'icons/info.webp',
@@ -89,20 +97,19 @@
8997
}
9098
]:
9199
items.append(obj)
92-
if tags_data is not None:
93-
for obj in tags_data:
94-
list_emojis = ', '.join(obj['emojis'])
95-
list_emojis = '❌ No Emojis' if list_emojis == '' else f'Emojis: {list_emojis}'
96-
items.append({
97-
'title': obj['title'] if obj['title'] != '' else 'No Title',
98-
'subtitle': list_emojis,
99-
'arg': f'_rerun;modify;2;;{obj["id"]}',
100-
'icon': {
101-
'path': 'icons/tag.webp',
102-
},
103-
})
100+
for obj in tags_data:
101+
list_emojis = ', '.join(obj['emojis'])
102+
list_emojis = '❌ No Emojis' if list_emojis == '' else f'Emojis: {list_emojis}'
103+
items.append({
104+
'title': obj['title'] if obj['title'] != '' else 'No Title',
105+
'subtitle': list_emojis,
106+
'arg': f'_rerun;modify;2;;{obj["id"]}',
107+
'icon': {
108+
'path': 'icons/tag.webp',
109+
},
110+
})
104111
elif level == 2:
105-
if action == 'delete' and tags_data is not None:
112+
if action == 'delete':
106113
for obj in tags_data:
107114
list_emojis = ', '.join(obj.get('emojis'))
108115
list_emojis = '❌ No Emojis' if list_emojis == '' else f'Emojis: {list_emojis}'
@@ -114,7 +121,7 @@
114121
'path': 'icons/tag.webp',
115122
},
116123
})
117-
elif action == 'modify' and tags_data is not None and api_data is not None:
124+
elif action == 'modify' and api_data is not None:
118125
for obj in [
119126
{
120127
'title': 'Modify the Tag\'s name',
@@ -142,35 +149,36 @@
142149
}
143150
]:
144151
items.append(obj)
145-
if emojis_list is not []:
152+
if emojis_list != []:
146153
filtered_data = [obj for obj in api_data['items'] if obj['emoji'] in emojis_list]
147154
for obj in filtered_data:
148155
items.append({
149-
'title': obj['title'] if obj['title'] else obj['name'],
156+
'title': get_title(obj),
150157
'valid': False,
151158
'icon': {
152-
'path': f'{icons_folder_path}/{obj["name"].replace(":", "")}.png',
159+
'path': get_icon_path(obj),
153160
},
154161
})
155162
elif level == 3:
156163
if action == 'modify' and subaction == 'new':
157-
for obj in api_data['items']:
164+
filtered_data = [obj for obj in api_data['items'] if obj['emoji'] not in emojis_list]
165+
for obj in filtered_data:
158166
items.append({
159-
'title': obj['title'] if obj['title'] else obj['name'],
167+
'title': get_title(obj),
160168
'subtitle': f"Add '{title}' to '{obj['emoji']}'",
161169
'arg': f'_tags;emoji;new;{kID};{obj["emoji"]};{"ǀ".join(lib)}',
162170
'icon': {
163-
'path': f'{icons_folder_path}/{obj["name"].replace(":", "")}.png',
171+
'path': get_icon_path(obj),
164172
},
165173
})
166-
elif action == 'modify' and subaction == 'delete' and emojis_list is not []:
174+
elif action == 'modify' and subaction == 'delete' and emojis_list != []:
167175
filtered_data = [obj for obj in api_data['items'] if obj['emoji'] in emojis_list]
168176
for obj in filtered_data:
169177
items.append({
170-
'title': obj['title'] if obj['title'] else obj['name'],
178+
'title': get_title(obj),
171179
'arg': f'_tags;emoji;delete;{kID};{obj["emoji"]};{"ǀ".join(lib)}',
172180
'icon': {
173-
'path': f'{icons_folder_path}/{obj["name"].replace(":", "")}.png',
181+
'path': get_icon_path(obj),
174182
},
175183
})
176184
else:

src/icons/assets/unicode.png

6.24 KB
Loading

src/info.plist

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,21 @@
476476
<key>version</key>
477477
<integer>1</integer>
478478
</dict>
479+
<dict>
480+
<key>config</key>
481+
<dict>
482+
<key>availableviaurlhandler</key>
483+
<false/>
484+
<key>triggerid</key>
485+
<string>harvest</string>
486+
</dict>
487+
<key>type</key>
488+
<string>alfred.workflow.trigger.external</string>
489+
<key>uid</key>
490+
<string>E06CBF7C-373F-4989-AD9D-77B601FA1E06</string>
491+
<key>version</key>
492+
<integer>1</integer>
493+
</dict>
479494
<dict>
480495
<key>config</key>
481496
<dict>
@@ -525,21 +540,6 @@
525540
<key>version</key>
526541
<integer>3</integer>
527542
</dict>
528-
<dict>
529-
<key>config</key>
530-
<dict>
531-
<key>availableviaurlhandler</key>
532-
<false/>
533-
<key>triggerid</key>
534-
<string>harvest</string>
535-
</dict>
536-
<key>type</key>
537-
<string>alfred.workflow.trigger.external</string>
538-
<key>uid</key>
539-
<string>E06CBF7C-373F-4989-AD9D-77B601FA1E06</string>
540-
<key>version</key>
541-
<integer>1</integer>
542-
</dict>
543543
<dict>
544544
<key>config</key>
545545
<dict>
@@ -641,25 +641,6 @@
641641
<key>version</key>
642642
<integer>1</integer>
643643
</dict>
644-
<dict>
645-
<key>config</key>
646-
<dict>
647-
<key>externaltriggerid</key>
648-
<string>harvest</string>
649-
<key>passinputasargument</key>
650-
<true/>
651-
<key>passvariables</key>
652-
<false/>
653-
<key>workflowbundleid</key>
654-
<string>self</string>
655-
</dict>
656-
<key>type</key>
657-
<string>alfred.workflow.output.callexternaltrigger</string>
658-
<key>uid</key>
659-
<string>19527210-0ADC-4179-BAB9-82A03C19D378</string>
660-
<key>version</key>
661-
<integer>1</integer>
662-
</dict>
663644
<dict>
664645
<key>config</key>
665646
<dict>
@@ -683,6 +664,25 @@
683664
<key>version</key>
684665
<integer>2</integer>
685666
</dict>
667+
<dict>
668+
<key>config</key>
669+
<dict>
670+
<key>externaltriggerid</key>
671+
<string>harvest</string>
672+
<key>passinputasargument</key>
673+
<true/>
674+
<key>passvariables</key>
675+
<false/>
676+
<key>workflowbundleid</key>
677+
<string>self</string>
678+
</dict>
679+
<key>type</key>
680+
<string>alfred.workflow.output.callexternaltrigger</string>
681+
<key>uid</key>
682+
<string>19527210-0ADC-4179-BAB9-82A03C19D378</string>
683+
<key>version</key>
684+
<integer>1</integer>
685+
</dict>
686686
<dict>
687687
<key>config</key>
688688
<dict>
@@ -743,6 +743,14 @@
743743
<key>version</key>
744744
<integer>1</integer>
745745
</dict>
746+
<dict>
747+
<key>type</key>
748+
<string>alfred.workflow.utility.junction</string>
749+
<key>uid</key>
750+
<string>CA37797D-2228-4350-836C-EC35177DCB08</string>
751+
<key>version</key>
752+
<integer>1</integer>
753+
</dict>
746754
<dict>
747755
<key>config</key>
748756
<dict>
@@ -760,14 +768,6 @@
760768
<key>version</key>
761769
<integer>2</integer>
762770
</dict>
763-
<dict>
764-
<key>type</key>
765-
<string>alfred.workflow.utility.junction</string>
766-
<key>uid</key>
767-
<string>CA37797D-2228-4350-836C-EC35177DCB08</string>
768-
<key>version</key>
769-
<integer>1</integer>
770-
</dict>
771771
<dict>
772772
<key>config</key>
773773
<dict>
@@ -1240,7 +1240,7 @@ note: not all emojis are available in all languages.</string>
12401240
</dict>
12411241
</array>
12421242
<key>version</key>
1243-
<string>1.3.0</string>
1243+
<string>1.4.0</string>
12441244
<key>webaddress</key>
12451245
<string>https://github.com/BenjaminOddou/alfred-emoji-wine</string>
12461246
</dict>

src/utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def langs_dict(xml_file):
2525
padding = 10
2626
cache_folder_path = os.environ['alfred_workflow_cache'] # ~/Library/Caches/com.runningwithcrayons.Alfred/Workflow Data/com.benjamino.emoji_wine
2727
data_folder_path = os.environ['alfred_workflow_data'] # ~/Library/Application Support/Alfred/Workflow Data/com.benjamino.emoji_wine
28+
workflow_version = os.environ['alfred_workflow_version']
2829
for folder in [cache_folder_path, data_folder_path]:
2930
os.makedirs(folder, exist_ok=True)
3031
assets_folder_path = f'{os.getcwd()}/icons/assets'

src/wine.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import re
22
import json
3-
from utils import config, api_file_path, tags_file_path, icons_folder_path, language, emoji_dictionary, langs
3+
from utils import config, api_file_path, tags_file_path, icons_folder_path, language, emoji_dictionary, langs, workflow_version
44

55
api_data = config(api_file_path)
66
tags_data = config(tags_file_path)
@@ -12,7 +12,7 @@
1212
break
1313

1414
if api_data:
15-
if language != api_data['info']['lang']['value']:
15+
if language != api_data['info']['lang']['value'] or workflow_version != api_data['info'].get('workflow_version'):
1616
items.append({
1717
'title': 'Refresh the API',
1818
'subtitle': f'Press ⏎ to grab emoji data with language : {lang}',
@@ -23,7 +23,7 @@
2323
})
2424
else:
2525
for item in api_data['items']:
26-
name, emoji, title, tags = item['name'], item['emoji'], item['title'], item['tags']
26+
name, emoji, title, tags, image = item['name'], item['emoji'], item['title'], item['tags'], item['image']
2727
match = " ".join(tags) if tags is not None else name
2828
if tags_data is not None:
2929
for tag in tags_data:
@@ -40,14 +40,15 @@
4040
else:
4141
title = name
4242
url = None
43+
icon_path = f'{icons_folder_path}/{name.replace(":", "")}.png' if image else f'{icons_folder_path}/unicode.png'
4344
elem = {
4445
'uid': name,
4546
'title': title,
4647
'subtitle': f'Copy "{emoji}" to clipboard',
4748
'arg': emoji,
4849
'match': match,
4950
'icon': {
50-
'path': f'{icons_folder_path}/{name.replace(":", "")}.png',
51+
'path': icon_path,
5152
},
5253
'mods': {
5354
'cmd': {

0 commit comments

Comments
 (0)