From 89de1d52bbd8dda6d7efbd40f1f3c6da496d3ee6 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Mon, 30 Dec 2019 16:37:49 -0700 Subject: [PATCH] Updated BlockPair __init__() and pass_complete() --- scripts/wk/hw/ddrescue.py | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/scripts/wk/hw/ddrescue.py b/scripts/wk/hw/ddrescue.py index c93a50ae..163f7837 100644 --- a/scripts/wk/hw/ddrescue.py +++ b/scripts/wk/hw/ddrescue.py @@ -12,6 +12,7 @@ import re import shutil import time +from collections import OrderedDict from docopt import docopt import psutil @@ -96,6 +97,11 @@ class BlockPair(): self.map_data = {} self.map_path = None self.size = source.details['size'] + self.status = OrderedDict({ + 'read': 'Pending', + 'trim': 'Pending', + 'scrape': 'Pending', + }) # Set map file # e.g. '(Clone|Image)_Model[_p#]_Size[_Label].map' @@ -123,6 +129,17 @@ class BlockPair(): # Read map file self.load_map_data() + # Set initial status + percent = 100 * self.map_data.get('rescued', 0) / self.size + for name in self.status.keys(): + if self.pass_complete(name): + self.status[name] = percent + else: + # Stop checking + if percent > 0: + self.status[name] = percent + break + def get_rescued_size(self): """Get rescued size using map data. @@ -169,11 +186,26 @@ class BlockPair(): # Done self.map_data.update(data) - def pass_complete(self, pass_num): + def pass_complete(self, pass_name): """Check if pass_num is complete based on map data, returns bool.""" complete = False + pending_size = 0 - # TODO + # Check map data + if self.map_data.get('full recovery', False): + complete = True + elif 'non-tried' not in self.map_data: + # Assuming recovery has not been attempted yet + complete = False + else: + # Check that current and previous passes are complete + pending_size = self.map_data['non-tried'] + if pass_name in ('trim', 'scrape'): + pending_size += self.map_data['non-trimmed'] + if pass_name == 'scrape': + pending_size += self.map_data['non-scraped'] + if pending_size == 0: + complete = True # Done return complete