Skip to content

Instantly share code, notes, and snippets.

@arialcrime
Last active February 22, 2023 10:44
Show Gist options
  • Select an option

  • Save arialcrime/90f19972a80b21db0da19d1d04f3ad76 to your computer and use it in GitHub Desktop.

Select an option

Save arialcrime/90f19972a80b21db0da19d1d04f3ad76 to your computer and use it in GitHub Desktop.
gives an overview of active subscribers, where they come from, and gives the option to unsubscribe selected ones
import ezui
from mojo.subscriber import listRegisteredSubscribers, unregisterRoboFontSubscriber, unregisterFontOverviewSubscriber, unregisterGlyphEditorSubscriber, unregisterSpaceCenterSubscriber, unregisterCurrentFontSubscriber, unregisterCurrentGlyphSubscriber
class SubscribererController(ezui.WindowController):
def build(self):
self._subscriber_list = self._get_subscriber_list()
content = """
= HorizontalStack
|---------------|
| name | source | @subscriberTable
|------|--------|
| | |
|---------------|
> ({arrow.clockwise.circle.fill}) @subscriberTableReloadButton
> (Unsubscribe) @subscriberTableUnsubscribeButton
"""
subscriberTableItems = self._write_table_items()
descriptionData = dict(
subscriberTable=dict(
width="auto",
items=subscriberTableItems,
columnDescriptions=[
dict(
identifier="name",
title="Name",
width=240
),
dict(
identifier="source",
title="Source",
width=160
)
]
)
)
self.w = ezui.EZWindow(
title="Subscriberer",
size=(500, 350),
content=content,
descriptionData=descriptionData,
controller=self
)
def started(self):
self.w.open()
def subscriberTableReloadButtonCallback(self, sender):
self._update_table_items()
def subscriberTableUnsubscribeButtonCallback(self, sender):
table = self.w.getItem("subscriberTable")
selection = table.getSelectedIndexes()
for s in selection:
for registered_subs in listRegisteredSubscribers():
if self._subscriber_list[s]['sub_id'] in registered_subs.getIdentifier():
unregisterRoboFontSubscriber(registered_subs)
unregisterFontOverviewSubscriber(registered_subs)
unregisterGlyphEditorSubscriber(registered_subs)
unregisterSpaceCenterSubscriber(registered_subs)
unregisterCurrentFontSubscriber(registered_subs)
unregisterCurrentGlyphSubscriber(registered_subs)
self._update_table_items()
def _update_table_items(self):
self._subscriber_list = self._get_subscriber_list()
table = self.w.getItem("subscriberTable")
items = self._write_table_items()
table.set(items)
def _write_table_items(self):
c = list()
for s in self._subscriber_list:
c.append(dict(name=s['name'], source=s['source']))
return c
def _get_subscriber_list(self):
subs_list = list()
for s in listRegisteredSubscribers():
identifier = s.getIdentifier()
# name is first bit, source all the rest,
# [:-1] cuts off number id at the end
name, *source = identifier.split('.')[:-1]
subs_list.append(dict(
name=name,
source='.'.join(source),
sub_id=identifier
)
)
return subs_list
SubscribererController()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment