-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathlanguage_poller.py
63 lines (50 loc) · 2.4 KB
/
language_poller.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from talon import actions, cron, scope, app, Module
from .poller import Poller
class LanguagePoller(Poller):
enabled = False
content = None
job = None
current_language = None
def enable(self):
if not self.enabled:
self.enabled = True
self.job = cron.interval("200ms", self.language_check)
def disable(self):
if self.enabled:
self.enabled = False
cron.cancel(self.job)
self.job = None
self.current_language = None
self.content.publish_event("status_icons", "language_toggle", "remove")
def language_check(self):
language = self.detect_language()
if self.current_language != language:
self.current_language = language
status_icon = self.content.create_status_icon("language_toggle", language, None, "Language " + language, lambda _, _2, language=language: actions.user.hud_toggle_language(language))
self.content.publish_event("status_icons", status_icon.topic, "replace", status_icon)
def detect_language(self):
language = scope.get("language", "en_US")
if isinstance(language, str):
return language
for lang in language:
if "_" in lang:
return lang
def add_statusbar_language_icon(_ = None):
actions.user.hud_activate_poller("language_toggle")
def remove_statusbar_language_icon(_ = None):
actions.user.hud_deactivate_poller("language_toggle")
actions.user.hud_remove_status_icon("language_toggle")
def register_language_poller():
actions.user.hud_add_poller("language_toggle", LanguagePoller())
default_option = actions.user.hud_create_button("Add language", add_statusbar_language_icon, "en_US")
activated_option = actions.user.hud_create_button("Remove language", remove_statusbar_language_icon, "en_US")
status_option = actions.user.hud_create_status_option("language_toggle", default_option, activated_option)
actions.user.hud_publish_status_option("language_option", status_option)
app.register("ready", register_language_poller)
mod = Module()
@mod.action_class
class Actions:
def hud_toggle_language(current_language: str = "en_US"):
"""Toggles the current language to another language"""
print( "No default toggle available - Build your own language toggle by overriding user.hud_toggle_language" )
pass