summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-04-07 23:20:01 +0000
committerIgor Pashev <pashev.igor@gmail.com>2013-04-07 23:24:39 +0000
commitac1a63382ea0481b3451d518006026b0d8c28f03 (patch)
treef63664c0dcbe827d33abd22302e8cffdddbce558
parentbfb1de5aa23a49b9414c1145c2cd65de2f03b35f (diff)
downloadlive-ac1a63382ea0481b3451d518006026b0d8c28f03.tar.gz
Show progress
-rwxr-xr-xinstall22
-rw-r--r--lib/snack/__init__.py102
2 files changed, 114 insertions, 10 deletions
diff --git a/install b/install
index 0b430a6..9fea90a 100755
--- a/install
+++ b/install
@@ -10,6 +10,7 @@ without prior consent from anybody.
"""
from lib.hdd import HDD
+from lib.snack import *
from snack import *
from subprocess import Popen, PIPE, call
from pprint import pprint
@@ -57,16 +58,21 @@ Whould you like to continue?''',
def find_zpools():
global zpools
+ progress = ProgressBar(screen, title='Searching for zpools')
+ progress.progress = 10
zpools = []
zpool_cmd = Popen(['zpool', 'list', '-H', '-o', 'name'], stdout=PIPE, stderr=PIPE)
for line in zpool_cmd.stdout:
zpools.append(line.rstrip())
+ progress.progress = 50
zpool_cmd = Popen("zpool import | awk '/pool:/ {print $2}'", shell=True, stdout=PIPE, stderr=PIPE)
for line in zpool_cmd.stdout:
zpools.append(line.rstrip())
+ progress.progress = 100
def find_hdds():
global hdds
+ progress = ProgressMessage(screen, title='Please, wait', text='Searching for disks...')
hdds = []
pat = re.compile('\d+\.\s+(\S+)\s+<(.+?)(\s+cyl.*)?>')
format_cmd = Popen('format </dev/null', shell=True, stdout=PIPE)
@@ -76,6 +82,8 @@ def find_hdds():
name = m.group(1)
desc = m.group(2)
hdds.append(HDD(name, desc))
+ if len(hdds) == 0:
+ raise NoDisks('No disks found')
def choose_rpool():
@@ -155,12 +163,13 @@ def configure_rpool():
rpool = create_rpool(hdd)
if rpool:
if not pool_is_imported(rpool):
+ progress = ProgressMessage(screen, title='Please, wait', text='Importing ZFS pool "{}"...'.format(rpool))
zpool_cmd = Popen(['zpool', 'import', '-f', rpool], stderr=PIPE, stdout=PIPE)
out, err = zpool_cmd.communicate()
if 0 != zpool_cmd.returncode:
ButtonChoiceWindow(screen,
title='Importing of ZFS pool "{}" failed'.format(rpool),
- text=err, buttons = ['Ok'], width=70)
+ text=err, buttons=['Ok'], width=70)
rpool = None
@@ -261,18 +270,11 @@ will be used.'
-# Begin installation:
-print("Getting list of hard disk drives ... ")
-find_hdds()
-
screen = SnackScreen()
+screen.pushHelpLine(' ')
try:
- screen.pushHelpLine(' ')
-
- if len(hdds) == 0:
- raise NoDisks('No disks found')
-
welcome()
+ find_hdds()
configure_rpool()
configure_zfs()
diff --git a/lib/snack/__init__.py b/lib/snack/__init__.py
new file mode 100644
index 0000000..d6bd2c5
--- /dev/null
+++ b/lib/snack/__init__.py
@@ -0,0 +1,102 @@
+#!/usr/bin/python
+
+"""
+Written by Igor Pashev <pashev.igor@gmail.com>
+
+The author has placed this work in the Public Domain,
+thereby relinquishing all copyrights. Everyone is free
+to use, modify, republish, sell or give away this work
+without prior consent from anybody.
+"""
+
+from snack import *
+
+class ProgressMessage(object):
+ _text = None
+
+ @property
+ def text(self):
+ return self._text
+ @text.setter
+ def text(self, text):
+ self._text = text
+ self._textbox.setText(self._text)
+ self._refresh()
+
+ def _refresh(self):
+ self._form.draw()
+ self._screen.refresh()
+
+ def __init__(self, screen, width=40, title='', text=''):
+ self._screen = screen
+
+ self._textbox = TextboxReflowed(width, text)
+
+ self._grid = Grid(1, 1)
+ self._grid.setField(self._textbox, 0, 0)
+
+ self._screen.gridWrappedWindow(self._grid, title)
+
+ self._form = Form()
+ self._form.add(self._textbox)
+ self._refresh()
+
+ def __del__(self):
+ self._screen.popWindow()
+
+class ProgressBar(object):
+ _progress = 0
+ _top = 0
+ _text = None
+ _textbox = None
+ _screen = None
+ _form = None
+ _scale = None
+ _grid = None
+
+ @property
+ def text(self):
+ return self._text
+ @text.setter
+ def text(self, text):
+ self._text = text
+ self._textbox.setText(self._text)
+ self._refresh()
+
+ @property
+ def progress(self):
+ return self._progress
+ @text.setter
+ def progress(self, i):
+ self._progress = i
+ self._scale.set(self._progress)
+ self._refresh()
+
+
+ def _refresh(self):
+ self._form.draw()
+ self._screen.refresh()
+
+
+ def __init__(self, screen, width=40, title='', text='', top=100):
+ self._screen = screen
+ self._top = top
+
+ self._textbox = TextboxReflowed(width, text)
+
+ self._scale = Scale(width, self._top)
+ self._scale.set(0)
+
+ self._grid = Grid(1, 2)
+ self._grid.setField(self._textbox, 0, 0)
+ self._grid.setField(self._scale, 0, 1)
+
+ self._screen.gridWrappedWindow(self._grid, title)
+
+ self._form = Form()
+ self._form.add(self._textbox)
+ self._form.add(self._scale)
+
+
+ def __del__(self):
+ self._screen.popWindow()