Replaced dirs in deploy with variables instead of hardcoded ones. Separated the update and install parts in the gui. Started assembling the options functionality.

master
Jaka Perovšek 2024-10-03 15:36:09 +02:00
parent cc94838ad3
commit ad974b3573
2 changed files with 168 additions and 116 deletions

View File

@ -32,13 +32,13 @@ def rmfulldir(dirpath):
pass pass
def update(): def update(utils_dir: str):
logging.info(f"checking for updates via git pull.") logging.info(f"checking for updates via git pull.")
pull = ["utils/git/bin/git.exe", "pull"] pull = [f"{utils_dir}/git/bin/git.exe", "pull"]
subprocess.call(pull) subprocess.call(pull)
def download_and_extract(url_source, out_archive): def download_and_extract(url_source, out_archive, utils_dir="./utils", subdir=""):
logging.info(f"Downloading {url_source}, this may take a while.") logging.info(f"Downloading {url_source}, this may take a while.")
download_via_requests(url_source, out_archive) download_via_requests(url_source, out_archive)
@ -46,7 +46,7 @@ def download_and_extract(url_source, out_archive):
logging.info("Download complete.") logging.info("Download complete.")
logging.info(f"Extracting {out_archive}") logging.info(f"Extracting {out_archive}")
extract = ["utils/7z/7za.exe", "x", out_archive, "-o" "./utils/"] extract = [f"{utils_dir}/7z/7za.exe", "x", out_archive, "-o" f"{utils_dir}{subdir}"]
subprocess.call(extract) subprocess.call(extract)
time.sleep(0.7) time.sleep(0.7)
@ -54,35 +54,24 @@ def download_and_extract(url_source, out_archive):
os.remove(out_archive) os.remove(out_archive)
def download_ffmpeg(clean=False): def download_ffmpeg(utils_dir: str, clean=False):
if clean: if clean:
rmfulldir("./utils/ffmpeg-" + get_ffmpeg_version() + "-full_build") rmfulldir(f"{utils_dir}/ffmpeg-" + get_ffmpeg_version() + "-full_build")
url_ffmpeg_source = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z" url_ffmpeg_source = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z"
out_ffmpeg_archive = "./utils/ffmpeg-release-full.7z.exe" out_ffmpeg_archive = f"{utils_dir}/ffmpeg-release-full.7z.exe"
download_and_extract(url_ffmpeg_source, out_ffmpeg_archive) download_and_extract(url_ffmpeg_source, out_ffmpeg_archive, utils_dir)
def download_git(utils_dir: str, clean=False):
def download_git(clean=False):
if clean: if clean:
rmfulldir("./utils/PortableGit-2.33.0.2-64-bit") rmfulldir(f"{utils_dir}/git")
url_git_source = "https://github.com/git-for-windows/git/releases/download/" + \ url_git_source = ("https://github.com/git-for-windows/git/releases/download/"
"v2.33.0.windows.2/PortableGit-2.33.0.2-64-bit.7z.exe" "v2.46.2.windows.1/PortableGit-2.46.2-64-bit.7z.exe")
out_git_archive = "./utils/PortableGit-2.33.0.2-64-bit.7z" out_git_archive = f"{utils_dir}/PortableGit-2.46.2-64-bit.7z.exe"
download_via_requests(url_git_source, out_git_archive) download_and_extract(url_git_source, out_git_archive, utils_dir, subdir="/git")
time.sleep(0.7)
logging.info("Download complete.")
logging.info(f"Extracting {out_git_archive}")
extract = [out_git_archive, "-o" "./utils/git", "-y"]
subprocess.call(extract)
time.sleep(0.7)
logging.info("Removing " + out_git_archive)
os.remove(out_git_archive)
def get_ffmpeg_version(): def get_ffmpeg_version():
@ -95,15 +84,15 @@ def get_ffmpeg_version():
return ffmpeg_version return ffmpeg_version
def fetch_and_cut_song(tape, ffmpeg_version): def fetch_and_cut_song(utils_dir: str, build_dir: str, tape, ffmpeg_version):
python_executable = "./utils/python-3.9.7-embed-amd64/python.exe" python_executable = f"{utils_dir}/python-3.9.7-embed-amd64/python.exe"
script = "./fetch_song.py" script = "./fetch_song.py"
if type(tape["source"]) == str: if type(tape["source"]) == str:
shutil.copy(tape["source"], f"./build/music/{tape['identifier']}.ogg") shutil.copy(tape["source"], f"{build_dir}/music/{tape['identifier']}.ogg")
else: else:
fetch = [python_executable, script, tape["source"]["url"], "-x", "--audio-format", "vorbis", fetch = [python_executable, script, tape["source"]["url"], "-x", "--audio-format", "vorbis",
"--audio-quality", "0", "-o", f"./build/tmp_music/{tape['identifier']}.ogg"] "--audio-quality", "0", "-o", f"{build_dir}/tmp_music/{tape['identifier']}.ogg"]
# this is done in a separate python script because subprocess.call makes sure that the # this is done in a separate python script because subprocess.call makes sure that the
# download process is finished before trying to cut the song # download process is finished before trying to cut the song
@ -112,11 +101,11 @@ def fetch_and_cut_song(tape, ffmpeg_version):
time.sleep(0.1) time.sleep(0.1)
cut = ["./utils/ffmpeg-" + ffmpeg_version + "-full_build/bin/ffmpeg.exe", cut = [f"{utils_dir}/ffmpeg-" + ffmpeg_version + "-full_build/bin/ffmpeg.exe",
"-y", "-ss", f"{tape['source']['start']}", "-y", "-ss", f"{tape['source']['start']}",
"-i", f"./build/tmp_music/{tape['identifier']}.ogg", "-acodec", "libvorbis", "-i", f"{build_dir}/tmp_music/{tape['identifier']}.ogg", "-acodec", "libvorbis",
"-ac", "1", "-af", f"volume={tape['source']['volume']}dB", "-ac", "1", "-af", f"volume={tape['source']['volume']}dB",
f"./build/music/{tape['identifier']}.ogg"] f"{build_dir}/music/{tape['identifier']}.ogg"]
if tape["source"]["end"] != -1: if tape["source"]["end"] != -1:
cut = cut[:-7] + ["-to", f"{tape['source']['end']}"] + cut[-7:] cut = cut[:-7] + ["-to", f"{tape['source']['end']}"] + cut[-7:]
@ -128,10 +117,10 @@ def fetch_and_cut_song(tape, ffmpeg_version):
"or download the latest release version manually.") "or download the latest release version manually.")
sys.exit() sys.exit()
walkman = ["./utils/ffmpeg-" + ffmpeg_version + "-full_build/bin/ffmpeg.exe", walkman = [f"{utils_dir}/ffmpeg-" + ffmpeg_version + "-full_build/bin/ffmpeg.exe",
"-i", f"./build/music/{tape['identifier']}.ogg", "-i", f"{build_dir}/music/{tape['identifier']}.ogg",
"-af", f"highpass=f=300,lowpass=f=12000", "-af", f"highpass=f=300,lowpass=f=12000",
f"./build/music/{tape['identifier']}-walkman.ogg"] f"{build_dir}/music/{tape['identifier']}-walkman.ogg"]
try: try:
subprocess.call(walkman) subprocess.call(walkman)
@ -174,15 +163,13 @@ def assemble_png_images(tapes, outfile: str, resize=None):
new_im.save(f"./build/{outfile}.png") new_im.save(f"./build/{outfile}.png")
def prepare_music(data): def prepare_music(data, music_dir: str, build_dir: str):
try: try:
os.mkdir('./build/music/') os.mkdir(f'{music_dir}')
except FileExistsError: except FileExistsError:
pass pass
logging.info("reading ffmpeg version")
ffmpeg_version = get_ffmpeg_version() ffmpeg_version = get_ffmpeg_version()
logging.info(f"ffmpeg version is {ffmpeg_version}")
logging.info("downloading and cutting the songs") logging.info("downloading and cutting the songs")
for i, tape in enumerate(data): for i, tape in enumerate(data):
@ -193,25 +180,25 @@ def prepare_music(data):
logging.info(f"{i + 1}/{len(data)} Already exists: {tape['name']}") logging.info(f"{i + 1}/{len(data)} Already exists: {tape['name']}")
logging.info(f"removing temporary music folder") logging.info(f"removing temporary music folder")
rmfulldir('./build/tmp_music/') rmfulldir(f"{build_dir}/tmp_music/")
logging.info(f"copying the sound effects to build") logging.info(f"copying the sound effects to build")
copy_tree("./source/sound_effects", "./build/sound_effects") copy_tree("./source/sound_effects", f"{build_dir}/sound_effects")
def prepare_images(data, config): def prepare_images(data, build_dir:str):
logging.info(f"assembling covers and icons into png files") logging.info(f"assembling covers and icons into png files")
assemble_png_images(data, "covers") assemble_png_images(data, "covers")
assemble_png_images(data, "icons", resize=(64, 41)) assemble_png_images(data, "icons", resize=(64, 41))
assemble_png_images(data, "sprites", resize=(33, 21)) assemble_png_images(data, "sprites", resize=(33, 21))
logging.info(f"copying other images") logging.info(f"copying other images")
shutil.copy("./source/images/players_icons.png", "./build/players_icons.png") shutil.copy("./source/images/players_icons.png", f"{build_dir}/players_icons.png")
shutil.copy("./source/images/players_sprites.png", "./build/players_sprites.png") shutil.copy("./source/images/players_sprites.png", f"{build_dir}/players_sprites.png")
shutil.copy("./source/images/PreviewImage.png", "./build/PreviewImage.png") shutil.copy("./source/images/PreviewImage.png", f"{build_dir}/PreviewImage.png")
def build_xml_code(data, config): def build_xml_code(data, build_dir:str, config):
logging.info(f"calculate the value that lets you use the songs n-times") logging.info(f"calculate the value that lets you use the songs n-times")
song_lengths = [OggVorbis(f"./build/music/{tape['identifier']}.ogg").info.length song_lengths = [OggVorbis(f"./build/music/{tape['identifier']}.ogg").info.length
for tape in data] for tape in data]
@ -237,11 +224,11 @@ def build_xml_code(data, config):
template2 = j2env.get_template("./source/sunken_tapes_style_template.xml") template2 = j2env.get_template("./source/sunken_tapes_style_template.xml")
logging.info(f"rendering the xml files") logging.info(f"rendering the xml files")
with open("./build/filelist.xml", "w+", encoding="utf8") as output_file: with open(f"{build_dir}/filelist.xml", "w+", encoding="utf8") as output_file:
# render the template # render the template
output_file.write(template0.render(config=config, tapes=data)) output_file.write(template0.render(config=config, tapes=data))
with open(f"./build/{config['slug']}.xml", "w+", encoding="utf8") as output_file: with open(f"{build_dir}/{config['slug']}.xml", "w+", encoding="utf8") as output_file:
# render the template # render the template
output_file.write(template1.render(tapes=data, config=config, output_file.write(template1.render(tapes=data, config=config,
condition_delta=condition_delta, condition_delta=condition_delta,
@ -249,17 +236,17 @@ def build_xml_code(data, config):
song_lengths=song_lengths, song_lengths=song_lengths,
positions=positions)) positions=positions))
with open(f"./build/{config['slug']}_style.xml", "w+", encoding="utf8") as output_file: with open(f"{build_dir}/{config['slug']}_style.xml", "w+", encoding="utf8") as output_file:
# render the template # render the template
output_file.write(template2.render(tapes=data, config=config, positions=positions)) output_file.write(template2.render(tapes=data, config=config, positions=positions))
def deploy(config): def deploy(build_dir: str, install_dir: str, local_mod_name: str, config):
try: try:
os.mkdir('./build') os.mkdir(build_dir)
except FileExistsError: except FileExistsError:
logging.info(f"removing old XML files in ./build/:") logging.info(f"removing old XML files in ./build/:")
for f in Path('./build/').glob("*.xml"): for f in Path(build_dir).glob("*.xml"):
logging.info(f" {f}") logging.info(f" {f}")
os.remove(f) os.remove(f)
pass pass
@ -272,19 +259,19 @@ def deploy(config):
data = yaml.load(fr, Loader=yaml.SafeLoader) data = yaml.load(fr, Loader=yaml.SafeLoader)
prepare_music(data) prepare_music(data)
prepare_images(data, config) prepare_images(data, build_dir)
build_xml_code(data, config) build_xml_code(data, build_dir, config)
mod_directory = f"/LocalMods/{config['name']}/" mod_directory = f"{install_dir}/LocalMods/{local_mod_name}/"
logging.info(f"removing the old installed mod directory {config['installdir'] + mod_directory}") logging.info(f"removing the old installed mod directory {mod_directory}")
rmfulldir(config["installdir"] + mod_directory) rmfulldir(mod_directory)
logging.info(f"copying the new build") logging.info(f"copying the new build")
if Path(config["installdir"]).is_dir(): if Path(f"{install_dir}").is_dir():
copy_tree("./build/", config["installdir"] + mod_directory) copy_tree(build_dir, mod_directory)
else: else:
raise FileNotFoundError( raise FileNotFoundError(
f"{config['installdir']} does not exist. Set up the correct Barotrauma installation directory") f"{install_dir} does not exist. Set up the correct Barotrauma installation directory")
logging.info(f"Done!") logging.info(f"Done!")

