diff --git a/ComConfigCopy.py b/ComConfigCopy.py index 9d1f710..b40b80c 100644 --- a/ComConfigCopy.py +++ b/ComConfigCopy.py @@ -1,23 +1,19 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +# ------------------------------------------------------------ # Это программа для копирования конфигураций на коммутаторы -# Программа использует библиотеку PySerial для работы с последовательными портами -# Программа использует библиотеку PyQt5 для создания графического интерфейса -# Программа использует библиотеку PyQt5.QtWidgets для создания графического интерфейса -# Программа использует библиотеку PyQt5.QtCore для создания графического интерфейса -# Программа использует библиотеку PyQt5.QtGui для создания графического интерфейса +# ------------------------------------------------------------ - -# import argparse Использовался для получения аргументов из командной строки -# import platform Использовался для получения списка сетевых адаптеров -# import subprocess Использовался для получения списка сетевых адаптеров +# import argparse Использовался для получения аргументов из командной строки (не используется) +# import platform Использовался для получения списка сетевых адаптеров (не используется) +# import subprocess Использовался для получения списка сетевых адаптеров (не используется) +# import socket не используется import json import logging import os import re -import socket import sys import threading import time @@ -25,8 +21,6 @@ from getpass import getpass from logging.handlers import RotatingFileHandler import tkinter as tk from tkinter import ( - Tk, - Frame, StringVar, END, BOTH, @@ -82,21 +76,42 @@ def settings_load(): "block_size": 15, # Размер блока команд "prompt": ">", # Используется для определения приглашения } + + # Создаем папку Settings, если её нет + os.makedirs("Settings", exist_ok=True) + if not os.path.exists(SETTINGS_FILE): try: + # При первом запуске создаем новый файл настроек with open(SETTINGS_FILE, "w", encoding="utf-8") as f: json.dump(default_settings, f, indent=4, ensure_ascii=False) logging.info("Файл настроек создан с настройками по умолчанию.") + return default_settings except Exception as e: logging.error(f"Ошибка при создании файла настроек: {e}", exc_info=True) - return default_settings + return default_settings try: + # Пытаемся загрузить существующие настройки with open(SETTINGS_FILE, "r", encoding="utf-8") as f: settings = json.load(f) + + # Проверяем наличие всех необходимых параметров + settings_changed = False for key, value in default_settings.items(): if key not in settings: settings[key] = value + settings_changed = True + + # Если были добавлены новые параметры, сохраняем обновленные настройки + if settings_changed: + try: + with open(SETTINGS_FILE, "w", encoding="utf-8") as f: + json.dump(settings, f, indent=4, ensure_ascii=False) + logging.info("Файл настроек обновлен с новыми параметрами.") + except Exception as e: + logging.error(f"Ошибка при обновлении файла настроек: {e}", exc_info=True) + return settings except Exception as e: logging.error(f"Ошибка загрузки файла настроек: {e}", exc_info=True) @@ -535,8 +550,25 @@ class SerialAppGUI(tk.Tk): self.check_first_run() def check_first_run(self): - # Проверяем, существует ли папка Settings и файл settings.json - if not os.path.exists("Settings") or not os.path.exists(SETTINGS_FILE): + """Проверка первого запуска программы""" + show_settings = False + + # Проверяем существование файла настроек + if not os.path.exists(SETTINGS_FILE): + show_settings = True + else: + # Проверяем содержимое файла настроек + try: + with open(SETTINGS_FILE, "r", encoding="utf-8") as f: + settings = json.load(f) + # Если порт не настроен, считаем это первым запуском + if settings.get("port") is None: + show_settings = True + except Exception: + # Если файл поврежден или не читается, тоже показываем настройки + show_settings = True + + if show_settings: # Создаем папку Settings, если её нет os.makedirs("Settings", exist_ok=True)