[ADD] Added recomended methods

This commit is contained in:
vadzik 2024-05-20 10:59:17 +03:00
parent 5f55c6a156
commit f1fbde2b09
2 changed files with 21 additions and 9 deletions

View File

@ -4,6 +4,7 @@ from customtkinter import *
from CTkMenuBar import * from CTkMenuBar import *
from CTkMessagebox import * from CTkMessagebox import *
from typing import List from typing import List
import time
from app.utils_drive import * from app.utils_drive import *
@ -72,8 +73,12 @@ class App:
self.drive_tree.delete(*self.drive_tree.get_children()) self.drive_tree.delete(*self.drive_tree.get_children())
self.__load_drives() self.__load_drives()
for drive in self.drives: for drive in self.drives:
rec_method = "DoD 5220.22M"
if drive.disk_type == "HDD":
rec_method = "DoD 5220.22M,Гутмана"
drive.rec_method = rec_method
self.drive_tree.insert("", END, values=( self.drive_tree.insert("", END, values=(
drive.index, drive.name, drive.disk_type, self.__human_size(drive.capacity), drive.serial_num)) drive.index, drive.name, drive.disk_type, self.__human_size(drive.capacity), drive.serial_num, rec_method))
if self.selected is not None: if self.selected is not None:
items = self.drive_tree.get_children("") items = self.drive_tree.get_children("")
for item in items: for item in items:
@ -99,9 +104,10 @@ class App:
disks = di.get_disk_list(sorting=True) disks = di.get_disk_list(sorting=True)
self.drives = [] self.drives = []
for disk in disks: for disk in disks:
if "zram" not in disk.get_path() and disk.get_size() != 0: if "zram" not in disk.get_path() and "loop" not in disk.get_path() and disk.get_size() != 0:
self.drives.append(Drive(disk.get_model(), disk.get_path(), disk.get_type_str( self.drives.append(Drive(disk.get_model(), disk.get_path(), disk.get_type_str(
), disk.get_logical_block_size(), int(disk.get_size()*512), disk.get_serial_number(), disk.get_device_id())) ), disk.get_logical_block_size(), int(disk.get_size()*512), disk.get_serial_number(), disk.get_device_id()))
print(disk)
def __init_table(self): def __init_table(self):
@ -119,7 +125,7 @@ class App:
self.root.bind("<<TreeviewSelect>>", lambda event: self.root.focus_set()) self.root.bind("<<TreeviewSelect>>", lambda event: self.root.focus_set())
# определяем столбцы # определяем столбцы
columns = ("index", "name", "type", "capacity", "serial_num") columns = ("index", "name", "type", "capacity", "serial_num", "method")
self.drive_tree = ttk.Treeview( self.drive_tree = ttk.Treeview(
columns=columns, show="headings", selectmode="browse") columns=columns, show="headings", selectmode="browse")
self.drive_tree.pack(fill=BOTH, expand=1, side=TOP) self.drive_tree.pack(fill=BOTH, expand=1, side=TOP)
@ -130,12 +136,14 @@ class App:
self.drive_tree.heading("type", text="Тип", anchor=W, command=lambda: self.__sort(2, False)) self.drive_tree.heading("type", text="Тип", anchor=W, command=lambda: self.__sort(2, False))
self.drive_tree.heading("capacity", text="Объем", anchor=W, command=lambda: self.__sort(3, False)) self.drive_tree.heading("capacity", text="Объем", anchor=W, command=lambda: self.__sort(3, False))
self.drive_tree.heading("serial_num", text="Серийный номер", anchor=W, command=lambda: self.__sort(4, False)) self.drive_tree.heading("serial_num", text="Серийный номер", anchor=W, command=lambda: self.__sort(4, False))
self.drive_tree.heading("method", text="Рекомендуемый метод", anchor=W, command=lambda: self.__sort(5, False))
self.drive_tree.column("#1", stretch=NO, width=60, minwidth=60) self.drive_tree.column("#1", stretch=NO, width=60, minwidth=60)
self.drive_tree.column("#2", stretch=YES, width=150, minwidth=120) self.drive_tree.column("#2", stretch=YES, width=150, minwidth=120)
self.drive_tree.column("#3", stretch=NO, width=100, minwidth=100) self.drive_tree.column("#3", stretch=NO, width=100, minwidth=100)
self.drive_tree.column("#4", stretch=YES, width=150, minwidth=100) self.drive_tree.column("#4", stretch=NO, width=100, minwidth=50)
self.drive_tree.column("#5", stretch=YES, width=150, minwidth=100) self.drive_tree.column("#5", stretch=YES, width=150, minwidth=100)
self.drive_tree.column("#6", stretch=YES, width=150, minwidth=150)
self.drive_tree.bind("<<TreeviewSelect>>", self.__drive_selected) self.drive_tree.bind("<<TreeviewSelect>>", self.__drive_selected)
@ -151,6 +159,10 @@ class App:
item = self.drive_tree.item(selected_item) item = self.drive_tree.item(selected_item)
self.selected_id = selected_item self.selected_id = selected_item
self.selected = item["values"] self.selected = item["values"]
for drive in self.drives:
if drive.index == self.selected[0]:
method = drive.rec_method if "," not in drive.rec_method else drive.rec_method.split(",")[0]
self.method_box.set(method)
def __erase_drive(self): def __erase_drive(self):
method = self.method_box.get() method = self.method_box.get()
@ -162,7 +174,7 @@ class App:
self.erase_button.configure(state='disabled') self.erase_button.configure(state='disabled')
self.drive_tree.configure(selectmode="none") self.drive_tree.configure(selectmode="none")
thread = None self.thread = None
self.progressbar = CTkProgressBar(master=self.bottom_frame, orientation="horizontal", width=200) self.progressbar = CTkProgressBar(master=self.bottom_frame, orientation="horizontal", width=200)
self.progressbar.set(0) self.progressbar.set(0)
self.progressbar.pack(side=LEFT, padx=6, pady=6) self.progressbar.pack(side=LEFT, padx=6, pady=6)
@ -172,6 +184,7 @@ class App:
for drive in self.drives: for drive in self.drives:
if drive.index == self.selected[0]: if drive.index == self.selected[0]:
self.thread = drive.erase(self.method_box.get(), progressbar=self.progressbar, progress_label=self.progress_label, result=self.wipe_result) self.thread = drive.erase(self.method_box.get(), progressbar=self.progressbar, progress_label=self.progress_label, result=self.wipe_result)
self.start_time = time.time()
self.__check_thread() self.__check_thread()
def __check_thread(self): def __check_thread(self):
@ -183,6 +196,7 @@ class App:
self.drive_tree.configure(selectmode="browse") self.drive_tree.configure(selectmode="browse")
self.erase_button.configure(state='active') self.erase_button.configure(state='active')
if self.wipe_result["result"]: if self.wipe_result["result"]:
print(f"Время затраченное на стирание: {time.time()-self.start_time}")
CTkMessagebox(title="Успешно", message=f"{self.selected[1]} стёрт!") CTkMessagebox(title="Успешно", message=f"{self.selected[1]} стёрт!")
else: else:
CTkMessagebox(title="Ошибка", message=f"{self.wipe_result['err']}") CTkMessagebox(title="Ошибка", message=f"{self.wipe_result['err']}")

View File

@ -6,10 +6,6 @@ from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend from cryptography.hazmat.backends import default_backend
erasing_methods = { erasing_methods = {
"2 прохода": {
"num_passes": 2,
"data": [b"\x00", "random"]
},
"Случайные данные": { "Случайные данные": {
"num_passes": 1, "num_passes": 1,
"data": ["random"] "data": ["random"]
@ -62,6 +58,8 @@ class Drive():
serial_num: str serial_num: str
rec_method: str
def __init__(self, name, path, disk_type, block_size, capacity, dev_id, index): def __init__(self, name, path, disk_type, block_size, capacity, dev_id, index):
self.name = name self.name = name
if isinstance(disk_type, int): if isinstance(disk_type, int):