59 lines
2.4 KiB
Python
59 lines
2.4 KiB
Python
"""
|
|
VPS: swap the CDN's Unity 6 avatar bundles for 2021.3.41f1-stamped copies, in place.
|
|
|
|
1. ConvertBundles2021.py /opt/campus/Data/CDN/AvatarBlobs -> /opt/campus/conv2021/out (already run)
|
|
2. this script:
|
|
- every converted file: original -> /opt/campus/AvatarBlobs.orig6000/<name>, converted -> AvatarBlobs/<name>
|
|
- UGC.json / ImportedUGC.json / CreatedUGC.json: UnityAssetHash / UnityAsset2Hash rewritten from hashes.json
|
|
(backups *.bak-conv2021 kept beside them)
|
|
- prints what it did; the caller restarts the service so CustomItemsCache reloads
|
|
Undo = move the .orig6000 files back and restore the .bak-conv2021 catalogs.
|
|
"""
|
|
import json, os, shutil, sys
|
|
|
|
BLOBS = "/opt/campus/Data/CDN/AvatarBlobs"
|
|
OUT = "/opt/campus/conv2021/out"
|
|
BACKUP = "/opt/campus/AvatarBlobs.orig6000"
|
|
ITEMS = "/opt/campus/Data/APIS/items"
|
|
|
|
hashes = json.load(open(os.path.join(OUT, "hashes.json")))
|
|
os.makedirs(BACKUP, exist_ok=True)
|
|
|
|
swapped = skipped = 0
|
|
for name in hashes:
|
|
src = os.path.join(OUT, name)
|
|
live = os.path.join(BLOBS, name)
|
|
if not os.path.exists(src):
|
|
skipped += 1
|
|
continue
|
|
if os.path.exists(live) and not os.path.exists(os.path.join(BACKUP, name)):
|
|
# Diamond Crown's originals were parked as .orig6000 beside the file by the one-item test.
|
|
beside = live + ".orig6000"
|
|
if os.path.exists(beside):
|
|
shutil.move(beside, os.path.join(BACKUP, name))
|
|
else:
|
|
shutil.move(live, os.path.join(BACKUP, name))
|
|
shutil.move(src, live)
|
|
swapped += 1
|
|
print(f"bundles: {swapped} swapped in, {skipped} had no converted copy; originals in {BACKUP}")
|
|
|
|
for cat in ("UGC.json", "ImportedUGC.json", "CreatedUGC.json"):
|
|
path = os.path.join(ITEMS, cat)
|
|
if not os.path.exists(path):
|
|
continue
|
|
root = json.load(open(path, encoding="utf-8"))
|
|
changed = 0
|
|
for it in root.get("Results", []):
|
|
for s in it.get("CurrentSaves") or []:
|
|
for ak, hk in (("UnityAsset", "UnityAssetHash"), ("UnityAsset2", "UnityAsset2Hash")):
|
|
a = s.get(ak)
|
|
if a and a in hashes and s.get(hk) != hashes[a]:
|
|
s[hk] = hashes[a]
|
|
changed += 1
|
|
if changed:
|
|
bak = path + ".bak-conv2021"
|
|
if not os.path.exists(bak):
|
|
shutil.copy2(path, bak)
|
|
json.dump(root, open(path, "w", encoding="utf-8"), separators=(",", ":"))
|
|
print(f"{cat}: {changed} hash(es) updated")
|