azalea/codegen/lib/download.py

92 lines
3.6 KiB
Python
Raw Normal View History

2022-05-27 06:11:42 +00:00
from lib.utils import get_dir_location
2022-05-25 01:28:08 +00:00
from .mappings import Mappings
2022-05-25 00:50:19 +00:00
import requests
import json
import os
2022-05-25 01:28:08 +00:00
# make sure the downloads directory exists
2022-05-27 06:11:42 +00:00
if not os.path.exists(get_dir_location('downloads')):
os.mkdir(get_dir_location('downloads'))
2022-05-25 00:50:19 +00:00
2022-05-25 01:28:08 +00:00
def get_burger():
2022-05-27 06:11:42 +00:00
if not os.path.exists(get_dir_location('downloads/Burger')):
2022-05-25 01:28:08 +00:00
print('\033[92mDownloading Burger...\033[m')
os.system(
2022-05-27 06:11:42 +00:00
f'cd {get_dir_location("downloads")} && git clone https://github.com/pokechu22/Burger && cd Burger && git pull')
2022-05-25 01:28:08 +00:00
print('\033[92mInstalling dependencies...\033[m')
os.system('cd downloads/Burger && pip install six jawa')
2022-05-25 00:50:19 +00:00
def get_version_manifest():
2022-05-27 06:11:42 +00:00
if not os.path.exists(get_dir_location(f'downloads/version_manifest.json')):
2022-05-25 00:50:19 +00:00
print(
f'\033[92mDownloading version manifest...\033[m')
version_manifest_data = requests.get(
'https://launchermeta.mojang.com/mc/game/version_manifest.json').json()
2022-05-27 06:11:42 +00:00
with open(get_dir_location(f'downloads/version_manifest.json'), 'w') as f:
2022-05-25 00:50:19 +00:00
json.dump(version_manifest_data, f)
else:
2022-05-27 06:11:42 +00:00
with open(get_dir_location(f'downloads/version_manifest.json'), 'r') as f:
2022-05-25 00:50:19 +00:00
version_manifest_data = json.load(f)
return version_manifest_data
def get_version_data(version_id: str):
2022-05-27 06:11:42 +00:00
if not os.path.exists(get_dir_location(f'downloads/{version_id}.json')):
2022-05-25 00:50:19 +00:00
version_manifest_data = get_version_manifest()
print(
f'\033[92mGetting data for \033[1m{version_id}..\033[m')
2022-05-26 01:09:48 +00:00
try:
package_url = next(
filter(lambda v: v['id'] == version_id, version_manifest_data['versions']))['url']
except StopIteration:
raise ValueError(
f'No version with id {version_id} found. Maybe delete downloads/version_manifest.json and try again?')
2022-05-25 00:50:19 +00:00
package_data = requests.get(package_url).json()
2022-05-27 06:11:42 +00:00
with open(get_dir_location(f'downloads/{version_id}.json'), 'w') as f:
2022-05-25 00:50:19 +00:00
json.dump(package_data, f)
else:
2022-05-27 06:11:42 +00:00
with open(get_dir_location(f'downloads/{version_id}.json'), 'r') as f:
2022-05-25 00:50:19 +00:00
package_data = json.load(f)
return package_data
def get_client_jar(version_id: str):
2022-05-27 06:11:42 +00:00
if not os.path.exists(get_dir_location(f'downloads/client-{version_id}.jar')):
2022-05-25 00:50:19 +00:00
package_data = get_version_data(version_id)
print('\033[92mDownloading client jar...\033[m')
client_jar_url = package_data['downloads']['client']['url']
2022-05-27 06:11:42 +00:00
with open(get_dir_location(f'downloads/client-{version_id}.jar'), 'wb') as f:
2022-05-25 00:50:19 +00:00
f.write(requests.get(client_jar_url).content)
def get_burger_data_for_version(version_id: str):
2022-05-27 06:11:42 +00:00
if not os.path.exists(get_dir_location(f'downloads/burger-{version_id}.json')):
2022-05-25 01:28:08 +00:00
get_burger()
2022-05-25 00:50:19 +00:00
get_client_jar(version_id)
os.system(
2022-05-27 06:11:42 +00:00
f'cd {get_dir_location("downloads/Burger")} && python munch.py ../client-{version_id}.jar --output ../burger-{version_id}.json'
2022-05-25 00:50:19 +00:00
)
2022-05-27 06:11:42 +00:00
with open(get_dir_location(f'downloads/burger-{version_id}.json'), 'r') as f:
2022-05-25 00:50:19 +00:00
return json.load(f)
def get_mappings_for_version(version_id: str):
2022-05-27 06:11:42 +00:00
if not os.path.exists(get_dir_location(f'downloads/mappings-{version_id}.txt')):
2022-05-25 00:50:19 +00:00
package_data = get_version_data(version_id)
client_mappings_url = package_data['downloads']['client_mappings']['url']
mappings_text = requests.get(client_mappings_url).text
2022-05-27 06:11:42 +00:00
with open(get_dir_location(f'downloads/mappings-{version_id}.txt'), 'w') as f:
2022-05-25 00:50:19 +00:00
f.write(mappings_text)
else:
2022-05-27 06:11:42 +00:00
with open(get_dir_location(f'downloads/mappings-{version_id}.txt'), 'r') as f:
2022-05-25 00:50:19 +00:00
mappings_text = f.read()
return Mappings.parse(mappings_text)