#!/usr/bin/python3 import argparse import io import os import pathlib import sys import tarfile import urllib.request DBURL = "https://freewvsdb.schokokeks.org/" dbpaths = ["/var/lib/freewvs/", str(pathlib.Path.home()) + "/.cache/freewvs/"] ap = argparse.ArgumentParser() ap.add_argument("-f", "--force", action="store_true", help="Force update") args = ap.parse_args() target = False for dbpath in dbpaths: if not os.path.isdir(dbpath): try: os.makedirs(dbpath) except PermissionError: continue if os.access(dbpath, os.W_OK): target = dbpath break if not target: sys.exit("Can't write to " + " or ".join(dbpaths)) old = 0 if os.path.isfile(target + "timestamp"): with open(target + "timestamp", encoding="ascii") as f: old = int(f.read()) new = int(urllib.request.urlopen(DBURL + "freewvsdb.timestamp").read()) if new == old and not args.force: # nothing to do sys.exit() tarball = urllib.request.urlopen(DBURL + str(new) + ".tar.xz").read() tf = tarfile.open(fileobj=io.BytesIO(tarball)) if sys.version_info < (3, 11, 4): tf.extractall(path=target) else: tf.extractall(path=target, filter="data") with open(target + "timestamp", "w", encoding="ascii") as f: f.write(str(new))