openmedialibrary/oml/gtkstatus.py

94 lines
2.8 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import os
from os.path import dirname, abspath
import subprocess
2016-04-14 10:57:45 +00:00
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
2016-04-14 10:57:45 +00:00
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)
2016-01-18 12:17:36 +00:00
subprocess.Popen([ctl, 'start'])
2016-04-14 10:57:45 +00:00
if not self.autostart:
GLib.timeout_add_seconds(1, self._open, None)
2016-01-18 12:17:36 +00:00
GLib.timeout_add_seconds(60, self._check, None)
2016-01-09 10:11:42 +00:00
2016-01-18 12:17:36 +00:00
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()
2016-01-12 05:03:15 +00:00
t = Gtk.MenuItem(label=title)
t.set_sensitive(False)
menu.append(t)
2016-01-09 14:24:11 +00:00
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
2016-01-05 17:43:52 +00:00
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
2016-04-14 10:57:45 +00:00
if __name__ == '__main__':
autostart = len(sys.argv) > 1 and sys.argv[1] == '--autostart'
OMLIcon(autostart)
Gtk.main()