import os
from loguru import logger as log
import globals as gl
from src.backend.trayicon import DBusTrayIcon, DBusMenu
class TrayIcon(DBusTrayIcon):
MenuPath = "/com/core447/StreamController/Menu"
IndicatorPath = "/org/ayatana/NotificationItem/com_core447_StreamController_TrayIcon"
AppId = "com.core447.StreamController.TrayIcon"
def __init__(self):
if gl.IS_MAC:
return
self.menu = DBusMenu()
self.menu.add_menu_item(1, "Show Window", callback=self.on_show)
self.menu.add_menu_item(2, menu_type="separator")
self.menu.add_menu_item(3, "Settings", callback=self.on_settings)
self.menu.add_menu_item(4, "Store", callback=self.on_store)
self.menu.add_menu_item(5, "About", callback=self.on_about)
self.menu.add_menu_item(6, menu_type="separator")
self.menu.add_menu_item(7, "Quit", callback=self.on_quit)
super().__init__(self.menu, self.MenuPath, self.IndicatorPath, self.AppId, "StreamController")
icon_theme_path = os.path.join(gl.MAIN_PATH, "Assets", "icons")
self.set_icon("com.core447.StreamController", path=icon_theme_path)
self.set_tooltip("StreamController")
self.set_label("StreamController")
self.main_win = None
self.show_about_action = None
self.show_store_action = None
self.show_settings_action = None
self.quit_app_action = None
self.activate_id = -1
@log.catch
def initialize(self, main_win):
self.main_win = main_win
self.show_about_action = main_win.menu_button.open_about_action
self.show_store_action = main_win.menu_button.open_store_action
self.show_settings_action = main_win.menu_button.open_settings_action
self.quit_app_action = main_win.menu_button.quit_action
app_settings = gl.settings_manager.get_app_settings()
show_now = app_settings.get("ui",{}).get("tray-icon", True)
if show_now:
self.register()
@log.catch
def start(self):
self.register()
@log.catch
def stop(self):
self.unregister()
@log.catch
def on_show(self):
self.main_win.present()
@log.catch
def on_settings(self):
self.show_settings_action.activate()
@log.catch
def on_store(self):
self.show_store_action.activate()
@log.catch
def on_about(self):
self.main_win.present()
self.show_about_action.activate()
@log.catch
def on_quit(self):
self.quit_app_action.activate()
# import os
# os.environ["PYSTRAY_BACKEND"] = "appindicator"
# # import pystray
# from pystray import _appindicator
# from PIL import Image
# from pystray import Menu, MenuItem
# class TrayIcon(_appindicator.Icon):
# def __init__(self):
# icon_image = Image.open("flatpak/icon_256.png")
# menu = Menu(
# MenuItem("StreamController", enabled=False, action=None),
# MenuItem("Open", self.on_open),
# MenuItem("Quit", self.on_quit)
# )
# super().__init__("StreamController", icon_image, menu=menu, title="StreamController")
# def on_open(self):
# print("Open")
# def on_quit(self):
# print("Quit")
# self.stop() # Stop the icon running when "Quit" is clicked
# if __name__ == "__main__":
# # Usage
# stream_controller_icon = TrayIcon()
# stream_controller_icon.run()