From 7560beb3e371704d798259ca1ea927bf4575306c Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Thu, 29 Oct 2009 01:54:31 +0100 Subject: By Anders Holst: At regular intervalls there are questions in the forum (in at least three or four different threads on only this subject) on how to configure the recording paths so you don't have to set them to the same thing over and over again in e.g EPG timers. People apparently forget to set it, and miss their recordings because the harddisk is full or not built in. They want an easy way to change the default from /hdd/movies/ to a NAS or a USB device. I have rebased the patch in this thread from March 23, added two minor bugfixes, and hopefully made it less controversial by making sure that it only affects the expert setup level. I don't think there should be anything controversial about this patch now, and no known bugs. It only provides functionality that several people are screaming to get. Synopsis: The patch changes the "Timeshift path..." setup dialogue into a "Recording paths..." dialogue where you can easily configure both the timeshift and the other recording paths. --- lib/python/Screens/EpgSelection.py | 3 ++- lib/python/Screens/EventView.py | 3 ++- lib/python/Screens/InfoBar.py | 1 - lib/python/Screens/InfoBarGenerics.py | 11 ++++++----- lib/python/Screens/LocationBox.py | 5 +++++ lib/python/Screens/MovieSelection.py | 22 ++++++++++++++-------- lib/python/Screens/TimerEdit.py | 3 ++- lib/python/Screens/TimerEntry.py | 11 ++++++----- 8 files changed, 37 insertions(+), 22 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/EpgSelection.py b/lib/python/Screens/EpgSelection.py index 3dde7e22..f8edba11 100644 --- a/lib/python/Screens/EpgSelection.py +++ b/lib/python/Screens/EpgSelection.py @@ -6,6 +6,7 @@ from Components.Label import Label from Components.EpgList import EPGList, EPG_TYPE_SINGLE, EPG_TYPE_SIMILAR, EPG_TYPE_MULTI from Components.ActionMap import ActionMap from Components.TimerSanityCheck import TimerSanityCheck +from Components.UsageConfig import preferredTimerPath from Components.Sources.ServiceEvent import ServiceEvent from Components.Sources.Event import Event from Screens.TimerEdit import TimerSanityConflict @@ -235,7 +236,7 @@ class EPGSelection(Screen): self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: - newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event)) + newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) def finishedAdd(self, answer): diff --git a/lib/python/Screens/EventView.py b/lib/python/Screens/EventView.py index c1ffb585..cced3ceb 100644 --- a/lib/python/Screens/EventView.py +++ b/lib/python/Screens/EventView.py @@ -6,6 +6,7 @@ from Components.Button import Button from Components.Label import Label from Components.ScrollLabel import ScrollLabel from Components.TimerList import TimerList +from Components.UsageConfig import preferredTimerPath from enigma import eEPGCache, eTimer, eServiceReference from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from TimerEntry import TimerEntry @@ -85,7 +86,7 @@ class EventViewBase: self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: - newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, *parseEvent(self.event)) + newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(self.event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) def finishedAdd(self, answer): diff --git a/lib/python/Screens/InfoBar.py b/lib/python/Screens/InfoBar.py index d65eace8..be1407d3 100644 --- a/lib/python/Screens/InfoBar.py +++ b/lib/python/Screens/InfoBar.py @@ -212,7 +212,6 @@ class MoviePlayer(InfoBarBase, InfoBarShowHide, \ return if answer in ("quit", "quitanddeleteconfirmed"): - config.movielist.last_videodir.cancel() self.close() elif answer == "movielist": ref = self.session.nav.getCurrentlyPlayingServiceReference() diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 2f830616..b27df9d3 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -10,6 +10,7 @@ from Components.ServiceEventTracker import ServiceEventTracker from Components.Sources.Boolean import Boolean from Components.config import config, ConfigBoolean, ConfigClock from Components.SystemInfo import SystemInfo +from Components.UsageConfig import preferredInstantRecordPath, defaultMoviePath from EpgSelection import EPGSelection from Plugins.Plugin import PluginDescriptor @@ -29,7 +30,7 @@ from Screens.TimeDateInput import TimeDateInput from ServiceReference import ServiceReference from Tools import Notifications -from Tools.Directories import SCOPE_HDD, resolveFilename, fileExists +from Tools.Directories import fileExists from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \ iPlayableService, eServiceReference, eEPGCache @@ -1496,7 +1497,7 @@ class InfoBarInstantRecord: if isinstance(serviceref, eServiceReference): serviceref = ServiceReference(serviceref) - recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value) + recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = preferredInstantRecordPath()) recording.dontSave = True if event is None or limitEvent == False: @@ -1597,9 +1598,9 @@ class InfoBarInstantRecord: self.session.nav.RecordTimer.timeChanged(entry) def instantRecord(self): - dir = config.movielist.last_videodir.value - if not fileExists(dir, 'w'): - dir = resolveFilename(SCOPE_HDD) + dir = preferredInstantRecordPath() + if not dir or not fileExists(dir, 'w'): + dir = defaultMoviePath() try: stat = os_stat(dir) except: diff --git a/lib/python/Screens/LocationBox.py b/lib/python/Screens/LocationBox.py index 61d7105d..29d94f55 100644 --- a/lib/python/Screens/LocationBox.py +++ b/lib/python/Screens/LocationBox.py @@ -289,6 +289,11 @@ class LocationBox(Screen, NumericalTextInput, HelpableScreen): else: self["filelist"].refresh() self.removeBookmark(name, True) + val = self.realBookmarks and self.realBookmarks.value + if val and name in val: + val.remove(name) + self.realBookmarks.value = val + self.realBookmarks.save() def up(self): self[self.currList].up() diff --git a/lib/python/Screens/MovieSelection.py b/lib/python/Screens/MovieSelection.py index 174a4f07..15f6b465 100644 --- a/lib/python/Screens/MovieSelection.py +++ b/lib/python/Screens/MovieSelection.py @@ -7,8 +7,9 @@ from Components.DiskInfo import DiskInfo from Components.Pixmap import Pixmap from Components.Label import Label from Components.PluginComponent import plugins -from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigLocations +from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigLocations, ConfigSet from Components.Sources.ServiceEvent import ServiceEvent +from Components.UsageConfig import defaultMoviePath from Plugins.Plugin import PluginDescriptor @@ -31,6 +32,7 @@ config.movielist.last_timer_videodir = ConfigText(default=resolveFilename(SCOPE_ config.movielist.videodirs = ConfigLocations(default=[resolveFilename(SCOPE_HDD)]) config.movielist.first_tags = ConfigText(default="") config.movielist.second_tags = ConfigText(default="") +config.movielist.last_selected_tags = ConfigSet([], default=[]) def setPreferredTagEditor(te): @@ -168,7 +170,10 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): HelpableScreen.__init__(self) self.tags = [ ] - self.selected_tags = None + if selectedmovie: + self.selected_tags = config.movielist.last_selected_tags.value + else: + self.selected_tags = None self.selected_tags_ele = None self.movemode = False @@ -183,8 +188,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self["DescriptionBorder"] = Pixmap() self["DescriptionBorder"].hide() - if not pathExists(config.movielist.last_videodir.value): - config.movielist.last_videodir.value = resolveFilename(SCOPE_HDD) + if not fileExists(config.movielist.last_videodir.value): + config.movielist.last_videodir.value = defaultMoviePath() config.movielist.last_videodir.save() self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + config.movielist.last_videodir.value) @@ -292,6 +297,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self.close(None) def saveconfig(self): + config.movielist.last_selected_tags.value = self.selected_tags config.movielist.moviesort.save() config.movielist.listtype.save() config.movielist.description.save() @@ -339,8 +345,8 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): self["list"].setSortType(type) def reloadList(self, sel = None, home = False): - if not pathExists(config.movielist.last_videodir.value): - path = resolveFilename(SCOPE_HDD) + if not fileExists(config.movielist.last_videodir.value): + path = defaultMoviePath() config.movielist.last_videodir.value = path config.movielist.last_videodir.save() self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + path) @@ -370,7 +376,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): def gotFilename(self, res): if res is not None and res is not config.movielist.last_videodir.value: - if pathExists(res): + if fileExists(res): config.movielist.last_videodir.value = res config.movielist.last_videodir.save() self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + res) @@ -392,7 +398,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): def showTagsN(self, tagele): if not self.tags: self.showTagWarning() - elif not tagele or self.selected_tags_ele == tagele or not tagele.value in self.tags: + elif not tagele or tagele.value in self.selected_tags or not tagele.value in self.tags: self.showTagsMenu(tagele) else: self.selected_tags_ele = tagele diff --git a/lib/python/Screens/TimerEdit.py b/lib/python/Screens/TimerEdit.py index caaf8c95..54354987 100644 --- a/lib/python/Screens/TimerEdit.py +++ b/lib/python/Screens/TimerEdit.py @@ -4,6 +4,7 @@ from Components.config import config from Components.MenuList import MenuList from Components.TimerList import TimerList from Components.TimerSanityCheck import TimerSanityCheck +from Components.UsageConfig import preferredTimerPath from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT from Screen import Screen from Screens.ChoiceBox import ChoiceBox @@ -243,7 +244,7 @@ class TimerEditList(Screen): else: data = parseEvent(event, description = False) - self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = config.movielist.last_timer_videodir.value, *data)) + self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *data)) def addTimer(self, timer): self.session.openWithCallback(self.finishedAdd, TimerEntry, timer) diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index edd19685..5813bac5 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -8,11 +8,11 @@ from Components.MenuList import MenuList from Components.Button import Button from Components.Label import Label from Components.Pixmap import Pixmap +from Components.UsageConfig import defaultMoviePath from Screens.MovieSelection import getPreferredTagEditor from Screens.LocationBox import MovieLocationBox from Screens.ChoiceBox import ChoiceBox from RecordTimer import AFTEREVENT -from Tools.Directories import resolveFilename, SCOPE_HDD from enigma import eEPGCache from time import localtime, mktime, time, strftime from datetime import datetime @@ -106,7 +106,7 @@ class TimerEntry(Screen, ConfigListScreen): self.timerentry_starttime = ConfigClock(default = self.timer.begin) self.timerentry_endtime = ConfigClock(default = self.timer.end) - default = self.timer.dirname or resolveFilename(SCOPE_HDD) + default = self.timer.dirname or defaultMoviePath() tmp = config.movielist.videodirs.value if default not in tmp: tmp.append(default) @@ -273,9 +273,10 @@ class TimerEntry(Screen, ConfigListScreen): self.timer.service_ref = self.timerentry_service_ref self.timer.tags = self.timerentry_tags - self.timer.dirname = self.timerentry_dirname.value - config.movielist.last_timer_videodir.value = self.timer.dirname - config.movielist.last_timer_videodir.save() + if self.timer.dirname or self.timerentry_dirname.value != defaultMoviePath(): + self.timer.dirname = self.timerentry_dirname.value + config.movielist.last_timer_videodir.value = self.timer.dirname + config.movielist.last_timer_videodir.save() if self.timerentry_type.value == "once": self.timer.begin, self.timer.end = self.getBeginEnd() -- cgit v1.2.3 From 4a7a8362a83b1a6c2bd0abf13cd7b19359e9768a Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Thu, 29 Oct 2009 01:47:49 +0100 Subject: By Anders Holst: * My previous code for "slow rewind" (aka "SeekBackHack") is not required any more. Indeed, since the change in "decoder states" some time ago my code stopped working and is now only destructively interfering with the new winding approach, effectively ruining the speed accuracy for slow rewind. Similarly, the "non-smooth winding" code ruins the accuracy for high winding speeds. The patch below removes the "SeekBackHack", and temporarily disables the "non-smooth winding" code until we know whether the decoder states will allow simultaneous repeat and skip rates again. (InfoBarGenerics.py) * Due to a bug in 'eDVBTSTools::findNextPicture', rewind was always at the required speed minus one. (The frame just played was counted as one when skipping backwards.) Fixed below. (tstools.cpp) * A piece of code to apparently increase precision in seeking, by always aligning to an i-frame start, had exactly the opposite effect: GOP single-stepping fails completely on DM7025 and gets highly unreliable on DM800. The piece of code is removed. (It destructively interferes with previous code by me to hit frames somewhat before the GOP start. As an alternative, my previous code can be removed instead, and the currently removed piece of code adjusted to work. But then it has to be done differently on the two platforms.) (dvb.cpp) * By some reason eDVBVideo::getPTS only returns even numbers on DM800 even when it should be odd. This ruins GOP single stepping in 50% of the cases. This is easy to compensate for by adding a margin of 1 in getAccessPoint. (pvrparse.cpp) * After the above, when GOP single-stepping works reliable on both platforms and on SD/HD, the correct step lengths can be used. (InfoBarGenerics.py) --- lib/dvb/dvb.cpp | 7 +------ lib/dvb/pvrparse.cpp | 1 + lib/dvb/tstools.cpp | 21 ++++++++++++++++----- lib/python/Screens/InfoBarGenerics.py | 31 ++++++++++++------------------- 4 files changed, 30 insertions(+), 30 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 894287e8..a8dfb193 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1462,12 +1462,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off continue; } - size_t iframe_len; - /* try to align to iframe */ - int direction = pts < 0 ? -1 : 1; - m_tstools.findFrame(offset, iframe_len, direction); - - eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx (skipped additional %d frames due to iframe re-align)", relative, pts, offset, direction); + eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx", relative, pts, offset); current_offset = align(offset, blocksize); /* in case tstools return non-aligned offset */ } diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index 1393bf77..5cdecbd6 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -244,6 +244,7 @@ off_t eMPEGStreamInformation::getAccessPoint(pts_t ts, int marg) off_t last = 0; off_t last2 = 0; pts_t lastc = 0; + ts += 1; // Add rounding error margin for (std::map::const_iterator i(m_access_points.begin()); i != m_access_points.end(); ++i) { pts_t delta = getDelta(i->first); diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index a9eef406..2e5c5665 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -652,18 +652,23 @@ int eDVBTSTools::findFrame(off_t &_offset, size_t &len, int &direction, int fram int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int frame_types) { - int nr_frames = 0; + int nr_frames, direction; // eDebug("trying to move %d frames at %llx", distance, offset); frame_types = frametypeI; /* TODO: intelligent "allow IP frames when not crossing an I-Frame */ - int direction = distance > 0 ? 0 : -1; - distance = abs(distance); - off_t new_offset = offset; size_t new_len = len; int first = 1; + if (distance > 0) { + direction = 0; + nr_frames = 0; + } else { + direction = -1; + nr_frames = -1; + distance = -distance+1; + } while (distance > 0) { int dir = direction; @@ -677,12 +682,18 @@ int eDVBTSTools::findNextPicture(off_t &offset, size_t &len, int &distance, int // eDebug("we moved %d, %d to go frames (now at %llx)", dir, distance, new_offset); - if (distance >= 0 || first) + if (distance >= 0 || direction == 0) { first = 0; offset = new_offset; len = new_len; nr_frames += abs(dir); + } + else if (first) { + first = 0; + offset = new_offset; + len = new_len; + nr_frames += abs(dir) + distance; // never jump forward during rewind } } diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 2f830616..5336f9a0 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -692,8 +692,6 @@ class InfoBarSeek: iPlayableService.evSOF: self.__evSOF, }) - self.minSpeedBackward = useSeekBackHack and 16 or 0 - class InfoBarSeekActionMap(HelpableActionMap): def __init__(self, screen, *args, **kwargs): HelpableActionMap.__init__(self, screen, *args, **kwargs) @@ -740,24 +738,19 @@ class InfoBarSeek: self.__seekableStatusChanged() def makeStateForward(self, n): - minspeed = config.seek.stepwise_minspeed.value - repeat = int(config.seek.stepwise_repeat.value) - if minspeed != "Never" and n >= int(minspeed) and repeat > 1: - return (0, n * repeat, repeat, ">> %dx" % n) - else: +# minspeed = config.seek.stepwise_minspeed.value +# repeat = int(config.seek.stepwise_repeat.value) +# if minspeed != "Never" and n >= int(minspeed) and repeat > 1: +# return (0, n * repeat, repeat, ">> %dx" % n) +# else: return (0, n, 0, ">> %dx" % n) def makeStateBackward(self, n): - minspeed = config.seek.stepwise_minspeed.value - repeat = int(config.seek.stepwise_repeat.value) - if self.minSpeedBackward and n < self.minSpeedBackward: - r = (self.minSpeedBackward - 1)/ n + 1 - if minspeed != "Never" and n >= int(minspeed) and repeat > 1: - r = max(r, repeat) - return (0, -n * r, r, "<< %dx" % n) - elif minspeed != "Never" and n >= int(minspeed) and repeat > 1: - return (0, -n * repeat, repeat, "<< %dx" % n) - else: +# minspeed = config.seek.stepwise_minspeed.value +# repeat = int(config.seek.stepwise_repeat.value) +# if minspeed != "Never" and n >= int(minspeed) and repeat > 1: +# return (0, -n * repeat, repeat, "<< %dx" % n) +# else: return (0, -n, 0, "<< %dx" % n) def makeStateSlowMotion(self, n): @@ -877,7 +870,7 @@ class InfoBarSeek: if config.seek.on_pause.value == "play": self.unPauseService() elif config.seek.on_pause.value == "step": - self.doSeekRelative(0) + self.doSeekRelative(1) elif config.seek.on_pause.value == "last": self.setSeekState(self.lastseekstate) self.lastseekstate = self.SEEK_STATE_PLAY @@ -950,7 +943,7 @@ class InfoBarSeek: self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value))) self.doSeekRelative(-6) elif seekstate == self.SEEK_STATE_PAUSE: - self.doSeekRelative(-3) + self.doSeekRelative(-1) elif self.isStateForward(seekstate): speed = seekstate[1] if seekstate[2]: -- cgit v1.2.3 From 0271558b0e0d04a17e7fa5ce2314a855507c8a85 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 5 Nov 2009 08:48:03 +0100 Subject: fix not working default record pathes screen (add and install missing file) --- lib/python/Screens/Makefile.am | 2 +- lib/python/Screens/RecordPaths.py | 194 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 lib/python/Screens/RecordPaths.py (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/Makefile.am b/lib/python/Screens/Makefile.am index 44994b86..585983c2 100755 --- a/lib/python/Screens/Makefile.am +++ b/lib/python/Screens/Makefile.am @@ -14,5 +14,5 @@ install_PYTHON = \ SubtitleDisplay.py SubservicesQuickzap.py ParentalControlSetup.py NumericalTextInputHelpDialog.py \ SleepTimerEdit.py Ipkg.py RdsDisplay.py Globals.py DefaultWizard.py \ SessionGlobals.py LocationBox.py WizardLanguage.py TaskView.py Rc.py VirtualKeyBoard.py \ - TextBox.py FactoryReset.py + TextBox.py FactoryReset.py RecordPaths.py diff --git a/lib/python/Screens/RecordPaths.py b/lib/python/Screens/RecordPaths.py new file mode 100644 index 00000000..c833266f --- /dev/null +++ b/lib/python/Screens/RecordPaths.py @@ -0,0 +1,194 @@ +from Screens.Screen import Screen +from Screens.LocationBox import MovieLocationBox, TimeshiftLocationBox +from Screens.MessageBox import MessageBox +from Components.Label import Label +from Components.config import config, ConfigSelection, getConfigListEntry, configfile +from Components.ConfigList import ConfigListScreen +from Components.ActionMap import ActionMap +from Tools.Directories import fileExists + + +class RecordPathsSettings(Screen,ConfigListScreen): + skin = """ + + + + + + + """ + + def __init__(self, session): + from Components.Sources.StaticText import StaticText + Screen.__init__(self, session) + self["key_red"] = StaticText(_("Cancel")) + self["key_green"] = StaticText(_("Save")) + + ConfigListScreen.__init__(self, []) + self.initConfigList() + + self["setupActions"] = ActionMap(["SetupActions", "ColorActions"], + { + "green": self.save, + "red": self.cancel, + "cancel": self.cancel, + "ok": self.ok, + }, -2) + + def checkReadWriteDir(self, configele): + print "checkReadWrite: ", configele.value + if configele.value in [x[0] for x in self.styles] or fileExists(configele.value, "w"): + configele.last_value = configele.value + return True + else: + dir = configele.value + configele.value = configele.last_value + self.session.open( + MessageBox, + _("The directory %s is not writable.\nMake sure you select a writable directory instead.")%dir, + type = MessageBox.TYPE_ERROR + ) + return False + + def initConfigList(self): + self.styles = [ ("", _("")), ("", _("")), ("", _("")) ] + styles_keys = [x[0] for x in self.styles] + tmp = config.movielist.videodirs.value + default = config.usage.default_path.value + if default not in tmp: + tmp = tmp[:] + tmp.append(default) + print "DefaultPath: ", default, tmp + self.default_dirname = ConfigSelection(default = default, choices = tmp) + tmp = config.movielist.videodirs.value + default = config.usage.timer_path.value + if default not in tmp and default not in styles_keys: + tmp = tmp[:] + tmp.append(default) + print "TimerPath: ", default, tmp + self.timer_dirname = ConfigSelection(default = default, choices = self.styles+tmp) + tmp = config.movielist.videodirs.value + default = config.usage.instantrec_path.value + if default not in tmp and default not in styles_keys: + tmp = tmp[:] + tmp.append(default) + print "InstantrecPath: ", default, tmp + self.instantrec_dirname = ConfigSelection(default = default, choices = self.styles+tmp) + default = config.usage.timeshift_path.value + tmp = config.usage.allowed_timeshift_paths.value + if default not in tmp: + tmp = tmp[:] + tmp.append(default) + print "TimeshiftPath: ", default, tmp + self.timeshift_dirname = ConfigSelection(default = default, choices = tmp) + self.default_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False) + self.timer_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False) + self.instantrec_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False) + self.timeshift_dirname.addNotifier(self.checkReadWriteDir, initial_call=False, immediate_feedback=False) + + self.list = [] + if config.usage.setup_level.index >= 2: + self.default_entry = getConfigListEntry(_("Default movie location"), self.default_dirname) + self.list.append(self.default_entry) + self.timer_entry = getConfigListEntry(_("Timer record location"), self.timer_dirname) + self.list.append(self.timer_entry) + self.instantrec_entry = getConfigListEntry(_("Instant record location"), self.instantrec_dirname) + self.list.append(self.instantrec_entry) + else: + self.default_entry = getConfigListEntry(_("Movie location"), self.default_dirname) + self.list.append(self.default_entry) + self.timeshift_entry = getConfigListEntry(_("Timeshift location"), self.timeshift_dirname) + self.list.append(self.timeshift_entry) + self["config"].setList(self.list) + + def ok(self): + currentry = self["config"].getCurrent() + self.lastvideodirs = config.movielist.videodirs.value + self.lasttimeshiftdirs = config.usage.allowed_timeshift_paths.value + if config.usage.setup_level.index >= 2: + txt = _("Default movie location") + else: + txt = _("Movie location") + if currentry == self.default_entry: + self.entrydirname = self.default_dirname + self.session.openWithCallback( + self.dirnameSelected, + MovieLocationBox, + txt, + self.default_dirname.value + ) + elif currentry == self.timer_entry: + self.entrydirname = self.timer_dirname + self.session.openWithCallback( + self.dirnameSelected, + MovieLocationBox, + _("Initial location in new timers"), + self.timer_dirname.value + ) + elif currentry == self.instantrec_entry: + self.entrydirname = self.instantrec_dirname + self.session.openWithCallback( + self.dirnameSelected, + MovieLocationBox, + _("Location for instant recordings"), + self.instantrec_dirname.value + ) + elif currentry == self.timeshift_entry: + self.entrydirname = self.timeshift_dirname + config.usage.timeshift_path.value = self.timeshift_dirname.value + self.session.openWithCallback( + self.dirnameSelected, + TimeshiftLocationBox + ) + + def dirnameSelected(self, res): + if res is not None: + self.entrydirname.value = res + if config.movielist.videodirs.value != self.lastvideodirs: + styles_keys = [x[0] for x in self.styles] + tmp = config.movielist.videodirs.value + default = self.default_dirname.value + if default not in tmp: + tmp = tmp[:] + tmp.append(default) + self.default_dirname.setChoices(tmp, default=default) + tmp = config.movielist.videodirs.value + default = self.timer_dirname.value + if default not in tmp and default not in styles_keys: + tmp = tmp[:] + tmp.append(default) + self.timer_dirname.setChoices(self.styles+tmp, default=default) + tmp = config.movielist.videodirs.value + default = self.instantrec_dirname.value + if default not in tmp and default not in styles_keys: + tmp = tmp[:] + tmp.append(default) + self.instantrec_dirname.setChoices(self.styles+tmp, default=default) + self.entrydirname.value = res + if config.usage.allowed_timeshift_paths.value != self.lasttimeshiftdirs: + tmp = config.usage.allowed_timeshift_paths.value + default = self.instantrec_dirname.value + if default not in tmp: + tmp = tmp[:] + tmp.append(default) + self.timeshift_dirname.setChoices(tmp, default=default) + self.entrydirname.value = res + if self.entrydirname.last_value != res: + self.checkReadWriteDir(self.entrydirname) + + def save(self): + currentry = self["config"].getCurrent() + if self.checkReadWriteDir(currentry[1]): + config.usage.default_path.value = self.default_dirname.value + config.usage.timer_path.value = self.timer_dirname.value + config.usage.instantrec_path.value = self.instantrec_dirname.value + config.usage.timeshift_path.value = self.timeshift_dirname.value + config.usage.default_path.save() + config.usage.timer_path.save() + config.usage.instantrec_path.save() + config.usage.timeshift_path.save() + self.close() + + def cancel(self): + self.close() + -- cgit v1.2.3 From dd6c331e2a83af4e911fecc70c47b74256ea3419 Mon Sep 17 00:00:00 2001 From: Acid Burn Date: Tue, 10 Nov 2009 13:18:26 +0100 Subject: Enigma2-{Wizard.py,Networksetup.py,ConfigList.py,skin_default.xml,NetworkWizard.py}: -add possibility to use the VirtualKeyboard globally with every ConfigText and ConfigPassword ConfigEntry inside ConfigListScreens and WizardScreens. -add possibility to globally move the NumericalHelpInputWindow shown from a ConfigListScreen or a Wizard Screen to a inside the Skin defined Position This currently still needs following Skin entries defined in your Screens Skin: " " used for Showing/hiding the TEXT Icon if the VirtualKeyboard is available. and: "" used to position the NumericalTextInputHelpWIndow inside your Screen as defined by your Screens Skin. also you need currently: from Components.Sources.Boolean import Boolean self["VKeyIcon"] = Boolean(False) self["HelpWindow"] = Pixmap() self["HelpWindow"].hide() inside your Screens sourcecode so we know that these items should be handled globally from Enigma2. - remove own Helpwindow/Vkey handling from NetworkSetup.py - include new VirtualKeyboardhandling inside NetworkWizard This fixes #157 --- data/skin_default.xml | 4 +- lib/python/Components/ConfigList.py | 41 +++++++++++++- .../SystemPlugins/NetworkWizard/NetworkWizard.py | 17 +++--- lib/python/Screens/NetworkSetup.py | 52 ++--------------- lib/python/Screens/Wizard.py | 65 +++++++++++++++++++--- 5 files changed, 113 insertions(+), 66 deletions(-) mode change 100644 => 100755 lib/python/Components/ConfigList.py (limited to 'lib/python/Screens') diff --git a/data/skin_default.xml b/data/skin_default.xml index 72dc3577..dfab4d8a 100755 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -43,7 +43,9 @@ - + + + diff --git a/lib/python/Components/ConfigList.py b/lib/python/Components/ConfigList.py old mode 100644 new mode 100755 index 00949e2f..60785802 --- a/lib/python/Components/ConfigList.py +++ b/lib/python/Components/ConfigList.py @@ -1,7 +1,7 @@ from HTMLComponent import HTMLComponent from GUIComponent import GUIComponent -from config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS, ConfigElement -from Components.ActionMap import NumberActionMap +from config import KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS, ConfigElement, ConfigText, ConfigPassword +from Components.ActionMap import NumberActionMap, ActionMap from enigma import eListbox, eListboxPythonConfigContent, eRCInput, eTimer from Screens.MessageBox import MessageBox @@ -66,6 +66,7 @@ class ConfigList(HTMLComponent, GUIComponent, object): self.current = self.getCurrent() if self.current: self.current[1].onSelect(self.session) + for x in self.onSelectionChanged: x() @@ -127,13 +128,47 @@ class ConfigListScreen: "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }, -1) # to prevent left/right overriding the listbox + + self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"], + { + "showVirtualKeyboard": self.KeyText, + }, -2) + self["VirtualKB"].setEnabled(False) self["config"] = ConfigList(list, session = session) + if on_change is not None: self.__changed = on_change else: self.__changed = lambda: None - + + if not self.handleInputHelpers in self["config"].onSelectionChanged: + self["config"].onSelectionChanged.append(self.handleInputHelpers) + + def handleInputHelpers(self): + if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword): + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(True) + self["VKeyIcon"].boolean = True + if self.has_key("HelpWindow"): + if self["config"].getCurrent()[1].help_window.instance is not None: + helpwindowpos = self["HelpWindow"].getPosition() + from enigma import ePoint + self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) + else: + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(False) + self["VKeyIcon"].boolean = False + + def KeyText(self): + from Screens.VirtualKeyBoard import VirtualKeyBoard + self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title = self["config"].getCurrent()[0], text = self["config"].getCurrent()[1].getValue()) + + def VirtualKeyBoardCallback(self, callback = None): + if callback is not None and len(callback): + self["config"].getCurrent()[1].setValue(callback) + self["config"].invalidate(self["config"].getCurrent()) + def keyOK(self): self["config"].handleKey(KEY_OK) diff --git a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py index 4d361157..b158cde1 100755 --- a/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py +++ b/lib/python/Plugins/SystemPlugins/NetworkWizard/NetworkWizard.py @@ -4,15 +4,11 @@ from Screens.Rc import Rc from Screens.MessageBox import MessageBox from Components.Pixmap import Pixmap, MovingPixmap, MultiPixmap +from Components.Sources.Boolean import Boolean from Components.config import config, ConfigBoolean, configfile, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, getConfigListEntry, ConfigSelection, ConfigPassword from Components.Network import iNetwork -#from Components.Label import Label -#from Components.MenuList import MenuList -#from Components.PluginComponent import plugins -#from Plugins.Plugin import PluginDescriptor from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE -#import time, os, re config.misc.firstrun = ConfigBoolean(default = True) @@ -39,7 +35,7 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl class NetworkWizard(WizardLanguage, Rc): skin = """ - + @@ -52,6 +48,10 @@ class NetworkWizard(WizardLanguage, Rc): + + + + """ def __init__(self, session): self.xmlfile = resolveFilename(SCOPE_PLUGINS, "SystemPlugins/NetworkWizard/networkwizard.xml") @@ -59,7 +59,10 @@ class NetworkWizard(WizardLanguage, Rc): Rc.__init__(self) self.session = session self["wizard"] = Pixmap() - + self["HelpWindow"] = Pixmap() + self["HelpWindow"].hide() + self["VKeyIcon"] = Boolean(False) + self.InterfaceState = None self.isInterfaceUp = None self.WlanPluginInstalled = None diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index ec2bafe5..401e0cf6 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -6,6 +6,7 @@ from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.HelpMenu import HelpableScreen from Components.Network import iNetwork from Components.Sources.StaticText import StaticText +from Components.Sources.Boolean import Boolean from Components.Label import Label,MultiColorLabel from Components.Pixmap import Pixmap,MultiPixmap from Components.MenuList import MenuList @@ -319,11 +320,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): "blue": (self.KeyBlue, _("open nameserver configuration")), }) - self["VirtualKB"] = HelpableActionMap(self, "VirtualKeyboardActions", - { - "showVirtualKeyboard": (self.KeyText, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ), - }) - self["actions"] = NumberActionMap(["SetupActions"], { "ok": self.ok, @@ -355,9 +351,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["key_red"] = StaticText(_("Cancel")) self["key_blue"] = StaticText(_("Edit DNS")) - self["VKeyIcon"] = Pixmap() + self["VKeyIcon"] = Boolean(False) self["HelpWindow"] = Pixmap() - + self["HelpWindow"].hide() + def layoutFinished(self): self["DNS1"].setText(self.primaryDNS.getText()) self["DNS2"].setText(self.secondaryDNS.getText()) @@ -386,9 +383,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["Gateway"].setText("") self["Gatewaytext"].setText("") self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) - self["HelpWindow"].hide() def createConfig(self): self.InterfaceEntry = None @@ -518,30 +512,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["config"].list = self.list self["config"].l.setList(self.list) - if not self.selectionChanged in self["config"].onSelectionChanged: - self["config"].onSelectionChanged.append(self.selectionChanged) def KeyBlue(self): self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup) - def KeyText(self): - if self.iface == "wlan0" or self.iface == "ath0" : - if self["config"].getCurrent() == self.hiddenSSID: - if config.plugins.wlan.essid.value == 'hidden...': - self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value) - if self["config"].getCurrent() == self.encryptionKey: - self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value) - - def VirtualKeyBoardSSIDCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.hiddenessid.setValue(callback) - self["config"].invalidate(self.hiddenSSID) - - def VirtualKeyBoardKeyCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.encryption.psk.setValue(callback) - self["config"].invalidate(self.encryptionKey) - def newConfig(self): if self["config"].getCurrent() == self.InterfaceEntry: self.createSetup() @@ -565,24 +539,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): ConfigListScreen.keyRight(self) self.newConfig() - def selectionChanged(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - else: - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) - def ok(self): current = self["config"].getCurrent() if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': diff --git a/lib/python/Screens/Wizard.py b/lib/python/Screens/Wizard.py index 74219eb1..1bff0284 100755 --- a/lib/python/Screens/Wizard.py +++ b/lib/python/Screens/Wizard.py @@ -1,16 +1,15 @@ from Screen import Screen - from Screens.HelpMenu import HelpableScreen from Screens.MessageBox import MessageBox -from Components.config import config, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS +from Components.config import config, ConfigText, ConfigPassword, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_0, KEY_DELETE, KEY_BACKSPACE, KEY_OK, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT, KEY_NUMBERS from Components.Label import Label +from Components.Sources.StaticText import StaticText from Components.Slider import Slider from Components.ActionMap import NumberActionMap from Components.MenuList import MenuList from Components.ConfigList import ConfigList from Components.Sources.List import List - from enigma import eTimer from xml.sax import make_parser @@ -19,8 +18,8 @@ from xml.sax.handler import ContentHandler class WizardSummary(Screen): skin = """ - - + + """ @@ -36,7 +35,7 @@ class WizardSummary(Screen): #self.skinName.append("Wizard") #print "*************+++++++++++++++++****************++++++++++******************* WizardSummary", self.skinName # - self["text"] = Label("") + self["text"] = StaticText("") self.onShow.append(self.setCallback) def setCallback(self): @@ -214,12 +213,13 @@ class Wizard(Screen): self.onShown.append(self.updateValues) self.configInstance = None + self.currentConfigIndex = None self.lcdCallbacks = [] self.disableKeys = False - self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions"], + self["actions"] = NumberActionMap(["WizardActions", "NumberActions", "ColorActions", "SetupActions", "InputAsciiActions", "KeyboardInputActions"], { "gotAsciiCode": self.keyGotAscii, "ok": self.ok, @@ -245,6 +245,13 @@ class Wizard(Screen): "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }, -1) + + self["VirtualKB"] = NumberActionMap(["VirtualKeyboardActions"], + { + "showVirtualKeyboard": self.KeyText, + }, -2) + + self["VirtualKB"].setEnabled(False) def red(self): print "red" @@ -405,6 +412,7 @@ class Wizard(Screen): self.resetCounter() if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None or self.wizard[self.currStep]["config"]["type"] == "dynamic"): self["config"].instance.moveSelection(self["config"].instance.moveUp) + self.handleInputHelpers() elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0): self["list"].selectPrevious() if self.wizard[self.currStep].has_key("onselect"): @@ -418,6 +426,7 @@ class Wizard(Screen): self.resetCounter() if (self.showConfig and self.wizard[self.currStep]["config"]["screen"] != None or self.wizard[self.currStep]["config"]["type"] == "dynamic"): self["config"].instance.moveSelection(self["config"].instance.moveDown) + self.handleInputHelpers() elif (self.showList and len(self.wizard[self.currStep]["evaluatedlist"]) > 0): #self["list"].instance.moveSelection(self["list"].instance.moveDown) self["list"].selectNext() @@ -598,6 +607,9 @@ class Wizard(Screen): print "clearConfigList", self.configInstance["config"], self["config"] else: self["config"].l.setList([]) + self.handleInputHelpers() + + else: if self.has_key("config"): self["config"].hide() @@ -614,6 +626,45 @@ class Wizard(Screen): self.finished(gotoStep = self.wizard[self.currStep]["timeoutstep"]) self.updateText() + def handleInputHelpers(self): + if self["config"].getCurrent() is not None: + if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword): + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(True) + self["VKeyIcon"].boolean = True + if self.has_key("HelpWindow"): + if self["config"].getCurrent()[1].help_window.instance is not None: + helpwindowpos = self["HelpWindow"].getPosition() + from enigma import ePoint + self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) + else: + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(False) + self["VKeyIcon"].boolean = False + else: + if self.has_key("VKeyIcon"): + self["VirtualKB"].setEnabled(False) + self["VKeyIcon"].boolean = False + + def KeyText(self): + from Screens.VirtualKeyBoard import VirtualKeyBoard + self.currentConfigIndex = self["config"].getCurrentIndex() + self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title = self["config"].getCurrent()[0], text = self["config"].getCurrent()[1].getValue()) + + def VirtualKeyBoardCallback(self, callback = None): + if callback is not None and len(callback): + if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword): + if self.has_key("HelpWindow"): + if self["config"].getCurrent()[1].help_window.instance is not None: + helpwindowpos = self["HelpWindow"].getPosition() + from enigma import ePoint + self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) + self["config"].instance.moveSelectionTo(self.currentConfigIndex) + self["config"].setCurrentIndex(self.currentConfigIndex) + self["config"].getCurrent()[1].setValue(callback) + self["config"].invalidate(self["config"].getCurrent()) + + class WizardManager: def __init__(self): self.wizards = [] -- cgit v1.2.3 From 86895283b7f68b23652fdef5cfab844ce1252799 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Wed, 11 Nov 2009 10:38:38 +0100 Subject: Screens/-{LanguageSelection.py, NetworkSetup.py, RdsDisplay.py, VirtualKeyBoard.py}: - use SCOPE_CURRENT_SKIN for LoadPixmap. - dynamically calc the icon width inside VirtualKeyboard based on the provided icon. --- lib/python/Screens/LanguageSelection.py | 6 ++-- lib/python/Screens/NetworkSetup.py | 62 +++++---------------------------- lib/python/Screens/RdsDisplay.py | 10 +++--- lib/python/Screens/VirtualKeyBoard.py | 57 ++++++++++++++++++------------ 4 files changed, 51 insertions(+), 84 deletions(-) mode change 100644 => 100755 lib/python/Screens/LanguageSelection.py mode change 100644 => 100755 lib/python/Screens/RdsDisplay.py (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/LanguageSelection.py b/lib/python/Screens/LanguageSelection.py old mode 100644 new mode 100755 index 082daa55..fce10ac5 --- a/lib/python/Screens/LanguageSelection.py +++ b/lib/python/Screens/LanguageSelection.py @@ -13,14 +13,14 @@ def _cached(x): from Screens.Rc import Rc -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap def LanguageEntryComponent(file, name, index): - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "countries/" + file + ".png")) + png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "countries/" + file + ".png")) if png == None: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "countries/missing.png")) + png = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "countries/missing.png")) res = (index, name, png) return res diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index ec2bafe5..92416a33 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -6,6 +6,7 @@ from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.HelpMenu import HelpableScreen from Components.Network import iNetwork from Components.Sources.StaticText import StaticText +from Components.Sources.Boolean import Boolean from Components.Label import Label,MultiColorLabel from Components.Pixmap import Pixmap,MultiPixmap from Components.MenuList import MenuList @@ -14,7 +15,7 @@ from Components.ConfigList import ConfigListScreen from Components.PluginComponent import plugins from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap -from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap from Plugins.Plugin import PluginDescriptor from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont @@ -36,14 +37,14 @@ def InterfaceEntryComponent(index,name,default,active ): num_configured_if = len(iNetwork.getConfiguredAdapters()) if num_configured_if >= 2: if default is True: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue.png")) if default is False: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue_off.png")) res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png)) if active is True: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png")) + png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png")) if active is False: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_error.png")) + png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_error.png")) res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2)) return res @@ -319,11 +320,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): "blue": (self.KeyBlue, _("open nameserver configuration")), }) - self["VirtualKB"] = HelpableActionMap(self, "VirtualKeyboardActions", - { - "showVirtualKeyboard": (self.KeyText, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ), - }) - self["actions"] = NumberActionMap(["SetupActions"], { "ok": self.ok, @@ -355,9 +351,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["key_red"] = StaticText(_("Cancel")) self["key_blue"] = StaticText(_("Edit DNS")) - self["VKeyIcon"] = Pixmap() + self["VKeyIcon"] = Boolean(False) self["HelpWindow"] = Pixmap() - + self["HelpWindow"].hide() + def layoutFinished(self): self["DNS1"].setText(self.primaryDNS.getText()) self["DNS2"].setText(self.secondaryDNS.getText()) @@ -386,9 +383,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["Gateway"].setText("") self["Gatewaytext"].setText("") self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) - self["HelpWindow"].hide() def createConfig(self): self.InterfaceEntry = None @@ -518,30 +512,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["config"].list = self.list self["config"].l.setList(self.list) - if not self.selectionChanged in self["config"].onSelectionChanged: - self["config"].onSelectionChanged.append(self.selectionChanged) def KeyBlue(self): self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup) - def KeyText(self): - if self.iface == "wlan0" or self.iface == "ath0" : - if self["config"].getCurrent() == self.hiddenSSID: - if config.plugins.wlan.essid.value == 'hidden...': - self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value) - if self["config"].getCurrent() == self.encryptionKey: - self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value) - - def VirtualKeyBoardSSIDCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.hiddenessid.setValue(callback) - self["config"].invalidate(self.hiddenSSID) - - def VirtualKeyBoardKeyCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.encryption.psk.setValue(callback) - self["config"].invalidate(self.encryptionKey) - def newConfig(self): if self["config"].getCurrent() == self.InterfaceEntry: self.createSetup() @@ -565,24 +539,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): ConfigListScreen.keyRight(self) self.newConfig() - def selectionChanged(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - else: - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) - def ok(self): current = self["config"].getCurrent() if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': diff --git a/lib/python/Screens/RdsDisplay.py b/lib/python/Screens/RdsDisplay.py old mode 100644 new mode 100755 index 36d45908..0b99584f --- a/lib/python/Screens/RdsDisplay.py +++ b/lib/python/Screens/RdsDisplay.py @@ -4,7 +4,7 @@ from Components.ActionMap import NumberActionMap from Components.ServiceEventTracker import ServiceEventTracker from Components.Pixmap import Pixmap from Components.Label import Label -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap class RdsInfoDisplay(Screen): @@ -122,10 +122,10 @@ class RassInteractive(Screen): 9 : self["subpages_9"] } self.subpage_png = { - 1 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page1.png")), - 2 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page2.png")), - 3 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page3.png")), - 4 : LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/rass_page4.png")) } + 1 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page1.png")), + 2 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page2.png")), + 3 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page3.png")), + 4 : LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/rass_page4.png")) } self.current_page=0; self.current_subpage=0; diff --git a/lib/python/Screens/VirtualKeyBoard.py b/lib/python/Screens/VirtualKeyBoard.py index 19500ed7..7846e4b8 100755 --- a/lib/python/Screens/VirtualKeyBoard.py +++ b/lib/python/Screens/VirtualKeyBoard.py @@ -7,26 +7,25 @@ from Components.MenuList import MenuList from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_CENTER, RT_VALIGN_CENTER from Screen import Screen -from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap class VirtualKeyBoardList(MenuList): def __init__(self, list, enableWrapAround=False): MenuList.__init__(self, list, enableWrapAround, eListboxPythonMultiContent) - self.l.setFont(0, gFont("Regular", 22)) + self.l.setFont(0, gFont("Regular", 28)) self.l.setItemHeight(45) def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False): - key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_backspace.png")) - key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_bg.png")) - key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_clr.png")) - key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_esc.png")) - key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_ok.png")) - key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_sel.png")) - key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift.png")) - key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_shift_sel.png")) - key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/vkey_space.png")) - + key_backspace = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_backspace.png")) + key_bg = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_bg.png")) + key_clr = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_clr.png")) + key_esc = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_esc.png")) + key_ok = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_ok.png")) + key_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_sel.png")) + key_shift = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift.png")) + key_shift_sel = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_shift_sel.png")) + key_space = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/vkey_space.png")) res = [ (keys) ] x = 0 @@ -36,33 +35,45 @@ def VirtualKeyBoardEntryComponent(keys, selectedKey,shiftMode=False): else: shiftkey_png = key_shift for key in keys: + width = None if key == "EXIT": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_esc)) + width = key_esc.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_esc)) elif key == "BACKSPACE": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_backspace)) + width = key_backspace.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_backspace)) elif key == "CLEAR": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_clr)) + width = key_clr.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_clr)) elif key == "SHIFT": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=shiftkey_png)) + width = shiftkey_png.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=shiftkey_png)) elif key == "SPACE": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_space)) + width = key_space.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_space)) elif key == "OK": - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_ok)) + width = key_ok.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_ok)) #elif key == "<-": # res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_left)) #elif key == "->": # res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_right)) else: + width = key_bg.size().width() res.extend(( - MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_bg), - MultiContentEntryText(pos=(x, 0), size=(45, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER) + MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_bg), + MultiContentEntryText(pos=(x, 0), size=(width, 45), font=0, text=key.encode("utf-8"), flags=RT_HALIGN_CENTER | RT_VALIGN_CENTER) )) if selectedKey == count: - res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(45, 45), png=key_sel)) - - x += 45 + width = key_sel.size().width() + res.append(MultiContentEntryPixmapAlphaTest(pos=(x, 0), size=(width, 45), png=key_sel)) + + if width is not None: + x += width + else: + x += 45 count += 1 return res -- cgit v1.2.3 From b5e18109ec87cc8f4c2a1923c0d98f3a0e758be8 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Tue, 1 Dec 2009 18:25:07 +0100 Subject: PluginBrowser.py: react on language changes and clear/reload pluginlist to show the correct translations inside enigma2. This fixes #318 --- lib/python/Screens/PluginBrowser.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/PluginBrowser.py b/lib/python/Screens/PluginBrowser.py index 3a7df9fb..61bb7d0a 100755 --- a/lib/python/Screens/PluginBrowser.py +++ b/lib/python/Screens/PluginBrowser.py @@ -1,5 +1,5 @@ from Screen import Screen - +from Components.Language import language from enigma import eConsoleAppContainer from Components.ActionMap import ActionMap @@ -14,6 +14,10 @@ from Tools.LoadPixmap import LoadPixmap from time import time +def languageChanged(): + plugins.clearPluginList() + plugins.readPluginList(resolveFilename(SCOPE_PLUGINS)) + class PluginBrowser(Screen): def __init__(self, session): Screen.__init__(self, session) @@ -226,3 +230,4 @@ class PluginDownloadBrowser(Screen): self.list = list self["list"].l.setList(list) +language.addCallback(languageChanged) \ No newline at end of file -- cgit v1.2.3 From 2c3384af08412169cad78b45eae107effafce328 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 3 Dec 2009 15:23:41 +0100 Subject: Plugins/Plugin.py, InfoBarGenerics.py: add WHERE_AUDIOMENU for plugins .. requested by Tode for the AudioSync Plugin fixes bug #305 --- lib/python/Plugins/Plugin.py | 2 ++ lib/python/Screens/InfoBarGenerics.py | 47 ++++++++++++++++++++++++++++------- 2 files changed, 40 insertions(+), 9 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Plugins/Plugin.py b/lib/python/Plugins/Plugin.py index d7fc6898..dc68ebf3 100755 --- a/lib/python/Plugins/Plugin.py +++ b/lib/python/Plugins/Plugin.py @@ -52,6 +52,8 @@ class PluginDescriptor: # reason (True: Networkconfig read finished, False: Networkconfig reload initiated ) WHERE_NETWORKCONFIG_READ = 12 + WHERE_AUDIOMENU = 13 + def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None, wakeupfnc = None, internal = False): self.name = name self.internal = internal diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 2cbfeb73..4f10cbcf 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1669,17 +1669,46 @@ class InfoBarAudioSelection: else: break + availableKeys = [] + usedKeys = [] + if SystemInfo["CanDownmixAC3"]: - tlist = [(_("AC3 downmix") + " - " +(_("Off"), _("On"))[config.av.downmix_ac3.value and 1 or 0], "CALLFUNC", self.changeAC3Downmix), - ((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode"), - ("--", "")] + tlist - keys = [ "red", "green", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n - selection += 3 - else: - tlist = [((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode"), ("--", "")] + tlist - keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n + flist = [(_("AC3 downmix") + " - " +(_("Off"), _("On"))[config.av.downmix_ac3.value and 1 or 0], "CALLFUNC", self.changeAC3Downmix), + ((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode")] + usedKeys.extend(["red", "green"]) + availableKeys.extend(["yellow", "blue"]) selection += 2 - self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection, keys = keys, skin_name = "AudioTrackSelection") + else: + flist = [((_("Left"), _("Stereo"), _("Right"))[self.audioChannel.getCurrentChannel()], "mode")] + usedKeys.extend(["red"]) + availableKeys.extend(["green", "yellow", "blue"]) + selection += 1 + + if hasattr(self, "runPlugin"): + class PluginCaller: + def __init__(self, fnc, *args): + self.fnc = fnc + self.args = args + def __call__(self, *args, **kwargs): + self.fnc(*self.args) + + Plugins = [ (p.name, PluginCaller(self.runPlugin, p)) for p in plugins.getPlugins(where = PluginDescriptor.WHERE_AUDIOMENU) ] + + for p in Plugins: + selection += 1 + flist.append((p[0], "CALLFUNC", p[1])) + if availableKeys: + usedKeys.append(availableKeys[0]) + del availableKeys[0] + else: + usedKeys.append("") + + flist.append(("--", "")) + usedKeys.append("") + selection += 1 + + keys = usedKeys + [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ] + [""] * n + self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = flist + tlist, selection = selection, keys = keys, skin_name = "AudioTrackSelection") else: del self.audioTracks -- cgit v1.2.3 From cb00266f327ae7da1685cdeaeefddf441bf88316 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 3 Dec 2009 16:40:44 +0100 Subject: Menu.py: add possibility to use the exclamation mark as NOT indicator in menu/setup.xml for requires entries (thx to Moritz Venn) --- lib/python/Screens/Menu.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py index 5f2032f1..bb0709e5 100644 --- a/lib/python/Screens/Menu.py +++ b/lib/python/Screens/Menu.py @@ -97,8 +97,12 @@ class Menu(Screen): def addMenu(self, destList, node): requires = node.get("requires") - if requires and not SystemInfo.get(requires, False): - return + if requires: + if requires[0] == '!': + if SystemInfo.get(requires[1:], False): + return + elif not SystemInfo.get(requires, False): + return MenuTitle = _(node.get("text", "??").encode("UTF-8")) entryID = node.get("entryID", "undefined") weight = node.get("weight", 50) @@ -120,8 +124,12 @@ class Menu(Screen): def addItem(self, destList, node): requires = node.get("requires") - if requires and not SystemInfo.get(requires, False): - return + if requires: + if requires[0] == '!': + if SystemInfo.get(requires[1:], False): + return + elif not SystemInfo.get(requires, False): + return item_text = node.get("text", "").encode("UTF-8") entryID = node.get("entryID", "undefined") weight = node.get("weight", 50) -- cgit v1.2.3 From 29aad534cf1c20a723fe8d736babad1be1e6e9fa Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 3 Dec 2009 16:42:12 +0100 Subject: use new DeepstandbySupport SystemInfo entry at some places... this fixes bug #307 --- data/menu.xml | 3 ++- lib/python/Screens/SleepTimerEdit.py | 7 ++++++- lib/python/Screens/TaskView.py | 7 ++++++- lib/python/Screens/TimerEntry.py | 7 ++++++- 4 files changed, 20 insertions(+), 4 deletions(-) (limited to 'lib/python/Screens') diff --git a/data/menu.xml b/data/menu.xml index c7fb8897..a96912a6 100644 --- a/data/menu.xml +++ b/data/menu.xml @@ -104,6 +104,7 @@ self.session.openWithCallback(msgClosed, FactoryReset) 2 3 - 1 + 1 + 1 diff --git a/lib/python/Screens/SleepTimerEdit.py b/lib/python/Screens/SleepTimerEdit.py index ff061d88..e5e7af4e 100644 --- a/lib/python/Screens/SleepTimerEdit.py +++ b/lib/python/Screens/SleepTimerEdit.py @@ -5,6 +5,7 @@ from Components.Input import Input from Components.Label import Label from Components.Pixmap import Pixmap from Components.config import config, ConfigInteger +from Components.SystemInfo import SystemInfo from enigma import eEPGCache from SleepTimer import SleepTimer from time import time @@ -77,7 +78,11 @@ class SleepTimerEdit(Screen): self["red_text"].setText(_("Action:") + " " + _("Disable timer")) if config.SleepTimer.action.value == "shutdown": - self["green_text"].setText(_("Sleep timer action:") + " " + _("Deep Standby")) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("Deep Standby") + else: + shutdownString = _("Shutdown") + self["green_text"].setText(_("Sleep timer action:") + " " + shutdownString) elif config.SleepTimer.action.value == "standby": self["green_text"].setText(_("Sleep timer action:") + " " + _("Standby")) diff --git a/lib/python/Screens/TaskView.py b/lib/python/Screens/TaskView.py index 1453c05f..eb926ca3 100644 --- a/lib/python/Screens/TaskView.py +++ b/lib/python/Screens/TaskView.py @@ -1,6 +1,7 @@ from Screen import Screen from Components.ConfigList import ConfigListScreen from Components.config import config, ConfigSubsection, ConfigSelection, getConfigListEntry +from Components.SystemInfo import SystemInfo from InfoBarGenerics import InfoBarNotifications import Screens.Standby from Tools import Notifications @@ -44,7 +45,11 @@ class JobView(InfoBarNotifications, Screen, ConfigListScreen): self.afterevents = [ "nothing", "standby", "deepstandby", "close" ] self.settings = ConfigSubsection() - self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = self.afterevents[afterEvent]) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("go to deep standby") + else: + shutdownString = _("shut down") + self.settings.afterEvent = ConfigSelection(choices = [("nothing", _("do nothing")), ("close", _("Close")), ("standby", _("go to standby")), ("deepstandby", shutdownString)], default = self.afterevents[afterEvent]) self.setupList() self.state_changed() diff --git a/lib/python/Screens/TimerEntry.py b/lib/python/Screens/TimerEntry.py index edd19685..c6b0db8f 100644 --- a/lib/python/Screens/TimerEntry.py +++ b/lib/python/Screens/TimerEntry.py @@ -8,6 +8,7 @@ from Components.MenuList import MenuList from Components.Button import Button from Components.Label import Label from Components.Pixmap import Pixmap +from Components.SystemInfo import SystemInfo from Screens.MovieSelection import getPreferredTagEditor from Screens.LocationBox import MovieLocationBox from Screens.ChoiceBox import ChoiceBox @@ -93,7 +94,11 @@ class TimerEntry(Screen, ConfigListScreen): day[weekday] = 1 self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay]) - self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby")), ("auto", _("auto"))], default = afterevent) + if SystemInfo["DeepstandbySupport"]: + shutdownString = _("go to deep standby") + else: + shutdownString = _("shut down") + self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", shutdownString), ("auto", _("auto"))], default = afterevent) self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type) self.timerentry_name = ConfigText(default = self.timer.name, visible_width = 50, fixed_size = False) self.timerentry_description = ConfigText(default = self.timer.description, visible_width = 50, fixed_size = False) -- cgit v1.2.3 From bbe28d433549d0559ac2f91ca2903d5bc6b60bf4 Mon Sep 17 00:00:00 2001 From: ghost Date: Wed, 9 Dec 2009 15:47:56 +0100 Subject: fix skip backward from live to timeshift --- lib/python/Screens/InfoBarGenerics.py | 3 --- lib/service/servicedvb.cpp | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 39a8b59d..527b9772 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -1205,10 +1205,7 @@ class InfoBarTimeshift: self.setSeekState(self.SEEK_STATE_PAUSE) if back: - self.doSeek(-5) # seek some gops before end self.ts_rewind_timer.start(200, 1) - else: - self.doSeek(-1) # seek 1 gop before end def rewindService(self): self.setSeekState(self.makeStateBackward(int(config.seek.enter_backward.value))) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index b71271a9..9a995e7b 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -2285,12 +2285,13 @@ void eDVBServicePlay::switchToTimeshift() r.path = m_timeshift_file; m_cue = new eCueSheet(); + m_cue->seekTo(0, -1000); m_service_handler_timeshift.tune(r, 1, m_cue, 0, m_dvb_service); /* use the decoder demux for everything */ eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now."); pause(); updateDecoder(); /* mainly to switch off PCR, and to set pause */ - + m_event((iPlayableService*)this, evSeekableStatusChanged); } -- cgit v1.2.3 From f741c4cc282f2f99b86e6ec305604f27216087ba Mon Sep 17 00:00:00 2001 From: Mladen Horvat Date: Thu, 10 Dec 2009 11:09:58 +0100 Subject: Screens/NetworkSetup.py: - cleanup network configuration workflow. its now checked for a second interface before the config is actually written and network restartet. So this is now done only once, which speeds up the configuration by 100%. This fixes #202 --- lib/python/Screens/NetworkSetup.py | 167 ++++++++++++++++--------------------- 1 file changed, 70 insertions(+), 97 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index ec2bafe5..be508de6 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -6,6 +6,7 @@ from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.HelpMenu import HelpableScreen from Components.Network import iNetwork from Components.Sources.StaticText import StaticText +from Components.Sources.Boolean import Boolean from Components.Label import Label,MultiColorLabel from Components.Pixmap import Pixmap,MultiPixmap from Components.MenuList import MenuList @@ -14,7 +15,7 @@ from Components.ConfigList import ConfigListScreen from Components.PluginComponent import plugins from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap -from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap from Plugins.Plugin import PluginDescriptor from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont @@ -36,14 +37,14 @@ def InterfaceEntryComponent(index,name,default,active ): num_configured_if = len(iNetwork.getConfiguredAdapters()) if num_configured_if >= 2: if default is True: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue.png")) if default is False: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue_off.png")) res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png)) if active is True: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png")) + png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png")) if active is False: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_error.png")) + png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_error.png")) res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2)) return res @@ -278,7 +279,6 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): def remove(self): print "currentIndex:", self["config"].getCurrentIndex() - index = self["config"].getCurrentIndex() if index < len(self.nameservers): iNetwork.removeNameserver(self.nameservers[index]) @@ -309,24 +309,19 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel": (self.cancel, _("exit network adapter setup menu")), - "ok": (self.ok, _("select menu entry")), + "cancel": (self.keyCancel, _("exit network adapter configuration")), + "ok": (self.keySave, _("activate network adapter configuration")), }) self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red": (self.cancel, _("exit network adapter configuration")), + "red": (self.keyCancel, _("exit network adapter configuration")), "blue": (self.KeyBlue, _("open nameserver configuration")), }) - self["VirtualKB"] = HelpableActionMap(self, "VirtualKeyboardActions", - { - "showVirtualKeyboard": (self.KeyText, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ), - }) - self["actions"] = NumberActionMap(["SetupActions"], { - "ok": self.ok, + "ok": self.keySave, }, -2) self.list = [] @@ -355,9 +350,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["key_red"] = StaticText(_("Cancel")) self["key_blue"] = StaticText(_("Edit DNS")) - self["VKeyIcon"] = Pixmap() + self["VKeyIcon"] = Boolean(False) self["HelpWindow"] = Pixmap() - + self["HelpWindow"].hide() + def layoutFinished(self): self["DNS1"].setText(self.primaryDNS.getText()) self["DNS2"].setText(self.secondaryDNS.getText()) @@ -386,9 +382,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["Gateway"].setText("") self["Gatewaytext"].setText("") self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) - self["HelpWindow"].hide() def createConfig(self): self.InterfaceEntry = None @@ -426,7 +419,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): try: self.aps = self.w.getNetworkList() if self.aps is not None: - print "[NetworkSetup.py] got Accespoints!" for ap in self.aps: a = self.aps[ap] if a['active']: @@ -443,7 +435,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.default = self.wsconfig['ssid'] if "hidden..." not in self.nwlist: - self.nwlist.append(("hidden...",_("hidden network"))) + self.nwlist.append(("hidden...",_("enter hidden network SSID"))) if self.default not in self.nwlist: self.nwlist.append((self.default,self.default)) config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) @@ -518,30 +510,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["config"].list = self.list self["config"].l.setList(self.list) - if not self.selectionChanged in self["config"].onSelectionChanged: - self["config"].onSelectionChanged.append(self.selectionChanged) def KeyBlue(self): self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup) - def KeyText(self): - if self.iface == "wlan0" or self.iface == "ath0" : - if self["config"].getCurrent() == self.hiddenSSID: - if config.plugins.wlan.essid.value == 'hidden...': - self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value) - if self["config"].getCurrent() == self.encryptionKey: - self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value) - - def VirtualKeyBoardSSIDCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.hiddenessid.setValue(callback) - self["config"].invalidate(self.hiddenSSID) - - def VirtualKeyBoardKeyCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.encryption.psk.setValue(callback) - self["config"].invalidate(self.encryptionKey) - def newConfig(self): if self["config"].getCurrent() == self.InterfaceEntry: self.createSetup() @@ -564,34 +536,35 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def keyRight(self): ConfigListScreen.keyRight(self) self.newConfig() + + def keySave(self): + self.hideInputHelp() + if self["config"].isChanged(): + self.session.openWithCallback(self.keySaveConfirm, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + else: + self.close('cancel') - def selectionChanged(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) + def keySaveConfirm(self, ret = False): + if (ret == True): + num_configured_if = len(iNetwork.getConfiguredAdapters()) + if num_configured_if >= 1: + self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) + else: + self.applyConfig(True) else: - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) + self.keyCancel() - def ok(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() - self.session.openWithCallback(self.applyConfig, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + def secondIfaceFoundCB(self,data): + if data is False: + self.applyConfig(True) + else: + configuredInterfaces = iNetwork.getConfiguredAdapters() + for interface in configuredInterfaces: + if interface == self.iface: + continue + iNetwork.setAdapterAttribute(interface, "up", False) + iNetwork.deactivateInterface(interface) + self.applyConfig(True) def applyConfig(self, ret = False): if (ret == True): @@ -612,7 +585,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): iNetwork.restartNetwork(self.applyConfigDataAvail) self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) else: - self.cancel() + self.keyCancel() def applyConfigDataAvail(self, data): if data is True: @@ -624,46 +597,39 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def applyConfigfinishedCB(self,data): if data is True: - num_configured_if = len(iNetwork.getConfiguredAdapters()) - if num_configured_if >= 2: - self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("Your network configuration has been activated.\nA second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) + if self.finished_cb: + self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) else: - if self.finished_cb: - self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) - else: - self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) - - def secondIfaceFoundCB(self,data): - if data is False: - self.close('ok') - else: - configuredInterfaces = iNetwork.getConfiguredAdapters() - for interface in configuredInterfaces: - if interface == self.iface: - continue - iNetwork.setAdapterAttribute(interface, "up", False) - iNetwork.deactivateInterface(interface) - self.applyConfig(True) + self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) def ConfigfinishedCB(self,data): if data is not None: if data is True: self.close('ok') - def cancel(self): + def keyCancelConfirm(self, result): + if not result: + return if self.oldInterfaceState is False: - iNetwork.deactivateInterface(self.iface,self.cancelCB) + iNetwork.deactivateInterface(self.iface,self.keyCancelCB) else: self.close('cancel') - def cancelCB(self,data): + def keyCancel(self): + self.hideInputHelp() + if self["config"].isChanged(): + self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?")) + else: + self.close('cancel') + + def keyCancelCB(self,data): if data is not None: if data is True: self.close('cancel') def runAsync(self, finished_cb): self.finished_cb = finished_cb - self.ok() + self.keySave() def NameserverSetupClosed(self, *ret): iNetwork.loadNameserverConfig() @@ -675,6 +641,15 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() + + def hideInputHelp(self): + current = self["config"].getCurrent() + if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() + elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() class AdapterSetupConfiguration(Screen, HelpableScreen): @@ -813,7 +788,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.loadDescription() def loadDescription(self): - print self["menulist"].getCurrent()[1] if self["menulist"].getCurrent()[1] == 'edit': self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'test': @@ -838,10 +812,10 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): if self.iface == 'wlan0' or self.iface == 'ath0': try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except: - self["statuspic"].setPixmapNum(1) - self["statuspic"].show() + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() else: iStatus.getDataForInterface(self.iface,self.getInfoCB) else: @@ -863,7 +837,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): callFnc = p.__call__["ifaceSupported"](self.iface) if callFnc is not None: self.extended = callFnc - print p.__call__ if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin menu.append((_("Scan Wireless Networks"), "scanwlan")) if iNetwork.getAdapterAttribute(self.iface, "up"): @@ -964,7 +937,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): iNetwork.stopLinkStateConsole() iNetwork.stopDeactivateInterfaceConsole() try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except ImportError: pass else: -- cgit v1.2.3 From 0f6258f9b8d09188090e591bfdf7721f03d0d8e3 Mon Sep 17 00:00:00 2001 From: Mladen Horvat Date: Fri, 11 Dec 2009 11:07:07 +0100 Subject: Screens/NetworkSetup.py: small fix for yesterdays network cleanup. --- lib/python/Screens/NetworkSetup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index be508de6..c24fddeb 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -542,7 +542,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): if self["config"].isChanged(): self.session.openWithCallback(self.keySaveConfirm, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) else: - self.close('cancel') + if self.finished_cb: + self.finished_cb() + else: + self.close('cancel') def keySaveConfirm(self, ret = False): if (ret == True): -- cgit v1.2.3 From d2188eb11a8c7663e34b1ab3d343a9981e60da62 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 14 Dec 2009 10:27:38 +0100 Subject: Bugfix by Anders Holst: A bug was detected in the recent recordpath patch. It could cause a crash when using the green or yellow button to select a tag in the movielist. --- lib/python/Screens/MovieSelection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/MovieSelection.py b/lib/python/Screens/MovieSelection.py index 15f6b465..0468f8a0 100644 --- a/lib/python/Screens/MovieSelection.py +++ b/lib/python/Screens/MovieSelection.py @@ -398,7 +398,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): def showTagsN(self, tagele): if not self.tags: self.showTagWarning() - elif not tagele or tagele.value in self.selected_tags or not tagele.value in self.tags: + elif not tagele or (self.selected_tags and tagele.value in self.selected_tags) or not tagele.value in self.tags: self.showTagsMenu(tagele) else: self.selected_tags_ele = tagele -- cgit v1.2.3 From bfd5fa5d07a4c26aeb028a68818a9e2300c9dc6f Mon Sep 17 00:00:00 2001 From: acid-burn Date: Tue, 15 Dec 2009 19:27:02 +0100 Subject: Screens/NetworkSetup.py, WirelessLan/plugin.py: - fix wrong networkstate in some conditions. This fixex #203 --- .../Plugins/SystemPlugins/WirelessLan/plugin.py | 254 +++++++++++++++------ lib/python/Screens/NetworkSetup.py | 220 +++++++++--------- 2 files changed, 289 insertions(+), 185 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py index b7a64b9a..c8568b98 100755 --- a/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py +++ b/lib/python/Plugins/SystemPlugins/WirelessLan/plugin.py @@ -4,6 +4,7 @@ from Components.ActionMap import ActionMap, NumberActionMap from Components.Pixmap import Pixmap,MultiPixmap from Components.Label import Label from Components.Sources.StaticText import StaticText +from Components.Sources.List import List from Components.MenuList import MenuList from Components.config import config, getConfigListEntry, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword from Components.ConfigList import ConfigListScreen @@ -11,8 +12,9 @@ from Components.Network import Network, iNetwork from Components.Console import Console from Plugins.Plugin import PluginDescriptor from os import system, path as os_path, listdir -from Wlan import Wlan, WlanList, wpaSupplicant -from Wlan import Status, iStatus +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.LoadPixmap import LoadPixmap +from Wlan import Wlan, wpaSupplicant, iStatus plugin_path = "/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan" @@ -39,37 +41,35 @@ config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewl class WlanStatus(Screen): skin = """ - - - - - - - - - - - - - - - - - - - - - - - - - """ + + + + + + + + + + + + + + + + + + + + + + + + """ def __init__(self, session, iface): Screen.__init__(self, session) self.session = session self.iface = iface - self.skin = WlanStatus.skin self["LabelBSSID"] = StaticText(_('Accesspoint:')) self["LabelESSID"] = StaticText(_('SSID:')) @@ -114,7 +114,6 @@ class WlanStatus(Screen): self.setTitle(_("Wireless Network State")) def resetList(self): - print "self.iface im resetlist",self.iface iStatus.getDataForInterface(self.iface,self.getInfoCB) def getInfoCB(self,data,status): @@ -131,10 +130,9 @@ class WlanStatus(Screen): def exit(self): self.timer.stop() - self.close() + self.close(True) def updateStatusbar(self): - print "self.iface im updateStatusbar",self.iface self["BSSID"].setText(_("Please wait...")) self["ESSID"].setText(_("Please wait...")) self["quality"].setText(_("Please wait...")) @@ -155,37 +153,55 @@ class WlanStatus(Screen): class WlanScan(Screen): skin = """ - - - - - - - - - - - - """ + + + + + + + + + + {"template": [ + MultiContentEntryText(pos = (0, 0), size = (550, 30), font=0, flags = RT_HALIGN_LEFT, text = 0), # index 0 is the essid + MultiContentEntryText(pos = (0, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 5), # index 5 is the interface + MultiContentEntryText(pos = (175, 30), size = (175, 20), font=1, flags = RT_HALIGN_LEFT, text = 4), # index 0 is the encryption + MultiContentEntryText(pos = (350, 0), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 2), # index 0 is the signal + MultiContentEntryText(pos = (350, 30), size = (200, 20), font=1, flags = RT_HALIGN_LEFT, text = 3), # index 0 is the maxrate + MultiContentEntryPixmapAlphaTest(pos = (0, 52), size = (550, 2), png = 6), # index 6 is the div pixmap + ], + "fonts": [gFont("Regular", 28),gFont("Regular", 18)], + "itemHeight": 54 + } + + + + + """ def __init__(self, session, iface): Screen.__init__(self, session) self.session = session self.iface = iface - self.skin = WlanScan.skin self.skin_path = plugin_path self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up") + self.APList = None + self.newAPList = None + self.WlanList = None + self.cleanList = None + self.oldlist = None + self.listLenght = None + self.rescanTimer = eTimer() + self.rescanTimer.callback.append(self.rescanTimerFired) self["info"] = StaticText() - self.list = [] - self["list"] = WlanList(self.session, self.iface) + self.list = [] + self["list"] = List(self.list) - self.setInfo() - self["key_red"] = StaticText(_("Close")) self["key_green"] = StaticText(_("Connect")) - self["key_yellow"] = StaticText(_("Refresh")) + self["key_yellow"] = StaticText() self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"], { @@ -195,63 +211,161 @@ class WlanScan(Screen): self["shortcuts"] = ActionMap(["ShortcutActions"], { - "red": self.cancel, + "red": self.cancel, "green": self.select, - "yellow": self.rescan, }) self.onLayoutFinish.append(self.layoutFinished) + self.getAccessPoints(refresh = False) def layoutFinished(self): self.setTitle(_("Choose a wireless network")) def select(self): cur = self["list"].getCurrent() - #print "CURRENT",cur if cur is not None: + self.rescanTimer.stop() + del self.rescanTimer if cur[1] is not None: - essid = cur[0] - if essid == '': - essid = cur[1] - encrypted = cur[2] - self.close(essid,self["list"].getList()) + essid = cur[1] + self.close(essid,self.getWlanList()) else: self.close(None,None) else: + self.rescanTimer.stop() + del self.rescanTimer self.close(None,None) def WlanSetupClosed(self, *ret): if ret[0] == 2: + self.rescanTimer.stop() + del self.rescanTimer self.close(None) - def rescan(self): - self["list"].reload() - self.setInfo() - def cancel(self): if self.oldInterfaceState is False: + iNetwork.setAdapterAttribute(self.iface, "up", False) iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB) else: + self.rescanTimer.stop() + del self.rescanTimer self.close(None) def deactivateInterfaceCB(self,data): if data is not None: if data is True: - iNetwork.getInterfaces(self.cancelCB) - - def cancelCB(self,data): - if data is not None: - if data is True: + self.rescanTimer.stop() + del self.rescanTimer self.close(None) - def setInfo(self): - length = self["list"].getLength() + def rescanTimerFired(self): + self.rescanTimer.stop() + self.updateAPList() + + def buildEntryComponent(self, essid, bssid, encrypted, iface, maxrate, signal): + divpng = LoadPixmap(cached=True, path=resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/div-h.png")) + encryption = encrypted and _("Yes") or _("No") + if bssid == 'hidden...': + return((essid, bssid, None, None, None, None, divpng)) + else: + return((essid, bssid, _("Signal: ") + str(signal), _("Max. Bitrate: ") + str(maxrate), _("Encrypted: ") + encryption, _("Interface: ") + str(iface), divpng)) + + def updateAPList(self): + self.oldlist = [] + self.oldlist = self.cleanList + self.newAPList = [] + newList = [] + tmpList = [] + newListIndex = None + currentListEntry = None + currentListIndex = None + newList = self.getAccessPoints(refresh = True) + for oldentry in self.oldlist: + if oldentry not in newList: + newList.append(oldentry) + + for newentry in newList: + if newentry[1] == "hidden...": + continue + tmpList.append(newentry) + + if len(tmpList): + if "hidden..." not in tmpList: + tmpList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) ) + + for entry in tmpList: + self.newAPList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] )) + + currentListEntry = self["list"].getCurrent() + idx = 0 + for entry in self.newAPList: + if entry == currentListEntry: + newListIndex = idx + idx +=1 + self['list'].setList(self.newAPList) + self["list"].setIndex(newListIndex) + self["list"].updateList(self.newAPList) + self.listLenght = len(self.newAPList) + self.buildWlanList() + self.setInfo() + + def getAccessPoints(self, refresh = False): + self.APList = [] + self.cleanList = [] + self.w = Wlan(self.iface) + aps = self.w.getNetworkList() + if aps is not None: + print "[NetworkWizard.py] got Accespoints!" + tmpList = [] + compList = [] + for ap in aps: + a = aps[ap] + if a['active']: + tmpList.append( (a['essid'], a['bssid']) ) + compList.append( (a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal']) ) + + for entry in tmpList: + if entry[0] == "": + for compentry in compList: + if compentry[1] == entry[1]: + compList.remove(compentry) + for entry in compList: + self.cleanList.append( ( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] ) ) + + if "hidden..." not in self.cleanList: + self.cleanList.append( ( _("enter hidden network SSID"), "hidden...", True, self.iface, _("unavailable"), "" ) ) + + for entry in self.cleanList: + self.APList.append(self.buildEntryComponent( entry[0], entry[1], entry[2], entry[3], entry[4], entry[5] )) + + if refresh is False: + self['list'].setList(self.APList) + self.listLenght = len(self.APList) + self.setInfo() + self.rescanTimer.start(5000) + return self.cleanList + + def setInfo(self): + length = self.getLength() if length == 0: self["info"].setText(_("No wireless networks found! Please refresh.")) elif length == 1: self["info"].setText(_("1 wireless network found!")) else: - self["info"].setText(str(length)+_(" wireless networks found!")) + self["info"].setText(str(length)+_(" wireless networks found!")) + + def buildWlanList(self): + self.WlanList = [] + currList = [] + currList = self['list'].list + for entry in currList: + self.WlanList.append( (entry[1], entry[0]) ) + + def getLength(self): + return self.listLenght + + def getWlanList(self): + return self.WlanList def WlanStatusScreenMain(session, iface): @@ -259,13 +373,11 @@ def WlanStatusScreenMain(session, iface): def callFunction(iface): - w = Wlan(iface) i = w.getWirelessInterfaces() if i: if iface in i: return WlanStatusScreenMain - return None diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index ec2bafe5..e16f26f3 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -6,6 +6,7 @@ from Screens.VirtualKeyBoard import VirtualKeyBoard from Screens.HelpMenu import HelpableScreen from Components.Network import iNetwork from Components.Sources.StaticText import StaticText +from Components.Sources.Boolean import Boolean from Components.Label import Label,MultiColorLabel from Components.Pixmap import Pixmap,MultiPixmap from Components.MenuList import MenuList @@ -14,7 +15,7 @@ from Components.ConfigList import ConfigListScreen from Components.PluginComponent import plugins from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap -from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN from Tools.LoadPixmap import LoadPixmap from Plugins.Plugin import PluginDescriptor from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont @@ -36,14 +37,14 @@ def InterfaceEntryComponent(index,name,default,active ): num_configured_if = len(iNetwork.getConfiguredAdapters()) if num_configured_if >= 2: if default is True: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue.png")) if default is False: - png = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/buttons/button_blue_off.png")) + png = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/buttons/button_blue_off.png")) res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(25, 25), png = png)) if active is True: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_on.png")) + png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_on.png")) if active is False: - png2 = LoadPixmap(resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/icons/lock_error.png")) + png2 = LoadPixmap(cached=True, path=resolveFilename(SCOPE_CURRENT_SKIN, "skin_default/icons/lock_error.png")) res.append(MultiContentEntryPixmapAlphaTest(pos=(40, 1), size=(25, 25), png = png2)) return res @@ -278,7 +279,6 @@ class NameserverSetup(Screen, ConfigListScreen, HelpableScreen): def remove(self): print "currentIndex:", self["config"].getCurrentIndex() - index = self["config"].getCurrentIndex() if index < len(self.nameservers): iNetwork.removeNameserver(self.nameservers[index]) @@ -309,24 +309,19 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", { - "cancel": (self.cancel, _("exit network adapter setup menu")), - "ok": (self.ok, _("select menu entry")), + "cancel": (self.keyCancel, _("exit network adapter configuration")), + "ok": (self.keySave, _("activate network adapter configuration")), }) self["ColorActions"] = HelpableActionMap(self, "ColorActions", { - "red": (self.cancel, _("exit network adapter configuration")), + "red": (self.keyCancel, _("exit network adapter configuration")), "blue": (self.KeyBlue, _("open nameserver configuration")), }) - self["VirtualKB"] = HelpableActionMap(self, "VirtualKeyboardActions", - { - "showVirtualKeyboard": (self.KeyText, [_("open virtual keyboard input help"),_("* Only available when entering hidden SSID or network key")] ), - }) - self["actions"] = NumberActionMap(["SetupActions"], { - "ok": self.ok, + "ok": self.keySave, }, -2) self.list = [] @@ -355,9 +350,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["key_red"] = StaticText(_("Cancel")) self["key_blue"] = StaticText(_("Edit DNS")) - self["VKeyIcon"] = Pixmap() + self["VKeyIcon"] = Boolean(False) self["HelpWindow"] = Pixmap() - + self["HelpWindow"].hide() + def layoutFinished(self): self["DNS1"].setText(self.primaryDNS.getText()) self["DNS2"].setText(self.secondaryDNS.getText()) @@ -386,9 +382,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["Gateway"].setText("") self["Gatewaytext"].setText("") self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface)) - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) - self["HelpWindow"].hide() def createConfig(self): self.InterfaceEntry = None @@ -426,7 +419,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): try: self.aps = self.w.getNetworkList() if self.aps is not None: - print "[NetworkSetup.py] got Accespoints!" for ap in self.aps: a = self.aps[ap] if a['active']: @@ -443,7 +435,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.default = self.wsconfig['ssid'] if "hidden..." not in self.nwlist: - self.nwlist.append(("hidden...",_("hidden network"))) + self.nwlist.append(("hidden...",_("enter hidden network SSID"))) if self.default not in self.nwlist: self.nwlist.append((self.default,self.default)) config.plugins.wlan.essid = NoSave(ConfigSelection(self.nwlist, default = self.default )) @@ -518,30 +510,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["config"].list = self.list self["config"].l.setList(self.list) - if not self.selectionChanged in self["config"].onSelectionChanged: - self["config"].onSelectionChanged.append(self.selectionChanged) def KeyBlue(self): self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup) - def KeyText(self): - if self.iface == "wlan0" or self.iface == "ath0" : - if self["config"].getCurrent() == self.hiddenSSID: - if config.plugins.wlan.essid.value == 'hidden...': - self.session.openWithCallback(self.VirtualKeyBoardSSIDCallback, VirtualKeyBoard, title = (_("Enter WLAN network name/SSID:")), text = config.plugins.wlan.essid.value) - if self["config"].getCurrent() == self.encryptionKey: - self.session.openWithCallback(self.VirtualKeyBoardKeyCallback, VirtualKeyBoard, title = (_("Enter WLAN passphrase/key:")), text = config.plugins.wlan.encryption.psk.value) - - def VirtualKeyBoardSSIDCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.hiddenessid.setValue(callback) - self["config"].invalidate(self.hiddenSSID) - - def VirtualKeyBoardKeyCallback(self, callback = None): - if callback is not None and len(callback): - config.plugins.wlan.encryption.psk.setValue(callback) - self["config"].invalidate(self.encryptionKey) - def newConfig(self): if self["config"].getCurrent() == self.InterfaceEntry: self.createSetup() @@ -564,34 +536,38 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def keyRight(self): ConfigListScreen.keyRight(self) self.newConfig() + + def keySave(self): + self.hideInputHelp() + if self["config"].isChanged(): + self.session.openWithCallback(self.keySaveConfirm, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + else: + if self.finished_cb: + self.finished_cb() + else: + self.close('cancel') - def selectionChanged(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - helpwindowpos = self["HelpWindow"].getPosition() - if current[1].help_window.instance is not None: - current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1])) - self["VKeyIcon"].show() - self["VirtualKB"].setEnabled(True) + def keySaveConfirm(self, ret = False): + if (ret == True): + num_configured_if = len(iNetwork.getConfiguredAdapters()) + if num_configured_if >= 1: + self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) + else: + self.applyConfig(True) else: - self["VKeyIcon"].hide() - self["VirtualKB"].setEnabled(False) + self.keyCancel() - def ok(self): - current = self["config"].getCurrent() - if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() - elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() - self.session.openWithCallback(self.applyConfig, MessageBox, (_("Are you sure you want to activate this network configuration?\n\n") + self.oktext ) ) + def secondIfaceFoundCB(self,data): + if data is False: + self.applyConfig(True) + else: + configuredInterfaces = iNetwork.getConfiguredAdapters() + for interface in configuredInterfaces: + if interface == self.iface: + continue + iNetwork.setAdapterAttribute(interface, "up", False) + iNetwork.deactivateInterface(interface) + self.applyConfig(True) def applyConfig(self, ret = False): if (ret == True): @@ -612,7 +588,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): iNetwork.restartNetwork(self.applyConfigDataAvail) self.applyConfigRef = self.session.openWithCallback(self.applyConfigfinishedCB, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) else: - self.cancel() + self.keyCancel() def applyConfigDataAvail(self, data): if data is True: @@ -624,46 +600,39 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def applyConfigfinishedCB(self,data): if data is True: - num_configured_if = len(iNetwork.getConfiguredAdapters()) - if num_configured_if >= 2: - self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("Your network configuration has been activated.\nA second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) + if self.finished_cb: + self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) else: - if self.finished_cb: - self.session.openWithCallback(lambda x : self.finished_cb(), MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) - else: - self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) - - def secondIfaceFoundCB(self,data): - if data is False: - self.close('ok') - else: - configuredInterfaces = iNetwork.getConfiguredAdapters() - for interface in configuredInterfaces: - if interface == self.iface: - continue - iNetwork.setAdapterAttribute(interface, "up", False) - iNetwork.deactivateInterface(interface) - self.applyConfig(True) + self.session.openWithCallback(self.ConfigfinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10) def ConfigfinishedCB(self,data): if data is not None: if data is True: self.close('ok') - def cancel(self): + def keyCancelConfirm(self, result): + if not result: + return if self.oldInterfaceState is False: - iNetwork.deactivateInterface(self.iface,self.cancelCB) + iNetwork.deactivateInterface(self.iface,self.keyCancelCB) else: self.close('cancel') - def cancelCB(self,data): + def keyCancel(self): + self.hideInputHelp() + if self["config"].isChanged(): + self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?")) + else: + self.close('cancel') + + def keyCancelCB(self,data): if data is not None: if data is True: self.close('cancel') def runAsync(self, finished_cb): self.finished_cb = finished_cb - self.ok() + self.keySave() def NameserverSetupClosed(self, *ret): iNetwork.loadNameserverConfig() @@ -675,6 +644,15 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() + + def hideInputHelp(self): + current = self["config"].getCurrent() + if current == self.hiddenSSID and config.plugins.wlan.essid.value == 'hidden...': + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() + elif current == self.encryptionKey and config.plugins.wlan.encryption.enabled.value: + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() class AdapterSetupConfiguration(Screen, HelpableScreen): @@ -684,6 +662,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.session = session self.iface = iface self.restartLanRef = None + self.LinkState = None self.mainmenu = self.genMainMenu() self["menulist"] = MenuList(self.mainmenu) self["key_red"] = StaticText(_("Close")) @@ -733,6 +712,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.onClose.append(self.cleanup) def ok(self): + self.stopCheckNetworkConsole() if self["menulist"].getCurrent()[1] == 'edit': if self.iface == 'wlan0' or self.iface == 'ath0': try: @@ -813,7 +793,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.loadDescription() def loadDescription(self): - print self["menulist"].getCurrent()[1] if self["menulist"].getCurrent()[1] == 'edit': self["description"].setText(_("Edit the network configuration of your Dreambox.\n" ) + self.oktext ) if self["menulist"].getCurrent()[1] == 'test': @@ -832,16 +811,18 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self["description"].setText(_(self["menulist"].getCurrent()[1][1]) + self.oktext ) def updateStatusbar(self, data = None): + self.mainmenu = self.genMainMenu() + self["menulist"].l.setList(self.mainmenu) self["IFtext"].setText(_("Network:")) self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface)) self["Statustext"].setText(_("Link:")) if self.iface == 'wlan0' or self.iface == 'ath0': try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except: - self["statuspic"].setPixmapNum(1) - self["statuspic"].show() + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() else: iStatus.getDataForInterface(self.iface,self.getInfoCB) else: @@ -863,7 +844,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): callFnc = p.__call__["ifaceSupported"](self.iface) if callFnc is not None: self.extended = callFnc - print p.__call__ if p.__call__.has_key("WlanPluginEntry"): # internally used only for WLAN Plugin menu.append((_("Scan Wireless Networks"), "scanwlan")) if iNetwork.getAdapterAttribute(self.iface, "up"): @@ -902,20 +882,14 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): # Display Wlan not available Message self.showErrorMessage() else: - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) self.updateStatusbar() else: - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) self.updateStatusbar() def WlanStatusClosed(self, *ret): if ret is not None and len(ret): from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status iStatus.stopWlanConsole() - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) self.updateStatusbar() def WlanScanClosed(self,*ret): @@ -924,8 +898,6 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): else: from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status iStatus.stopWlanConsole() - self.mainmenu = self.genMainMenu() - self["menulist"].l.setList(self.mainmenu) self.updateStatusbar() def restartLan(self, ret = False): @@ -947,15 +919,15 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 10, default = False) def dataAvail(self,data): - self.output = data.strip() - result = self.output.split('\n') - pattern = re_compile("Link detected: yes") - for item in result: - if re_search(pattern, item): - self["statuspic"].setPixmapNum(0) - else: - self["statuspic"].setPixmapNum(1) - self["statuspic"].show() + self.LinkState = None + for line in data.splitlines(): + line = line.strip() + if 'Link detected:' in line: + if "yes" in line: + self.LinkState = True + else: + self.LinkState = False + iNetwork.checkNetworkState(self.checkNetworkCB) def showErrorMessage(self): self.session.open(MessageBox, self.errortext, type = MessageBox.TYPE_INFO,timeout = 10 ) @@ -963,8 +935,9 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() iNetwork.stopDeactivateInterfaceConsole() + self.stopCheckNetworkConsole() try: - from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus,Status + from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except ImportError: pass else: @@ -980,6 +953,25 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self["statuspic"].setPixmapNum(0) self["statuspic"].show() + def checkNetworkCB(self,data): + if iNetwork.getAdapterAttribute(self.iface, "up") is True: + if self.LinkState is True: + if data <= 2: + self["statuspic"].setPixmapNum(0) + else: + self["statuspic"].setPixmapNum(1) + else: + self["statuspic"].setPixmapNum(1) + else: + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() + + def stopCheckNetworkConsole(self): + if iNetwork.PingConsole is not None: + if len(iNetwork.PingConsole.appContainers): + for name in iNetwork.PingConsole.appContainers.keys(): + iNetwork.PingConsole.kill(name) + class NetworkAdapterTest(Screen): def __init__(self, session,iface): Screen.__init__(self, session) -- cgit v1.2.3 From 075c89b1e624ce80fa02aa789a319d84cbe928b4 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Thu, 17 Dec 2009 12:09:54 +0100 Subject: Components/Network.py, Screens/NetworkSetup.py: - fix possible crash when closing network config --- lib/python/Components/Network.py | 8 ++++++++ lib/python/Screens/NetworkSetup.py | 28 ++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index f65d6090..bd10d9c3 100755 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -24,6 +24,7 @@ class Network: self.activateConsole = Console() self.resetNetworkConsole = Console() self.DnsConsole = Console() + self.PingConsole = Console() self.config_ready = None self.getInterfaces() @@ -475,10 +476,17 @@ class Network: def getLinkStateFinished(self, result, retval,extra_args): (callback) = extra_args + if self.LinkConsole is not None: if len(self.LinkConsole.appContainers) == 0: callback(result) + def stopPingConsole(self): + if self.PingConsole is not None: + if len(self.PingConsole.appContainers): + for name in self.PingConsole.appContainers.keys(): + self.PingConsole.kill(name) + def stopLinkStateConsole(self): if self.LinkConsole is not None: if len(self.LinkConsole.appContainers): diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index e16f26f3..b32ebaf6 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -712,7 +712,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.onClose.append(self.cleanup) def ok(self): - self.stopCheckNetworkConsole() + self.cleanup() if self["menulist"].getCurrent()[1] == 'edit': if self.iface == 'wlan0' or self.iface == 'ath0': try: @@ -927,7 +927,11 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self.LinkState = True else: self.LinkState = False - iNetwork.checkNetworkState(self.checkNetworkCB) + if self.LinkState == True: + iNetwork.checkNetworkState(self.checkNetworkCB) + else: + self["statuspic"].setPixmapNum(1) + self["statuspic"].show() def showErrorMessage(self): self.session.open(MessageBox, self.errortext, type = MessageBox.TYPE_INFO,timeout = 10 ) @@ -935,7 +939,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): def cleanup(self): iNetwork.stopLinkStateConsole() iNetwork.stopDeactivateInterfaceConsole() - self.stopCheckNetworkConsole() + iNetwork.stopPingConsole() try: from Plugins.SystemPlugins.WirelessLan.Wlan import iStatus except ImportError: @@ -944,14 +948,17 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): iStatus.stopWlanConsole() def getInfoCB(self,data,status): + self.LinkState = None if data is not None: if data is True: if status is not None: if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False: + self.LinkState = False self["statuspic"].setPixmapNum(1) + self["statuspic"].show() else: - self["statuspic"].setPixmapNum(0) - self["statuspic"].show() + self.LinkState = True + iNetwork.checkNetworkState(self.checkNetworkCB) def checkNetworkCB(self,data): if iNetwork.getAdapterAttribute(self.iface, "up") is True: @@ -960,17 +967,14 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): self["statuspic"].setPixmapNum(0) else: self["statuspic"].setPixmapNum(1) + self["statuspic"].show() else: self["statuspic"].setPixmapNum(1) + self["statuspic"].show() else: self["statuspic"].setPixmapNum(1) - self["statuspic"].show() + self["statuspic"].show() - def stopCheckNetworkConsole(self): - if iNetwork.PingConsole is not None: - if len(iNetwork.PingConsole.appContainers): - for name in iNetwork.PingConsole.appContainers.keys(): - iNetwork.PingConsole.kill(name) class NetworkAdapterTest(Screen): def __init__(self, session,iface): @@ -1389,4 +1393,4 @@ class NetworkAdapterTest(Screen): pass else: iStatus.stopWlanConsole() - + -- cgit v1.2.3 From f389b2688c769776b706f2fec59c3bcc1425cbc0 Mon Sep 17 00:00:00 2001 From: acid-burn Date: Thu, 17 Dec 2009 12:55:19 +0100 Subject: Screens/NetworkSetup.py: - dont count current interface as second interface if only one interface is currently configured --- lib/python/Screens/NetworkSetup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/python/Screens') diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index c24fddeb..9461242d 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -551,7 +551,10 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): if (ret == True): num_configured_if = len(iNetwork.getConfiguredAdapters()) if num_configured_if >= 1: - self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) + if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters(): + self.applyConfig(True) + else: + self.session.openWithCallback(self.secondIfaceFoundCB, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True) else: self.applyConfig(True) else: -- cgit v1.2.3