mirror of
				https://mojerepo.cf/NeoBoot/NeoBoot-9.git
				synced 2025-10-31 16:35:48 +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