1
0
mirror of https://github.com/Melon-Bread/RetroUFO synced 2024-11-25 00:38:33 -05:00
RetroUFO/RetroUFO.py

94 lines
2.2 KiB
Python
Raw Normal View History

2018-10-13 15:37:20 -04:00
#!/usr/bin/env python3
"""
Grabs the latest version of every libretro core from the build bot.
"""
__author__ = "Melon Bread"
__version__ = "0.1.0"
__license__ = "MIT"
2018-10-15 23:29:44 -04:00
import argparse
import os
import zipfile
from shutil import rmtree
from urllib.request import urlretrieve
URL = 'https://buildbot.libretro.com/nightly'
PLATFORM = 'linux'
ARCHITECTURE = 'x86_64'
CORE_LOCATION = '~/.config/retroarch/cores/'
2018-10-13 15:37:20 -04:00
2018-10-15 23:29:44 -04:00
def main(args):
""" Where the magic happens """
download_cores()
extract_cores()
2018-10-16 00:29:45 -04:00
if not args.keep:
clean_up()
def download_cores():
""" Downloads every core to the working directory """
cores = []
2018-10-15 23:21:33 -04:00
# Makes core directory to store archives if needed
if not os.path.isdir('cores'):
os.makedirs("cores")
2018-10-15 23:21:33 -04:00
# Downloads a list of all the cores available
urlretrieve('{}/{}/{}/latest/.index-extended'.format(URL, PLATFORM, ARCHITECTURE),
'cores/index')
print('Obtained core index!')
2018-10-15 23:21:33 -04:00
# Adds all the core's file names to a list
core_index = open('cores/index')
for line in core_index:
file_name = line.split(' ', 2)[2:]
cores.append(file_name[0].rstrip())
core_index.close()
cores.sort()
2018-10-15 23:21:33 -04:00
# Downloads each core from the list
for core in cores:
urlretrieve('{}/{}/{}/latest/{}'.format(URL, PLATFORM, ARCHITECTURE, core),
'cores/{}'.format(core))
print('Downloaded {} ...'.format(core))
2018-10-15 23:21:33 -04:00
# Removes index file for easier extraction
os.remove('cores/index')
def extract_cores():
""" Extracts each downloaded core to the RA core directory """
print('Extracting all cores to: {}'.format(CORE_LOCATION))
2018-10-15 23:21:33 -04:00
for file in os.listdir('cores'):
archive = zipfile.ZipFile('cores/{}'.format(file))
archive.extractall(CORE_LOCATION)
print('Extracted {} ...'.format(file))
pass
def clean_up():
""" Removes all the downloaded files """
rmtree('cores/')
2018-10-13 15:37:20 -04:00
pass
if __name__ == "__main__":
""" This is executed when run from the command line """
2018-10-15 23:29:44 -04:00
parser = argparse.ArgumentParser()
2018-10-16 00:29:45 -04:00
parser.add_argument('-k', '--keep', action='store_true',
help='Keeps downloaded core archives')
2018-10-16 00:29:45 -04:00
2018-10-15 23:29:44 -04:00
args = parser.parse_args()
main(args)
pass