aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Components
diff options
context:
space:
mode:
authorFraxinas <andreas.frisch@multimedia-labs.de>2009-01-29 11:44:53 +0100
committerFraxinas <andreas.frisch@multimedia-labs.de>2009-01-29 11:44:53 +0100
commit88b281557a05fb785a42274bf0f3bc328f9eebfd (patch)
tree487b42b54d8574941fac92997ff32fe1658b2592 /lib/python/Components
parente79a0c2d96337514acb0763e537235c0ef997100 (diff)
parent979f7263f0c8807dce237fcfb5586112c55e5e20 (diff)
downloadenigma2-88b281557a05fb785a42274bf0f3bc328f9eebfd.tar.gz
enigma2-88b281557a05fb785a42274bf0f3bc328f9eebfd.zip
Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
Diffstat (limited to 'lib/python/Components')
-rw-r--r--lib/python/Components/Console.py4
-rw-r--r--lib/python/Components/Converter/EventTime.py4
-rw-r--r--lib/python/Components/Converter/MovieInfo.py4
-rw-r--r--lib/python/Components/Converter/ServicePosition.py4
-rw-r--r--lib/python/Components/Converter/ServiceTime.py4
-rw-r--r--lib/python/Components/Element.py7
-rw-r--r--lib/python/Components/Harddisk.py64
-rw-r--r--lib/python/Components/MovieList.py5
-rw-r--r--lib/python/Components/NimManager.py6
-rw-r--r--lib/python/Components/Renderer/Canvas.py2
-rw-r--r--lib/python/Components/Renderer/PositionGauge.py7
-rw-r--r--lib/python/Components/UsageConfig.py14
-rwxr-xr-xlib/python/Components/config.py14
13 files changed, 104 insertions, 35 deletions
diff --git a/lib/python/Components/Console.py b/lib/python/Components/Console.py
index 136d10d0..f1f3fd95 100644
--- a/lib/python/Components/Console.py
+++ b/lib/python/Components/Console.py
@@ -21,7 +21,9 @@ class Console(object):
self.appContainers[name] = eConsoleAppContainer()
self.appContainers[name].dataAvail.append(boundFunction(self.dataAvailCB,name))
self.appContainers[name].appClosed.append(boundFunction(self.finishedCB,name))
- retval = self.appContainers[name].execute(cmd)
+ if isinstance(cmd, str): # until .execute supports a better api
+ cmd = [cmd]
+ retval = self.appContainers[name].execute(*cmd)
if retval:
self.finishedCB(name, retval)
diff --git a/lib/python/Components/Converter/EventTime.py b/lib/python/Components/Converter/EventTime.py
index 966f2ca8..41f1ebf3 100644
--- a/lib/python/Components/Converter/EventTime.py
+++ b/lib/python/Components/Converter/EventTime.py
@@ -1,7 +1,7 @@
from Converter import Converter
from Poll import Poll
from time import time
-from Components.Element import cached
+from Components.Element import cached, ElementError
class EventTime(Poll, Converter, object):
STARTTIME = 0
@@ -28,7 +28,7 @@ class EventTime(Poll, Converter, object):
self.poll_interval = 30*1000
self.poll_enabled = True
else:
- raise str("'%s' is not <StartTime|EndTime|Remaining|Duration|Progress> for EventTime converter" % type)
+ raise ElementError("'%s' is not <StartTime|EndTime|Remaining|Duration|Progress> for EventTime converter" % type)
@cached
def getTime(self):
diff --git a/lib/python/Components/Converter/MovieInfo.py b/lib/python/Components/Converter/MovieInfo.py
index 068d24d3..be28dcce 100644
--- a/lib/python/Components/Converter/MovieInfo.py
+++ b/lib/python/Components/Converter/MovieInfo.py
@@ -1,5 +1,5 @@
from Components.Converter.Converter import Converter
-from Components.Element import cached
+from Components.Element import cached, ElementError
from enigma import iServiceInformation
from ServiceReference import ServiceReference
@@ -16,7 +16,7 @@ class MovieInfo(Converter, object):
elif type == "RecordServiceName":
self.type = self.MOVIE_REC_SERVICE_NAME
else:
- raise str("'%s' is not <ShortDescription|MetaDescription|RecordServiceName> for MovieInfo converter" % type)
+ raise ElementError("'%s' is not <ShortDescription|MetaDescription|RecordServiceName> for MovieInfo converter" % type)
Converter.__init__(self, type)
@cached
diff --git a/lib/python/Components/Converter/ServicePosition.py b/lib/python/Components/Converter/ServicePosition.py
index d7a55dae..2bcc5492 100644
--- a/lib/python/Components/Converter/ServicePosition.py
+++ b/lib/python/Components/Converter/ServicePosition.py
@@ -1,7 +1,7 @@
from Converter import Converter
from Poll import Poll
from enigma import iPlayableService
-from Components.Element import cached
+from Components.Element import cached, ElementError
class ServicePosition(Converter, Poll, object):
TYPE_LENGTH = 0
@@ -35,7 +35,7 @@ class ServicePosition(Converter, Poll, object):
elif type == "Gauge":
self.type = self.TYPE_GAUGE
else:
- raise "type must be {Length|Position|Remaining|Gauge} with optional arguments {Negate|Detailed|ShowHours|NoSeconds}"
+ raise ElementError("type must be {Length|Position|Remaining|Gauge} with optional arguments {Negate|Detailed|ShowHours|NoSeconds}")
self.poll_enabled = self.type != self.TYPE_LENGTH
diff --git a/lib/python/Components/Converter/ServiceTime.py b/lib/python/Components/Converter/ServiceTime.py
index 16bcae3a..89965067 100644
--- a/lib/python/Components/Converter/ServiceTime.py
+++ b/lib/python/Components/Converter/ServiceTime.py
@@ -1,5 +1,5 @@
from Converter import Converter
-from Components.Element import cached
+from Components.Element import cached, ElementError
from enigma import iServiceInformation
class ServiceTime(Converter, object):
@@ -16,7 +16,7 @@ class ServiceTime(Converter, object):
elif type == "Duration":
self.type = self.DURATION
else:
- raise str("'%s' is not <StartTime|EndTime|Duration> for eEventTime converter" % type)
+ raise ElementError("'%s' is not <StartTime|EndTime|Duration> for eEventTime converter" % type)
@cached
def getTime(self):
diff --git a/lib/python/Components/Element.py b/lib/python/Components/Element.py
index 2af57793..f4a8f127 100644
--- a/lib/python/Components/Element.py
+++ b/lib/python/Components/Element.py
@@ -16,6 +16,13 @@ def cached(f):
return cache[name][1]
return wrapper
+class ElementError(Exception):
+ def __init__(self, message):
+ self.message = message
+
+ def __str__(self):
+ return self.message
+
class Element(object):
CHANGED_DEFAULT = 0 # initial "pull" state
CHANGED_ALL = 1 # really everything changed
diff --git a/lib/python/Components/Harddisk.py b/lib/python/Components/Harddisk.py
index ad7f28de..1fc629a0 100644
--- a/lib/python/Components/Harddisk.py
+++ b/lib/python/Components/Harddisk.py
@@ -2,7 +2,8 @@ from os import system, listdir, statvfs, popen, makedirs, readlink, stat, major,
from Tools.Directories import SCOPE_HDD, resolveFilename
from Tools.CList import CList
from SystemInfo import SystemInfo
-import string
+import string, time
+from Components.Console import Console
def tryOpen(filename):
try:
@@ -18,6 +19,8 @@ class Harddisk:
tmp = procfile.readline().split(':')
s_major = int(tmp[0])
s_minor = int(tmp[1])
+ self.max_idle_time = 0
+ self.idle_running = False
for disc in listdir("/dev/discs"):
path = readlink('/dev/discs/'+disc)
devidex = '/dev/discs/'+disc+'/'
@@ -28,6 +31,7 @@ class Harddisk:
self.devidex = devidex
self.devidex2 = devidex2
print "new Harddisk", device, '->', self.devidex, '->', self.devidex2
+ self.startIdle()
break
def __lt__(self, ob):
@@ -213,6 +217,64 @@ class Harddisk:
def getDeviceName(self):
return self.getDeviceDir() + "disc"
+ # the HDD idle poll daemon.
+ # as some harddrives have a buggy standby timer, we are doing this by hand here.
+ # first, we disable the hardware timer. then, we check every now and then if
+ # any access has been made to the disc. If there has been no access over a specifed time,
+ # we set the hdd into standby.
+ def readStats(self):
+ l = open("/sys/block/%s/stat" % self.device).read()
+ nr_read = int(l[:8].strip())
+ nr_write = int(l[4*9:4*9+8].strip())
+ return nr_read, nr_write
+
+ def startIdle(self):
+ self.last_access = time.time()
+ self.last_stat = 0
+ self.is_sleeping = False
+ from enigma import eTimer
+
+ # disable HDD standby timer
+ Console().ePopen(("hdparm", "hdparm", "-S0", (self.devidex + "disc")))
+ self.timer = eTimer()
+ self.timer.callback.append(self.runIdle)
+ self.idle_running = True
+ self.setIdleTime(self.max_idle_time) # kick the idle polling loop
+
+ def runIdle(self):
+ if not self.max_idle_time:
+ return
+ t = time.time()
+
+ idle_time = t - self.last_access
+
+ l = sum(self.readStats())
+
+ if l != self.last_stat: # access
+ self.last_stat = l
+ self.last_access = t
+ self.idle_time = 0
+ self.is_sleeping = False
+
+ #print "[IDLE]", idle_time, self.max_idle_time, self.is_sleeping
+ if idle_time >= self.max_idle_time and not self.is_sleeping:
+ self.setSleep()
+ self.is_sleeping = True
+
+ def setSleep(self):
+ Console().ePopen(("hdparm", "hdparm", "-y", (self.devidex + "disc")))
+
+ def setIdleTime(self, idle):
+ self.max_idle_time = idle
+ if self.idle_running:
+ if not idle:
+ self.timer.stop()
+ else:
+ self.timer.start(idle * 250, False) # poll 4 times per period.
+
+ def isSleeping(self):
+ return self.is_sleeping
+
class Partition:
def __init__(self, mountpoint, device = None, description = "", force_mounted = False):
self.mountpoint = mountpoint
diff --git a/lib/python/Components/MovieList.py b/lib/python/Components/MovieList.py
index 8568f3d6..5c98e4be 100644
--- a/lib/python/Components/MovieList.py
+++ b/lib/python/Components/MovieList.py
@@ -93,10 +93,7 @@ class MovieList(GUIComponent):
if len > 0:
len = "%d:%02d" % (len / 60, len % 60)
else:
- if config.usage.load_length_of_movies_in_moviellist.value:
- len = "?:??"
- else:
- len = "X:XX"
+ len = ""
res = [ None ]
diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py
index 1fcbda1a..2692cb5b 100644
--- a/lib/python/Components/NimManager.py
+++ b/lib/python/Components/NimManager.py
@@ -14,8 +14,6 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \
from time import localtime, mktime
from datetime import datetime
-from sets import Set
-
def getConfigSatlist(orbpos, satlist):
default_orbpos = None
for x in satlist:
@@ -123,7 +121,7 @@ class SecConfigure:
def update(self):
sec = secClass.getInstance()
- self.configuredSatellites = Set()
+ self.configuredSatellites = set()
sec.clear() ## this do unlinking NIMs too !!
print "sec config cleared"
@@ -442,7 +440,7 @@ class SecConfigure:
def __init__(self, nimmgr):
self.NimManager = nimmgr
- self.configuredSatellites = Set()
+ self.configuredSatellites = set()
self.update()
class NIM(object):
diff --git a/lib/python/Components/Renderer/Canvas.py b/lib/python/Components/Renderer/Canvas.py
index bd7ffb5e..acf0dbf7 100644
--- a/lib/python/Components/Renderer/Canvas.py
+++ b/lib/python/Components/Renderer/Canvas.py
@@ -35,7 +35,7 @@ class Canvas(Renderer):
self.instance.writeText(eRect(l[1], l[2], l[3], l[4]), gRGB(l[5]), gRGB(l[6]), l[7], l[8], l[9])
else:
print "drawlist entry:", l
- raise "invalid drawlist entry"
+ raise RuntimeError("invalid drawlist entry")
def changed(self, what):
self.pull_updates()
diff --git a/lib/python/Components/Renderer/PositionGauge.py b/lib/python/Components/Renderer/PositionGauge.py
index 5fa8c356..3f93d82e 100644
--- a/lib/python/Components/Renderer/PositionGauge.py
+++ b/lib/python/Components/Renderer/PositionGauge.py
@@ -50,9 +50,10 @@ class PositionGauge(Renderer):
return self.__cutlist
def setCutlist(self, cutlist):
- self.__cutlist = cutlist
- if self.instance is not None:
- self.instance.setInOutList(cutlist)
+ if self.__cutlist != cutlist:
+ self.__cutlist = cutlist
+ if self.instance is not None:
+ self.instance.setInOutList(cutlist)
cutlist = property(getCutlist, setCutlist)
diff --git a/lib/python/Components/UsageConfig.py b/lib/python/Components/UsageConfig.py
index 2ea91aeb..21e057f2 100644
--- a/lib/python/Components/UsageConfig.py
+++ b/lib/python/Components/UsageConfig.py
@@ -17,12 +17,12 @@ def InitUsageConfig():
config.usage.show_infobar_on_zap = ConfigYesNo(default = True)
config.usage.show_infobar_on_skip = ConfigYesNo(default = True)
config.usage.show_infobar_on_event_change = ConfigYesNo(default = True)
- config.usage.hdd_standby = ConfigSelection(default = "120", choices = [
- ("0", _("no standby")), ("2", "10 " + _("seconds")), ("6", "30 " + _("seconds")),
- ("12", "1 " + _("minute")), ("24", "2 " + _("minutes")),
- ("60", "5 " + _("minutes")), ("120", "10 " + _("minutes")), ("240", "20 " + _("minutes")),
- ("241", "30 " + _("minutes")), ("242", "1 " + _("hour")), ("244", "2 " + _("hours")),
- ("248", "4 " + _("hours")) ])
+ config.usage.hdd_standby = ConfigSelection(default = "600", choices = [
+ ("0", _("no standby")), ("10", "10 " + _("seconds")), ("30", "30 " + _("seconds")),
+ ("60", "1 " + _("minute")), ("120", "2 " + _("minutes")),
+ ("300", "5 " + _("minutes")), ("600", "10 " + _("minutes")), ("1200", "20 " + _("minutes")),
+ ("1800", "30 " + _("minutes")), ("3600", "1 " + _("hour")), ("7200", "2 " + _("hours")),
+ ("14400", "4 " + _("hours")) ])
config.usage.output_12V = ConfigSelection(default = "do not change", choices = [
("do not change", _("do not change")), ("off", _("off")), ("on", _("on")) ])
@@ -66,7 +66,7 @@ def InitUsageConfig():
def setHDDStandby(configElement):
for hdd in harddiskmanager.HDDList():
- os.system("hdparm -S%s %s" % (configElement.value, hdd[1].getDeviceName()))
+ hdd[1].setIdleTime(int(configElement.value))
config.usage.hdd_standby.addNotifier(setHDDStandby)
def set12VOutput(configElement):
diff --git a/lib/python/Components/config.py b/lib/python/Components/config.py
index a7724f40..6eeca698 100755
--- a/lib/python/Components/config.py
+++ b/lib/python/Components/config.py
@@ -629,11 +629,12 @@ class ConfigClock(ConfigSequence):
def increment(self):
# Check if Minutes maxed out
if self._value[1] == 59:
- # Check if Hours not maxed out
+ # Increment Hour, reset Minutes
if self._value[0] < 23:
- # Increment Hour, reset Minutes to 0
self._value[0] += 1
- self._value[1] = 0
+ else:
+ self._value[0] = 0
+ self._value[1] = 0
else:
# Increment Minutes
self._value[1] += 1
@@ -643,11 +644,12 @@ class ConfigClock(ConfigSequence):
def decrement(self):
# Check if Minutes is minimum
if self._value[1] == 0:
- # Check if Hour is greater than 0
+ # Decrement Hour, set Minutes to 59
if self._value[0] > 0:
- # Decrement Hour, set Minutes to 59
self._value[0] -= 1
- self._value[1] = 59
+ else:
+ self._value[0] = 23
+ self._value[1] = 59
else:
# Decrement Minutes
self._value[1] -= 1