diff --git a/app/__init__.py b/app/__init__.py index 83d94d9..644f7bf 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -3,7 +3,7 @@ from tkinter import * from tkinter import ttk from typing import List -from app.utils_drive import Drive +from app.utils_drive import * class App: @@ -36,8 +36,9 @@ class App: main_menu.add_cascade(label="Справка", menu=help_menu) self.root.config(menu=main_menu) - + self.bottom_frame = ttk.Frame(borderwidth=1, relief=SOLID, padding=[3, 5]) + self.erase_button = ttk.Button( self.bottom_frame, text="Стереть диск", command=self.__erase_drive) self.erase_button.pack(side=RIGHT) @@ -46,6 +47,12 @@ class App: self.bottom_frame, text="Обновить", command=self.__update_drives) update_button.pack(side=RIGHT, padx=5) + self.method_box = ttk.Combobox(master=self.bottom_frame, values=list(erasing_methods.keys()), state="readonly") + self.method_box.pack(side=RIGHT, padx=6) + + method_label = ttk.Label(master=self.bottom_frame, text="Метод: ") + method_label.pack(padx=5, side=RIGHT) + self.bottom_frame.pack(side=BOTTOM, fill=X) def __update_drives(self): @@ -111,14 +118,15 @@ class App: self.selected = item["values"] def __erase_drive(self): - self.erase_button.configure(state='disabled') - thread = None - self.progressbar = ttk.Progressbar(master=self.bottom_frame, orient="horizontal", length=280) - self.progressbar.pack(side=LEFT, padx=6, pady=6) - for drive in self.drives: - if drive.index == self.selected[0]: - thread = drive.erase(self.progressbar) - self.__check_thread(thread) + if self.selected is not None: + self.erase_button.configure(state='disabled') + thread = None + self.progressbar = ttk.Progressbar(master=self.bottom_frame, orient="horizontal", length=250) + self.progressbar.pack(side=LEFT, padx=6, pady=6) + for drive in self.drives: + if drive.index == self.selected[0]: + thread = drive.erase(self.method_box.get(), progress=self.progressbar) + self.__check_thread(thread) def __check_thread(self, thread): if thread.is_alive(): diff --git a/app/utils_drive.py b/app/utils_drive.py index 46aa010..e78d7d2 100644 --- a/app/utils_drive.py +++ b/app/utils_drive.py @@ -1,5 +1,28 @@ from threading import * +erasing_methods = { + "2 прохода": { + "num_passes": 2, + "data": [b"\x00", "random"] + }, + "Случайные данные": { + "num_passes": 1, + "data": ["random"] + }, + "Гутмана": { + "num_passes": 35, + "data": [] + }, + "3 прохода": { + "num_passes": 3, + "data": [b"\x00", b"\xff", "random"] + }, + "7 проходов": { + "num_passes": 7, + "data": [b"\x00", b"\xff", "random", "random", b"\x00", b"\x01", "random"] + } +} + class Drive(): @@ -29,16 +52,27 @@ class Drive(): self.serial_num = dev_id self.index = index - def erase(self, progress=0) -> Thread: - t = Thread(target=self.__erasing, args=(progress,)) + def erase(self, method, progress=0) -> Thread: + if method == "2 прохода": + method_ = self.__erasing_2 + elif method == "Случайные данные": + method = self.__erasing_random + t = Thread(target=method_, args=(progress,)) t.start() return t - def __erasing(self, progress): + def __erasing_2(self, progress): len_write = 0 - with open(self.path, 'wb') as drive: + with open(self.path, "wb") as drive: while len_write < self.capacity: # drive.write(b"\x00"*self.block_size) len_write += self.block_size*64 - progress['value'] = int(len_write/self.capacity * 100) - + progress["value"] = int(len_write/self.capacity * 100) + + def __erasing_2(self, progress): + len_write = 0 + with open(self.path, "wb") as drive: + while len_write < self.capacity: + # drive.write(b"\x00"*self.block_size) + len_write += self.block_size*64 + progress["value"] = int(len_write/self.capacity * 100)