async process + loggging

master
Jaka Perovšek 2024-10-05 20:31:22 +02:00
parent 24279524c7
commit a15c9bc220
3 changed files with 38 additions and 13 deletions

View File

@ -15,7 +15,7 @@ from PIL import Image
from mutagen.oggvorbis import OggVorbis
from distutils.dir_util import copy_tree
from pathlib import Path
from widgets import create_logger
def find_install_dir():
library_folders = Path("C:\Program Files (x86)\Steam\steamapps\libraryfolders.vdf")
@ -52,22 +52,24 @@ def update(utils_dir: str):
def download_and_extract(url_source, out_archive, utils_dir="./utils", subdir=""):
logging.info(f"Downloading {url_source}, this may take a while.")
logger = create_logger()
logger.info(f"Downloading {url_source}, this may take a while.")
download_via_requests(url_source, out_archive)
time.sleep(0.7)
logging.info("Download complete.")
logger.info("Download complete.")
logging.info(f"Extracting {out_archive}")
logger.info(f"Extracting {out_archive}")
extract = [f"{utils_dir}/7z/7za.exe", "x", out_archive, "-o" f"{utils_dir}{subdir}"]
subprocess.call(extract)
time.sleep(0.7)
logging.info("Removing " + out_archive)
logger.info("Removing " + out_archive)
os.remove(out_archive)
def download_ffmpeg(utils_dir: str, clean=False):
if clean:
rmfulldir(f"{utils_dir}/ffmpeg-" + get_ffmpeg_version() + "-full_build")

View File

@ -105,8 +105,6 @@ class OptionsWidget(QWidget):
layout.addWidget(self.console_widget)
layout.addStretch()
self.setSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Minimum)
# def update_label_description(self):
def update_screen_res(self):
@ -126,6 +124,12 @@ class OptionsWidget(QWidget):
"durability": self.cbox_durability.isChecked(),
"repair": self.cbox_repair.isChecked()}
def run_process(self, function, arguments):
logger = create_logger()
logger.info('Starting pooling')
p = multiprocessing.Pool()
p.apply_async(function, arguments)
# TODO: implement random local mod name
@ -355,7 +359,6 @@ class ValidationWidget(QWidget):
except yaml.scanner.ScannerError as e:
logging.error(f"Error applying yaml code:\n\n{str(e)}")
def load_tapes(self, tapes):
self.tapes = tapes
@ -366,7 +369,6 @@ class ValidationWidget(QWidget):
self.jump_spinbox.setValue(0)
self.jump_spinbox.setMaximum(i)
def save_tapes(self):
yaml_text = yaml.safe_dump(self.tapes, sort_keys=False, allow_unicode=True).replace("\n-", "\n\n-")
self.parent.editor_widget.editor.setPlainText(yaml_text)
@ -432,18 +434,18 @@ class UpdateWidget(QGroupBox):
self.git_checkbox.setChecked(exists)
return exists
class ConsoleWidget(QGroupBox):
def __init__(self, parent: QWidget):
super().__init__("Info")
self.parent = parent
self.console = QPlainTextEdit()
self.console = QPlainTextEdit(self)
layout = QVBoxLayout(self)
layout.addWidget(self.console)
class InstallWidget(QGroupBox):
def __init__(self, parent: QWidget):
super().__init__("Install steps")
@ -518,7 +520,9 @@ class InstallWidget(QGroupBox):
return exists
def download_ffmpeg_action(self):
download_ffmpeg(self.ffmpeg_dir.directory)
self.parent.run_process(download_ffmpeg, (self.ffmpeg_dir.directory, ))
#download_ffmpeg(self.ffmpeg_dir.directory)
self.does_ffmpeg_exist()
def are_songs_ready(self):

View File

@ -1,4 +1,4 @@
from PySide6.QtCore import QSize, Qt, Slot, QRect, QFileSystemWatcher, Signal, QTime
from PySide6.QtCore import QSize, Qt, Slot, QRect, QFileSystemWatcher, Signal, QTime, QObject
from PySide6.QtGui import QIcon, QAction, QShortcut, QKeySequence, QPainter, QColor, QTextFormat, QPixmap, QFontMetrics
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, QLabel, QVBoxLayout, QHBoxLayout, \
QGroupBox, QLineEdit, QCheckBox, QSpinBox, QPlainTextEdit, QSizePolicy, QGridLayout, QTextEdit, QScrollArea, QFrame, \
@ -7,12 +7,31 @@ from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget, Q
import webbrowser
import validators
import datetime
import logging
import os
import sys
import multiprocessing
from logging.handlers import QueueListener, QueueHandler
from pathlib import Path
from typing import Optional
def create_logger():
logger = multiprocessing.get_logger()
logger.setLevel(logging.INFO)
formatter = logging.Formatter('[%(asctime)s| %(levelname)s| %(processName)s] %(message)s')
handler = logging.StreamHandler()
handler.setFormatter(formatter)
# this bit will make sure you won't have
# duplicated messages in the output
if not len(logger.handlers):
logger.addHandler(handler)
return logger
class LabelWebLink(QLabel):
def __init__(self, text):
text = f"<a href=\"{text}\">{text.replace('https://', '')}</a>"