mirror of
https://mojerepo.cf/NeoBoot/NeoBoot-9.git
synced 2025-10-27 00:16:12 +01:00
neo_vip
This commit is contained in:
1048
NeoBoot/files/Harddisk.py
Normal file
1048
NeoBoot/files/Harddisk.py
Normal file
File diff suppressed because it is too large
Load Diff
524
NeoBoot/files/Task.py
Normal file
524
NeoBoot/files/Task.py
Normal file
@@ -0,0 +1,524 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#from __future__ import print_function
|
||||
#from Plugins.Extensions.NeoBoot.__init__ import _
|
||||
from Tools.CList import CList
|
||||
|
||||
class Job(object):
|
||||
NOT_STARTED, IN_PROGRESS, FINISHED, FAILED = range(4)
|
||||
|
||||
def __init__(self, name):
|
||||
self.tasks = []
|
||||
self.resident_tasks = []
|
||||
self.workspace = '/tmp'
|
||||
self.current_task = 0
|
||||
self.callback = None
|
||||
self.name = name
|
||||
self.finished = False
|
||||
self.end = 100
|
||||
self.__progress = 0
|
||||
self.weightScale = 1
|
||||
self.afterEvent = None
|
||||
self.state_changed = CList()
|
||||
self.status = self.NOT_STARTED
|
||||
self.onSuccess = None
|
||||
return
|
||||
|
||||
def fromDescription(self, description):
|
||||
pass
|
||||
|
||||
def createDescription(self):
|
||||
return None
|
||||
|
||||
def getProgress(self):
|
||||
if self.current_task == len(self.tasks):
|
||||
return self.end
|
||||
t = self.tasks[self.current_task]
|
||||
jobprogress = t.weighting * t.progress / float(t.end) + sum([ task.weighting for task in self.tasks[:self.current_task] ])
|
||||
return int(jobprogress * self.weightScale)
|
||||
|
||||
progress = property(getProgress)
|
||||
|
||||
def getStatustext(self):
|
||||
return {self.NOT_STARTED: _('Waiting'),
|
||||
self.IN_PROGRESS: _('In progress'),
|
||||
self.FINISHED: _('Finished'),
|
||||
self.FAILED: _('Failed')}[self.status]
|
||||
|
||||
def task_progress_changed_CB(self):
|
||||
self.state_changed()
|
||||
|
||||
def addTask(self, task):
|
||||
task.job = self
|
||||
task.task_progress_changed = self.task_progress_changed_CB
|
||||
self.tasks.append(task)
|
||||
|
||||
def start(self, callback):
|
||||
self.callback = callback
|
||||
self.restart()
|
||||
|
||||
def restart(self):
|
||||
self.status = self.IN_PROGRESS
|
||||
self.state_changed()
|
||||
self.runNext()
|
||||
sumTaskWeightings = sum([ t.weighting for t in self.tasks ]) or 1
|
||||
self.weightScale = self.end / float(sumTaskWeightings)
|
||||
|
||||
def runNext(self):
|
||||
if self.current_task == len(self.tasks):
|
||||
if len(self.resident_tasks) == 0:
|
||||
self.status = self.FINISHED
|
||||
self.state_changed()
|
||||
self.callback(self, None, [])
|
||||
self.callback = None
|
||||
else:
|
||||
print 'still waiting for %d resident task(s) %s to finish' % (len(self.resident_tasks), str(self.resident_tasks))
|
||||
else:
|
||||
self.tasks[self.current_task].run(self.taskCallback)
|
||||
self.state_changed()
|
||||
return
|
||||
|
||||
def taskCallback(self, task, res, stay_resident = False):
|
||||
cb_idx = self.tasks.index(task)
|
||||
if stay_resident:
|
||||
if cb_idx not in self.resident_tasks:
|
||||
self.resident_tasks.append(self.current_task)
|
||||
print 'task going resident:', task
|
||||
else:
|
||||
print 'task keeps staying resident:', task
|
||||
return
|
||||
if len(res):
|
||||
print '>>> Error:', res
|
||||
self.status = self.FAILED
|
||||
self.state_changed()
|
||||
self.callback(self, task, res)
|
||||
if cb_idx != self.current_task:
|
||||
if cb_idx in self.resident_tasks:
|
||||
print 'resident task finished:', task
|
||||
self.resident_tasks.remove(cb_idx)
|
||||
if res == []:
|
||||
self.state_changed()
|
||||
self.current_task += 1
|
||||
self.runNext()
|
||||
|
||||
def retry(self):
|
||||
self.restart()
|
||||
|
||||
def abort(self):
|
||||
if self.current_task < len(self.tasks):
|
||||
self.tasks[self.current_task].abort()
|
||||
for i in self.resident_tasks:
|
||||
self.tasks[i].abort()
|
||||
|
||||
def cancel(self):
|
||||
self.abort()
|
||||
|
||||
def __str__(self):
|
||||
return 'Components.Task.Job name=%s #tasks=%s' % (self.name, len(self.tasks))
|
||||
|
||||
|
||||
class Task(object):
|
||||
|
||||
def __init__(self, job, name):
|
||||
self.name = name
|
||||
self.immediate_preconditions = []
|
||||
self.global_preconditions = []
|
||||
self.postconditions = []
|
||||
self.returncode = None
|
||||
self.initial_input = None
|
||||
self.job = None
|
||||
self.end = 100
|
||||
self.weighting = 100
|
||||
self.__progress = 0
|
||||
self.cmd = None
|
||||
self.cwd = '/tmp'
|
||||
self.args = []
|
||||
self.cmdline = None
|
||||
self.task_progress_changed = None
|
||||
self.output_line = ''
|
||||
job.addTask(self)
|
||||
self.container = None
|
||||
return
|
||||
|
||||
def setCommandline(self, cmd, args):
|
||||
self.cmd = cmd
|
||||
self.args = args
|
||||
|
||||
def setTool(self, tool):
|
||||
self.cmd = tool
|
||||
self.args = [tool]
|
||||
self.global_preconditions.append(ToolExistsPrecondition())
|
||||
self.postconditions.append(ReturncodePostcondition())
|
||||
|
||||
def setCmdline(self, cmdline):
|
||||
self.cmdline = cmdline
|
||||
|
||||
def checkPreconditions(self, immediate = False):
|
||||
not_met = []
|
||||
if immediate:
|
||||
preconditions = self.immediate_preconditions
|
||||
else:
|
||||
preconditions = self.global_preconditions
|
||||
for precondition in preconditions:
|
||||
if not precondition.check(self):
|
||||
not_met.append(precondition)
|
||||
|
||||
return not_met
|
||||
|
||||
def _run(self):
|
||||
if self.cmd is None and self.cmdline is None:
|
||||
self.finish()
|
||||
return
|
||||
else:
|
||||
from enigma import eConsoleAppContainer
|
||||
self.container = eConsoleAppContainer()
|
||||
self.container.appClosed.append(self.processFinished)
|
||||
self.container.stdoutAvail.append(self.processStdout)
|
||||
self.container.stderrAvail.append(self.processStderr)
|
||||
if self.cwd is not None:
|
||||
self.container.setCWD(self.cwd)
|
||||
if not self.cmd and self.cmdline:
|
||||
print 'execute:', self.container.execute(self.cmdline), self.cmdline
|
||||
else:
|
||||
print 'execute:', self.container.execute(self.cmd, *self.args), ' '.join(self.args)
|
||||
if self.initial_input:
|
||||
self.writeInput(self.initial_input)
|
||||
return
|
||||
return
|
||||
|
||||
def run(self, callback):
|
||||
failed_preconditions = self.checkPreconditions(True) + self.checkPreconditions(False)
|
||||
if failed_preconditions:
|
||||
print '[Task] preconditions failed'
|
||||
callback(self, failed_preconditions)
|
||||
return
|
||||
self.callback = callback
|
||||
try:
|
||||
self.prepare()
|
||||
self._run()
|
||||
except Exception as ex:
|
||||
print '[Task] exception:', ex
|
||||
self.postconditions = [FailedPostcondition(ex)]
|
||||
self.finish()
|
||||
|
||||
def prepare(self):
|
||||
pass
|
||||
|
||||
def cleanup(self, failed):
|
||||
pass
|
||||
|
||||
def processStdout(self, data):
|
||||
self.processOutput(data)
|
||||
|
||||
def processStderr(self, data):
|
||||
self.processOutput(data)
|
||||
|
||||
def processOutput(self, data):
|
||||
self.output_line += data
|
||||
while True:
|
||||
i = self.output_line.find('\n')
|
||||
if i == -1:
|
||||
break
|
||||
self.processOutputLine(self.output_line[:i + 1])
|
||||
self.output_line = self.output_line[i + 1:]
|
||||
|
||||
def processOutputLine(self, line):
|
||||
print '[Task %s]' % self.name, line[:-1]
|
||||
|
||||
def processFinished(self, returncode):
|
||||
self.returncode = returncode
|
||||
self.finish()
|
||||
|
||||
def abort(self):
|
||||
if self.container:
|
||||
self.container.kill()
|
||||
self.finish(aborted=True)
|
||||
|
||||
def finish(self, aborted = False):
|
||||
self.afterRun()
|
||||
not_met = []
|
||||
if aborted:
|
||||
not_met.append(AbortedPostcondition())
|
||||
else:
|
||||
for postcondition in self.postconditions:
|
||||
if not postcondition.check(self):
|
||||
not_met.append(postcondition)
|
||||
|
||||
self.cleanup(not_met)
|
||||
self.callback(self, not_met)
|
||||
|
||||
def afterRun(self):
|
||||
pass
|
||||
|
||||
def writeInput(self, input):
|
||||
self.container.write(input)
|
||||
|
||||
def getProgress(self):
|
||||
return self.__progress
|
||||
|
||||
def setProgress(self, progress):
|
||||
if progress > self.end:
|
||||
progress = self.end
|
||||
if progress < 0:
|
||||
progress = 0
|
||||
self.__progress = progress
|
||||
if self.task_progress_changed:
|
||||
self.task_progress_changed()
|
||||
|
||||
progress = property(getProgress, setProgress)
|
||||
|
||||
def __str__(self):
|
||||
return 'Components.Task.Task name=%s' % self.name
|
||||
|
||||
|
||||
class LoggingTask(Task):
|
||||
|
||||
def __init__(self, job, name):
|
||||
Task.__init__(self, job, name)
|
||||
self.log = []
|
||||
|
||||
def processOutput(self, data):
|
||||
print '[%s]' % self.name, data,
|
||||
self.log.append(data)
|
||||
|
||||
|
||||
class PythonTask(Task):
|
||||
|
||||
def _run(self):
|
||||
from twisted.internet import threads
|
||||
from enigma import eTimer
|
||||
self.aborted = False
|
||||
self.pos = 0
|
||||
threads.deferToThread(self.work).addBoth(self.onComplete)
|
||||
self.timer = eTimer()
|
||||
self.timer.callback.append(self.onTimer)
|
||||
self.timer.start(5)
|
||||
|
||||
def work(self):
|
||||
raise NotImplemented, 'work'
|
||||
|
||||
def abort(self):
|
||||
self.aborted = True
|
||||
if self.callback is None:
|
||||
self.finish(aborted=True)
|
||||
return
|
||||
|
||||
def onTimer(self):
|
||||
self.setProgress(self.pos)
|
||||
|
||||
def onComplete(self, result):
|
||||
self.postconditions.append(FailedPostcondition(result))
|
||||
self.timer.stop()
|
||||
del self.timer
|
||||
self.finish()
|
||||
|
||||
|
||||
class ConditionTask(Task):
|
||||
|
||||
def __init__(self, job, name, timeoutCount = None):
|
||||
Task.__init__(self, job, name)
|
||||
self.timeoutCount = timeoutCount
|
||||
|
||||
def _run(self):
|
||||
self.triggerCount = 0
|
||||
|
||||
def prepare(self):
|
||||
from enigma import eTimer
|
||||
self.timer = eTimer()
|
||||
self.timer.callback.append(self.trigger)
|
||||
self.timer.start(1000)
|
||||
|
||||
def cleanup(self, failed):
|
||||
if hasattr(self, 'timer'):
|
||||
self.timer.stop()
|
||||
del self.timer
|
||||
|
||||
def check(self):
|
||||
return True
|
||||
|
||||
def trigger(self):
|
||||
self.triggerCount += 1
|
||||
try:
|
||||
if self.timeoutCount is not None and self.triggerCount > self.timeoutCount:
|
||||
raise Exception, 'Timeout elapsed, sorry'
|
||||
res = self.check()
|
||||
except Exception as e:
|
||||
self.postconditions.append(FailedPostcondition(e))
|
||||
res = True
|
||||
|
||||
if res:
|
||||
self.finish()
|
||||
return
|
||||
|
||||
|
||||
class JobManager:
|
||||
|
||||
def __init__(self):
|
||||
self.active_jobs = []
|
||||
self.failed_jobs = []
|
||||
self.job_classes = []
|
||||
self.in_background = False
|
||||
self.visible = False
|
||||
self.active_job = None
|
||||
return
|
||||
|
||||
def AddJob(self, job, onSuccess = None, onFail = None):
|
||||
job.onSuccess = onSuccess
|
||||
if onFail is None:
|
||||
job.onFail = self.notifyFailed
|
||||
else:
|
||||
job.onFail = onFail
|
||||
self.active_jobs.append(job)
|
||||
self.kick()
|
||||
return
|
||||
|
||||
def kick(self):
|
||||
if self.active_job is None:
|
||||
if self.active_jobs:
|
||||
self.active_job = self.active_jobs.pop(0)
|
||||
self.active_job.start(self.jobDone)
|
||||
return
|
||||
|
||||
def notifyFailed(self, job, task, problems):
|
||||
from Tools import Notifications
|
||||
from Screens.MessageBox import MessageBox
|
||||
if problems[0].RECOVERABLE:
|
||||
Notifications.AddNotificationWithCallback(self.errorCB, MessageBox, _('Error: %s\nRetry?') % problems[0].getErrorMessage(task))
|
||||
return True
|
||||
else:
|
||||
Notifications.AddNotification(MessageBox, job.name + '\n' + _('Error') + ': %s' % problems[0].getErrorMessage(task), type=MessageBox.TYPE_ERROR)
|
||||
return False
|
||||
|
||||
def jobDone(self, job, task, problems):
|
||||
print 'job', job, 'completed with', problems, 'in', task
|
||||
if problems:
|
||||
if not job.onFail(job, task, problems):
|
||||
self.errorCB(False)
|
||||
else:
|
||||
self.active_job = None
|
||||
if job.onSuccess:
|
||||
job.onSuccess(job)
|
||||
self.kick()
|
||||
return
|
||||
|
||||
def popupTaskView(self, job):
|
||||
if not self.visible:
|
||||
from Tools import Notifications
|
||||
from Screens.TaskView import JobView
|
||||
self.visible = True
|
||||
Notifications.AddNotification(JobView, job)
|
||||
|
||||
def errorCB(self, answer):
|
||||
if answer:
|
||||
print 'retrying job'
|
||||
self.active_job.retry()
|
||||
else:
|
||||
print 'not retrying job.'
|
||||
self.failed_jobs.append(self.active_job)
|
||||
self.active_job = None
|
||||
self.kick()
|
||||
return
|
||||
|
||||
def getPendingJobs(self):
|
||||
list = []
|
||||
if self.active_job:
|
||||
list.append(self.active_job)
|
||||
list += self.active_jobs
|
||||
return list
|
||||
|
||||
|
||||
class Condition:
|
||||
RECOVERABLE = False
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return _('An unknown error occurred!') + ' (%s @ task %s)' % (self.__class__.__name__, task.__class__.__name__)
|
||||
|
||||
|
||||
class WorkspaceExistsPrecondition(Condition):
|
||||
|
||||
def check(self, task):
|
||||
return os.access(task.job.workspace, os.W_OK)
|
||||
|
||||
|
||||
class DiskspacePrecondition(Condition):
|
||||
|
||||
def __init__(self, diskspace_required):
|
||||
self.diskspace_required = diskspace_required
|
||||
self.diskspace_available = 0
|
||||
|
||||
def check(self, task):
|
||||
import os
|
||||
try:
|
||||
s = os.statvfs(task.job.workspace)
|
||||
self.diskspace_available = s.f_bsize * s.f_bavail
|
||||
return self.diskspace_available >= self.diskspace_required
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return _('Not enough disk space. Please free up some disk space and try again. (%d MB required, %d MB available)') % (self.diskspace_required / 1024 / 1024, self.diskspace_available / 1024 / 1024)
|
||||
|
||||
|
||||
class ToolExistsPrecondition(Condition):
|
||||
|
||||
def check(self, task):
|
||||
import os
|
||||
if task.cmd[0] == '/':
|
||||
self.realpath = task.cmd
|
||||
print '[Task.py][ToolExistsPrecondition] WARNING: usage of absolute paths for tasks should be avoided!'
|
||||
return os.access(self.realpath, os.X_OK)
|
||||
self.realpath = task.cmd
|
||||
path = os.environ.get('PATH', '').split(os.pathsep)
|
||||
path.append(task.cwd + '/')
|
||||
absolutes = filter(lambda file: os.access(file, os.X_OK), map(lambda directory, file = task.cmd: os.path.join(directory, file), path))
|
||||
if absolutes:
|
||||
self.realpath = absolutes[0]
|
||||
return True
|
||||
return False
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return _('A required tool (%s) was not found.') % self.realpath
|
||||
|
||||
|
||||
class AbortedPostcondition(Condition):
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return 'Cancelled upon user request'
|
||||
|
||||
|
||||
class ReturncodePostcondition(Condition):
|
||||
|
||||
def check(self, task):
|
||||
return task.returncode == 0
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
if hasattr(task, 'log') and task.log:
|
||||
log = ''.join(task.log).strip()
|
||||
log = log.split('\n')[-3:]
|
||||
log = '\n'.join(log)
|
||||
return log
|
||||
else:
|
||||
return _('Error code') + ': %s' % task.returncode
|
||||
|
||||
|
||||
class FailedPostcondition(Condition):
|
||||
|
||||
def __init__(self, exception):
|
||||
self.exception = exception
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
if isinstance(self.exception, int):
|
||||
if hasattr(task, 'log'):
|
||||
log = ''.join(task.log).strip()
|
||||
log = log.split('\n')[-4:]
|
||||
log = '\n'.join(log)
|
||||
return log
|
||||
else:
|
||||
return _('Error code') + ' %s' % self.exception
|
||||
return str(self.exception)
|
||||
|
||||
def check(self, task):
|
||||
return self.exception is None or self.exception == 0
|
||||
|
||||
|
||||
job_manager = JobManager()
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from __init__ import _
|
||||
|
||||
from Plugins.Extensions.NeoBoot.__init__ import _
|
||||
from enigma import getDesktop
|
||||
from Plugins.Plugin import PluginDescriptor
|
||||
from Screens.ChoiceBox import ChoiceBox
|
||||
@@ -31,27 +31,46 @@ import os
|
||||
from Screens.VirtualKeyBoard import VirtualKeyBoard
|
||||
import gettext, os
|
||||
from Plugins.Extensions.NeoBoot.files.stbbranding import getTunerModel
|
||||
LinkNeoBoot = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot'
|
||||
|
||||
|
||||
try:
|
||||
cat = gettext.translation('lang', '/usr/lib/enigma2/python/Plugins/Extensions/files/po', [config.osd.language.getText()])
|
||||
_ = cat.gettext
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
|
||||
class ManagerDevice(Screen):
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '<screen name="ManagerDevice" position="center,center" size="1235,748">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="35,16" size="253,52" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="315,15" size="279,50" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/yellow.png" position="647,18" size="263,48" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/blue.png" position="965,19" size="269,51" alphatest="on" />\n\t\t<widget name="key_red" position="14,17" zPosition="1" size="258,48" font="Regular;30" halign="center" valign="center" backgroundColor="un9f1313" transparent="1" />\n\t\t<widget name="key_green" position="297,17" zPosition="1" size="298,48" font="Regular;30" halign="center" valign="center" backgroundColor="un1f771f" transparent="1" />\n\t\t<widget name="key_yellow" position="631,18" zPosition="1" size="268,48" font="Regular;30" halign="center" valign="center" backgroundColor="una08500" transparent="1" />\n\t\t<widget name="key_blue" position="940,21" zPosition="1" size="266,45" font="Regular;30" halign="center" valign="center" backgroundColor="un18188b" transparent="1" />\n\t\t<widget source="list" render="Listbox" position="12,76" size="1212,651" scrollbarMode="showOnDemand">\n\t\t\t<convert type="TemplatedMultiContent">\n\t\t\t\t{"template": [\n\t\t\t\t MultiContentEntryText(pos = (90, 5), size = (600, 30), font=0, text = 0),\n\t\t\t\t MultiContentEntryText(pos = (110, 60), size = (900, 100), font=1, flags = RT_VALIGN_TOP, text = 1),\n\t\t\t\t MultiContentEntryPixmapAlphaBlend(pos = (0, 0), size = (160, 160,), png = 2),\n\t\t\t\t],\n\t\t\t\t"fonts": [gFont("Regular", 33),gFont("Regular", 33)],\n\t\t\t\t"itemHeight": 140\n\t\t\t\t}\n\t\t\t</convert>\n\t\t</widget>\n\t\t<widget name="lab1" zPosition="2" position="32,92" size="1182,69" font="Regular;30" halign="center" transparent="1" />\n\t</screen>'
|
||||
|
||||
skin = """<screen name="ManagerDevice" position="400,150" size="1235,748">
|
||||
<widget name="key_red" position="14,17" zPosition="1" size="271,49" font="dugme;30" halign="center" valign="center" backgroundColor="red" transparent="1" foregroundColor="red" />
|
||||
<widget name="key_green" position="289,17" zPosition="1" size="369,49" font="dugme;30" halign="center" valign="center" backgroundColor="green" transparent="1" foregroundColor="green" />
|
||||
<widget name="key_yellow" position="661,17" zPosition="1" size="302,49" font="dugme;30" halign="center" valign="center" backgroundColor="yellow" transparent="1" foregroundColor="yellow" />
|
||||
<widget name="key_blue" position="967,17" zPosition="1" size="257,49" font="dugme;30" halign="center" valign="center" backgroundColor="blue" transparent="1" foregroundColor="blue" />
|
||||
<eLabel position="18,70" size="1204,2" backgroundColor="blue" foregroundColor="blue" name="linia" />
|
||||
<eLabel position="18,670" size="1204,2" backgroundColor="blue" foregroundColor="blue" name="linia" />
|
||||
<eLabel backgroundColor="black" font="dugme; 30" foregroundColor="orange" position="536,674" size="197,56" text="Exit - Back" transparent="1" />
|
||||
<widget source="list" render="Listbox" position="14,137" size="1210,530" scrollbarMode="showOnDemand">
|
||||
<convert type="TemplatedMultiContent">\n\n\t\t\t\t{"template": [\n\n\t\t\t\t MultiContentEntryText(pos = (90, 5), size = (600, 75), font=0, text = 0),\n\n\t\t\t\t MultiContentEntryText(pos = (110, 60), size = (900, 80), font=1, flags = RT_VALIGN_TOP, text = 1),\n\n\t\t\t\t MultiContentEntryPixmapAlphaBlend(pos = (0, 0), size = (150, 130,)),\n\n\t\t\t\t],\n\t\t\t\t"fonts": [gFont("Regular", 33),gFont("Regular", 33)],\n\n\t\t\t\t"itemHeight": 140\n\t\t\t\t}</convert>
|
||||
</widget>
|
||||
<widget name="lab1" zPosition="2" position="28,163" size="1182,69" font="baslk;30" halign="center" transparent="1" />
|
||||
</screen>"""
|
||||
else:
|
||||
skin = '<screen position="center,center" size="640,460">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="25,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="175,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/yellow.png" position="325,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/blue.png" position="475,0" size="140,40" alphatest="on" />\n\t\t<widget name="key_red" position="25,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />\n\t\t<widget name="key_green" position="175,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />\n\t\t<widget name="key_yellow" position="325,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />\n\t\t <widget name="key_blue" position="475,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />\n\t\t<widget source="list" render="Listbox" position="10,50" size="620,450" scrollbarMode="showOnDemand" >\n\t\t\t<convert type="TemplatedMultiContent">\n\t\t\t\t{"template": [\n\t\t\t\t MultiContentEntryText(pos = (90, 0), size = (600, 30), font=0, text = 0),\n\t\t\t\t MultiContentEntryText(pos = (110, 30), size = (600, 50), font=1, flags = RT_VALIGN_TOP, text = 1),\n\t\t\t\t MultiContentEntryPixmapAlphaBlend(pos = (0, 0), size = (80, 80), png = 2),\n\t\t\t\t],\n\t\t\t\t"fonts": [gFont("Regular", 24),gFont("Regular", 20)],\n\t\t\t\t"itemHeight": 85\n\t\t\t\t}\n\t\t\t</convert>\n\t\t</widget>\n\t\t<widget name="lab1" zPosition="2" position="50,90" size="600,40" font="Regular;22" halign="center" transparent="1"/>\n\t</screen>'
|
||||
skin = """<screen name="ManagerDevice" position="center,center" size="752,460">
|
||||
<eLabel backgroundColor="black" font="Regular; 30" foregroundColor="orange" position="315,405" size="169,51" text="Exit - Back" transparent="1" />
|
||||
<widget name="key_red" position="21,0" zPosition="1" size="151,47" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" foregroundColor="red" />
|
||||
<widget name="key_green" position="216,0" zPosition="1" size="140,47" font="Regular;20" halign="center" valign="center" backgroundColor="green" transparent="1" foregroundColor="green" />
|
||||
<widget name="key_yellow" position="400,0" zPosition="1" size="140,47" font="Regular;20" halign="center" valign="center" backgroundColor="yellow" transparent="1" foregroundColor="yellow" />
|
||||
<widget name="key_blue" position="587,0" zPosition="1" size="149,46" font="Regular;20" halign="center" valign="center" backgroundColor="blue" transparent="1" foregroundColor="blue" />
|
||||
<widget source="list" render="Listbox" position="18,63" size="721,341" scrollbarMode="showOnDemand">
|
||||
<convert type="TemplatedMultiContent">\n\t\t\t\t{"template": [\n\t\t\t\t MultiContentEntryText(pos = (90, 0), size = (600, 30), font=0, text = 0),\n\t\t\t\t MultiContentEntryText(pos = (110, 30), size = (600, 50), font=1, flags = RT_VALIGN_TOP, text = 1),\n\t\t\t\t MultiContentEntryPixmapAlphaBlend(pos = (0, 0), size = (80, 80)),\n\t\t\t\t],\n\t\t\t\t"fonts": [gFont("Regular", 24),gFont("Regular", 20)],\n\t\t\t\t"itemHeight": 85\n\t\t\t\t}\n\t\t\t</convert>
|
||||
</widget>
|
||||
<widget name="lab1" zPosition="2" position="29,111" size="699,40" font="Regular;22" halign="center" transparent="1" />
|
||||
</screen>"""
|
||||
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
Screen.setTitle(self, _('Mount Manager'))
|
||||
self['key_red'] = Label(_('Initialize'))
|
||||
self['key_red'] = Label(_('Initialize ext3'))
|
||||
self['key_green'] = Label(_('SetupMounts'))
|
||||
self['key_yellow'] = Label(_('Unmount'))
|
||||
self['key_yellow'] = Label(_('Initialize ext4'))
|
||||
self['key_blue'] = Label(_('Exit'))
|
||||
self['lab1'] = Label()
|
||||
self.onChangedEntry = []
|
||||
@@ -59,15 +78,27 @@ class ManagerDevice(Screen):
|
||||
self['list'] = List(self.list)
|
||||
self['list'].onSelectionChanged.append(self.selectionChanged)
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions', 'MenuActions'], {'back': self.close,
|
||||
'red': self.Format,
|
||||
'red': self.Format_ext3,
|
||||
'green': self.SetupMounts,
|
||||
'yellow': self.Unmount,
|
||||
'blue': self.Mount})
|
||||
'yellow': self.Format_ext4,
|
||||
'blue': self.ExitBack,
|
||||
'back': self.close})
|
||||
self.activityTimer = eTimer()
|
||||
self.activityTimer.timeout.get().append(self.updateList2)
|
||||
self.updateList()
|
||||
self.onShown.append(self.setWindowTitle)
|
||||
|
||||
def Format_ext3(self):
|
||||
from Harddisk import HarddiskSelection
|
||||
self.session.openWithCallback(self.updateList, HarddiskSelection)
|
||||
|
||||
def Format_ext4(self):
|
||||
from Screens.HarddiskSetup import HarddiskSelection
|
||||
self.session.openWithCallback(self.updateList, HarddiskSelection)
|
||||
|
||||
def ExitBack(self):
|
||||
self.close()
|
||||
|
||||
def setWindowTitle(self):
|
||||
self.setTitle(_('Mount Manager'))
|
||||
|
||||
@@ -123,20 +154,24 @@ class ManagerDevice(Screen):
|
||||
device2 = re.sub('[0-9]', '', device)
|
||||
devicetype = path.realpath('/sys/block/' + device2 + '/device')
|
||||
d2 = device
|
||||
name = _('HARD DISK: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_hdd.png'
|
||||
name = _('HARD DISK: ')
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_hdd.png'
|
||||
model = file('/sys/block/' + device2 + '/device/model').read()
|
||||
model = str(model).replace('\n', '')
|
||||
des = ''
|
||||
if devicetype.find('usb') != -1:
|
||||
name = _('USB: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_usb.png'
|
||||
if devicetype.find('usb1') != -1:
|
||||
name = _('USB1: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_usb.png'
|
||||
if devicetype.find('usb2') != -1:
|
||||
name = _('USB2: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_usb.png'
|
||||
if devicetype.find('card') != -1:
|
||||
name = _('CARD: ')
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_sd.png'
|
||||
|
||||
name = name + model
|
||||
self.Console = Console()
|
||||
self.Console.ePopen("sfdisk -l /dev/sd? | grep swap | awk '{print $(NF-9)}' >/tmp/devices.tmp")
|
||||
@@ -198,13 +233,6 @@ class ManagerDevice(Screen):
|
||||
os.system('cp /etc/fstab.org /etc/fstab')
|
||||
self.session.openWithCallback(self.updateList, DevicesConf)
|
||||
|
||||
def Format(self):
|
||||
from Screens.HarddiskSetup import HarddiskSelection
|
||||
self.session.openWithCallback(self.updateList, HarddiskSelection)
|
||||
|
||||
def Mount(self):
|
||||
self.close()
|
||||
|
||||
def Unmount(self):
|
||||
sel = self['list'].getCurrent()
|
||||
if sel:
|
||||
@@ -270,9 +298,19 @@ class ManagerDevice(Screen):
|
||||
class DevicesConf(Screen, ConfigListScreen):
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '<screen name="DevicesConf" position="center,center" size="976,728" title="Choose where to mount your devices to:">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="109,16" size="251,63" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="551,15" size="257,63" alphatest="on" />\n\t\t<widget name="key_red" position="110,13" zPosition="1" size="252,67" font="Regular;35" halign="center" valign="center" backgroundColor="#FF0000" transparent="1" />\n\t\t<widget name="key_green" position="549,15" zPosition="1" size="262,65" font="Regular;35" halign="center" valign="center" backgroundColor="#008000" transparent="1" />\n\t\t<widget name="config" position="31,113" size="898,489" font="Regular;25" scrollbarMode="showOnDemand" />\n\t\t<widget name="Linconn" position="34,621" size="904,32" font="Regular;33" halign="center" valign="center" backgroundColor="#FF0000" />\n\t</screen>'
|
||||
skin = """<screen name="DevicesConfFullHD" position="400,150" size="976,728" title="Choose where to mount your devices to:">
|
||||
<eLabel backgroundColor="black" font="baslk; 25" foregroundColor="red" position="150,900" size="800,30" text=" Exit - Back " transparent="1" />
|
||||
<widget name="key_red" position="110,13" zPosition="1" size="335,67" font="baslk;30" halign="center" valign="center" backgroundColor="red" transparent="1" foregroundColor="red" />
|
||||
<widget name="key_green" position="549,15" zPosition="1" size="362,65" font="baslk;30" halign="center" valign="center" backgroundColor="green" transparent="1" foregroundColor="green" />
|
||||
<widget name="config" position="33,179" size="891,385" font="Regular;21" scrollbarMode="showOnDemand" />
|
||||
</screen>"""
|
||||
else:
|
||||
skin = '<screen position="center,center" size="640,460" title="Choose where to mount your devices to:">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="25,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="175,0" size="140,40" alphatest="on" />\n\t\t<widget name="key_red" position="25,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />\n\t\t<widget name="key_green" position="175,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />\n\t\t<widget name="config" position="30,60" size="580,275" scrollbarMode="showOnDemand"/>\n\t\t<widget name="Linconn" position="30,375" size="580,20" font="Regular;18" halign="center" valign="center" backgroundColor="#9f1313"/>\n\t</screen>'
|
||||
skin = """<screen name="DevicesConfHD" position="171,130" size="903,460" title="Choose where to mount your devices to:">
|
||||
<eLabel backgroundColor="black" font="Regular;30" foregroundColor="orange" position="366,388" size="295,65" text="Exit - Back" transparent="1" />
|
||||
<widget name="key_red" position="36,0" zPosition="1" size="363,59" font="Regular;30" halign="center" valign="center" backgroundColor="black" transparent="1" foregroundColor="red" />
|
||||
<widget name="key_green" position="548,0" zPosition="1" size="332,60" font="Regular;30" halign="center" valign="center" backgroundColor="black" transparent="1" foregroundColor="green" />
|
||||
<widget name="config" position="31,85" size="839,279" scrollbarMode="showOnDemand" />
|
||||
</screen>"""
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
@@ -326,19 +364,23 @@ class DevicesConf(Screen, ConfigListScreen):
|
||||
devicetype = path.realpath('/sys/block/' + device2 + '/device')
|
||||
d2 = device
|
||||
name = _('HARD DISK: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_hdd.png'
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_hdd.png'
|
||||
model = file('/sys/block/' + device2 + '/device/model').read()
|
||||
model = str(model).replace('\n', '')
|
||||
des = ''
|
||||
if devicetype.find('usb') != -1:
|
||||
name = _('USB: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_usb.png'
|
||||
if devicetype.find('usb1') != -1:
|
||||
name = _('USB1: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_usb.png'
|
||||
if devicetype.find('usb2') != -1:
|
||||
name = _('USB2: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_usb.png'
|
||||
if devicetype.find('card') != -1:
|
||||
name = _('CARD: ')
|
||||
mypixmap = '' + LinkNeoBoot + '/images/dev_sd.png'
|
||||
|
||||
name = name + model
|
||||
f = open('/proc/mounts', 'r')
|
||||
for line in f.readlines():
|
||||
@@ -369,7 +411,11 @@ class DevicesConf(Screen, ConfigListScreen):
|
||||
('/media/usb', '/media/usb'),
|
||||
('/media/usb1', '/media/usb1'),
|
||||
('/media/usb2', '/media/usb2'),
|
||||
('/media/usb3', '/media/usb3')]))
|
||||
('/media/usb3', '/media/usb3'),
|
||||
('/media/usb3', '/media/cf'),
|
||||
('/media/usb3', '/media/card'),
|
||||
('/media/cf', '/media/cf'),
|
||||
('/media/card', '/media/card')]))
|
||||
if dtype == 'Linux':
|
||||
dtype = 'ext2', 'ext3', 'ext4'
|
||||
else:
|
||||
@@ -434,73 +480,77 @@ class DevicesConf(Screen, ConfigListScreen):
|
||||
out.close()
|
||||
|
||||
self.device_uuid2 = result.split('UUID=')[1].split(' ')[0].replace('"', '')
|
||||
if fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager2'):
|
||||
out1 = open('/etc/devicemanager.cfg', 'a')
|
||||
line1 = '"' + self.device_uuid2 + '"' + ':' + self.mountp + '\n'
|
||||
out1.write(line1)
|
||||
out1.close()
|
||||
elif fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager'):
|
||||
out2 = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager/devicemanager.cfg', 'a')
|
||||
line2 = '"' + self.device_uuid2 + '"' + ':' + self.mountp + '\n'
|
||||
out2.write(line2)
|
||||
out2.close()
|
||||
|
||||
if fileExists('/etc/init.d/udev'):
|
||||
filename = '/etc/init.d/udev'
|
||||
if os.path.exists(filename):
|
||||
# if fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager2'):
|
||||
# out1 = open('/etc/devicemanager.cfg', 'a')
|
||||
# line1 = '"' + self.device_uuid2 + '"' + ':' + self.mountp + '\n'
|
||||
# out1.write(line1)
|
||||
# out1.close()
|
||||
# elif fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager'):
|
||||
# out2 = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager/devicemanager.cfg', 'a')
|
||||
# line2 = '"' + self.device_uuid2 + '"' + ':' + self.mountp + '\n'
|
||||
# out2.write(line2)
|
||||
# out2.close()
|
||||
|
||||
|
||||
filename2 = filename + '.tmp'
|
||||
out = open(filename2, 'w')
|
||||
f = open(filename, 'r')
|
||||
for line in f.readlines():
|
||||
if line.find('mount -a /media/hdd; mount -a /media/usb') != -1:
|
||||
line = ''
|
||||
out.write(line)
|
||||
|
||||
f.close()
|
||||
out.close()
|
||||
os.rename(filename2, filename)
|
||||
|
||||
|
||||
|
||||
filename2 = filename + '.tmp'
|
||||
out = open(filename2, 'w')
|
||||
f = open(filename, 'r')
|
||||
for line in f.readlines():
|
||||
if line.find('exit 0') != -1:
|
||||
line = ''
|
||||
out.write(line)
|
||||
|
||||
f.close()
|
||||
out.close()
|
||||
os.rename(filename2, filename)
|
||||
os.system('echo "mount -a /media/hdd; mount -a /media/usb" >> /etc/init.d/udev; chmod 0755 /etc/init.d/udev ')
|
||||
|
||||
if fileExists('/etc/init.d/mdev'):
|
||||
filename = '/etc/init.d/mdev'
|
||||
if os.path.exists(filename):
|
||||
|
||||
filename2 = filename + '.tmp'
|
||||
out = open(filename2, 'w')
|
||||
f = open(filename, 'r')
|
||||
for line in f.readlines():
|
||||
if line.find('mount -a /media/hdd; mount -a /media/usb') != -1:
|
||||
line = ''
|
||||
out.write(line)
|
||||
|
||||
f.close()
|
||||
out.close()
|
||||
os.rename(filename2, filename)
|
||||
|
||||
system('echo "" >> /etc/init.d/mdev; echo "mount -a /media/hdd; mount -a /media/usb" >> /etc/init.d/mdev; chmod 0755 /etc/init.d/mdev ')
|
||||
|
||||
|
||||
#SetDiskLabel - dziekuje autorowi
|
||||
class SetDiskLabel(Screen):
|
||||
skin = '\n\t\t<screen position="center,center" size="600,200" title="Set Disk Label v1.1" >\n\t\t<widget name="infoTXT" position="25,20" zPosition="1" size="310,25" font="Regular;20" halign="left" valign="center" backgroundColor="transpBlack" transparent="1"/>\n\t\t<widget name="devlist" position="400,20" size="125,25" />\n\t\t<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/buttons/k_left.png" position="350,15" size="40,40" alphatest="on" />\n\t\t<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/buttons/k_right.png" position="550,15" size="40,40" alphatest="on" />\n\t\t<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/buttons/k_up.png" position="350,105" size="40,40" alphatest="on" />\n\t\t<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/buttons/k_down.png" position="550,105" size="40,40" alphatest="on" />\n\t\t<widget name="labelname" position="25,65" zPosition="1" size="310,25" font="Regular;20" halign="left" valign="center" backgroundColor="transpBlack" transparent="1"/>\n\t\t<widget name="disklabel" position="400,65" size="125,25" zPosition="1" font="Regular;20" halign="center" valign="left"/>\n\t\t<widget name="labeltoset" position="25,110" zPosition="1" size="310,25" font="Regular;20" halign="left" valign="center" backgroundColor="transpBlack" transparent="1"/>\n\t\t<widget name="listlabel" position="400,110" size="125,25" zPosition="1" font="Regular;20" halign="center" valign="left"/>\n\t\t<ePixmap pixmap="skin_default/buttons/key_red.png" position="40,167" size="40,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/key_green.png" position="170,167" size="40,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/key_yellow.png" position="300,167" size="40,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/key_blue.png" position="430,167" size="40,40" alphatest="on" />\n\t\t<widget name="key_red" position="70,160" zPosition="1" size="90,40" font="Regular;14" halign="center" valign="left" backgroundColor="transpBlack" transparent="1" />\n\t\t<widget name="key_green" position="200,160" zPosition="1" size="90,40" font="Regular;14" halign="center" valign="left" backgroundColor="transpBlack" transparent="1" />\n\t\t<widget name="key_yellow" position="330,160" zPosition="1" size="90,40" font="Regular;14" halign="center" valign="left" backgroundColor="transpBlack" transparent="1" />\n\t\t<widget name="key_blue" position="460,160" zPosition="1" size="90,40" font="Regular;14" halign="center" valign="left" backgroundColor="transpBlack" transparent="1" />\n\t</screen>'
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin ="""<screen name="SetDiskLabel" position="400,188" size="1100,601" title="Set Disk Label v1.1">
|
||||
<widget name="infoTXT" position="22,62" zPosition="1" size="591,86" font="baslk;28" halign="left" valign="center" backgroundColor="transpBlack" transparent="1" />
|
||||
|
||||
<widget name="devlist" position="685,60" size="310,132" font="Regular;20" valign="center" />
|
||||
|
||||
<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/k_left.png" position="628,86" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/k_right.png" position="1015,85" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/k_up.png" position="630,381" size="40,42" alphatest="on" />
|
||||
<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/k_down.png" position="1010,383" size="40,40" alphatest="on" />
|
||||
|
||||
<widget name="labelname" position="22,209" zPosition="1" size="591,86" font="baslk;30" valign="center" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="disklabel" position="697,212" size="290,77" zPosition="1" font="baslk;30" valign="left" />
|
||||
<widget name="labeltoset" position="22,363" zPosition="1" size="591,86" font="baslk;30" valign="center" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="listlabel" position="685,354" size="310,145" zPosition="1" font="Regular;20" valign="center" />
|
||||
|
||||
<ePixmap pixmap="skin_default/buttons/key_red.png" position="14,534" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="skin_default/buttons/key_green.png" position="259,535" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="skin_default/buttons/key_yellow.png" position="567,535" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="skin_default/buttons/key_blue.png" position="814,532" size="40,40" alphatest="on" />
|
||||
|
||||
<widget name="key_red" position="60,526" zPosition="1" size="196,40" font="baslk;25" halign="left" valign="left" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="key_green" position="304,526" zPosition="1" size="255,40" font="baslk;25" halign="left" valign="left" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="key_yellow" position="613,526" zPosition="1" size="196,40" font="baslk;25" halign="left" valign="left" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="key_blue" position="860,526" zPosition="1" size="233,40" font="baslk;25" halign="left" valign="left" backgroundColor="transpBlack" transparent="1" />
|
||||
<eLabel text="%s" font="Regular; 25" position="23,-10" size="968,57" halign="center" foregroundColor="yellow" backgroundColor="black" transparent="1" />
|
||||
</screen> """ % (_('!!!Do not set the label for /dev/mmcblk0p !!!'))
|
||||
else:
|
||||
skin = """<screen position="center,center" size="600,200" title="Set Disk Label v1.1" >
|
||||
<widget name="infoTXT" position="25,20" zPosition="1" size="310,38" font="Regular;20" halign="left" valign="center" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="devlist" position="400,20" size="125,25" />
|
||||
<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/k_left.png" position="350,15" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/k_right.png" position="550,15" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/k_up.png" position="350,105" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/k_down.png" position="550,105" size="40,40" alphatest="on" />
|
||||
<widget name="labelname" position="25,65" zPosition="1" size="310,25" font="Regular;20" halign="left" valign="center" backgroundColor="transpBlack" transparent="1"/>
|
||||
<widget name="disklabel" position="400,65" size="125,25" zPosition="1" font="Regular;20" halign="center" valign="left"/>
|
||||
<widget name="labeltoset" position="25,110" zPosition="1" size="310,25" font="Regular;20" halign="left" valign="center" backgroundColor="transpBlack" transparent="1"/>
|
||||
<widget name="listlabel" position="400,110" size="125,25" zPosition="1" font="Regular;20" valign="left"/>
|
||||
<ePixmap pixmap="skin_default/buttons/key_red.png" position="40,167" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="skin_default/buttons/key_green.png" position="170,167" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="skin_default/buttons/key_yellow.png" position="300,167" size="40,40" alphatest="on" />
|
||||
<ePixmap pixmap="skin_default/buttons/key_blue.png" position="430,167" size="40,40" alphatest="on" />
|
||||
<widget name="key_red" position="70,160" zPosition="1" size="90,40" font="Regular;14" halign="center" valign="left" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="key_green" position="200,160" zPosition="1" size="90,40" font="Regular;14" halign="center" valign="left" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="key_yellow" position="330,160" zPosition="1" size="90,40" font="Regular;14" halign="center" valign="left" backgroundColor="transpBlack" transparent="1" />
|
||||
<widget name="key_blue" position="460,160" zPosition="1" size="90,40" font="Regular;14" halign="center" valign="left" backgroundColor="transpBlack" transparent="1" />
|
||||
</screen>"""
|
||||
|
||||
def __init__(self, session):
|
||||
global liczymy
|
||||
Screen.__init__(self, session)
|
||||
self.labList = ['hdd', 'usb']
|
||||
self.labList = ['hdd', 'usb','card', 'cf']
|
||||
self.list = []
|
||||
self.sprDev()
|
||||
self.devlist = []
|
||||
@@ -653,6 +703,6 @@ class DeviceManagerSummary(Screen):
|
||||
|
||||
def SkinPath():
|
||||
myskinpath = resolveFilename(SCOPE_CURRENT_SKIN, '')
|
||||
if myskinpath == '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/':
|
||||
myskinpath = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/'
|
||||
if myskinpath == '' + LinkNeoBoot + '/images/':
|
||||
myskinpath = '' + LinkNeoBoot + '/images/'
|
||||
return myskinpath
|
||||
|
||||
220
NeoBoot/files/neoconsole.py
Normal file
220
NeoBoot/files/neoconsole.py
Normal file
@@ -0,0 +1,220 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from Plugins.Extensions.NeoBoot.__init__ import _
|
||||
from enigma import eConsoleAppContainer
|
||||
from Screens.Screen import Screen
|
||||
from Components.ActionMap import ActionMap
|
||||
from Components.ScrollLabel import ScrollLabel
|
||||
from Components.Sources.StaticText import StaticText
|
||||
from Screens.MessageBox import MessageBox
|
||||
from Components.Label import Label
|
||||
|
||||
|
||||
class Console(Screen):
|
||||
skin = """<screen name="ConsoleN" position="80,100" size="1010,230" title="Command execution...">
|
||||
<widget name="text" position="-2,-1" size="1015,230" font="Console;14" />
|
||||
</screen>"""
|
||||
|
||||
# def __init__(self, session, title = 'Console', cmdlist = None, finishedCallback = None, closeOnSuccess = False):
|
||||
# Screen.__init__(self, session)
|
||||
|
||||
def __init__(self, session, title = _('Console'), cmdlist = None, finishedCallback = None, closeOnSuccess = False):
|
||||
Screen.__init__(self, session)
|
||||
self.finishedCallback = finishedCallback
|
||||
self.closeOnSuccess = closeOnSuccess
|
||||
self.errorOcurred = False
|
||||
self['key_red'] = Label(_('Stop action'))
|
||||
self['key_green'] = Label(_('Hide Console'))
|
||||
self['text'] = ScrollLabel('')
|
||||
self['summary_description'] = StaticText('')
|
||||
self['actions'] = ActionMap(['WizardActions', 'DirectionActions', 'ColorActions'], {'ok': self.cancel,
|
||||
'back': self.cancel,
|
||||
'up': self.key_up,
|
||||
'down': self.key_down,
|
||||
'green': self.key_green,
|
||||
'red': self.key_red}, -1)
|
||||
self.cmdlist = cmdlist
|
||||
self.newtitle = title
|
||||
self.screen_hide = False
|
||||
self.cancel_msg = None
|
||||
self.output_file = ''
|
||||
self.onShown.append(self.updateTitle)
|
||||
self.container = eConsoleAppContainer()
|
||||
self.run = 0
|
||||
self.container.appClosed.append(self.runFinished)
|
||||
self.container.dataAvail.append(self.dataAvail)
|
||||
self.onLayoutFinish.append(self.startRun)
|
||||
return
|
||||
|
||||
def updateTitle(self):
|
||||
self.setTitle(self.newtitle)
|
||||
|
||||
def doExec(self, cmd):
|
||||
if isinstance(cmd, (list, tuple)):
|
||||
return self.container.execute(cmd[0], *cmd)
|
||||
else:
|
||||
return self.container.execute(cmd)
|
||||
|
||||
def startRun(self):
|
||||
self['text'].setText(_('Execution progress:') + '\n\n')
|
||||
self['summary_description'].setText(_('Execution progress:'))
|
||||
print '[Console] executing in run', self.run, ' the command:', self.cmdlist[self.run]
|
||||
if self.doExec(self.cmdlist[self.run]):
|
||||
self.runFinished(-1)
|
||||
|
||||
def runFinished(self, retval):
|
||||
if retval:
|
||||
self.errorOcurred = True
|
||||
self.toggleScreenHide(True)
|
||||
self.run += 1
|
||||
if self.run != len(self.cmdlist):
|
||||
if self.doExec(self.cmdlist[self.run]):
|
||||
self.runFinished(-1)
|
||||
else:
|
||||
# self['key_red'].setText(_('Close'))
|
||||
# self['key_green'].setText(_('Save'))
|
||||
self.toggleScreenHide(True)
|
||||
if self.cancel_msg:
|
||||
self.cancel_msg.close()
|
||||
from Tools.Directories import fileExists
|
||||
if not fileExists('/etc/vtiversion.info'):
|
||||
lastpage = self['text'].isAtLastPage()
|
||||
self['text'].appendText('\n' + _('Execution finished!!'))
|
||||
self['summary_description'].setText('\n' + _('Execution finished!!'))
|
||||
if self.finishedCallback is not None:
|
||||
self.finishedCallback()
|
||||
if not self.errorOcurred and self.closeOnSuccess:
|
||||
self.output_file = 'end'
|
||||
self.cancel()
|
||||
return
|
||||
|
||||
def key_up(self):
|
||||
if self.screen_hide:
|
||||
self.toggleScreenHide()
|
||||
return
|
||||
self['text'].pageUp()
|
||||
|
||||
def key_down(self):
|
||||
if self.screen_hide:
|
||||
self.toggleScreenHide()
|
||||
return
|
||||
self['text'].pageDown()
|
||||
|
||||
def key_green(self):
|
||||
if self.screen_hide:
|
||||
self.toggleScreenHide()
|
||||
return
|
||||
if self.output_file == 'end':
|
||||
pass
|
||||
elif self.output_file.startswith('/tmp/'):
|
||||
self['text'].setText(self.readFile(self.output_file))
|
||||
self['key_green'].setText(_(' '))
|
||||
self.output_file = 'end'
|
||||
elif self.run == len(self.cmdlist):
|
||||
self.saveOutputText()
|
||||
#self.toggleScreenHide()
|
||||
else:
|
||||
self.toggleScreenHide()
|
||||
|
||||
def key_red(self):
|
||||
if self.screen_hide:
|
||||
self.toggleScreenHide()
|
||||
return
|
||||
if self.run == len(self.cmdlist):
|
||||
self.cancel()
|
||||
else:
|
||||
self.cancel_msg = self.session.openWithCallback(self.cancelCB, MessageBox, _('Cancel execution?'), type=MessageBox.TYPE_YESNO, default=False)
|
||||
|
||||
def cancelCB(self, ret = None):
|
||||
self.cancel_msg = None
|
||||
if ret:
|
||||
self.cancel(True)
|
||||
return
|
||||
|
||||
def saveOutputText(self):
|
||||
from time import time, localtime
|
||||
lt = localtime(time())
|
||||
self.output_file = '/tmp/%02d%02d%02d_console.txt' % (lt[3], lt[4], lt[5])
|
||||
self.session.openWithCallback(self.saveOutputTextCB, MessageBox, _("Save the commands and the output to a file?\n('%s')") % self.output_file, type=MessageBox.TYPE_YESNO, default=True)
|
||||
|
||||
def formatCmdList(self, source):
|
||||
if isinstance(source, (list, tuple)):
|
||||
for x in source:
|
||||
for y in self.formatCmdList(x):
|
||||
yield y
|
||||
|
||||
else:
|
||||
yield source
|
||||
|
||||
def saveOutputTextCB(self, ret = None):
|
||||
if ret:
|
||||
from os import path
|
||||
failtext = _("Path to save not exist: '/tmp/'")
|
||||
if path.exists('/tmp/'):
|
||||
text = 'commands ...\n\n'
|
||||
try:
|
||||
cmdlist = list(self.formatCmdList(self.cmdlist))
|
||||
text += 'command line: %s\n\n' % cmdlist[0]
|
||||
script = ''
|
||||
for cmd in cmdlist[0].split():
|
||||
if '.' in cmd:
|
||||
if cmd[-3:] in ('.py', '.sh'):
|
||||
script = cmd
|
||||
break
|
||||
|
||||
if script and path.isfile(script):
|
||||
text += 'script listing: %s\n\n%s\n\n' % (script, self.readFile(script))
|
||||
if len(cmdlist) > 1:
|
||||
text += 'next commands:\n\n' + '\n'.join(cmdlist[1:]) + '\n\n'
|
||||
except:
|
||||
text += 'error read commands!!!\n\n'
|
||||
|
||||
text += '-' * 50 + '\n\noutputs ...\n\n%s' % self['text'].getText()
|
||||
try:
|
||||
f = open(self.output_file, 'w')
|
||||
f.write(text)
|
||||
f.close()
|
||||
self['key_green'].setText(_('Load'))
|
||||
return
|
||||
except:
|
||||
failtext = _("File write error: '%s'") % self.output_file
|
||||
|
||||
self.output_file = 'end'
|
||||
self['key_green'].setText(_(' '))
|
||||
self.session.open(MessageBox, failtext, type=MessageBox.TYPE_ERROR)
|
||||
else:
|
||||
self.output_file = ''
|
||||
|
||||
def toggleScreenHide(self, setshow = False):
|
||||
if self.screen_hide or setshow:
|
||||
self.show()
|
||||
else:
|
||||
self.hide()
|
||||
self.screen_hide = not (self.screen_hide or setshow)
|
||||
|
||||
def readFile(self, file):
|
||||
try:
|
||||
with open(file, 'r') as rdfile:
|
||||
rd = rdfile.read()
|
||||
rdfile.close()
|
||||
except:
|
||||
if file == self.output_file:
|
||||
rd = self['text'].getText()
|
||||
else:
|
||||
rd = "File read error: '%s'\n" % file
|
||||
|
||||
return rd
|
||||
|
||||
def cancel(self, force = False):
|
||||
if self.screen_hide:
|
||||
self.toggleScreenHide()
|
||||
return
|
||||
if force or self.run == len(self.cmdlist):
|
||||
self.close()
|
||||
self.container.appClosed.remove(self.runFinished)
|
||||
self.container.dataAvail.remove(self.dataAvail)
|
||||
if self.run != len(self.cmdlist):
|
||||
self.container.kill()
|
||||
|
||||
def dataAvail(self, str):
|
||||
self['text'].appendText(str)
|
||||
@@ -332,7 +332,7 @@ def getVuModel():
|
||||
f = open("/proc/stb/info/vumodel",'r')
|
||||
procmodel = f.readline().strip()
|
||||
f.close()
|
||||
model = procmodel.title().replace("olose", "olo SE").replace("olo2se", "olo2 SE").replace("2", "²")
|
||||
model = procmodel.title().replace("olose", "olo SE").replace("olo2se", "olo2 SE").replace("2", "²")
|
||||
return model
|
||||
|
||||
#zwraca nazwe stb z pliku hostname
|
||||
@@ -694,5 +694,3 @@ def getMachineProcModel():
|
||||
|
||||
boxbrand = sys.modules[__name__]
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user