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:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user