diff --git a/mumbleBot.py b/mumbleBot.py index f1bc8ef..bef92b4 100644 --- a/mumbleBot.py +++ b/mumbleBot.py @@ -37,7 +37,7 @@ class MumbleBot: def __init__(self, args): self.log = logging.getLogger("bot") - self.log.info(f"bot: botamusique version {self.version}, starting...") + self.log.info(f"bot: botamusique version {self.get_version()}, starting...") signal.signal(signal.SIGINT, self.ctrl_caught) self.cmd_handle = {} @@ -160,7 +160,8 @@ class MumbleBot: if var.config.get("bot", "when_nobody_in_channel", fallback='') in ['pause', 'pause_resume', 'stop']: user_change_callback = \ - lambda user, action: threading.Thread(target=self.users_changed, args=(user, action), daemon=True).start() + lambda user, action: threading.Thread(target=self.users_changed, + args=(user, action), daemon=True).start() self.mumble.callbacks.set_callback(pymumble.constants.PYMUMBLE_CLBK_USERREMOVED, user_change_callback) self.mumble.callbacks.set_callback(pymumble.constants.PYMUMBLE_CLBK_USERUPDATED, user_change_callback) @@ -172,7 +173,13 @@ class MumbleBot: self.redirect_ffmpeg_log = var.config.getboolean('debug', 'redirect_ffmpeg_log', fallback=True) if var.config.getboolean("bot", "auto_check_update"): - th = threading.Thread(target=self.check_update, name="UpdateThread") + def check_update(): + nonlocal self + new_version, changelog = util.check_update(self.get_version()) + if new_version: + self.send_channel_msg(tr('new_version_found', new_version=new_version, changelog=changelog)) + + th = threading.Thread(target=check_update, name="UpdateThread") th.daemon = True th.start() @@ -199,17 +206,11 @@ class MumbleBot: self.exit = True - def check_update(self): - self.log.debug("update: checking for updates...") - new_version = util.new_release_version(var.config.get('bot', 'target_version')) - if version.parse(new_version) > version.parse(self.version) and var.config.get('bot', 'target_version') == "stable": - changelog = util.fetch_changelog() - self.log.info(f"update: new version {new_version} found, current installed version {self.version}.") - self.log.info(f"update: changelog: {changelog}") - changelog = changelog.replace("\n", "
") - self.send_channel_msg(tr('new_version_found', new_version=new_version, changelog=changelog)) + def get_version(self): + if self.version != "git": + return self.version else: - self.log.debug("update: no new version found.") + return util.get_snapshot_version() def register_command(self, cmd, handle, no_partial_match=False, access_outside_channel=False, admin=False): cmds = cmd.split(",") diff --git a/util.py b/util.py index ab53c86..d66239b 100644 --- a/util.py +++ b/util.py @@ -114,6 +114,22 @@ def fetch_changelog(): return c +def check_update(current_version): + global log + log.debug("update: checking for updates...") + new_version = new_release_version(var.config.get('bot', 'target_version')) + if version.parse(new_version) > version.parse(current_version) \ + and var.config.get('bot', 'target_version') == "stable": + changelog = fetch_changelog() + log.info(f"update: new version {new_version} found, current installed version {current_version}.") + log.info(f"update: changelog: {changelog}") + changelog = changelog.replace("\n", "
") + return new_version, changelog + else: + log.debug("update: no new version found.") + return None, None + + def update(current_version): global log @@ -440,6 +456,26 @@ def set_logging_formatter(handler: logging.Handler, logging_level): handler.setFormatter(formatter) +def get_snapshot_version(): + import subprocess + root_dir = os.path.dirname(__file__) + if os.path.exists(os.path.join(root_dir, ".git")): + try: + ret = subprocess.check_output(["git", "describe"]).strip() + return ret.decode("utf-8") + except FileNotFoundError: + pass + + try: + with open(os.path.join(root_dir,".git/refs/heads/master")) as f: + ret = "g" + f.read()[:7] + return ret + except FileNotFoundError: + pass + + return "unknown" + + class LoggerIOWrapper(io.TextIOWrapper): def __init__(self, logger: logging.Logger, logging_level, fallback_io_buffer): super().__init__(fallback_io_buffer, write_through=True) diff --git a/web/templates/index.template.html b/web/templates/index.template.html index 85da6f5..2ca8bbf 100644 --- a/web/templates/index.template.html +++ b/web/templates/index.template.html @@ -280,7 +280,7 @@