#!/usr/bin/env python3 import hashlib import requests import os import shutil import sys # Initalize from config INSTALL_DIR = "" with open("pack-location.txt", "r") as f: INSTALL_DIR = f.read().strip() def apply_updates(): print("Updating pack...") # (fname, url) mods = [] # Set of jar file names names = set() with open("downloads.txt", "r") as f: for line in f: dl = line.strip().split(" ") if len(line) > 3 and len(dl) == 2 and line[0] != '#': dl[0] = dl[0].strip() dl[1] = dl[1].strip() mods.append(dl) names.add(dl[0]) for mod in mods: if mod[0] in os.listdir(INSTALL_DIR): print("Skipping " + mod[0] + ", already up to date") else: print("Installing " + mod[0] + " from " + mod[1] + "...") download_obj = requests.get(mod[1], stream=True) with open(os.path.join(INSTALL_DIR, mod[0]), "wb") as write_file: shutil.copyfileobj(download_obj.raw, write_file) print("Done!") print("\nRemoving old versions...") for jar in os.listdir(INSTALL_DIR): if jar not in names and os.path.splitext(jar)[1] == ".jar": os.remove(os.path.join(INSTALL_DIR, jar)) print(f"Removing '{jar}'") print("\nFinished updating pack!") def find_updates(): print("Reading update file...") mods = set() with open('updates.txt') as f: for line in f: mod = line.strip().split() if len(line) > 3 and len(mod) == 2 and line[0] != '#': # run strip on each element mod = tuple(map(lambda x: x.strip(), mod)) mods.add(mod) print("Downloading new versions of all mods...") with open('downloads.txt', 'w') as f: f.write('# Format: \n') for mod in mods: resp = requests.get(mod[1]) hsh = hashlib.sha1(resp.content) f.write(f'{mod[0]} {hsh.hexdigest()} {resp.url}\n') if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} ") sys.exit(-1) elif sys.argv[1] == 'update': update() elif sys.argv[1] == 'find_updates': find_updates() else: print(f"Usage: {sys.argv[0]} ") sys.exit(-1)