From cf495ecbc062f35aebc4599d3182b4c523534349 Mon Sep 17 00:00:00 2001
From: Mikhail Tergoev <fidel@altlinux.org>
Date: Tue, 11 Mar 2025 19:48:44 +0300
Subject: [PATCH] updated logger and TODO-shki

---
 .gitignore                    |   4 +-
 modules/config_parser.py      |   2 +-
 modules/downloader.py         |   6 +-
 modules/env_var.py            |   4 +-
 modules/files_worker.py       |   4 +-
 modules/init_wine.py          |   2 +-
 modules/{log.py => logger.py} |   8 +--
 modules/source_fetcher.py     |   2 +-
 portproton.log                | 120 ++++++++++++++++++++++++++++++++++
 portproton.py                 |  46 +++++++------
 10 files changed, 163 insertions(+), 35 deletions(-)
 rename modules/{log.py => logger.py} (84%)
 create mode 100644 portproton.log

diff --git a/.gitignore b/.gitignore
index ce12201..04557e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
-*.log
+*.logger
 modules/__pycache__
 *.idea
-app.log
+app.logger
 .gigaide
\ No newline at end of file
diff --git a/modules/config_parser.py b/modules/config_parser.py
index f59a50f..784428d 100644
--- a/modules/config_parser.py
+++ b/modules/config_parser.py
@@ -1,5 +1,5 @@
 import json
-from .log import *
+from .logger import *
 from .env_var import *
 
 def var(var_name):
diff --git a/modules/downloader.py b/modules/downloader.py
index f489945..dab7df6 100755
--- a/modules/downloader.py
+++ b/modules/downloader.py
@@ -1,7 +1,7 @@
 import os
 import requests
 from tqdm import tqdm
-from .log import *
+from .logger import *
 from .files_worker import *
 
 def try_download(url, save_path=None):
@@ -16,6 +16,10 @@ def try_download(url, save_path=None):
         response = requests.get(url, stream=True)
         response.raise_for_status()  # Проверяем, что запрос успешен
 
+        # TODO: добавить проверку хэш-суммы из ссылки на файл
+        # TODO: резерв места
+        # TODO: проверка и докачка 3 попытки
+
         # Определяем имя файла, если save_path не указан, или путь это директория
         if save_path is None:
             save_path = tmp_path + "/" + os.path.basename(url)
diff --git a/modules/env_var.py b/modules/env_var.py
index 5044034..7e9e61f 100755
--- a/modules/env_var.py
+++ b/modules/env_var.py
@@ -1,5 +1,5 @@
 import os
-from .log import *
+from .logger import *
 
 # функции обработки переменных LINUX окружения
 def print_env_var(*var_name):
@@ -20,6 +20,8 @@ def set_env_var_force(var_name, value):
 def get_env_var(var_name):
     if var_name in os.environ and os.environ[var_name]:
         return os.environ[var_name]
+    elif var_name == "DEBUG":
+        ...
     else:
         log.critical(f"Переменная {var_name} не определена")
 
diff --git a/modules/files_worker.py b/modules/files_worker.py
index 276f847..3aa9e61 100755
--- a/modules/files_worker.py
+++ b/modules/files_worker.py
@@ -7,7 +7,7 @@ import tempfile
 
 from .env_var import *
 from .config_parser import *
-from .log import *
+from .logger import *
 
 # константы:
 tmp_path = tempfile.gettempdir() + "/portproton"
@@ -139,6 +139,8 @@ def unpack(archive_path, extract_to=None):
         elif not os.path.isdir(extract_to):
             create_new_dir(extract_to)
         log.info(f"unpacking file: {archive_path}")
+        
+        # TODO: резерв места
         with tarfile.open(archive_path, mode="r:*") as tar:
             tar.extractall(path=extract_to)
             full_path = os.path.realpath(extract_to)
diff --git a/modules/init_wine.py b/modules/init_wine.py
index 79e7f05..3b02903 100644
--- a/modules/init_wine.py
+++ b/modules/init_wine.py
@@ -2,7 +2,7 @@ import os
 import shutil
 import subprocess
 
