コード例 #1
0
def insert_unload_reload(ar: rumps.MenuItem, j: launchd.LaunchdJob):
    print(j.plistfilename)
    ar.add(
        rumps.MenuItem("Unload",
                       callback=lambda x: launchd.unload(j.plistfilename)))
    ar.add(
        rumps.MenuItem("Reload",
                       callback=lambda x: launchd.unload(j.plistfilename) and
                       launchd.load(j.plistfilename)))
コード例 #2
0
def insert_log_menu_items(ar: rumps.MenuItem, ag):
    log = ag['StandardOutPath']
    log_cb = lambda x: subprocess.call(["open", "-a", "Console", log])
    err = ag['StandardErrorPath']
    err_cb = lambda x: subprocess.call(["open", "-a", "Console", err])
    ar.add(rumps.separator)
    ar.add(rumps.MenuItem("View Log", callback=log_cb if log else None))
    ar.add(rumps.MenuItem("View Error Log", callback=err_cb if err else None))
    ar.add(rumps.separator)
コード例 #3
0
ファイル: app.py プロジェクト: clvrobj/clocks
class ClockApp(App):

    def __init__(self):
        super(ClockApp, self).__init__("Clock", quit_button=None)
        self.init_menu()
        self.clocks = Clocks(times_to_flip=INTVLS_MAP.get(DEFAULT_INTVL_STR))
        self.load_clocks_data()
        self.load_intvl_data()

    def load_clocks_data(self):
        clocks_tz = []
        filepath = application_support(APP_NAME) + '/' + SUPPORT_CLOCKS_FILENAME
        if os.path.exists(filepath):
            f = open(filepath, 'r')
            for e in pickle.load(f):
                if isinstance(e, str):
                    clocks_tz.append(e)
        if len(clocks_tz) > 0:
            for tz in clocks_tz:
                self.add_clock(tz)
        else:
            self.add_local_clock()
        return

    def dump_clocks_data(self):
        filepath = application_support(APP_NAME) + '/' + SUPPORT_CLOCKS_FILENAME
        f = open(filepath, 'wb')
        pickle.dump(self.clocks.clock_keys, f)
        return

    def load_intvl_data(self):
        filepath = application_support(APP_NAME) + '/' + SUPPORT_INTVL_FILENAME
        if os.path.exists(filepath):
            f = open(filepath, 'r')
            intvl = pickle.load(f)
            self.clocks.set_times_to_flip(intvl)
            for s, i in INTVLS_MAP.items():
                self.interval_menu[s].state = 1 if i == intvl else 0

    def dump_intvl_data(self):
        filepath = application_support(APP_NAME) + '/' + SUPPORT_INTVL_FILENAME
        f = open(filepath, 'wb')
        pickle.dump(self.clocks.times_to_flip, f)
        return

    def init_menu(self):
        # add timezones menu
        self.timezones_menu = MenuItem('Time Zones')
        for tz in TIMEZONES:
            self.timezones_menu.add(MenuItem(tz, callback=self.switch_clock_callback))
        # recently added menu
        self.recent_menu = MenuItem('Add Recent')
        # add interval menu
        self.interval_menu = MenuItem('Update Time')
        for secs in INTVLS:
            item = MenuItem(secs, callback=self.update_interval)
            if secs == DEFAULT_INTVL_STR:
                item.state = 1
            self.interval_menu.add(item)
        self.about_btn = MenuItem('About', callback=self.open_about)
        self.quit_btn = MenuItem('Quit', callback=self.quit_app)
        self.menu = [self.timezones_menu, self.recent_menu,
                     self.interval_menu, self.about_btn, self.quit_btn]

    @timer(1)
    def update(self, _):
        self.title = self.clocks.get_clock_time_str()
        self.update_clocks_menu()

    def update_interval(self, sender):
        for item in self.interval_menu.values():
            item.state = 0
        sender.state = 1
        self.clocks.set_times_to_flip(INTVLS_MAP.get(sender.title, 5))

    def add_clock(self, tz_name):
        if self.clocks.add_clock(tz_name):
            self.update_clocks_menu()
            self.timezones_menu[tz_name].state = 1

    def remove_clock(self, tz_name):
        if self.clocks.remove_clock(tz_name):
            self.update_clocks_menu()
            self.timezones_menu[tz_name].state = 0

    def update_clocks_menu(self):
        # reconstruct clocks menu
        items = []
        items.extend(self.clocks.get_all_clock_time_str())
        items.append(separator)
        items.append(self.timezones_menu)
        if len(self.recent_menu.keys()) > 0:
            self.recent_menu.clear()
        for c in self.clocks.get_history_clocks():
            self.recent_menu.add(
                MenuItem(c, callback=self.add_clock_from_recent_callback))
        items.append(self.recent_menu)
        items.append(self.interval_menu)
        items.append(self.about_btn)
        items.append(self.quit_btn)
        self.menu.clear()
        self.menu.update(items)

    def switch_clock_callback(self, sender):
        tz_name = str(sender.title)
        if sender.state == 0:
            self.add_clock(tz_name)
        else:
            self.remove_clock(tz_name)

    def add_clock_from_recent_callback(self, sender):
        tz_name = str(sender.title)
        self.add_clock(tz_name)
        self.timezones_menu[tz_name].state = 1

    def add_local_clock(self):
        # add local zone by default
        local_zone = get_localzone().zone
        self.add_clock(local_zone)
        if self.timezones_menu.has_key(local_zone):
            self.timezones_menu[local_zone].state = 1
        else:
            item = MenuItem(local_zone, callback=self.switch_clock_callback)
            item.state = 1
            self.timezones_menu.add(item)

    def open_about(self, sender):
        import webbrowser
        # new = 2 for opening in the tab if possible
        webbrowser.open(ABOUT_URL, new=2)
        return

    def quit_app(self, sender):
        self.dump_clocks_data()
        self.dump_intvl_data()
        quit_application(sender)