diff options
author | Dylan Jones <dylanjones2011@gmail.com> | 2019-01-29 20:51:21 -0500 |
---|---|---|
committer | Dylan Jones <dylanjones2011@gmail.com> | 2019-01-29 20:51:21 -0500 |
commit | c30078b28785902e9c95ad0d485eae8f1d3be187 (patch) | |
tree | cdbd051fb0c2b5d4f0fc991a03fee3dbbbb92a75 /update.py | |
parent | 46b47199faa816bbb7a4bdaae701c67564185cb1 (diff) | |
download | modpackman-c30078b28785902e9c95ad0d485eae8f1d3be187.tar.gz modpackman-c30078b28785902e9c95ad0d485eae8f1d3be187.zip |
autoupdate
Diffstat (limited to 'update.py')
-rwxr-xr-x | update.py | 106 |
1 files changed, 70 insertions, 36 deletions
@@ -1,41 +1,75 @@ -#!/bin/python3 - -from requests import get -from os import listdir, remove -from shutil import rmtree, copyfileobj +#!/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() -DOWNLOADS = [] -NAMES = set() -FILES = listdir(INSTALL_DIR) - -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() - DOWNLOADS.append(dl) - NAMES.add(dl[0]) - -print("Updating pack...") -for mod in DOWNLOADS: - if mod[0] in FILES: - print("Skipping " + mod[0] + ", already up-to-date") - else: - print("Installing " + mod[0] + " from " + mod[1] + "...") - download_obj = get(mod[1], stream=True) - with open(INSTALL_DIR + "/" + mod[0], "wb") as write_file: - copyfileobj(download_obj.raw, write_file) - print("Done!") - -print("\nRemoving old versions...") -for jar in FILES: - if jar not in NAMES and jar[-4:] == ".jar": - remove(INSTALL_DIR + "/" + jar) - print("Removing '" + jar + "'") - -print("\nFinished updating pack!") + +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: <jarname> <hex digested sha1> <direct download url>\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]} <update|find_updates>") + sys.exit(-1) +elif sys.argv[1] == 'update': + update() +elif sys.argv[1] == 'find_updates': + find_updates() +else: + print(f"Usage: {sys.argv[0]} <update|find_updates>") + sys.exit(-1) |