diff --git a/boswatch/updater.py b/boswatch/updater.py new file mode 100644 index 00000000..6495a18b --- /dev/null +++ b/boswatch/updater.py @@ -0,0 +1,85 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +"""! + ____ ____ ______ __ __ __ _____ + / __ )/ __ \/ ___/ | / /___ _/ /______/ /_ |__ / + / __ / / / /\__ \| | /| / / __ `/ __/ ___/ __ \ /_ < + / /_/ / /_/ /___/ /| |/ |/ / /_/ / /_/ /__/ / / / ___/ / +/_____/\____//____/ |__/|__/\__,_/\__/\___/_/ /_/ /____/ + German BOS Information Script + by Bastian Schroll + +@file: updater.py +@date: 08.03.2019 +@author: Bastian Schroll +@description: Class for a BOSWatch automated updates +""" +import logging +import urllib.request +import re +from boswatch import version + +logging.debug("- %s loaded", __name__) + + +class Updater: + def __init__(self, branch): + self._clientVersion = None + self._serverVersion = None + self._date = None + self._branch = branch + + def _getOnlineVersion(self): + data = urllib.request.urlopen("https://raw.githubusercontent.com/BOSWatch/BW3-Core/" + self._branch + "/boswatch/version.py") + for line in data: + content = str(line, "utf8") + + if "client = " in content: + data = re.findall("(\d+)", content) + self._clientVersion = {"major": int(data[0]), "minor": int(data[1]), "patch": int(data[2])} + + if "server = " in content: + data = re.findall("(\d+)", content) + self._serverVersion = {"major": int(data[0]), "minor": int(data[1]), "patch": int(data[2])} + + if "date = " in content: + data = re.findall("(\d+)", content) + self._date = {"day": int(data[0]), "month": int(data[1]), "year": int(data[2])} + + if "branch = " in content: + data = re.findall("(?:branch)(?:[ =\"]+)(\w*)", content) + self._branch = data[0] + + def checkClientUpdate(self): + logging.debug("checking for client update") + self._getOnlineVersion() + if version.client["major"] < self._clientVersion["major"] or \ + version.client["minor"] < self._clientVersion["minor"] or \ + version.client["patch"] < self._clientVersion["patch"]: + logging.info("There is a client update from available: %d.%d.%d (%d.%d.%d) -> %d.%d.%d (%d.%d.%d)", + version.client["major"], version.client["minor"], version.client["patch"], + version.date["day"], version.date["month"], version.date["year"], + self._clientVersion["major"], self._clientVersion["minor"], self._clientVersion["patch"], + self._date["day"], self._date["month"], self._date["year"]) + return False + else: + logging.debug("client is up to date") + return True + + def checkServerUpdate(self): + logging.debug("checking for server update") + self._getOnlineVersion() + if version.server["major"] < self._serverVersion["major"] or \ + version.server["minor"] < self._serverVersion["minor"] or \ + version.server["patch"] < self._serverVersion["patch"]: + logging.info("There is a server update from %d.%d.%d available: %d.%d.%d -> %d.%d.%d", + version.date["day"], version.date["month"], version.date["year"], + version.server["major"], version.server["minor"], version.server["patch"], + self._serverVersion["major"], self._serverVersion["minor"], self._serverVersion["patch"]) + return False + else: + logging.debug("server is up to date") + return True + + def doUpdate(self): + pass