Beispiel #1
0
 def useGeolocation(self):
     geoData = geolocation.getGeolocationData(
         fields="status,message,timezone,proxy")
     if geoData.get("proxy", True):
         self.setFootnote(_("Geolocation is not available."))
         return
     tz = geoData.get("timezone", None)
     if tz is None:
         self.setFootnote(
             _("Geolocation does not contain time zone information."))
     else:
         areaItem = None
         valItem = None
         for item in self["config"].list:
             if item[1] == config.timezone.area:
                 areaItem = item
             if item[1] == config.timezone.val:
                 valItem = item
         area, zone = tz.split("/", 1)
         config.timezone.area.value = area
         if areaItem is not None:
             areaItem[1].changed()
         self["config"].invalidate(areaItem)
         config.timezone.val.value = zone
         if valItem is not None:
             valItem[1].changed()
         self["config"].invalidate(valItem)
         self.setFootnote(
             _("Geolocation has been used to set the time zone."))
Beispiel #2
0
def InitTimeZones():
    config.timezone = ConfigSubsection()
    config.timezone.area = ConfigSelection(
        default=DEFAULT_AREA, choices=timezones.getTimezoneAreaList())
    config.timezone.val = ConfigSelection(default=DEFAULT_ZONE,
                                          choices=timezones.getTimezoneList())
    if config.misc.firstrun.value:
        geolocationData = geolocation.getGeolocationData(
            fields="proxy,timezone", useCache=True)
        proxy = geolocationData.get("proxy", False)
        tz = geolocationData.get("timezone", None)
        if proxy is True or tz is None:
            msg = " - proxy in use" if proxy else ""
            print(
                "[Timezones] Warning: Geolocation not available%s!  (area='%s', zone='%s')"
                % (msg, config.timezone.area.value, config.timezone.val.value))
        else:
            area, zone = tz.split("/", 1)
            if area != DEFAULT_AREA:
                config.timezone.area.value = area
                choices = timezones.getTimezoneList(area=area)
                config.timezone.val.setChoices(
                    choices,
                    default=timezones.getTimezoneDefault(area, choices))
            config.timezone.val.value = zone
            config.timezone.save()
            print(
                "[Timezones] Initial time zone set by geolocation tz='%s'.  (area='%s', zone='%s')"
                % (tz, area, zone))
    else:
        if not config.timezone.area.value and config.timezone.val.value.find(
                "/") == -1:
            config.timezone.area.value = "Generic"
        try:
            tzLink = path.realpath("/etc/localtime")[20:]
            msgs = []
            if config.timezone.area.value == "Classic":
                if config.timezone.val.value != tzLink:
                    msgs.append("time zone '%s' != '%s'" %
                                (config.timezone.val.value, tzLink))
            else:
                tzSplit = tzLink.find("/")
                if tzSplit == -1:
                    tzArea = "Generic"
                    tzVal = tzLink
                else:
                    tzArea = tzLink[:tzSplit]
                    tzVal = tzLink[tzSplit + 1:]
                if config.timezone.area.value != tzArea:
                    msgs.append("area '%s' != '%s'" %
                                (config.timezone.area.value, tzArea))
                if config.timezone.val.value != tzVal:
                    msgs.append("zone '%s' != '%s'" %
                                (config.timezone.val.value, tzVal))
            if len(msgs):
                print(
                    "[Timezones] Warning: Enigma2 time zone does not match system time zone (%s), setting system to Enigma2 time zone!"
                    % ",".join(msgs))
        except (IOError, OSError):
            pass

    def timezoneAreaChoices(configElement):
        choices = timezones.getTimezoneList(area=configElement.value)
        config.timezone.val.setChoices(choices=choices,
                                       default=timezones.getTimezoneDefault(
                                           area=configElement.value,
                                           choices=choices))
        if config.timezone.val.saved_value and config.timezone.val.saved_value in [
                x[0] for x in choices
        ]:
            config.timezone.val.value = config.timezone.val.saved_value

    def timezoneNotifier(configElement):
        timezones.activateTimezone(configElement.value,
                                   config.timezone.area.value)

    config.timezone.area.addNotifier(timezoneAreaChoices,
                                     initial_call=False,
                                     immediate_feedback=True)
    config.timezone.val.addNotifier(timezoneNotifier,
                                    initial_call=True,
                                    immediate_feedback=True)
    config.timezone.val.callNotifiersOnSaveAndCancel = True