View File

@ -5,7 +5,7 @@ import logging
import time import time
from tape_editor_widgets import * from tape_editor_widgets import *
from deploy import download_ffmpeg, get_ffmpeg_version from deploy import download_ffmpeg, get_ffmpeg_version, download_git
from PIL import ImageGrab from PIL import ImageGrab
@ -49,6 +49,7 @@ class OptionsWidget(QWidget):
self.detect_pushbutton = QPushButton("Detect screen resolution") self.detect_pushbutton = QPushButton("Detect screen resolution")
self.detect_pushbutton.clicked.connect(self.update_screen_res) self.detect_pushbutton.clicked.connect(self.update_screen_res)
self.update_screen_res()
self.resolution_hbox = QVBoxLayout() self.resolution_hbox = QVBoxLayout()
self.resolution_hbox.addWidget(self.width_spinbox) self.resolution_hbox.addWidget(self.width_spinbox)
@ -89,14 +90,17 @@ class OptionsWidget(QWidget):
self.options_gbox = QGroupBox("Other options") self.options_gbox = QGroupBox("Other options")
self.options_gbox.setLayout(self.options_hbox) self.options_gbox.setLayout(self.options_hbox)
# Update widget
self.update_widget = UpdateWidget()
# Install widget # Install widget
self.install = InstallWidget() self.install_widget = InstallWidget()
layout = QVBoxLayout() layout = QVBoxLayout()
layout.addWidget(self.name_gbox) layout.addWidget(self.name_gbox)
layout.addWidget(self.tape_covers_gbox) layout.addWidget(self.tape_covers_gbox)
layout.addWidget(self.options_gbox) layout.addWidget(self.options_gbox)
layout.addWidget(self.install) layout.addWidget(self.update_widget)
layout.addWidget(self.install_widget)
layout.addStretch() layout.addStretch()
self.setLayout(layout) self.setLayout(layout)
@ -109,6 +113,18 @@ class OptionsWidget(QWidget):
self.width_spinbox.setValue(img.size[0]) self.width_spinbox.setValue(img.size[0])
self.height_spinbox.setValue(img.size[1]) self.height_spinbox.setValue(img.size[1])
@property
def options(self):
return {"name": self.name_line_edit.text(),
"tape_covers": self.tape_covers_gbox.isChecked(),
"resoultion_x": self.width_spinbox.value(),
"resolution_y": self.height_spinbox.value(),
"buffs": self.cbox_buffs.isChecked(),
"debuffs": self.cbox_debuffs.isChecked(),
"walkmans": self.cbox_walkmans.isChecked(),
"durability": self.cbox_durability.isChecked(),
"repair": self.cbox_repair.isChecked()}
# TODO: implement random local mod name # TODO: implement random local mod name
@ -343,31 +359,32 @@ class ValidationWidget(QWidget):
scrollbar.setValue(tape_number * step) scrollbar.setValue(tape_number * step)
class InstallWidget(QWidget): class UpdateWidget(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.install_grid = QGridLayout()
hr_html_string = "<hr style=\"background-color:gray;\">" hr_html_string = "<hr style=\"background-color:gray;\">"
download_link = ("https://github.com/git-for-windows/git/releases/download/"
"v2.46.2.windows.1/PortableGit-2.46.2-64-bit.7z.exe")
self.ffmpeg_checkbox = QCheckBox() self.grid = QGridLayout()
self.ffmpeg_checkbox.setDisabled(True)
self.ffmpeg_label = QLabel("Download and unpack ffmpeg") self.git_checkbox = QCheckBox()
self.ffmpeg_label_link = QLabel("<a href=\"https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z\">" self.git_checkbox.setDisabled(True)
"gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z</a>") self.git_label = QLabel("Download and unpack git")
self.ffmpeg_label_link.setTextInteractionFlags(Qt.TextInteractionFlag.TextBrowserInteraction) self.git_label_link = QLabel(f"<a href=\"{download_link}\">"
self.ffmpeg_label_link.setTextInteractionFlags(Qt.TextInteractionFlag.LinksAccessibleByMouse) f"{download_link.replace('https://', '').replace('download/', 'download/<br>')}</a>")
self.ffmpeg_label_link.setOpenExternalLinks(True) self.git_label_link.setTextInteractionFlags(Qt.TextInteractionFlag.TextBrowserInteraction)
self.ffmpeg_dir = DirWidget("./utils") self.git_label_link.setTextInteractionFlags(Qt.TextInteractionFlag.LinksAccessibleByMouse)
self.ffmpeg_pushbutton = QPushButton("Download") self.git_label_link.setOpenExternalLinks(True)
self.ffmpeg_pushbutton.clicked.connect(self.download_ffmpeg_action) self.git_pushbutton = QPushButton("Download")
self.ffmpeg_info_label = QLabel('ffmpeg downloaded. You can now deploy Sunken Tapes.') self.git_pushbutton.clicked.connect(self.download_git_action)
self.install_grid.addWidget(self.ffmpeg_checkbox, 0, 0) self.git_dir = DirWidget("./utils")
self.install_grid.addWidget(self.ffmpeg_label, 0, 1) self.grid.addWidget(self.git_checkbox, 0, 0)
self.install_grid.addWidget(self.ffmpeg_label_link, 1, 1) self.grid.addWidget(self.git_label, 0, 1)
self.install_grid.addWidget(self.ffmpeg_dir, 2, 1) self.grid.addWidget(self.git_pushbutton, 0, 2)
self.install_grid.addWidget(self.ffmpeg_pushbutton, 0, 2) self.grid.addWidget(self.git_label_link, 1, 1)
self.install_grid.addWidget(QLabel(hr_html_string), 4, 0, 1, 3) self.grid.addWidget(self.git_dir, 2, 1)
self.git_update_checkbox = QCheckBox() self.git_update_checkbox = QCheckBox()
self.git_update_checkbox.setDisabled(True) self.git_update_checkbox.setDisabled(True)
@ -378,65 +395,113 @@ class InstallWidget(QWidget):
self.git_update_label_link.setTextInteractionFlags(Qt.TextInteractionFlag.LinksAccessibleByMouse) self.git_update_label_link.setTextInteractionFlags(Qt.TextInteractionFlag.LinksAccessibleByMouse)
self.git_update_label_link.setOpenExternalLinks(True) self.git_update_label_link.setOpenExternalLinks(True)
self.git_update_pushbutton = QPushButton("Update") self.git_update_pushbutton = QPushButton("Update")
self.install_grid.addWidget(self.git_update_checkbox, 10, 0) self.grid.addWidget(self.git_update_checkbox, 10, 0)
self.install_grid.addWidget(self.git_update_label, 10, 1) self.grid.addWidget(self.git_update_label, 10, 1)
self.install_grid.addWidget(self.git_update_label_link, 11, 1) self.grid.addWidget(self.git_update_label_link, 11, 1)
self.install_grid.addWidget(self.git_update_pushbutton, 10, 2) self.grid.addWidget(self.git_update_pushbutton, 10, 2)
self.install_grid.addWidget(QLabel(hr_html_string), 12, 0, 1, 3) self.grid.addWidget(QLabel(hr_html_string), 12, 0, 1, 3)
self.gbox = QGroupBox("Update")
self.gbox.setLayout(self.grid)
layout = QHBoxLayout()
layout.addWidget(self.gbox)
layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(layout)
self.does_git_exist()
def download_git_action(self):
download_git(self.git_dir.directory)
def does_git_exist(self):
executable_path = Path("git/bin/git.exe")
if (self.git_dir.directory / executable_path).exists():
exists = True
else:
exists = False
self.git_pushbutton.setEnabled(not exists)
self.git_checkbox.setChecked(exists)
return exists
class InstallWidget(QWidget):
def __init__(self):
super().__init__()
self.grid = QGridLayout()
hr_html_string = "<hr style=\"background-color:gray;\">"
download_link = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z"
self.ffmpeg_checkbox = QCheckBox()
self.ffmpeg_checkbox.setDisabled(True)
self.ffmpeg_label = QLabel("Download and unpack ffmpeg")
self.ffmpeg_label_link = QLabel(f"<a href=\"{download_link}\">"
f"{download_link.replace('https://', '')}</a>")
self.ffmpeg_label_link.setTextInteractionFlags(Qt.TextInteractionFlag.TextBrowserInteraction)
self.ffmpeg_label_link.setTextInteractionFlags(Qt.TextInteractionFlag.LinksAccessibleByMouse)
self.ffmpeg_label_link.setOpenExternalLinks(True)
self.ffmpeg_pushbutton = QPushButton("Download")
self.ffmpeg_pushbutton.clicked.connect(self.download_ffmpeg_action)
self.ffmpeg_dir = DirWidget("./utils")
self.grid.addWidget(self.ffmpeg_checkbox, 0, 0)
self.grid.addWidget(self.ffmpeg_label, 0, 1)
self.grid.addWidget(self.ffmpeg_pushbutton, 0, 2)
self.grid.addWidget(self.ffmpeg_label_link, 1, 1)
self.grid.addWidget(self.ffmpeg_dir, 2, 1)
self.grid.addWidget(QLabel(hr_html_string), 9, 0, 1, 3)
self.songs_download_checkbox = QCheckBox() self.songs_download_checkbox = QCheckBox()
self.songs_download_checkbox.setDisabled(True) self.songs_download_checkbox.setDisabled(True)
self.songs_download_label = QLabel("Download songs and process them") self.songs_download_label = QLabel("Download songs and process them")
self.songs_download_dir = DirWidget("./build/music") self.songs_download_dir = DirWidget("./build/music")
self.songs_download_pushbutton = QPushButton("Download") self.songs_download_pushbutton = QPushButton("Download")
self.install_grid.addWidget(self.songs_download_checkbox, 20, 0) self.grid.addWidget(self.songs_download_checkbox, 20, 0)
self.install_grid.addWidget(self.songs_download_label, 20, 1) self.grid.addWidget(self.songs_download_label, 20, 1)
self.install_grid.addWidget(self.songs_download_pushbutton, 20, 2) self.grid.addWidget(self.songs_download_pushbutton, 20, 2)
self.install_grid.addWidget(self.songs_download_dir, 21, 1) self.grid.addWidget(self.songs_download_dir, 21, 1)
self.install_grid.addWidget(QLabel(hr_html_string), 22, 0, 1, 3) self.grid.addWidget(QLabel(hr_html_string), 22, 0, 1, 3)
self.compile_checkbox = QCheckBox() self.compile_checkbox = QCheckBox()
self.compile_checkbox.setDisabled(True) self.compile_checkbox.setDisabled(True)
self.compile_label = QLabel("Compile mod according to the settings") self.compile_label = QLabel("Compile mod according to the settings")
self.compile_dir = DirWidget("./build") self.compile_dir = DirWidget("./build")
self.compile_pushbutton = QPushButton("Compile") self.compile_pushbutton = QPushButton("Compile")
self.install_grid.addWidget(self.compile_checkbox, 30, 0) self.grid.addWidget(self.compile_checkbox, 30, 0)
self.install_grid.addWidget(self.compile_label, 30, 1) self.grid.addWidget(self.compile_label, 30, 1)
self.install_grid.addWidget(self.compile_pushbutton, 30, 2) self.grid.addWidget(self.compile_pushbutton, 30, 2)
self.install_grid.addWidget(self.compile_dir, 31, 1) self.grid.addWidget(self.compile_dir, 31, 1)
self.install_grid.addWidget(QLabel(hr_html_string), 32, 0, 1, 3) self.grid.addWidget(QLabel(hr_html_string), 32, 0, 1, 3)
self.install_checkbox = QCheckBox() self.install_checkbox = QCheckBox()
self.install_checkbox.setDisabled(True) self.install_checkbox.setDisabled(True)
self.install_label = QLabel("Copy the files to the install directory") self.install_label = QLabel("Copy the files to the install directory")
self.install_dir = DirWidget() self.install_dir = DirWidget()
self.install_pushbutton = QPushButton("Install") self.install_pushbutton = QPushButton("Install")
self.install_grid.addWidget(self.install_checkbox, 40, 0) self.grid.addWidget(self.install_checkbox, 40, 0)
self.install_grid.addWidget(self.install_label, 40, 1) self.grid.addWidget(self.install_label, 40, 1)
self.install_grid.addWidget(self.install_pushbutton, 40, 2) self.grid.addWidget(self.install_pushbutton, 40, 2)
self.install_grid.addWidget(self.install_dir, 41, 1) self.grid.addWidget(self.install_dir, 41, 1)
self.install_grid.addWidget(QLabel(hr_html_string), 42, 0, 1, 3) self.grid.addWidget(QLabel(hr_html_string), 42, 0, 1, 3)
self.install_grid.setRowStretch(50, 20) self.grid.setRowStretch(50, 20)
self.install_gbox = QGroupBox("Install steps") self.gbox = QGroupBox("Install steps")
self.install_gbox.setLayout(self.install_grid) self.gbox.setLayout(self.grid)
layout = QHBoxLayout() layout = QHBoxLayout()
layout.addWidget(self.install_gbox) layout.addWidget(self.gbox)
layout.setContentsMargins(0, 0, 0, 0) layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(layout) self.setLayout(layout)
self.does_ffmpeg_exists() self.does_ffmpeg_exist()
def does_ffmpeg_exists(self): def does_ffmpeg_exist(self):
if Path("./utils/ffmpeg-" + get_ffmpeg_version() + "-full_build/bin/ffmpeg.exe").exists(): executable_path = Path("ffmpeg-" + get_ffmpeg_version() + "-full_build/bin/ffmpeg.exe")
self.install_grid.addWidget(self.ffmpeg_info_label, 3, 0, 1, 3) if (self.ffmpeg_dir.directory / executable_path).exists():
self.ffmpeg_info_label.show()
exists = True exists = True
else: else:
self.install_grid.removeWidget(self.ffmpeg_info_label)
self.ffmpeg_info_label.hide()
exists = False exists = False
self.ffmpeg_pushbutton.setEnabled(not exists) self.ffmpeg_pushbutton.setEnabled(not exists)
@ -445,8 +510,8 @@ class InstallWidget(QWidget):
return exists return exists
def download_ffmpeg_action(self): def download_ffmpeg_action(self):
download_ffmpeg() download_ffmpeg(self.ffmpeg_dir.directory)
self.does_ffmpeg_exists() self.does_ffmpeg_exist()
class MainWidget(QWidget): class MainWidget(QWidget):