From 4760700190abdc33900c3d6c80d9a653e72adc5e Mon Sep 17 00:00:00 2001 From: xpamych Date: Sun, 21 May 2023 21:56:14 +0300 Subject: [PATCH] =?UTF-8?q?=D1=87=D1=82=D0=BE-=D1=82=D0=BE=20=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D1=81=20=D0=BC=D0=BE=D0=B4=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20(=D0=BD=D0=B5=20=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D0=BB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hlna.py | 89 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 29 deletions(-) diff --git a/hlna.py b/hlna.py index 0e259a0..ec84cb2 100755 --- a/hlna.py +++ b/hlna.py @@ -6,15 +6,18 @@ import zlib import struct import logging import datetime +import requests import subprocess import yaml import click import colorama +import hlnaui + from pathlib import Path from rcon.source import Client -from PyQt6.QtWidgets import QApplication, QWidget, QMainWindow, QLabel, QPushButton +from PyQt6 import QtWidgets home_dir = Path.home() @@ -501,38 +504,75 @@ WantedBy=default.target @hlna.command(help='Скачивание и установка модов ') @click.argument('g', nargs=1) @click.option('-m', default='all', help="Название карты для запуска или all для запуска всех карт") -@click.option("-i/-u", default=True, help="-i установить моды, -u удалить моды") +@click.option("-i/-u", default=True, help="-i установить/обновить моды, -u удалить моды") @click.argument('id_mods_ark', nargs=-1) def mod(g, m, i, id_mods_ark): if g == "ark": + id_game_workshop = "346110" if not os.path.isdir(dir_mods_ark): create_dir(dir_mods_ark) - id_game_workshop = "346110" id_mods_ark = id_mods_ark[0].split(',') for id_mod in id_mods_ark: dir_ark_mods = f"{dir_mods_ark}/{id_mod}" - if i: - os.system(f"steamcmd +login anonymous +workshop_download_item {id_game_workshop} {id_mod} +quit") - modextract(id_mod, id_game_workshop, dir_ark_mods) + if not os.path.isfile(f"{dir_ark_mods}.mod"): + if i: + moddownload(id_mod, id_game_workshop, dir_ark_mods) + else: + os.system(f"rm -rf {dir_ark_mods}") + print_line(f"{dir_ark_mods} удалён") + os.system(f"rm {dir_mods_ark}/{id_mod}.mod") + print_line(f"{dir_mods_ark}/{id_mod}.mod удалён") + os.system(f"mv {dir_workshop_ark}/appworkshop_{id_game_workshop}.acf {dir_ark_mods}/appworkshop_{id_game_workshop}.acf") else: - os.system(f"rm -rf {dir_ark_mods}") - print_line(f"{dir_ark_mods} удалён") - os.system(f"rm {dir_mods_ark}/{id_mod}.mod") - print_line(f"{dir_mods_ark}/{id_mod}.mod удалён") - os.system(f"mv {dir_workshop_ark}/appworkshop_{id_game_workshop}.acf {dir_ark_mods}") + modupdate(g, m, id_mod, dir_ark_mods) -def modupdate(dir_ark_mods, id_game_workshop): - if os.path.exists(f"{dir_ark_mods}/appworkshop_{id_game_workshop}.acf"): - # тут будет проверка необходимости обновления +def modupdate(g, m, id_mod, dir_ark_mods): + if g == "ark": + if not os.path.isfile(os.path.join(dir_ark_mods, f"appworkshop_{id_mod}.acf")): + return + with open(os.path.join(dir_ark_mods, f"appworkshop_{id_mod}.acf"), "r") as f: + content = f.readlines() + content = "".join(content) + locale_date = "" + + for line in content.split("\n"): + if '\t"WorkshopItemsInstalled"' in line: + for line in content.split("\n"): + if f'\t\t"{id_mod}"' in line: + locale_date = line.split('"')[5] + if '}' in line: + break + break + + data = { + 'itemcount': 1, + 'publishedfileids[0]': id_mod + } + zapros = requests.post('http://api.steampowered.com/ISteamRemoteStorage/GetPublishedFileDetails/v1', data=data) + json_zapros = zapros.json() + steam_date = json_zapros['response']['publishedfiledetails'][0]['time_updated'] + + if steam_date and locale_date == steam_date: + return + + if steam_date and locale_date != steam_date: + print_line("хз") + +def modupdateall(): + for file in os.listdir(dir_mods_ark): + if os.path.isfile(os.path.join(dir_mods_ark, file)): + if file.endswith('.mod'): + print(file) -def modextract(id_mod, id_game_workshop, dir_ark_mods): +def moddownload(id_mod, id_game_workshop, dir_ark_mods): """Распаковывает файлы мода и создаёт .mod файл для него""" dir_steam_workshop = f"{dir_workshop_ark}/content/{id_game_workshop}/{id_mod}/WindowsNoEditor" dir_extract = dir_ark_mods if id_mod == "111111111": return + os.system(f"steamcmd +login anonymous +workshop_download_item {id_game_workshop} {id_mod} +quit") try: for curdir, subdirs, files in os.walk(os.path.join(dir_steam_workshop)): for file in files: @@ -860,27 +900,18 @@ create_dir(dir_unit) create_dir(dir_logs) -class MainWindow(QMainWindow): +class HlnaApp(QtWidgets.QMainWindow, hlnaui.Ui_MainWindow): def __init__(self): super().__init__() - - self.setWindowTitle("HLN-A") - button = QPushButton("Выход") - button.setCheckable(True) - button.clicked.connect(self.button_click) - self.setCentralWidget(button) - - def button_click(self): - exit() - + self.setupUi(self) def hlnag(): if len(sys.argv) > 1: hlna() else: - app = QApplication(sys.argv) - hlnag_gui_window = MainWindow() - hlnag_gui_window.show() + app = QtWidgets.QApplication(sys.argv) + window = HlnaApp() + window.show() sys.exit(app.exec())