-from .log import *
+from .logger import *
 from .env_var import *
 from .files_worker import *
 from .config_parser import *
diff --git a/modules/log.py b/modules/logger.py
similarity index 84%
rename from modules/log.py
rename to modules/logger.py
index beb9fef..9bdbd82 100755
--- a/modules/log.py
+++ b/modules/logger.py
@@ -22,7 +22,7 @@ class ColoredFormatter(logging.Formatter):
 
 
 log = logging.getLogger() # Настраиваем логирование
-def set_logging_level(level_string):
+def set_logging_level(level_string="INFO"):
     levels = {
         'DEBUG': logging.DEBUG,
         'INFO': logging.INFO,
@@ -36,15 +36,11 @@ def set_logging_level(level_string):
         print(f"Неизвестный уровень логирования: {level_string}. Устанавливается уровень WARNING.")
     return level
 
-
-log_level_input = 'DEBUG'  # Задаем уровень логирования через функцию
-log.setLevel(set_logging_level(log_level_input))
-
 handler = logging.StreamHandler()  # Создаем консольный обработчик
 handler.setFormatter(ColoredFormatter('%(levelname)s: %(message)s'))
 
 # TODO: добавить условие для управления переменой пути сохранения лога
-log_file_path = 'app.log'  # Это может быть переменная, установленная пользователем
+log_file_path = 'portproton.log'  # Это может быть переменная, установленная пользователем
 file_handler = logging.FileHandler(log_file_path)  # Создаем файловый обработчик
 file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s: %(message)s'))
 
diff --git a/modules/source_fetcher.py b/modules/source_fetcher.py
index a203562..78f2307 100644
--- a/modules/source_fetcher.py
+++ b/modules/source_fetcher.py
@@ -86,7 +86,7 @@ def source_list_downloader(source, short_name, output_file, use_github=True):
     except requests.exceptions.RequestException as e:
         log.error(f"Ошибка при получении данных из {source}: {str(e)}")
 
-def get_sources(args, mirror):
+def get_sources(args, mirror=True):
     os.makedirs(tmp_path, exist_ok=True)
     source_list_checker()
 
diff --git a/portproton.log b/portproton.log
new file mode 100644
index 0000000..581772e
--- /dev/null
+++ b/portproton.log
@@ -0,0 +1,120 @@
+2025-03-11 18:46:46,075 - INFO: рабочий каталог: /home/fidel/test-portproton
+2025-03-11 18:46:46,130 - DEBUG: принятые аргументы: []
+2025-03-11 18:48:56,575 - DEBUG: принятые аргументы: []
+2025-03-11 18:49:17,066 - DEBUG: принятые аргументы: []
+2025-03-11 18:50:16,535 - DEBUG: принятые аргументы: []
+2025-03-11 18:51:10,495 - INFO: TEST
+2025-03-11 18:51:22,134 - DEBUG: принятые аргументы: []
+2025-03-11 18:51:22,134 - INFO: TEST
+2025-03-11 18:52:18,243 - INFO: TEST
+2025-03-11 18:52:26,297 - INFO: TEST
+2025-03-11 18:54:41,762 - INFO: INFO
+2025-03-11 18:54:48,185 - INFO: INFO
+2025-03-11 18:54:48,185 - DEBUG: DEBUG
+2025-03-11 19:02:21,518 - CRITICAL: Переменная DEBUG не определена
+2025-03-11 19:04:35,945 - WARNING: Переменная DEBUG не определена
+2025-03-11 19:04:35,945 - INFO: INFO
+2025-03-11 19:04:54,288 - INFO: INFO
+2025-03-11 19:06:01,603 - INFO: INFO
+2025-03-11 19:06:22,400 - INFO: INFO
+2025-03-11 19:06:32,043 - INFO: INFO
+2025-03-11 19:06:42,873 - INFO: INFO
+2025-03-11 19:07:11,379 - INFO: INFO
+2025-03-11 19:07:30,165 - DEBUG: принятые аргументы: []
+2025-03-11 19:07:30,165 - INFO: INFO
+2025-03-11 19:07:43,147 - DEBUG: принятые аргументы: []
+2025-03-11 19:07:43,147 - INFO: INFO
+2025-03-11 19:07:55,624 - WARNING: Переменная DEBUG не определена
+2025-03-11 19:07:55,624 - INFO: INFO
+2025-03-11 19:10:07,740 - INFO: INFO
+2025-03-11 19:10:55,273 - INFO: INFO
+2025-03-11 19:11:33,201 - DEBUG: принятые аргументы: []
+2025-03-11 19:11:33,201 - INFO: INFO
+2025-03-11 19:14:20,323 - DEBUG: принятые аргументы: []
+2025-03-11 19:14:20,324 - INFO: INFO
+2025-03-11 19:14:22,387 - DEBUG: принятые аргументы: []
+2025-03-11 19:14:22,387 - INFO: INFO
+2025-03-11 19:14:55,020 - DEBUG: принятые аргументы: []
+2025-03-11 19:14:55,021 - INFO: INFO
+2025-03-11 19:15:45,706 - CRITICAL: Переменная DEBUG не определена
+2025-03-11 19:16:14,883 - INFO: INFO
+2025-03-11 19:16:18,910 - DEBUG: принятые аргументы: []
+2025-03-11 19:16:18,911 - INFO: INFO
+2025-03-11 19:16:29,755 - DEBUG: принятые аргументы: []
+2025-03-11 19:16:29,755 - INFO: INFO
+2025-03-11 19:16:33,178 - DEBUG: принятые аргументы: []
+2025-03-11 19:16:33,178 - INFO: INFO
+2025-03-11 19:16:36,677 - INFO: INFO
+2025-03-11 19:16:41,800 - INFO: INFO
+2025-03-11 19:16:50,838 - DEBUG: принятые аргументы: []
+2025-03-11 19:16:50,838 - INFO: INFO
+2025-03-11 19:17:58,653 - INFO: INFO
+2025-03-11 19:18:01,917 - DEBUG: принятые аргументы: []
+2025-03-11 19:18:01,917 - INFO: INFO
+2025-03-11 19:18:07,632 - INFO: INFO
+2025-03-11 19:18:11,506 - DEBUG: принятые аргументы: []
+2025-03-11 19:18:11,506 - INFO: INFO
+2025-03-11 19:18:42,258 - DEBUG: принятые аргументы: []
+2025-03-11 19:18:42,258 - INFO: INFO
+2025-03-11 19:18:42,258 - INFO: Файл /tmp/.private/fidel/portproton/proton-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:42,258 - INFO: Файл /tmp/.private/fidel/portproton/wine-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:42,258 - INFO: Файл /tmp/.private/fidel/portproton/Kron4ek.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:42,258 - INFO: Файл /tmp/.private/fidel/portproton/proton-cachyos.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:42,258 - INFO: Файл /tmp/.private/fidel/portproton/LG.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:42,258 - INFO: Файл /tmp/.private/fidel/portproton/LG_mirror.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:42,258 - DEBUG: Запрашиваемый каталог 'proton-cachyos-9.0-20250126-slr-x86_64_v3' найден в '/home/fidel/test-portproton/data/dist'.
+2025-03-11 19:18:53,047 - DEBUG: принятые аргументы: []
+2025-03-11 19:18:53,048 - INFO: INFO
+2025-03-11 19:18:53,048 - INFO: Файл /tmp/.private/fidel/portproton/proton-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:53,048 - INFO: Файл /tmp/.private/fidel/portproton/wine-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:53,048 - INFO: Файл /tmp/.private/fidel/portproton/Kron4ek.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:53,048 - INFO: Файл /tmp/.private/fidel/portproton/proton-cachyos.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:53,048 - INFO: Файл /tmp/.private/fidel/portproton/LG.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:53,048 - INFO: Файл /tmp/.private/fidel/portproton/LG_mirror.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:18:53,048 - DEBUG: Запрашиваемый каталог 'proton-cachyos-9.0-20250126-slr-x86_64_v3' найден в '/home/fidel/test-portproton/data/dist'.
+2025-03-11 19:20:16,112 - INFO: INFO
+2025-03-11 19:20:16,112 - INFO: Файл /tmp/.private/fidel/portproton/proton-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:16,112 - INFO: Файл /tmp/.private/fidel/portproton/wine-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:16,112 - INFO: Файл /tmp/.private/fidel/portproton/Kron4ek.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:16,112 - INFO: Файл /tmp/.private/fidel/portproton/proton-cachyos.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:16,112 - INFO: Файл /tmp/.private/fidel/portproton/LG.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:16,112 - INFO: Файл /tmp/.private/fidel/portproton/LG_mirror.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:23,556 - DEBUG: принятые аргументы: []
+2025-03-11 19:20:23,557 - INFO: INFO
+2025-03-11 19:20:23,557 - INFO: Файл /tmp/.private/fidel/portproton/proton-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:23,557 - INFO: Файл /tmp/.private/fidel/portproton/wine-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:23,557 - INFO: Файл /tmp/.private/fidel/portproton/Kron4ek.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:23,557 - INFO: Файл /tmp/.private/fidel/portproton/proton-cachyos.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:23,557 - INFO: Файл /tmp/.private/fidel/portproton/LG.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:23,557 - INFO: Файл /tmp/.private/fidel/portproton/LG_mirror.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:20:23,557 - DEBUG: Запрашиваемый каталог 'proton-cachyos-9.0-20250126-slr-x86_64_v3' найден в '/home/fidel/test-portproton/data/dist'.
+2025-03-11 19:20:51,540 - INFO: INFO
+2025-03-11 19:21:05,584 - INFO: INFO
+2025-03-11 19:21:05,584 - INFO: Файл /tmp/.private/fidel/portproton/proton-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:05,584 - INFO: Файл /tmp/.private/fidel/portproton/wine-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:05,584 - INFO: Файл /tmp/.private/fidel/portproton/Kron4ek.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:05,584 - INFO: Файл /tmp/.private/fidel/portproton/proton-cachyos.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:05,584 - INFO: Файл /tmp/.private/fidel/portproton/LG.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:05,584 - INFO: Файл /tmp/.private/fidel/portproton/LG_mirror.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:52,075 - INFO: INFO
+2025-03-11 19:21:52,075 - INFO: Файл /tmp/.private/fidel/portproton/proton-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:52,075 - INFO: Файл /tmp/.private/fidel/portproton/wine-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:52,075 - INFO: Файл /tmp/.private/fidel/portproton/Kron4ek.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:52,075 - INFO: Файл /tmp/.private/fidel/portproton/proton-cachyos.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:52,075 - INFO: Файл /tmp/.private/fidel/portproton/LG.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:52,075 - INFO: Файл /tmp/.private/fidel/portproton/LG_mirror.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:21:52,076 - CRITICAL: WINE не найден в файле /tmp/.private/fidel/portproton/LG_mirror.tmp. Завершение! Проверьте корректность переданного имени wine/proton.
+2025-03-11 19:22:23,176 - INFO: INFO
+2025-03-11 19:22:23,176 - INFO: Файл /tmp/.private/fidel/portproton/proton-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:22:23,176 - INFO: Файл /tmp/.private/fidel/portproton/wine-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:22:23,176 - INFO: Файл /tmp/.private/fidel/portproton/Kron4ek.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:22:23,176 - INFO: Файл /tmp/.private/fidel/portproton/proton-cachyos.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:22:23,176 - INFO: Файл /tmp/.private/fidel/portproton/LG.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:22:23,177 - INFO: Файл /tmp/.private/fidel/portproton/LG_mirror.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:30:31,377 - INFO: Файл /tmp/.private/fidel/portproton/proton-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:30:31,377 - INFO: Файл /tmp/.private/fidel/portproton/wine-ge-custom.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:30:31,377 - INFO: Файл /tmp/.private/fidel/portproton/Kron4ek.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:30:31,377 - INFO: Файл /tmp/.private/fidel/portproton/proton-cachyos.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:30:31,377 - INFO: Файл /tmp/.private/fidel/portproton/LG.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:30:31,377 - INFO: Файл /tmp/.private/fidel/portproton/LG_mirror.tmp существует и был обновлён менее 3 часов назад. Используем кэшированные данные.
+2025-03-11 19:30:31,378 - CRITICAL: list не найден в файле /tmp/.private/fidel/portproton/LG_mirror.tmp. Завершение! Проверьте корректность переданного имени wine/proton.
diff --git a/portproton.py b/portproton.py
index 8290535..dd50727 100755
--- a/portproton.py
+++ b/portproton.py
@@ -1,38 +1,42 @@
 #!/usr/bin/env python3
 import sys
 
-from modules.log import *
+from modules.logger import *
 from modules.files_worker import *
 from modules.downloader import *
 from modules.init_wine import *
 from modules.source_fetcher import *
-
-mirror = True # перенести в функцию как (arg, mirror=True)
-
-log.info(f"принятые аргументы: {sys.argv[1:]}")
+from modules.env_var import *
 
 if __name__ == "__main__":
+    if get_env_var("DEBUG") == "1":
+        log.setLevel(set_logging_level("DEBUG"))
+    else:
+        log.setLevel(set_logging_level("INFO"))
+    
+    log.debug(f"принятые аргументы: {sys.argv[1:]}")
     create_new_dir(dist_path, tmp_path, img_path, vulkan_path)
 
     if len(sys.argv) > 1:  # Проверяем, что есть хотя бы один аргумент (кроме имени скрипта)
         match sys.argv[1]:  # Игнорируем первый аргумент (имя скрипта)
             case "--get-wine": 
-                # без аргументов сохраняем список доступных в tmp_path/get_wine.tmp и выводим в терминал
-                # если есть аргумент (например WINE_LG_10-1) то обновляем и парсим tmp_path/get_wine.tmp с последующим скачиванием
-                get_sources(sys.argv[2:], mirror)
+                if sys.argv[2] == "list":
+                    get_sources("wine", "list")
+                else:
+                    get_sources("wine", sys.argv[3:])
             case "--get-dxvk":
-                # без аргументов сохраняем список доступных в tmp_path/get_dxvk.tmp и выводим в терминал
-                # если есть аргумент (например 2.5.3-31) то обновляем и парсим tmp_path/get_dxvk.tmp с последующим скачиванием
-                get_dxvk(sys.argv[2:])
+                if sys.argv[2] == "list":
+                    get_sources("dxvk", "list")
+                else:
+                    get_sources("dxvk", sys.argv[3:])
             case "--get-vkd3d":
-                # без аргументов сохраняем список доступных в tmp_path/get_dxvk.tmp и выводим в терминал
-                # если есть аргумент (например 1.1-4367) то обновляем и парсим tmp_path/get_dxvk.tmp с последующим скачиванием
-                get_vkd3d(sys.argv[2:])
-            case "--get-plugins":
-                # версия плагинов будет захардкожена, парсить ничего не надо
-                get_plugins(plugins_ver)
-            case "--get-libs":
-                # версия контейнера будет захардкожена, парсить ничего не надо
-                get_libs(libs_ver)
+                if sys.argv[2] == "list":
+                    get_sources("vkd3d", "list")
+                else:
+                    get_sources("vkd3d", sys.argv[3:])
+    
+    log.info("INFO")
 
-    init_wine("WINE_LG")
+    # init_wine("WINE_LG_9-2")
+    # get_sources(["proton-cachyos-9.0-20250126-slr-x86_64_v3"])
+    # get_sources([""])