def update_table(): with use_scope("updater_info", clear=True): local_commit = updater.get_commit(short_sha1=True) upstream_commit = updater.get_commit( f"origin/{updater.Branch}", short_sha1=True ) put_table( [ [t("Gui.Update.Local"), *local_commit], [t("Gui.Update.Upstream"), *upstream_commit], ], header=[ "", "SHA1", t("Gui.Update.Author"), t("Gui.Update.Time"), t("Gui.Update.Message"), ], ) with use_scope("updater_detail", clear=True): put_text(t("Gui.Update.DetailedHistory")) history = updater.get_commit( f"origin/{updater.Branch}", n=20, short_sha1=True ) put_table( [commit for commit in history], header=[ "SHA1", t("Gui.Update.Author"), t("Gui.Update.Time"), t("Gui.Update.Message"), ], )
def alas_update_overiew_task(self) -> None: if not self.visible: return self.alas_config.load() self.alas_config.get_next_task() if len(self.alas_config.pending_task) >= 1: if self.alas.alive: running = self.alas_config.pending_task[:1] pending = self.alas_config.pending_task[1:] else: running = [] pending = self.alas_config.pending_task[:] else: running = [] pending = [] waiting = self.alas_config.waiting_task def put_task(func: Function): with use_scope(f"overview-task_{func.command}"): put_column( [ put_text(t(f"Task.{func.command}.name")).style( "--arg-title--"), put_text(str(func.next_run)).style("--arg-help--"), ], size="auto auto", ) put_button( label=t("Gui.Button.Setting"), onclick=lambda: self.alas_set_group(func.command), color="off", ) clear("running_tasks") clear("pending_tasks") clear("waiting_tasks") with use_scope("running_tasks"): if running: for task in running: put_task(task) else: put_text( t("Gui.Overview.NoTask")).style("--overview-notask-text--") with use_scope("pending_tasks"): if pending: for task in pending: put_task(task) else: put_text( t("Gui.Overview.NoTask")).style("--overview-notask-text--") with use_scope("waiting_tasks"): if waiting: for task in waiting: put_task(task) else: put_text( t("Gui.Overview.NoTask")).style("--overview-notask-text--")
def todolist(): tasks = [] put_html(r"""<h1 align="center"><strong>📝 To-Do List</strong></h1>""") with use_scope('tasks'): while True: task = input( type=TEXT, required=True, label='🏃 What are you going to do today?', placeholder='Add a task...', help_text='Try: "Write an article"', ) tasks.append(task) clear('tasks') put_table( tdata=[[ task, put_buttons(['Complete'], onclick=partial(complete_task, task=task, tasks=tasks)) ] for task in tasks], header=[ '🤩 Your Awesome Tasks', '✅ Have you completed your task?', ], )
def show(self) -> None: self._show() self.init_aside(name="Home") self.set_aside() self.collapse_menu() self.alas_name = "" if hasattr(self, "alas"): del self.alas self.set_status(0) def set_language(l): lang.set_language(l) self.show() def set_theme(t): self.set_theme(t) run_js("location.reload()") with use_scope("content"): put_text("Select your language / 选择语言").style("text-align: center") put_buttons( [ {"label": "简体中文", "value": "zh-CN"}, {"label": "繁體中文", "value": "zh-TW"}, {"label": "English", "value": "en-US"}, {"label": "日本語", "value": "ja-JP"}, ], onclick=lambda l: set_language(l), ).style("text-align: center") put_text("Change theme / 更改主题").style("text-align: center") put_buttons( [ {"label": "Light", "value": "default", "color": "light"}, {"label": "Dark", "value": "dark", "color": "dark"}, ], onclick=lambda t: set_theme(t), ).style("text-align: center") # show something put_markdown( """ Alas is a free open source software, if you paid for Alas from any channel, please refund. Alas 是一款免费开源软件,如果你在任何渠道付费购买了Alas,请退款。 Project repository 项目地址:`https://github.com/LmeSzinc/AzurLaneAutoScript` """ ).style("text-align: center") if lang.TRANSLATE_MODE: lang.reload() def _disable(): lang.TRANSLATE_MODE = False self.show() toast( _t("Gui.Toast.DisableTranslateMode"), duration=0, position="right", onclick=_disable, )
def put_task(func: Function): with use_scope(f'overview-task_{func.command}'): put_column([ put_text( t(f'Task.{func.command}.name')).style("--arg-title--"), put_text(str(func.next_run)).style("--arg-help--"), ], size="auto auto") put_button(label=t("Gui.Button.Setting"), onclick=lambda: self.alas_set_group(func.command), color="off")
def update_table(): with use_scope('updater_info', clear=True): local_commit = updater.get_commit(short_sha1=True) upstream_commit = updater.get_commit( f'origin/{updater.branch}', short_sha1=True) put_table([[t('Gui.Update.Local'), *local_commit], [t('Gui.Update.Upstream'), *upstream_commit]], header=[ '', 'SHA1', t('Gui.Update.Author'), t('Gui.Update.Time'), t('Gui.Update.Message') ])
def set_group(self, group, arg_dict, config, task): group_name = group[0] with use_scope(f'group_{group_name}'): put_text(t(f"{group_name}._info.name")) group_help = t(f"{group_name}._info.help") if group_help != "": put_text(group_help) put_html('<hr class="hr-group">') for arg, d in deep_iter(arg_dict, depth=1): arg = arg[0] arg_type = d['type'] if arg_type == 'disable': continue value = deep_get(config, f'{task}.{group_name}.{arg}', d['value']) value = str(value) if isinstance(value, datetime) else value # Option options = deep_get(d, 'option', None) if options: option = [] for opt in options: o = { "label": t(f"{group_name}.{arg}.{opt}"), "value": opt } if value == opt: o["selected"] = True option.append(o) else: option = None # Help arg_help = t(f"{group_name}.{arg}.help") if arg_help == "" or not arg_help: arg_help = None # Invalid feedback invalid_feedback = t("Gui.Text.InvalidFeedBack").format( d['value']) get_output( arg_type=arg_type, name=self.path_to_idx[f"{task}.{group_name}.{arg}"], title=t(f"{group_name}.{arg}.name"), arg_help=arg_help, value=value, options=option, invalid_feedback=invalid_feedback, ).show()
def update_table(): with use_scope("updater_info", clear=True): local_commit = updater.get_commit(short_sha1=True) upstream_commit = updater.get_commit( f"origin/{updater.branch}", short_sha1=True) put_table( [ [t("Gui.Update.Local"), *local_commit], [t("Gui.Update.Upstream"), *upstream_commit], ], header=[ "", "SHA1", t("Gui.Update.Author"), t("Gui.Update.Time"), t("Gui.Update.Message"), ], )
def alas_daemon_overview(self, task: str) -> None: self.init_menu(name=task) self.set_title(t(f'Task.{task}.name')) if self.is_mobile: put_scope('daemon-overview', [ put_scope('scheduler-bar'), put_scope('groups'), put_scope('log-bar'), self.alas_logs.output() ]) else: put_scope('daemon-overview', [ put_none(), put_scope('_daemon', [ put_scope( '_daemon_upper', [put_scope('scheduler-bar'), put_scope('log-bar')]), put_scope('groups'), self.alas_logs.output() ]), put_none(), ]) with use_scope('scheduler-bar'): put_text(t("Gui.Overview.Scheduler")).style( "font-size: 1.25rem; margin: auto .5rem auto;") put_scope('scheduler_btn') switch_scheduler = BinarySwitchButton( label_on=t("Gui.Button.Stop"), label_off=t("Gui.Button.Start"), onclick_on=lambda: self.alas.stop(), onclick_off=lambda: self.alas.start(task), get_state=lambda: self.alas.alive, color_on='on', color_off='off', scope='scheduler_btn') with use_scope('log-bar'): put_text(t("Gui.Overview.Log")).style( "font-size: 1.25rem; margin: auto .5rem auto;") put_scope('log-bar-btns', [ put_button( label=t("Gui.Button.ClearLog"), onclick=self.alas_logs.reset, color='off', ), put_scope('log_scroll_btn') ]) switch_log_scroll = BinarySwitchButton( label_on=t("Gui.Button.ScrollON"), label_off=t("Gui.Button.ScrollOFF"), onclick_on=lambda: self.alas_logs.set_scroll(False), onclick_off=lambda: self.alas_logs.set_scroll(True), get_state=lambda: self.alas_logs.keep_bottom, color_on='on', color_off='off', scope='log_scroll_btn') config = Setting.config_updater.update_config(self.alas_name) for group, arg_dict in deep_iter(self.ALAS_ARGS[task], depth=1): self.set_group(group, arg_dict, config, task) self.task_handler.add(switch_scheduler.g(), 1, True) self.task_handler.add(switch_log_scroll.g(), 1, True) self.task_handler.add(self.alas_put_log(), 0.2, True)
def alas_overview(self) -> None: self.init_menu(name="Overview") self.set_title(t(f'Gui.MenuAlas.Overview')) put_scope('overview', [put_scope('schedulers'), put_scope('logs')]) with use_scope('schedulers'): put_scope('scheduler-bar', [ put_text(t("Gui.Overview.Scheduler")).style( "font-size: 1.25rem; margin: auto .5rem auto;"), put_scope('scheduler_btn') ]) put_scope('running', [ put_text(t("Gui.Overview.Running")), put_html('<hr class="hr-group">'), put_scope('running_tasks') ]) put_scope('pending', [ put_text(t("Gui.Overview.Pending")), put_html('<hr class="hr-group">'), put_scope('pending_tasks') ]) put_scope('waiting', [ put_text(t("Gui.Overview.Waiting")), put_html('<hr class="hr-group">'), put_scope('waiting_tasks') ]) switch_scheduler = BinarySwitchButton( label_on=t("Gui.Button.Stop"), label_off=t("Gui.Button.Start"), onclick_on=lambda: self.alas.stop(), onclick_off=lambda: self.alas.start('Alas', updater.event), get_state=lambda: self.alas.alive, color_on='off', color_off='on', scope='scheduler_btn') with use_scope('logs'): put_scope('log-bar', [ put_text(t("Gui.Overview.Log")).style( "font-size: 1.25rem; margin: auto .5rem auto;"), put_scope('log-bar-btns', [ put_button( label=t("Gui.Button.ClearLog"), onclick=self.alas_logs.reset, color='off', ), put_scope('log_scroll_btn') ]) ]) self.alas_logs.output() switch_log_scroll = BinarySwitchButton( label_on=t("Gui.Button.ScrollON"), label_off=t("Gui.Button.ScrollOFF"), onclick_on=lambda: self.alas_logs.set_scroll(False), onclick_off=lambda: self.alas_logs.set_scroll(True), get_state=lambda: self.alas_logs.keep_bottom, color_on='on', color_off='off', scope='log_scroll_btn') self.task_handler.add(switch_scheduler.g(), 1, True) self.task_handler.add(switch_log_scroll.g(), 1, True) self.task_handler.add(self.alas_update_overiew_task, 10, True) self.task_handler.add(self.alas_put_log(), 0.2, True)
def alas_daemon_overview(self, task: str) -> None: self.init_menu(name=task) self.set_title(t(f"Task.{task}.name")) log = RichLog("log") if self.is_mobile: put_scope( "daemon-overview", [ put_scope("scheduler-bar"), put_scope("groups"), put_scope("log-bar"), put_scope("log", [put_html("")]), ], ) else: put_scope( "daemon-overview", [ put_none(), put_scope( "_daemon", [ put_scope( "_daemon_upper", [ put_scope("scheduler-bar"), put_scope("log-bar") ], ), put_scope("groups"), put_scope("log", [put_html("")]), ], ), put_none(), ], ) log.console.width = log.get_width() with use_scope("scheduler-bar"): put_text(t("Gui.Overview.Scheduler")).style( "font-size: 1.25rem; margin: auto .5rem auto;") put_scope("scheduler_btn") switch_scheduler = BinarySwitchButton( label_on=t("Gui.Button.Stop"), label_off=t("Gui.Button.Start"), onclick_on=lambda: self.alas.stop(), onclick_off=lambda: self.alas.start(task), get_state=lambda: self.alas.alive, color_on="off", color_off="on", scope="scheduler_btn", ) with use_scope("log-bar"): put_text(t("Gui.Overview.Log")).style( "font-size: 1.25rem; margin: auto .5rem auto;") put_scope( "log-bar-btns", [ put_button( label=t("Gui.Button.ClearLog"), onclick=log.reset, color="off", ), put_scope("log_scroll_btn"), ], ) switch_log_scroll = BinarySwitchButton( label_on=t("Gui.Button.ScrollON"), label_off=t("Gui.Button.ScrollOFF"), onclick_on=lambda: log.set_scroll(False), onclick_off=lambda: log.set_scroll(True), get_state=lambda: log.keep_bottom, color_on="on", color_off="off", scope="log_scroll_btn", ) config = Setting.config_updater.update_config(self.alas_name) for group, arg_dict in deep_iter(self.ALAS_ARGS[task], depth=1): self.set_group(group, arg_dict, config, task) self.task_handler.add(switch_scheduler.g(), 1, True) self.task_handler.add(switch_log_scroll.g(), 1, True) self.task_handler.add(log.put_log(self.alas), 0.25, True)
def alas_overview(self) -> None: self.init_menu(name="Overview") self.set_title(t(f"Gui.MenuAlas.Overview")) put_scope("overview", [put_scope("schedulers"), put_scope("logs")]) with use_scope("schedulers"): put_scope( "scheduler-bar", [ put_text(t("Gui.Overview.Scheduler")).style( "font-size: 1.25rem; margin: auto .5rem auto;"), put_scope("scheduler_btn"), ], ) put_scope( "running", [ put_text(t("Gui.Overview.Running")), put_html('<hr class="hr-group">'), put_scope("running_tasks"), ], ) put_scope( "pending", [ put_text(t("Gui.Overview.Pending")), put_html('<hr class="hr-group">'), put_scope("pending_tasks"), ], ) put_scope( "waiting", [ put_text(t("Gui.Overview.Waiting")), put_html('<hr class="hr-group">'), put_scope("waiting_tasks"), ], ) switch_scheduler = BinarySwitchButton( label_on=t("Gui.Button.Stop"), label_off=t("Gui.Button.Start"), onclick_on=lambda: self.alas.stop(), onclick_off=lambda: self.alas.start("Alas", updater.event), get_state=lambda: self.alas.alive, color_on="off", color_off="on", scope="scheduler_btn", ) log = RichLog("log") with use_scope("logs"): put_scope( "log-bar", [ put_text(t("Gui.Overview.Log")).style( "font-size: 1.25rem; margin: auto .5rem auto;"), put_scope( "log-bar-btns", [ put_button( label=t("Gui.Button.ClearLog"), onclick=log.reset, color="off", ), put_scope("log_scroll_btn"), ], ), ], ), put_scope("log", [put_html("")]) log.console.width = log.get_width() switch_log_scroll = BinarySwitchButton( label_on=t("Gui.Button.ScrollON"), label_off=t("Gui.Button.ScrollOFF"), onclick_on=lambda: log.set_scroll(False), onclick_off=lambda: log.set_scroll(True), get_state=lambda: log.keep_bottom, color_on="on", color_off="off", scope="log_scroll_btn", ) self.task_handler.add(switch_scheduler.g(), 1, True) self.task_handler.add(switch_log_scroll.g(), 1, True) self.task_handler.add(self.alas_update_overiew_task, 10, True) self.task_handler.add(log.put_log(self.alas), 0.25, True)