#!/usr/bin/env python3 import os from os.path import dirname, abspath import subprocess import sys import webbrowser import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GLib try: gi.require_version('AppIndicator3', '0.1') from gi.repository import AppIndicator3 as appindicator except: appindicator = None base = dirname(dirname(dirname(abspath(__file__)))) icon = os.path.join(base, 'openmedialibrary/static/png/oml.png') title = "Open Media Library" ctl = base + '/ctl' class OMLIcon: menu = None icon = None indicator = None def __init__(self, autostart=False): self.autostart = autostart if appindicator: self.indicator = appindicator.Indicator.new("OML", icon, appindicator.IndicatorCategory.APPLICATION_STATUS) self.indicator.set_status(appindicator.IndicatorStatus.ACTIVE) self.menu = self.get_menu() self.indicator.set_menu(self.menu) else: self.icon = Gtk.StatusIcon() self.icon.set_from_file(icon) self.icon.set_title(title) self.icon.connect("activate", self._click) self.icon.connect("popup-menu", self._click) subprocess.Popen([ctl, 'start']) if not self.autostart: GLib.timeout_add_seconds(1, self._open, None) GLib.timeout_add_seconds(60, self._check, None) def _check(self, *args, **kwargs): pid = os.path.join(base, 'data', 'openmedialibrary.pid') if os.path.exists(pid): GLib.timeout_add_seconds(60, self._check, None) else: self._quit(None) def get_menu(self): menu = Gtk.Menu() t = Gtk.MenuItem(label=title) t.set_sensitive(False) menu.append(t) menu.append(Gtk.SeparatorMenuItem()) about = Gtk.MenuItem(label="Launch") about.connect("activate", self._open) menu.append(about) quit = Gtk.MenuItem(label="Quit") quit.connect("activate", self._quit) menu.append(quit) menu.show_all() return menu def _click(self, icon, button=None, time=None): if self.menu: self.menu.destroy() self.menu = None else: self.menu = self.get_menu() button = 1 time = Gtk.get_current_event_time() self.menu.popup(None, None, self.icon.position_menu, icon, button, time) def _quit(self, q): Gtk.main_quit() p = subprocess.Popen([ctl, 'stop']) self.menu = None def _open(self, *args): url = 'file://' + base + '/openmedialibrary/static/html/load.html' webbrowser.open_new_tab(url) self.menu = None if __name__ == '__main__': autostart = len(sys.argv) > 1 and sys.argv[1] == '--autostart' OMLIcon(autostart) Gtk.main()