Volume
@@ -77,7 +77,7 @@ >Volume
@@ -122,7 +122,7 @@Hot
@@ -139,7 +139,7 @@ >Cold
@@ -161,7 +161,7 @@ >{{ getTooltipForStirTime(getTypeForRecipeListAtIndex(i)) }}
@@ -301,7 +301,7 @@ > dict: + return {"accept":"application/json", "authorization": "Basic cGFraW46YWRtaW4xMjM="} + +def get_headers_for_blob() -> dict: + return {"authorization": "Basic cGFraW46YWRtaW4xMjM=", "Content-Type": "application/octet-stream"} + +def get_all_releases_url() -> str: + return f"{source}/api/v1/repos/pakin/taobin_recipe_manager/releases" + +def get_download_url(tag_id: int, asset_id: int) -> str: + return f"{source}/api/v1/repos/pakin/taobin_recipe_manager/releases/{tag_id}/assets/{asset_id}" + +# Flags +update_available_now = False + +# Logs +def save_to_log_file(msg: str): + with open("./patches/.updater.log", "a") as f: + f.write(f"{datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=7)))} : {msg}\n") + +# Redis +redis_client = redis.StrictRedis(host="localhost", port=6379, db=0) +MAIN_CHANNEL = "updater.noti" +pubsub = redis_client.pubsub() +pubsub.subscribe(MAIN_CHANNEL) + +# Settings +settings = {} + +# ------------------------------------------------------------------------------------------------ + +def test_path_from_settings(): + # from settings + path_list = settings["path"].keys() + + for path in path_list: + logger.debug(f"Checking {path}") + if not os.path.exists(settings["path"][path]["path"]): + logger.warning(f"Deps.fallback: {settings['path'][path]["path"]}") + # retry with fallback + if "fallback_paths" in settings['path'][path].keys(): + for fallback_path in settings['path'][path]["fallback_paths"]: + + # check kind of fallback + path_kind = fallback_path.split(":")[0] + path_real = fallback_path.split(":")[1] + + if os.path.exists(path_real): + logger.info(f"Deps.fallback[{path_kind}]: {path_real} = ok") + break + else: + logger.warning(f"Deps.fallback: skipped {path}") + else: + # path ok( + logger.info(f"Deps: {path} = ok") + + +def find_latest_version(rels: list[dict]) -> str: + major = 0 + minor = 0 + patch = 0 + for rel in rels: + if rel["tag_name"].startswith("v"): + version = rel["tag_name"][1:].split(".") + if len(version) == 3: + if int(version[0]) > major: + major = int(version[0]) + minor = int(version[1]) + patch = int(version[2]) + elif int(version[0]) == major: + if int(version[1]) > minor: + minor = int(version[1]) + patch = int(version[2]) + elif int(version[1]) == minor: + if int(version[2]) > patch: + patch = int(version[2]) + + return f"{major}.{minor}.{patch}" + +def get_version(rels: list[dict], tag: str) -> dict: + # assert that tag is valid + is_in_correct_format = tag.startswith("v") and len(tag[1:].split(".")) == 3 + if is_in_correct_format: + for rel in rels: + if rel["tag_name"] == tag: + return rel + +# +def check_version_job() -> dict: + logger.info("Checking version") + result = requests.get(get_all_releases_url(), timeout=10, headers=get_headers()) + if result.status_code == 200: + # connect to server ok! + releases = result.json() + if len(releases) > 0: + # find the latest {major}.{minor}.{patch} + expected_version = find_latest_version(releases) + # get data from list + # version data + latest_version_data = get_version(releases, f"v{expected_version}") + + + latest_id = latest_version_data["id"] + latest_asset_id = latest_version_data["assets"][0]["id"] + + # get download url + download_url = get_download_url(latest_id, latest_asset_id) + # download + logger.info(f"Found version {expected_version} from source") + + dl_result = requests.get(download_url, timeout=10, headers=get_headers()) + if dl_result.status_code == 200: + # download ok! + # logger.debug(f"data: {dl_result.json()}") + + dl_content = dl_result.json() + + dl_link = dl_content["browser_download_url"] + # download link is not usable without tailscale vpn + # cut uri, start at /attachments + dl_link = f"{source}{dl_link[dl_link.find("/attachments"):]}" + # logger.info(f"Download link: {dl_link}") + + is_already_latest = False + old_version = "" + # check dl and latest + if os.path.exists("./patches/latest.version"): + with open("./patches/latest.version", "r") as f: + latest_version = f.read() + + if latest_version == None or latest_version == "": + logger.warning("No version found on running machine. Starting overwrite ...") + save_to_log_file("Warning: version.overwrite caused by missing version on latest.version.") + old_version = "