assert isinstance(serviceref, ServiceReference)
- if serviceref.getType() == eServiceReference.idDVB and serviceref.getPath() == "":
+ if serviceref.isRecordable():
self.service_ref = serviceref
else:
self.service_ref = ServiceReference(None)
def __str__(self):
return self.ref.toString()
-
+
def getServiceName(self):
info = self.info()
return info and info.getName(self.ref) or ""
def list(self):
return self.serviceHandler.list(self.ref)
-
+
def getType(self):
return self.ref.type
-
+
def getPath(self):
return self.ref.getPath()
+
+ def getFlags(self):
+ return self.ref.flags
+
+ def isRecordable(self):
+ ref = self.ref
+ return ref.flags & eServiceReference.isGroup or (ref.type == eServiceReference.idDVB and ref.getPath() == "")
\ No newline at end of file
#SERVICE 1:0:1:701:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:\r
#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:308:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:F98:454:1:C00000:0:0:0:\r
#SERVICE 1:0:19:2B70:3F3:1:C00000:0:0:0:\r
#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:\r
#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen\r
#DESCRIPTION Doku/Wissen/Themen\r
-#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F47:445:1:C00000:0:0:0:\r
#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:\r
#SERVICE 1:0:1:2775:444:1:C00000:0:0:0:\r
#SERVICE 1:0:1:293:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:277B:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:49:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:\r
#SERVICE 1:0:1:3139:459:1:C00000:0:0:0:\r
#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:\r
#SERVICE 1:0:1:701:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:2F1C:441:1:C00000:0:0:0:\r
#SERVICE 1:0:1:6D6E:437:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:308:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:2FC:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:F98:454:1:C00000:0:0:0:\r
#SERVICE 1:0:1:7034:41B:1:C00000:0:0:0:\r
#SERVICE 1:0:1:6E42:431:1:C00000:0:0:0:\r
#SERVICE 1:64:B:0:0:0:0:0:0:0::Doku/Wissen/Themen\r
#DESCRIPTION Doku/Wissen/Themen\r
-#SERVICE 1:0:1:6DD0:44D:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:6F47:445:1:C00000:0:0:0:\r
#SERVICE 1:0:1:6D6B:437:1:C00000:0:0:0:\r
#SERVICE 1:0:1:2775:444:1:C00000:0:0:0:\r
#SERVICE 1:0:1:293:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:6D70:437:1:C00000:0:0:0:\r
-#SERVICE 1:0:1:277B:444:1:C00000:0:0:0:\r
+#SERVICE 1:0:1:49:5:85:C00000:0:0:0:\r
#SERVICE 1:0:1:332D:45B:1:C00000:0:0:0:\r
#SERVICE 1:0:1:3139:459:1:C00000:0:0:0:\r
#SERVICE 1:0:1:2F5A:454:1:C00000:0:0:0:\r
</screen>
<!-- Color OLED screen (standby) -->
<screen name="StandbySummary" position="0,0" size="96,64" id="2">
- <widget source="global.CurrentTime" render="Label" position="0,0" size="96,64" font="Regular;40" halign="center" valign="center">
+ <widget source="global.CurrentTime" render="Label" position="0,0" size="96,64" font="Regular;38" halign="center" valign="center">
<convert type="ClockToText">Format:%H:%M</convert>
</widget>
<widget source="session.RecordState" render="FixedLabel" position="0,0" zPosition="1" size="96,64" text=" ">
selectioncross.png \
unlock.png \
unlockBouquet.png
+
</code>
</step>
<step id="parentalsetup">
- <text value="You need to set a pin code and hide it from your children.\n\nDo you want to set the pin now?" />
+ <text value="You need to set a PIN code and hide it from your children.\n\nDo you want to set the pin now?" />
<list>
<listentry caption="Yes" step="finishparentalsetup" />
- <listentry caption="No" step="finishparentalsetup" />
+ <listentry caption="No" step="warnpin" />
</list>
<code pos="after">
from ParentalControlSetup import ParentalControlChangePin
self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("parental control pin"))
</code>
</step>
+ <step id="warnpin">
+ <text value="Please be aware, that anyone can disable the parental control, if you have not set a PIN." />
+ </step>
<step id="finishparentalsetup">
<code>
-config.ParentalControl.setuppinactive.value = True
+if config.ParentalControl.setuppin.value == "aaaa":
+ config.ParentalControl.setuppinactive.value = False
+else:
+ config.ParentalControl.setuppinactive.value = True
config.ParentalControl.setuppinactive.save()
config.ParentalControl.servicepinactive.value = True
config.ParentalControl.servicepinactive.save()
eRCDeviceInputDev::eRCDeviceInputDev(eRCInputEventDriver *driver)
:eRCDevice(driver->getDeviceName(), driver), iskeyboard(false)
{
- int len=id.length();
- int idx=0;
- while(idx <= len-8)
- {
- if (!strncasecmp(&id[idx++], "KEYBOARD", 8))
- {
- iskeyboard=true;
- break;
- }
- }
+ if (strcasestr(id.c_str(), "keyboard") != NULL)
+ iskeyboard = true;
setExclusive(true);
eDebug("Input device \"%s\" is %sa keyboard.", id.c_str(), iskeyboard ? "" : "not ");
}
return 0;
}
-static int readMpegProc(char *str, int decoder)
+static int readMpegProc(const char *str, int decoder)
{
int val = -1;
char tmp[64];
int TDT::createTable(unsigned int nr, const __u8 *data, unsigned int max)
{
- if ( data && data[0] == 0x70 || data[0] == 0x73 )
+ if ( data && (data[0] == 0x70 || data[0] == 0x73 ))
{
int length = ((data[1] & 0x0F) << 8) | data[2];
if ( length >= 5 )
{
__u8 buffer[10];
(*desc)->writeToBuffer(buffer);
- if (!strncmp((char*)buffer+2, "EPGDATA", 7))
+ if (!strncmp((const char *)buffer+2, "EPGDATA", 7))
{
eServiceReferenceDVB ref;
if (!pmthandler->getServiceReference(ref))
messages.send(Message(Message::got_mhw2_channel_pid, ref, pid));
}
}
- else if(!strncmp((char*)buffer+2, "FICHAS", 6))
+ else if(!strncmp((const char *)buffer+2, "FICHAS", 6))
{
eServiceReferenceDVB ref;
if (!pmthandler->getServiceReference(ref))
messages.send(Message(Message::got_mhw2_summary_pid, ref, pid));
}
}
- else if(!strncmp((char*)buffer+2, "GENEROS", 7))
+ else if(!strncmp((const char *)buffer+2, "GENEROS", 7))
{
eServiceReferenceDVB ref;
if (!pmthandler->getServiceReference(ref))
int dst_addr, int dst_width, int dst_height, int dst_stride,
int src_x, int src_y, int width, int height,
int dst_x, int dst_y, int dwidth, int dheight,
- int pal_addr);
+ int pal_addr, int flags);
extern void bcm_accel_fill(
int dst_addr, int dst_width, int dst_height, int dst_stride,
int x, int y, int width, int height,
dst->data_phys, dst->x, dst->y, dst->stride,
area.left(), area.top(), area.width(), area.height(),
p.x(), p.y(), p.width(), p.height(),
- pal_addr);
+ pal_addr, flags);
return 0;
}
#endif
int dst_addr, int dst_width, int dst_height, int dst_stride,
int src_x, int src_y, int width, int height,
int dst_x, int dst_y, int dwidth, int dheight,
- int pal_addr)
+ int pal_addr, int flags)
{
C(0x43); // reset source
C(0x53); // reset dest
}
pGlyph ng;
- ng.bbox.setLeft( (flags&GS_ISFIRST|cursor.x()-1)+glyph->left );
+ ng.bbox.setLeft( ((flags&GS_ISFIRST)|(cursor.x()-1))+glyph->left );
ng.bbox.setTop( cursor.y() - glyph->top );
ng.bbox.setWidth( glyph->width );
ng.bbox.setHeight( glyph->height );
#include <lib/gui/ewidgetdesktop.h>
ePixmap::ePixmap(eWidget *parent)
- :eWidget(parent), m_alphatest(false), m_scale(false)
+ :eWidget(parent), m_alphatest(false), m_scale(false), m_have_border_color(false), m_border_width(0)
{
}
event(evtChangedPixmap);
}
+void ePixmap::setBorderWidth(int pixel)
+{
+ m_border_width=pixel;
+ invalidate();
+}
+
+void ePixmap::setBorderColor(const gRGB &color)
+{
+ m_border_color=color;
+ m_have_border_color=true;
+ invalidate();
+}
+
void ePixmap::checkSize()
{
- /* when we have no pixmap, or a pixmap of different size, we need
+ /* when we have no pixmap, or a pixmap of different size, we need
to enable transparency in any case. */
if (m_pixmap && m_pixmap->size() == size() && !m_alphatest)
setTransparent(0);
case evtPaint:
{
ePtr<eWindowStyle> style;
-
+
+ eSize s(size());
getStyle(style);
// we don't clear the background before because of performance reasons.
// when the pixmap is too small to fit the whole widget area, the widget is
// transparent anyway, so the background is already painted.
-// eWidget::event(event, data, data2);
+// eWidget::event(event, data, data2);
gPainter &painter = *(gPainter*)data2;
if (m_pixmap)
painter.blit(m_pixmap, ePoint(0, 0), eRect(), flags);
}
+ if (m_have_border_color)
+ painter.setForegroundColor(m_border_color);
+
+ if (m_border_width) {
+ painter.fill(eRect(0, 0, s.width(), m_border_width));
+ painter.fill(eRect(0, m_border_width, m_border_width, s.height()-m_border_width));
+ painter.fill(eRect(m_border_width, s.height()-m_border_width, s.width()-m_border_width, m_border_width));
+ painter.fill(eRect(s.width()-m_border_width, m_border_width, m_border_width, s.height()-m_border_width));
+ }
+
return 0;
}
case evtChangedPixmap:
void setPixmapFromFile(const char *filename);
void setAlphatest(int alphatest); /* 1 for alphatest, 2 for alphablend */
void setScale(int scale);
+ void setBorderWidth(int pixel);
+ void setBorderColor(const gRGB &color);
protected:
ePtr<gPixmap> m_pixmap;
int event(int event, void *data=0, void *data2=0);
{
evtChangedPixmap = evtUserWidget,
};
+ bool m_have_border_color;
+ int m_border_width;
+ gRGB m_border_color;
};
#endif
self.update()
class NIM(object):
- def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}, frontend_id = None, is_empty = False):
+ def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}, frontend_id = None, i2c = None, is_empty = False):
self.slot = slot
if type not in ("DVB-S", "DVB-C", "DVB-T", "DVB-S2", None):
self.has_outputs = has_outputs
self.internally_connectable = internally_connectable
self.multi_type = multi_type
+ self.i2c = i2c
self.frontend_id = frontend_id
self.__is_empty = is_empty
def getSlotID(self):
return chr(ord('A') + self.slot)
+ def getI2C(self):
+ return self.i2c
+
def hasOutputs(self):
return self.has_outputs
modes = entries[current_slot].get("multi_type", {})
modes[split2[1]] = split[1].strip()
entries[current_slot]["multi_type"] = modes
+ elif line.strip().startswith("I2C_Device:"):
+ input = int(line.strip()[len("I2C_Device:") + 1:])
+ entries[current_slot]["i2c"] = input
elif line.strip().startswith("empty"):
entries[current_slot]["type"] = None
entries[current_slot]["name"] = _("N/A")
if not (entry.has_key("name") and entry.has_key("type")):
entry["name"] = _("N/A")
entry["type"] = None
+ if not (entry.has_key("i2c")):
+ entry["i2c"] = None
if not (entry.has_key("has_outputs")):
entry["has_outputs"] = True
if entry.has_key("frontend_device"): # check if internally connectable
entry["frontend_device"] = entry["internally_connectable"] = None
if not (entry.has_key("multi_type")):
entry["multi_type"] = {}
- self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"], multi_type = entry["multi_type"], frontend_id = entry["frontend_device"], is_empty = entry["isempty"]))
+ self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"], multi_type = entry["multi_type"], frontend_id = entry["frontend_device"], i2c = entry["i2c"], is_empty = entry["isempty"]))
def hasNimType(self, chktype):
for slot in self.nim_slots:
def getNim(self, slotid):
return self.nim_slots[slotid]
+
+ def getI2CDevice(self, slotid):
+ return self.nim_slots[slotid].getI2C()
def getNimListOfType(self, type, exception = -1):
# returns a list of indexes for NIMs compatible to the given type, except for 'exception'
nim = config.Nims[x]
if slot.isCompatible("DVB-S"):
- nim.toneAmplitude = ConfigSelection([("9", "600mV"), ("8", "700mV"), ("7", "800mV"), ("6", "900mV"), ("5", "1100mV")], "7")
+ nim.toneAmplitude = ConfigSelection([("11", "340mV"), ("10", "360mV"), ("9", "600mV"), ("8", "700mV"), ("7", "800mV"), ("6", "900mV"), ("5", "1100mV")], "7")
nim.toneAmplitude.fe_id = x - empty_slots
nim.toneAmplitude.slot_id = x
nim.toneAmplitude.addNotifier(toneAmplitudeChanged)
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_cutlisteditor.xml
self.relevantAudioPIDs = [ ]
self.getRelevantAudioPIDs(title)
self.generated_files = [ ]
+ self.mplex_audiofiles = { }
+ self.mplex_videofile = ""
self.mplex_streamfiles = [ ]
if len(self.cutlist) > 1:
self.args += [ "-cut", self.cutfile ]
def haveNewFile(self, file):
print "[DemuxTask] produced file:", file, self.currentPID
self.generated_files.append(file)
- if self.currentPID in self.relevantAudioPIDs or file.endswith("m2v"):
- self.mplex_streamfiles.append(file)
+ if self.currentPID in self.relevantAudioPIDs:
+ self.mplex_audiofiles[self.currentPID] = file
+ elif file.endswith("m2v"):
+ self.mplex_videofile = file
def haveProgress(self, progress):
#print "PROGRESS [%s]" % progress
f.close()
def cleanup(self, failed):
+ print "[DemuxTask::cleanup]"
+ self.mplex_streamfiles = [ self.mplex_videofile ]
+ for pid in self.relevantAudioPIDs:
+ self.mplex_streamfiles.append(self.mplex_audiofiles[pid])
+ print self.mplex_streamfiles
+
if failed:
import os
for file in self.generated_files:
pid = str(i.getPID())
if description == "MPEG":
description = "MP2"
- print "[audiotrack] pid:", pid, "description:", description, "language:", DVB_lang
+ print "[audiotrack] pid:", pid, "description:", description, "language:", DVB_lang, "count:", x, "active:", (x < 8)
self.t.properties.audiotracks.append(ConfigSubsection())
- self.t.properties.audiotracks[-1].active = ConfigYesNo(default = True)
+ self.t.properties.audiotracks[-1].active = ConfigYesNo(default = (x < 8))
self.t.properties.audiotracks[-1].format = ConfigFixedText(description)
self.t.properties.audiotracks[-1].language = ConfigSelection(choices = languageChoices.choices, default=languageChoices.getLanguage(DVB_lang))
self.t.properties.audiotracks[-1].pid = ConfigFixedText(pid)
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_dvdburn.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_dvdplayer.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_graphmultiepg.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_mediaplayer.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_mediascanner.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_pictureplayer.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_socketmmi.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_tuxboxplugins.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_cleanupwizard.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_commoninterfaceassignment.xml
+import sha\r
+\r
+def bin2long(s):\r
+ return reduce( lambda x,y:(x<<8L)+y, map(ord, s))\r
+\r
+def long2bin(l):\r
+ res = ""\r
+ for byte in range(128):\r
+ res += chr((l >> (1024 - (byte + 1) * 8)) & 0xff)\r
+ return res\r
+\r
+def rsa_pub1024(src, mod):\r
+ return long2bin(pow(bin2long(src), 65537, bin2long(mod)))\r
+ \r
+def decrypt_block(src, mod):\r
+ if len(src) != 128 and len(src) != 202:\r
+ return None\r
+ dest = rsa_pub1024(src[:128], mod)\r
+ hash = sha.new(dest[1:107])\r
+ if len(src) == 202:\r
+ hash.update(src[131:192]) \r
+ result = hash.digest()\r
+ if result == dest[107:127]:\r
+ return dest\r
+ return None\r
+\r
+def validate_cert(cert, key):\r
+ buf = decrypt_block(cert[8:], key) \r
+ if buf is None:\r
+ return None\r
+ return buf[36:107] + cert[139:196]\r
+\r
+def read_random():\r
+ try:\r
+ fd = open("/dev/urandom", "r")\r
+ buf = fd.read(8)\r
+ fd.close()\r
+ return buf\r
+ except:\r
+ return None
\ No newline at end of file
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_crashlogautosubmit.xml
from Screens.VirtualKeyBoard import VirtualKeyBoard
from Screens.ChoiceBox import ChoiceBox
from Screens.MessageBox import MessageBox
-from enigma import ePoint
+from enigma import ePoint, eTPM
from Tools import Notifications
import os
from twisted.mail import smtp, relaymanager
import MimeWriter, mimetools, StringIO
+from __init__ import bin2long, long2bin, rsa_pub1024, decrypt_block, validate_cert, read_random
config.plugins.crashlogautosubmit = ConfigSubsection()
config.plugins.crashlogautosubmit.sendmail = ConfigSelection(default = "send", choices = [
def autostart(reason, **kwargs):
print "[CrashlogAutoSubmit] - autostart"
- if "session" in kwargs:
- try:
- startMailer(kwargs["session"])
- except ImportError, e:
- print "[CrashlogAutoSubmit] Twisted-mail not available, not starting CrashlogAutoSubmitter", e
+ try:
+ device = open("/proc/stb/info/model", "r").readline().strip()
+ except:
+ device = ""
+ if device != "dm7025":
+ rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
+ etpm = eTPM()
+ l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
+ if l2cert is None:
+ return
+ l2key = validate_cert(l2cert, rootkey)
+ if l2key is None:
+ return
+ l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
+ if l3cert is None:
+ return
+ l3key = validate_cert(l3cert, l2key)
+ if l3key is None:
+ return
+ rnd = read_random()
+ if rnd is None:
+ return
+ val = etpm.challenge(rnd)
+ result = decrypt_block(val, l3key)
+ if device == "dm7025" or result[80:88] == rnd:
+ if "session" in kwargs:
+ try:
+ startMailer(kwargs["session"])
+ except ImportError, e:
+ print "[CrashlogAutoSubmit] Twisted-mail not available, not starting CrashlogAutoSubmitter", e
def openconfig(session, **kwargs):
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_defaultservicesscanner.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_diseqctester.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_frontprocessorupgrade.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_hotplug.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_nfiflash.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_networkwizard.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_positionersetup.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_satelliteequipmentcontrol.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_satfinder.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_skinselector.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_softwaremanager.xml
ConfigListScreen.__init__(self, self.list, session = self.session)
#self["config"].list = self.list
#self["config"].setList(self.list)
+ self["config"].l.setSeperation(300)
self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
{
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_videoenhancement.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_videotune.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_videomode.xml
-installdir = $(datadir)/meta/
+installdir = $(datadir)/meta
dist_install_DATA = plugin_wirelesslan.xml
#self.list.append(getConfigListEntry(_("Configuration mode"), config.ParentalControl.mode))
self.list.append(getConfigListEntry(_("Protect setup"), config.ParentalControl.setuppinactive))
if config.ParentalControl.setuppinactive.value:
- self.changeSetupPin = getConfigListEntry(_("Change setup pin"), NoSave(ConfigNothing()))
+ self.changeSetupPin = getConfigListEntry(_("Change setup PIN"), NoSave(ConfigNothing()))
self.list.append(self.changeSetupPin)
self.list.append(getConfigListEntry(_("Protect services"), config.ParentalControl.servicepinactive))
if config.ParentalControl.servicepinactive.value:
self.list.append(getConfigListEntry(_("Parental control type"), config.ParentalControl.type))
if config.ParentalControl.mode.value == "complex":
- self.changePin = getConfigListEntry(_("Change service pins"), NoSave(ConfigNothing()))
+ self.changePin = getConfigListEntry(_("Change service PINs"), NoSave(ConfigNothing()))
self.list.append(self.changePin)
elif config.ParentalControl.mode.value == "simple":
- self.changePin = getConfigListEntry(_("Change service pin"), NoSave(ConfigNothing()))
+ self.changePin = getConfigListEntry(_("Change service PIN"), NoSave(ConfigNothing()))
self.list.append(self.changePin)
#Added Option to remember the service pin
- self.list.append(getConfigListEntry(_("Remember service pin"), config.ParentalControl.storeservicepin))
+ self.list.append(getConfigListEntry(_("Remember service PIN"), config.ParentalControl.storeservicepin))
#Added Option to remember the cancellation of service pin entry
- self.list.append(getConfigListEntry(_("Remember service pin cancel"), config.ParentalControl.storeservicepincancel))
+ self.list.append(getConfigListEntry(_("Remember service PIN cancel"), config.ParentalControl.storeservicepincancel))
self.editListEntry = getConfigListEntry(_("Edit services list"), NoSave(ConfigNothing()))
self.list.append(self.editListEntry)
#New funtion: Possibility to add Bouquets to whitelist / blacklist
if config.ParentalControl.mode.value == "complex":
pass
else:
- self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service pin"))
+ self.session.open(ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service PIN"))
elif self["config"].l.getCurrentSelection() == self.changeSetupPin:
- self.session.open(ParentalControlChangePin, config.ParentalControl.setuppin, _("setup pin"))
+ self.session.open(ParentalControlChangePin, config.ParentalControl.setuppin, _("setup PIN"))
elif self["config"].l.getCurrentSelection() == self.reloadLists:
parentalControl.open()
else:
def SetupPinMessageCallback(self, value):
if value:
- self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.setuppin, _("setup pin"))
+ self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.setuppin, _("setup PIN"))
else:
config.ParentalControl.setuppinactive.value = False
self.keyCancel()
def ServicePinMessageCallback(self, value):
if value:
- self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service pin"))
+ self.session.openWithCallback(self.cancelCB, ParentalControlChangePin, config.ParentalControl.servicepin[0], _("service PIN"))
else:
config.ParentalControl.servicepinactive.value = False
self.keyCancel()
self.pin2 = ConfigPIN(default = 1112, censor = "*")
self.pin1.addEndNotifier(boundFunction(self.valueChanged, 1))
self.pin2.addEndNotifier(boundFunction(self.valueChanged, 2))
- self.list.append(getConfigListEntry(_("New pin"), NoSave(self.pin1)))
- self.list.append(getConfigListEntry(_("Reenter new pin"), NoSave(self.pin2)))
+ self.list.append(getConfigListEntry(_("New PIN"), NoSave(self.pin1)))
+ self.list.append(getConfigListEntry(_("Reenter new PIN"), NoSave(self.pin2)))
ConfigListScreen.__init__(self, self.list)
# print "old pin:", pin
#if pin.value != "aaaa":
self.keyOK()
def getPinText(self):
- return _("Please enter the old pin code")
+ return _("Please enter the old PIN code")
def isProtected(self):
return (self.pin.value != "aaaa")
if self.pin1.value == self.pin2.value:
self.pin.value = self.pin1.value
self.pin.save()
- self.session.openWithCallback(self.close, MessageBox, _("The pin code has been changed successfully."), MessageBox.TYPE_INFO)
+ self.session.openWithCallback(self.close, MessageBox, _("The PIN code has been changed successfully."), MessageBox.TYPE_INFO)
else:
- self.session.open(MessageBox, _("The pin codes you entered are different."), MessageBox.TYPE_ERROR)
+ self.session.open(MessageBox, _("The PIN codes you entered are different."), MessageBox.TYPE_ERROR)
def cancel(self):
self.close(None)
self.cable_search_container.dataAvail.append(self.getCableTransponderData)
cableConfig = config.Nims[nim_idx].cable
tunername = nimmanager.getNimName(nim_idx)
+ bus = nimmanager.getI2CDevice(nim_idx)
+ if bus is None:
+ print "ERROR: could not get I2C device for nim", nim_idx, "for cable transponder search"
+ bus = 2
+
if tunername == "CXD1981":
- cmd = "cxd1978 --init --scan --verbose --wakeup --inv 2 --bus "
- else:
- cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus "
- #FIXMEEEEEE hardcoded i2c devices for dm7025 and dm8000
- if nim_idx < 2:
- if HardwareInfo().get_device_name() == "dm500hd":
- cmd += "2"
- else:
- cmd += str(nim_idx)
+ cmd = "cxd1978 --init --scan --verbose --wakeup --inv 2 --bus %d" % bus
else:
- if nim_idx == 2:
- cmd += "2" # first nim socket on DM8000 use /dev/i2c/2
- else:
- cmd += "4" # second nim socket on DM8000 use /dev/i2c/4
+ cmd = "tda1002x --init --scan --verbose --wakeup --inv 2 --bus %d" % bus
+
if cableConfig.scan_type.value == "bands":
cmd += " --scan-bands "
bands = 0
self.keyGo()
def keyGo(self, result = None):
- if self.timerentry_service_ref.getType() != eServiceReference.idDVB or self.timerentry_service_ref.getPath() != "":
+ if not self.timerentry_service_ref.isRecordable():
self.session.openWithCallback(self.selectChannelSelector, MessageBox, _("You didn't select a channel to record from."), MessageBox.TYPE_ERROR)
return
self.timer.name = self.timerentry_name.value
#endif
fprintf(f, "\t\t<contactemail>%s</contactemail>\n", crash_emailaddr);
fprintf(f, "\t\t<!-- Please email this crashlog to above address -->\n");
+ std::string activeSkin = getConfigFileValue("config.skin.primary_skin");
+ if (activeSkin != "Error")
+ {
+ if (activeSkin == "")
+ activeSkin = "Default Skin";
+ fprintf(f, "\t\t<skin>%s</skin>\n", activeSkin.c_str());
+ }
fprintf(f, "\t</enigma2>\n");
fprintf(f, "\t<image>\n");