Improve first-run detection and settings initialization

- Enhance `settings_load()` function to handle missing settings and parameters
- Improve first-run detection in `check_first_run()` method
- Add more robust settings file validation
- Remove unused imports
- Simplify and clean up code comments
This commit is contained in:
2025-02-16 02:04:04 +03:00
parent f089edba8b
commit 625b6d5558

View File

@@ -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)