aboutsummaryrefslogtreecommitdiff
path: root/update.py
diff options
context:
space:
mode:
authorDylan Jones <dylanjones2011@gmail.com>2019-01-29 20:51:21 -0500
committerDylan Jones <dylanjones2011@gmail.com>2019-01-29 20:51:21 -0500
commitc30078b28785902e9c95ad0d485eae8f1d3be187 (patch)
treecdbd051fb0c2b5d4f0fc991a03fee3dbbbb92a75 /update.py
parent46b47199faa816bbb7a4bdaae701c67564185cb1 (diff)
downloadmodpackman-c30078b28785902e9c95ad0d485eae8f1d3be187.tar.gz
modpackman-c30078b28785902e9c95ad0d485eae8f1d3be187.zip
autoupdate
Diffstat (limited to 'update.py')
-rwxr-xr-xupdate.py106
1 files changed, 70 insertions, 36 deletions
diff --git a/update.py b/update.py
index 4e4dad1..40d7c21 100755
--- a/update.py
+++ b/update.py
@@ -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)