Fix provided_path for Imaging and adjust top panes
* Moved select_path menu sections to menu_select_path()
This commit is contained in:
parent
007d2ef692
commit
1e4a3b6c0e
1 changed files with 50 additions and 13 deletions
|
|
@ -157,7 +157,7 @@ def menu_image(source_path, dest_path):
|
||||||
source['Pass 1'] = 'Pending'
|
source['Pass 1'] = 'Pending'
|
||||||
source['Pass 2'] = 'Pending'
|
source['Pass 2'] = 'Pending'
|
||||||
source['Pass 3'] = 'Pending'
|
source['Pass 3'] = 'Pending'
|
||||||
dest = select_path(dest_path, skip_device=source['Details'])
|
dest = select_dest_path(dest_path, skip_device=source['Details'])
|
||||||
|
|
||||||
# Show selection details
|
# Show selection details
|
||||||
show_selection_details(source, dest)
|
show_selection_details(source, dest)
|
||||||
|
|
@ -234,14 +234,19 @@ def menu_select_device(title='Which device?', skip_device={}):
|
||||||
elif selection == 'Q':
|
elif selection == 'Q':
|
||||||
abort_ddrescue_tui()
|
abort_ddrescue_tui()
|
||||||
|
|
||||||
def select_path(provided_path=None, skip_device={}):
|
def menu_select_path(skip_device={}):
|
||||||
selected_path = {}
|
"""Select path via menu, returns path as str."""
|
||||||
pwd = os.path.realpath(global_vars['Env']['PWD'])
|
pwd = os.path.realpath(global_vars['Env']['PWD'])
|
||||||
|
s_path = None
|
||||||
|
|
||||||
|
# Build Menu
|
||||||
path_options = [
|
path_options = [
|
||||||
{'Name': 'Current directory: {}'.format(pwd), 'Path': pwd},
|
{'Name': 'Current directory: {}'.format(pwd), 'Path': pwd},
|
||||||
{'Name': 'Local device', 'Path': None},
|
{'Name': 'Local device', 'Path': None},
|
||||||
{'Name': 'Enter manually', 'Path': None}]
|
{'Name': 'Enter manually', 'Path': None}]
|
||||||
actions = [{'Name': 'Quit', 'Letter': 'Q'}]
|
actions = [{'Name': 'Quit', 'Letter': 'Q'}]
|
||||||
|
|
||||||
|
# Show Menu
|
||||||
selection = menu_select(
|
selection = menu_select(
|
||||||
title = 'Please make a selection',
|
title = 'Please make a selection',
|
||||||
main_entries = path_options,
|
main_entries = path_options,
|
||||||
|
|
@ -253,7 +258,7 @@ def select_path(provided_path=None, skip_device={}):
|
||||||
index = int(selection) - 1
|
index = int(selection) - 1
|
||||||
if path_options[index]['Path']:
|
if path_options[index]['Path']:
|
||||||
# Current directory
|
# Current directory
|
||||||
selected_path['Path'] = pwd
|
s_path = pwd
|
||||||
|
|
||||||
elif path_options[index]['Name'] == 'Local device':
|
elif path_options[index]['Name'] == 'Local device':
|
||||||
# Local device
|
# Local device
|
||||||
|
|
@ -284,32 +289,58 @@ def select_path(provided_path=None, skip_device={}):
|
||||||
main_entries = vol_options,
|
main_entries = vol_options,
|
||||||
action_entries = actions)
|
action_entries = actions)
|
||||||
if selection.isnumeric():
|
if selection.isnumeric():
|
||||||
selected_path['Path'] = vol_options[int(selection)-1]['Path']
|
s_path = vol_options[int(selection)-1]['Path']
|
||||||
elif selection == 'Q':
|
elif selection == 'Q':
|
||||||
abort_ddrescue_tui()
|
abort_ddrescue_tui()
|
||||||
|
|
||||||
elif path_options[index]['Name'] == 'Enter manually':
|
elif path_options[index]['Name'] == 'Enter manually':
|
||||||
# Manual entry
|
# Manual entry
|
||||||
while not selected_path:
|
while not s_path:
|
||||||
m_path = input('Please enter path: ').strip()
|
m_path = input('Please enter path: ').strip()
|
||||||
if m_path and pathlib.Path(m_path).is_dir():
|
if m_path and pathlib.Path(m_path).is_dir():
|
||||||
selected_path['Path'] = os.path.realpath(m_path)
|
s_path = os.path.realpath(m_path)
|
||||||
elif m_path and pathlib.Path(m_path).is_file():
|
elif m_path and pathlib.Path(m_path).is_file():
|
||||||
print_error('File "{}" exists'.format(m_path))
|
print_error('File "{}" exists'.format(m_path))
|
||||||
else:
|
else:
|
||||||
print_error('Invalid path "{}"'.format(m_path))
|
print_error('Invalid path "{}"'.format(m_path))
|
||||||
|
return s_path
|
||||||
|
|
||||||
|
def select_dest_path(provided_path=None, skip_device={}):
|
||||||
|
dest = {}
|
||||||
|
|
||||||
|
# Set path
|
||||||
|
if provided_path:
|
||||||
|
dest['Path'] = provided_path
|
||||||
|
else:
|
||||||
|
dest['Path'] = menu_select_path(skip_device=skip_device)
|
||||||
|
dest['Path'] = os.path.realpath(dest['Path'])
|
||||||
|
|
||||||
|
# Check path
|
||||||
|
if not pathlib.Path(dest['Path']).is_dir():
|
||||||
|
print_error('Invalid path "{}"'.format(dest['Path']))
|
||||||
|
abort_ddrescue_tui()
|
||||||
|
|
||||||
|
# Create ticket folder
|
||||||
if ask('Create ticket folder?'):
|
if ask('Create ticket folder?'):
|
||||||
ticket_folder = get_simple_string('Please enter folder name')
|
ticket_folder = get_simple_string('Please enter folder name')
|
||||||
selected_path['Path'] = os.path.join(
|
dest['Path'] = os.path.join(
|
||||||
selected_path['Path'], ticket_folder)
|
dest['Path'], ticket_folder)
|
||||||
try:
|
try:
|
||||||
os.makedirs(selected_path['Path'], exist_ok=True)
|
os.makedirs(dest['Path'], exist_ok=True)
|
||||||
except OSError:
|
except OSError:
|
||||||
print_error('Failed to create folder "{}"'.format(
|
print_error('Failed to create folder "{}"'.format(
|
||||||
selected_path['Path']))
|
dest['Path']))
|
||||||
abort_ddrescue_tui()
|
abort_ddrescue_tui()
|
||||||
return selected_path
|
|
||||||
|
# Set display name
|
||||||
|
result = run_program(['tput', 'cols'])
|
||||||
|
width = int((int(result.stdout.decode().strip()) - 21) / 2) - 2
|
||||||
|
if len(dest['Path']) > width:
|
||||||
|
dest['Display Name'] = '...{}'.format(dest['Path'][-(width-3):])
|
||||||
|
else:
|
||||||
|
dest['Display Name'] = dest['Path']
|
||||||
|
|
||||||
|
return dest
|
||||||
|
|
||||||
def select_device(description='device', provided_path=None,
|
def select_device(description='device', provided_path=None,
|
||||||
skip_device={}, allow_image_file=True):
|
skip_device={}, allow_image_file=True):
|
||||||
|
|
@ -332,7 +363,7 @@ def select_device(description='device', provided_path=None,
|
||||||
dev['Dev Path'] = setup_loopback_device(dev['Path'])
|
dev['Dev Path'] = setup_loopback_device(dev['Path'])
|
||||||
dev['Is Image'] = True
|
dev['Is Image'] = True
|
||||||
else:
|
else:
|
||||||
print_error('Invalid {} "{}".'.format(description, dev['Path']))
|
print_error('Invalid {} "{}"'.format(description, dev['Path']))
|
||||||
abort_ddrescue_tui()
|
abort_ddrescue_tui()
|
||||||
|
|
||||||
# Get device details
|
# Get device details
|
||||||
|
|
@ -359,6 +390,12 @@ def select_device(description='device', provided_path=None,
|
||||||
else:
|
else:
|
||||||
dev['Display Name'] = '{name} {size} {model}'.format(
|
dev['Display Name'] = '{name} {size} {model}'.format(
|
||||||
**dev['Details'])
|
**dev['Details'])
|
||||||
|
result = run_program(['tput', 'cols'])
|
||||||
|
width = int((int(result.stdout.decode().strip()) - 21) / 2) - 2
|
||||||
|
if len(dev['Display Name']) > width:
|
||||||
|
dev['Display Name'] = '{}...'.format(dev['Display Name'][:(width-3)])
|
||||||
|
else:
|
||||||
|
dev['Display Name'] = dev['Display Name']
|
||||||
|
|
||||||
return dev
|
return dev
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue