[ADD] New methods of disk wipe
This commit is contained in:
parent
e270f30b1c
commit
938a1ea71d
@ -3,7 +3,7 @@ from tkinter import *
|
|||||||
from tkinter import ttk
|
from tkinter import ttk
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from app.utils_drive import Drive
|
from app.utils_drive import *
|
||||||
|
|
||||||
|
|
||||||
class App:
|
class App:
|
||||||
@ -36,8 +36,9 @@ class App:
|
|||||||
|
|
||||||
main_menu.add_cascade(label="Справка", menu=help_menu)
|
main_menu.add_cascade(label="Справка", menu=help_menu)
|
||||||
self.root.config(menu=main_menu)
|
self.root.config(menu=main_menu)
|
||||||
|
|
||||||
self.bottom_frame = ttk.Frame(borderwidth=1, relief=SOLID, padding=[3, 5])
|
self.bottom_frame = ttk.Frame(borderwidth=1, relief=SOLID, padding=[3, 5])
|
||||||
|
|
||||||
self.erase_button = ttk.Button(
|
self.erase_button = ttk.Button(
|
||||||
self.bottom_frame, text="Стереть диск", command=self.__erase_drive)
|
self.bottom_frame, text="Стереть диск", command=self.__erase_drive)
|
||||||
self.erase_button.pack(side=RIGHT)
|
self.erase_button.pack(side=RIGHT)
|
||||||
@ -46,6 +47,12 @@ class App:
|
|||||||
self.bottom_frame, text="Обновить", command=self.__update_drives)
|
self.bottom_frame, text="Обновить", command=self.__update_drives)
|
||||||
update_button.pack(side=RIGHT, padx=5)
|
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)
|
self.bottom_frame.pack(side=BOTTOM, fill=X)
|
||||||
|
|
||||||
def __update_drives(self):
|
def __update_drives(self):
|
||||||
@ -111,14 +118,15 @@ class App:
|
|||||||
self.selected = item["values"]
|
self.selected = item["values"]
|
||||||
|
|
||||||
def __erase_drive(self):
|
def __erase_drive(self):
|
||||||
self.erase_button.configure(state='disabled')
|
if self.selected is not None:
|
||||||
thread = None
|
self.erase_button.configure(state='disabled')
|
||||||
self.progressbar = ttk.Progressbar(master=self.bottom_frame, orient="horizontal", length=280)
|
thread = None
|
||||||
self.progressbar.pack(side=LEFT, padx=6, pady=6)
|
self.progressbar = ttk.Progressbar(master=self.bottom_frame, orient="horizontal", length=250)
|
||||||
for drive in self.drives:
|
self.progressbar.pack(side=LEFT, padx=6, pady=6)
|
||||||
if drive.index == self.selected[0]:
|
for drive in self.drives:
|
||||||
thread = drive.erase(self.progressbar)
|
if drive.index == self.selected[0]:
|
||||||
self.__check_thread(thread)
|
thread = drive.erase(self.method_box.get(), progress=self.progressbar)
|
||||||
|
self.__check_thread(thread)
|
||||||
|
|
||||||
def __check_thread(self, thread):
|
def __check_thread(self, thread):
|
||||||
if thread.is_alive():
|
if thread.is_alive():
|
||||||
|
|||||||
@ -1,5 +1,28 @@
|
|||||||
from threading import *
|
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():
|
class Drive():
|
||||||
|
|
||||||
@ -29,16 +52,27 @@ class Drive():
|
|||||||
self.serial_num = dev_id
|
self.serial_num = dev_id
|
||||||
self.index = index
|
self.index = index
|
||||||
|
|
||||||
def erase(self, progress=0) -> Thread:
|
def erase(self, method, progress=0) -> Thread:
|
||||||
t = Thread(target=self.__erasing, args=(progress,))
|
if method == "2 прохода":
|
||||||
|
method_ = self.__erasing_2
|
||||||
|
elif method == "Случайные данные":
|
||||||
|
method = self.__erasing_random
|
||||||
|
t = Thread(target=method_, args=(progress,))
|
||||||
t.start()
|
t.start()
|
||||||
return t
|
return t
|
||||||
|
|
||||||
def __erasing(self, progress):
|
def __erasing_2(self, progress):
|
||||||
len_write = 0
|
len_write = 0
|
||||||
with open(self.path, 'wb') as drive:
|
with open(self.path, "wb") as drive:
|
||||||
while len_write < self.capacity:
|
while len_write < self.capacity:
|
||||||
# drive.write(b"\x00"*self.block_size)
|
# drive.write(b"\x00"*self.block_size)
|
||||||
len_write += self.block_size*64
|
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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user