Generation

fix invalid codeSat, 24 Jun 2023

import os import subprocess import tkinter as tk from tkinter import filedialog, messagebox, colorchooser import time import threading ADB_PATH = "" # Путь к adb FASTBOOT_PATH = "" # Путь к fastboot CLOCK_UPDATE_INTERVAL = 1000 # Create the main window window = tk.Tk() def update_clock(): """Обновление циферблата часов на главном окне.""" current_time = time.strftime('%H:%M:%S') clock_label.config(text=current_time) clock_label.after(CLOCK_UPDATE_INTERVAL, update_clock) def select_adb_path(): """Выбор пути к adb.""" global ADB_PATH adb_path = filedialog.askopenfilename( title="Выберите файл adb", filetypes=[("adb", "adb.exe"), ("Все файлы", "*.*")] ) if adb_path: ADB_PATH = adb_path def select_fastboot_path(): """Выбор пути к fastboot.""" global FASTBOOT_PATH fastboot_path = filedialog.askopenfilename( title="Выберите файл fastboot", filetypes=[("fastboot", "fastboot.exe"), ("Все файлы", "*.*")] ) if fastboot_path: FASTBOOT_PATH = fastboot_path def ask_user(title, message): """Задает вопрос пользователю с указанным заголовком и сообщением.""" return messagebox.askyesnocancel(title, message) def show_success(message): """Отображает информационное сообщение об успешном выполнении операции.""" messagebox.showinfo("Успех", message) def show_error(message): """Отображает сообщение об ошибке.""" messagebox.showerror("Ошибка", message) def backup_android(): backup_path = filedialog.askdirectory(title="Выберите каталог для резервного места") if not backup_path: return backup_args = [] backup_options = { "Включить APK": "-apk", "Включить разделяемые данные": "-shared", "Включить системные приложения": "-system", "Включить кэш приложений": "-cache", "Включить пользовательские данные": "-all" } for option, arg in backup_options.items(): if ask_user(option, option + "?"): backup_args.append(arg) backup_file = os.path.join(backup_path, "backup.ab") _, ext = os.path.splitext(backup_file) if ext != '.ab': backup_file += '.ab' try: result = subprocess.run([ADB_PATH, 'backup'] + backup_args + ['-f', backup_file], capture_output=True) for output in result.stderr.splitlines(): if b'bytes in' in output: progress = int(output.decode('utf-8').split()[0]) file_size = os.stat(backup_file).st_size if os.path.exists(backup_file): tk.messagebox.showinfo("Успех", "Резервная копия Android успешно создана.") open_folder = tk.messagebox.askyesno("Открыть папку", "Хотите открыть папку с резервной копией?") if open_folder: subprocess.run(['explorer', backup_path]) else: tk.messagebox.showerror("Ошибка", "Ошибка при создании резервной копии Android.") except Exception as e: tk.messagebox.showerror("Ошибка", f"Произошла ошибка: {e}") def create_backup(): """Create backup file.""" backup_file = filedialog.askopenfilename(title="Выберите файл для восстановления", filetypes=[("Файл резервной копии Android", "*.ab")]) if not backup_file: return None restore_args = [] # Add restore options apk_restore = tk.messagebox.askyesnocancel("Восстановить APK?") if apk_restore: restore_args.append('-apk') shared_restore = tk.messagebox.askyesnocancel("Восстановить разделяемые данные?") if shared_restore: restore_args.append('-shared') system_restore = tk.messagebox.askyesnocancel("Восстановить системные приложения?") if system_restore: restore_args.append('-system') cache_restore = tk.messagebox.askyesnocancel("Восстановить кэш приложений?") if cache_restore: restore_args.append('-cache') data_restore = tk.messagebox.askyesnocancel("Восстановить пользовательские данные?") if data_restore: restore_args.append('-all') # Add additional restore options restore_type = tk.simpledialog.askstring("Тип восстановления", "Выберите тип восстановления:", default="полное восстановление", options=["полное восстановление", "частичное восстановление", "восстановление только определенных приложений"]) if restore_type: restore_args.append(f'-{restore_type.lower().replace(" ", "-")}') device = tk.simpledialog.askstring("Устройство", "Выберите устройство:", default="default") if device: restore_args.append(f'-s {device}') target_dir = filedialog.askdirectory(title="Выберите целевую директорию") if target_dir: restore_args.append(f'-dir {target_dir}') time_period = tk.simpledialog.askstring("Период времени", "Выберите период времени (в часах):", default="24") if time_period: restore_args.append(f'-period {time_period}') return backup_file, restore_args def restore_android(): """Restore Android backup.""" if not os.path.exists(ADB_PATH): messagebox.showerror("Ошибка", "Утилита 'adb.exe' не найдена на компьютере.") return backup_file, restore_args = create_backup() if not backup_file: return try: subprocess.call([ADB_PATH, 'restore'] + restore_args + [backup_file]) messagebox.showinfo("Успех", f"Резервная копия Android успешно восстановлена: {backup_file}") except Exception as e: messagebox.showerror("Ошибка", f"Не удалось восстановить резервную копию Android: {e}") def firmware_update(): """Обновление прошивки.""" firmware_file = filedialog.askopenfilename(title="Выберите файл прошивки", filetypes=[("Firmware", "*.zip")]) if not firmware_file: return try: result = subprocess.run([ADB_PATH, 'sideload', firmware_file], capture_output=True) if result.returncode == 0: show_success("Обновление прошивки успешно завершено.") else: show_error("Ошибка при обновлении прошивки.") except Exception as e: show_error(f"Произошла ошибка при обновлении прошивки: {e}") def install_twrp(): """Установка TWRP.""" twrp_file = filedialog.askopenfilename(title="Выберите файл TWRP", filetypes=[("TWRP Image", "*.img")]) if not twrp_file: return try: result = subprocess.run([FASTBOOT_PATH, 'flash', 'recovery', twrp_file], capture_output=True) if result.returncode == 0: show_success("Установка TWRP успешно завершена.") else: show_error("Ошибка при установке TWRP.") except Exception as e: show_error(f"Произошла ошибка при установке TWRP: {e}") def device_info(): """Отображение информации об устройстве.""" try: result = subprocess.run([ADB_PATH, 'devices'], capture_output=True, text=True) output = result.stdout.strip() if output: show_success("Подключено устройство:\n\n" + output) else: show_success("Нет подключенных устройств.") except Exception as e: show_error(f"Произошла ошибка при получении информации об устройстве: {e}") def choose_color(button): """Выбор цвета для кнопки.""" color = colorchooser.askcolor(title="Выберите цвет") if color: button.config(fg=color[1]) # Создание главного окна main_window = tk.Tk() main_window.title("Управление Android") main_window.geometry("500x300") # Создание метки с циферблатом часов clock_label = tk.Label(main_window, font=("Arial", 24)) clock_label.pack() # Создание кнопок adb_button = tk.Button(window, text="Выбрать путь к adb", command=select_adb_path) adb_button.pack() fastboot_button = tk.Button(window, text="Выбрать путь к fastboot", command=select_fastboot_path) fastboot_button.pack() backup_button = tk.Button(main_window, text="Резервное копирование", command=backup_android) backup_button.pack(pady=10) restore_button = tk.Button(main_window, text="Восстановление", command=restore_android) restore_button.pack(pady=10) update_button = tk.Button(main_window, text="Обновление прошивки", command=firmware_update) update_button.pack(pady=10) twrp_button = tk.Button(main_window, text="Установка TWRP", command=install_twrp) twrp_button.pack(pady=10) info_button = tk.Button(main_window, text="Информация об устройстве", command=device_info) info_button.pack(pady=10) color_button = tk.Menubutton(main_window, text="Выбор цвета") color_button.pack(pady=10) color_button.menu = tk.Menu(color_button, tearoff=0) color_button["menu"] = color_button.menu color_button.menu.add_command(label="Резервное копирование", command=lambda: choose_color(backup_button)) color_button.menu.add_command(label="Восстановление", command=lambda: choose_color(restore_button)) color_button.menu.add_command(label="Обновление прошивки", command=lambda: choose_color(update_button)) color_button.menu.add_command(label="Установка TWRP", command=lambda: choose_color(twrp_button)) color_button.menu.add_command(label="Информация об устройстве", command=lambda: choose_color(info_button)) # Обновление циферблата часов clock_label = tk.Label(window, font=("Arial", 14)) clock_label.pack() update_clock() # Запуск главного цикла окна main_window.mainloop()

Questions about programming?Chat with your personal AI assistant