Пример #1
0
	def startRun(self):
		if self.weatherPluginEntry is not None:
			self["statustext"].text = _("Getting weather information...")
			if self.weatherData is not None:
				self.weatherData.cancel()
				self.weatherData = None
			self.weatherData = MSNWeather()
			self.weatherData.getWeatherData(self.weatherPluginEntry.degreetype.value, self.weatherPluginEntry.weatherlocationcode.value, self.weatherPluginEntry.city.value, self.getWeatherDataCallback, self.showIcon)
		else:
			self["statustext"].text = _("No locations defined...\nPress 'Menu' to do that.")
Пример #2
0
class MSNWeatherPlugin(Screen):
    skin = '\n\t\t<screen name="MSNWeatherPlugin" position="center,center" size="664,364" title="Weather Plugin">\n\t\t\t<widget render="Label" source="caption" position="10,20" zPosition="1" size="600,28" font="Regular;24" transparent="1"/>\n\t\t\t<widget render="Label" source="observationtime" position="374,45" zPosition="1" size="280,20" font="Regular;14" transparent="1" halign="right" />\n\t\t\t<widget render="Label" source="observationpoint" position="204,65" zPosition="1" size="450,40" font="Regular;14" transparent="1" halign="right" />\n\t\t\t<widget name="currenticon" position="10,95" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="currentTemp" position="90,95" zPosition="1" size="100,23" font="Regular;22" transparent="1"/>\n\t\t\t<widget render="Label" source="feelsliketemp" position="90,120" zPosition="1" size="140,20" font="Regular;14" transparent="1"/>\n\t\t\t<widget render="Label" source="condition" position="270,95" zPosition="1" size="300,20" font="Regular;18" transparent="1"/>\n\t\t\t<widget render="Label" source="wind_condition" position="270,115" zPosition="1" size="300,20" font="Regular;18" transparent="1"/>\n\t\t\t<widget render="Label" source="humidity" position="270,135" zPosition="1" size="300,20" font="Regular;18" valign="bottom" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday1" position="32,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday1_icon" position="60,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday1_temp" position="32,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday2" position="154,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday2_icon" position="182,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday2_temp" position="154,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday3" position="276,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday3_icon" position="304,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday3_temp" position="276,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday4" position="398,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday4_icon" position="426,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday4_temp" position="398,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday5" position="520,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday5_icon" position="548,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday5_temp" position="520,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="statustext" position="0,0" zPosition="1" size="664,364" font="Regular;20" halign="center" valign="center" transparent="1"/>\n\t\t</screen>'

    def __init__(self, session):
        Screen.__init__(self, session)
        self.title = _('Weather Plugin')
        self['actions'] = ActionMap(['WizardActions',
         'DirectionActions',
         'ColorActions',
         'EPGSelectActions'], {'ok': self.close,
         'back': self.close,
         'input_date_time': self.config,
         'menu': self.config,
         'right': self.nextItem,
         'left': self.previousItem,
         'info': self.showWebsite}, -1)
        self['statustext'] = StaticText()
        self['currenticon'] = WeatherIcon()
        self['caption'] = StaticText()
        self['currentTemp'] = StaticText()
        self['condition'] = StaticText()
        self['wind_condition'] = StaticText()
        self['humidity'] = StaticText()
        self['observationtime'] = StaticText()
        self['observationpoint'] = StaticText()
        self['feelsliketemp'] = StaticText()
        i = 1
        while i <= 5:
            self['weekday%s' % i] = StaticText()
            self['weekday%s_icon' % i] = WeatherIcon()
            self['weekday%s_temp' % i] = StaticText()
            i += 1

        del i
        self.weatherPluginEntryIndex = -1
        self.weatherPluginEntryCount = config.plugins.WeatherPlugin.entrycount.value
        if self.weatherPluginEntryCount >= 1:
            self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[0]
            self.weatherPluginEntryIndex = 1
        else:
            self.weatherPluginEntry = None
        self.webSite = ''
        self.weatherData = None
        self.onLayoutFinish.append(self.startRun)
        self.onClose.append(self.__onClose)
        return

    def __onClose(self):
        if self.weatherData is not None:
            self.weatherData.cancel()
        return

    def startRun(self):
        if self.weatherPluginEntry is not None:
            self['statustext'].text = _('Getting weather information...')
            if self.weatherData is not None:
                self.weatherData.cancel()
                self.weatherData = None
            self.weatherData = MSNWeather()
            self.weatherData.getWeatherData(self.weatherPluginEntry.degreetype.value, self.weatherPluginEntry.weatherlocationcode.value, self.weatherPluginEntry.city.value, self.getWeatherDataCallback, self.showIcon)
        else:
            self['statustext'].text = _("No locations defined...\nPress 'Menu' to do that.")
        return

    def nextItem(self):
        if self.weatherPluginEntryCount != 0:
            if self.weatherPluginEntryIndex < self.weatherPluginEntryCount:
                self.weatherPluginEntryIndex = self.weatherPluginEntryIndex + 1
            else:
                self.weatherPluginEntryIndex = 1
            self.setItem()

    def previousItem(self):
        if self.weatherPluginEntryCount != 0:
            if self.weatherPluginEntryIndex >= 2:
                self.weatherPluginEntryIndex = self.weatherPluginEntryIndex - 1
            else:
                self.weatherPluginEntryIndex = self.weatherPluginEntryCount
            self.setItem()

    def setItem(self):
        self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[self.weatherPluginEntryIndex - 1]
        self.clearFields()
        self.startRun()

    def clearFields(self):
        self['caption'].text = ''
        self['currentTemp'].text = ''
        self['condition'].text = ''
        self['wind_condition'].text = ''
        self['humidity'].text = ''
        self['observationtime'].text = ''
        self['observationpoint'].text = ''
        self['feelsliketemp'].text = ''
        self['currenticon'].hide()
        self.webSite = ''
        i = 1
        while i <= 5:
            self['weekday%s' % i].text = ''
            self['weekday%s_icon' % i].hide()
            self['weekday%s_temp' % i].text = ''
            i += 1

    def showIcon(self, index, filename):
        if index != -1:
            self['weekday%s_icon' % index].updateIcon(filename)
            self['weekday%s_icon' % index].show()
        else:
            self['currenticon'].updateIcon(filename)
            self['currenticon'].show()

    def getWeatherDataCallback(self, result, errortext):
        self['statustext'].text = ''
        if result == MSNWeather.ERROR:
            self.error(errortext)
        else:
            self['caption'].text = self.weatherData.city
            self.webSite = self.weatherData.url
            for weatherData in self.weatherData.weatherItems.items():
                item = weatherData[1]
                if weatherData[0] == '-1':
                    self['currentTemp'].text = '%s\xc2\xb0%s' % (item.temperature, self.weatherData.degreetype)
                    self['condition'].text = item.skytext
                    self['humidity'].text = _('Humidity: %s %%') % item.humidity
                    self['wind_condition'].text = item.winddisplay
                    c = time.strptime(item.observationtime, '%H:%M:%S')
                    self['observationtime'].text = _('Observation time: %s') % time.strftime('%H:%M', c)
                    self['observationpoint'].text = _('Observation point: %s') % item.observationpoint
                    self['feelsliketemp'].text = _('Feels like %s') % item.feelslike + '\xc2\xb0' + self.weatherData.degreetype
                else:
                    index = weatherData[0]
                    c = time.strptime(item.date, '%Y-%m-%d')
                    self['weekday%s' % index].text = '%s\n%s' % (item.day, time.strftime('%d. %b', c))
                    lowTemp = item.low
                    highTemp = item.high
                    self['weekday%s_temp' % index].text = '%s\xc2\xb0%s|%s\xc2\xb0%s\n%s' % (highTemp,
                     self.weatherData.degreetype,
                     lowTemp,
                     self.weatherData.degreetype,
                     item.skytextday)

        if self.weatherPluginEntryIndex == 1 and WeatherMSNComp is not None:
            WeatherMSNComp.updateWeather(self.weatherData, result, errortext)
        return

    def config(self):
        self.session.openWithCallback(self.setupFinished, MSNWeatherPluginEntriesListConfigScreen)

    def setupFinished(self, index, entry = None):
        self.weatherPluginEntryCount = config.plugins.WeatherPlugin.entrycount.value
        if self.weatherPluginEntryCount >= 1:
            if entry is not None:
                self.weatherPluginEntry = entry
                self.weatherPluginEntryIndex = index + 1
            if self.weatherPluginEntry is None:
                self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[0]
                self.weatherPluginEntryIndex = 1
        else:
            self.weatherPluginEntry = None
            self.weatherPluginEntryIndex = -1
        self.clearFields()
        self.startRun()
        return

    def error(self, errortext):
        self.clearFields()
        self['statustext'].text = errortext

    def showWebsite(self):
        try:
            from Plugins.Extensions.Browser.Browser import Browser
            if self.webSite:
                self.session.open(Browser, config.plugins.WebBrowser.fullscreen.value, self.webSite, False)
        except:
            pass
Пример #3
0
class MSNWeatherPlugin(Screen):

	skin = """
		<screen name="MSNWeatherPlugin" position="center,center" size="664,340" title="Weather Plugin">
			<widget render="Label" source="caption" position="10,20" zPosition="1" size="600,28" font="Regular;24" transparent="1"/>
			<widget render="Label" source="observationtime" position="374,45" zPosition="1" size="280,20" font="Regular;14" transparent="1" halign="right" />
			<widget render="Label" source="observationpoint" position="204,65" zPosition="1" size="450,40" font="Regular;14" transparent="1" halign="right" />
			<widget name="currenticon" position="10,95" zPosition="1" size="55,45" alphatest="blend"/>
			<widget render="Label" source="currentTemp" position="90,95" zPosition="1" size="100,23" font="Regular;22" transparent="1"/>
			<widget render="Label" source="feelsliketemp" position="90,120" zPosition="1" size="155,40" font="Regular;14" transparent="1"/>
			<widget render="Label" source="condition" position="270,95" zPosition="1" size="300,20" font="Regular;18" transparent="1"/>
			<widget render="Label" source="wind_condition" position="270,115" zPosition="1" size="300,20" font="Regular;18" transparent="1"/>
			<widget render="Label" source="humidity" position="270,135" zPosition="1" size="300,20" font="Regular;18" valign="bottom" transparent="1"/>
			<widget render="Label" source="weekday1" position="35,170" zPosition="1" size="105,40" halign="center" valign="center" font="Regular;18" transparent="1"/>
			<widget name="weekday1_icon" position="60,215" zPosition="1" size="55,45" alphatest="blend"/>
			<widget render="Label" source="weekday1_temp" position="35,270" zPosition="1" size="105,60" halign="center" valign="bottom" font="Regular;16" transparent="1"/>
			<widget render="Label" source="weekday2" position="155,170" zPosition="1" size="105,40" halign="center" valign="center" font="Regular;18" transparent="1"/>
			<widget name="weekday2_icon" position="180,215" zPosition="1" size="55,45" alphatest="blend"/>
			<widget render="Label" source="weekday2_temp" position="155,270" zPosition="1" size="105,60" halign="center" valign="bottom" font="Regular;16" transparent="1"/>
			<widget render="Label" source="weekday3" position="275,170" zPosition="1" size="105,40" halign="center" valign="center" font="Regular;18" transparent="1"/>
			<widget name="weekday3_icon" position="300,215" zPosition="1" size="55,45" alphatest="blend"/>
			<widget render="Label" source="weekday3_temp" position="275,270" zPosition="1" size="105,60" halign="center" valign="bottom" font="Regular;16" transparent="1"/>
			<widget render="Label" source="weekday4" position="395,170" zPosition="1" size="105,40" halign="center" valign="center" font="Regular;18" transparent="1"/>
			<widget name="weekday4_icon" position="420,215" zPosition="1" size="55,45" alphatest="blend"/>
			<widget render="Label" source="weekday4_temp" position="395,270" zPosition="1" size="105,60" halign="center" valign="bottom" font="Regular;16" transparent="1"/>
			<widget render="Label" source="weekday5" position="515,170" zPosition="1" size="105,40" halign="center" valign="center" font="Regular;18" transparent="1"/>
			<widget name="weekday5_icon" position="540,215" zPosition="1" size="55,45" alphatest="blend"/>
			<widget render="Label" source="weekday5_temp" position="515,270" zPosition="1" size="105,60" halign="center" valign="bottom" font="Regular;16" transparent="1"/>
			<widget render="Label" source="statustext" position="0,0" zPosition="1" size="664,340" font="Regular;20" halign="center" valign="center" transparent="1"/>
		</screen>"""
	
	def __init__(self, session):
		Screen.__init__(self, session)
		self.title = _("Weather Plugin")
		self["actions"] = ActionMap(["SetupActions", "DirectionActions"],
		{
			"cancel": self.close,
			"menu": self.config,
			"right": self.nextItem,
			"left": self.previousItem,
			"info": self.showWebsite
		}, -1)

		self["statustext"] = StaticText()
		self["currenticon"] = WeatherIcon()
		self["caption"] = StaticText()
		self["currentTemp"] = StaticText()
		self["condition"] = StaticText()
		self["wind_condition"] = StaticText()
		self["humidity"] = StaticText()
		self["observationtime"] = StaticText()
		self["observationpoint"] = StaticText()
		self["feelsliketemp"] = StaticText()
		
		i = 1
		while i <= 5:
			self["weekday%s" % i] = StaticText()
			self["weekday%s_icon" %i] = WeatherIcon()
			self["weekday%s_temp" % i] = StaticText()
			i += 1
		del i
		

		self.weatherPluginEntryIndex = -1
		self.weatherPluginEntryCount = config.plugins.WeatherPlugin.entrycount.value
		if self.weatherPluginEntryCount >= 1:
			self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[0]
			self.weatherPluginEntryIndex = 1
		else:
			self.weatherPluginEntry = None


		self.webSite = ""
		
		self.weatherData = None
		self.onLayoutFinish.append(self.startRun)
		self.onClose.append(self.__onClose)
		
	def __onClose(self):
		if self.weatherData is not None:
			self.weatherData.cancel()

	def startRun(self):
		if self.weatherPluginEntry is not None:
			self["statustext"].text = _("Getting weather information...")
			if self.weatherData is not None:
				self.weatherData.cancel()
				self.weatherData = None
			self.weatherData = MSNWeather()
			self.weatherData.getWeatherData(self.weatherPluginEntry.degreetype.value, self.weatherPluginEntry.weatherlocationcode.value, self.weatherPluginEntry.city.value, self.getWeatherDataCallback, self.showIcon)
		else:
			self["statustext"].text = _("No locations defined...\nPress 'Menu' to do that.")

	def nextItem(self):
		if self.weatherPluginEntryCount != 0:
			if self.weatherPluginEntryIndex < self.weatherPluginEntryCount:
				self.weatherPluginEntryIndex = self.weatherPluginEntryIndex + 1
			else:
				self.weatherPluginEntryIndex = 1
			self.setItem()

	def previousItem(self):
		if self.weatherPluginEntryCount != 0:
			if self.weatherPluginEntryIndex >= 2:
				self.weatherPluginEntryIndex = self.weatherPluginEntryIndex - 1
			else:
				self.weatherPluginEntryIndex = self.weatherPluginEntryCount
			self.setItem()

	def setItem(self):
		self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[self.weatherPluginEntryIndex-1]
		self.clearFields()
		self.startRun()

	def clearFields(self):
		self["caption"].text = ""
		self["currentTemp"].text = ""
		self["condition"].text = ""
		self["wind_condition"].text = ""
		self["humidity"].text = ""
		self["observationtime"].text = ""
		self["observationpoint"].text = ""
		self["feelsliketemp"].text = ""
		self["currenticon"].hide()
		self.webSite = ""
		i = 1
		while i <= 5:
			self["weekday%s" % i].text = ""
			self["weekday%s_icon" %i].hide()
			self["weekday%s_temp" % i].text = ""
			i += 1

	def showIcon(self,index, filename):
		if index <> -1:
			self["weekday%s_icon" % index].updateIcon(filename)
			self["weekday%s_icon" % index].show()
		else:
			self["currenticon"].updateIcon(filename)
			self["currenticon"].show()

	def getWeatherDataCallback(self, result, errortext):
		self["statustext"].text = ""
		if result == MSNWeather.ERROR:
			self.error(errortext)
		else:
			self["caption"].text = self.weatherData.city
			self.webSite = self.weatherData.url
			for weatherData in self.weatherData.weatherItems.items():
				item = weatherData[1]
				if weatherData[0] == "-1": # current
					self["currentTemp"].text = "%s°%s" % (item.temperature, self.weatherData.degreetype)
					self["condition"].text = item.skytext
					self["humidity"].text = _("Humidity: %s %%") % item.humidity
					self["wind_condition"].text = item.winddisplay
					c =  time.strptime(item.observationtime, "%H:%M:%S")
					self["observationtime"].text = _("Observation time: %s") %  time.strftime("%H:%M",c)
					self["observationpoint"].text = _("Observation point: %s") % item.observationpoint
					self["feelsliketemp"].text = _("Feels like %s") % item.feelslike + "°" +  self.weatherData.degreetype
				else:
					index = weatherData[0]
					c = time.strptime(item.date,"%Y-%m-%d")
					self["weekday%s" % index].text = "%s\n%s" % (item.day, time.strftime("%d. %b",c))
					lowTemp = item.low
					highTemp = item.high
					self["weekday%s_temp" % index].text = "%s°%s|%s°%s\n%s" % (highTemp, self.weatherData.degreetype, lowTemp, self.weatherData.degreetype, item.skytextday)
		
		if self.weatherPluginEntryIndex == 1 and WeatherMSNComp is not None:
			WeatherMSNComp.updateWeather(self.weatherData, result, errortext)

	def config(self):
		self.session.openWithCallback(self.setupFinished, MSNWeatherPluginEntriesListConfigScreen)

	def setupFinished(self, index, entry = None):
		self.weatherPluginEntryCount = config.plugins.WeatherPlugin.entrycount.value
		if self.weatherPluginEntryCount >= 1:
			if entry is not None:
				self.weatherPluginEntry = entry
				self.weatherPluginEntryIndex = index + 1
			if self.weatherPluginEntry is None:
				self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[0]
				self.weatherPluginEntryIndex = 1
		else:
			self.weatherPluginEntry = None
			self.weatherPluginEntryIndex = -1

		self.clearFields()
		self.startRun()

	def error(self, errortext):
		self.clearFields()
		self["statustext"].text = errortext

	def showWebsite(self):
		try:
			from Plugins.Extensions.Browser.Browser import Browser
			if self.webSite:
				self.session.open(Browser, config.plugins.WebBrowser.fullscreen.value, self.webSite, False)
		except: pass # I dont care if browser is installed or not...
Пример #4
0
class MSNWeatherPlugin(Screen):
    skin = '\n\t\t<screen name="MSNWeatherPlugin" position="center,center" size="664,364" title="Weather Plugin">\n\t\t\t<widget render="Label" source="caption" position="10,20" zPosition="1" size="600,28" font="Regular;24" transparent="1"/>\n\t\t\t<widget render="Label" source="observationtime" position="374,45" zPosition="1" size="280,20" font="Regular;14" transparent="1" halign="right" />\n\t\t\t<widget render="Label" source="observationpoint" position="204,65" zPosition="1" size="450,40" font="Regular;14" transparent="1" halign="right" />\n\t\t\t<widget name="currenticon" position="10,95" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="currentTemp" position="90,95" zPosition="1" size="100,23" font="Regular;22" transparent="1"/>\n\t\t\t<widget render="Label" source="feelsliketemp" position="90,120" zPosition="1" size="140,20" font="Regular;14" transparent="1"/>\n\t\t\t<widget render="Label" source="condition" position="270,95" zPosition="1" size="300,20" font="Regular;18" transparent="1"/>\n\t\t\t<widget render="Label" source="wind_condition" position="270,115" zPosition="1" size="300,20" font="Regular;18" transparent="1"/>\n\t\t\t<widget render="Label" source="humidity" position="270,135" zPosition="1" size="300,20" font="Regular;18" valign="bottom" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday1" position="32,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday1_icon" position="60,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday1_temp" position="32,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday2" position="154,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday2_icon" position="182,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday2_temp" position="154,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday3" position="276,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday3_icon" position="304,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday3_temp" position="276,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday4" position="398,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday4_icon" position="426,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday4_temp" position="398,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="weekday5" position="520,170" zPosition="1" size="111,40" halign="center" valign="center" font="Regular;18" transparent="1"/>\n\t\t\t<widget name="weekday5_icon" position="548,215" zPosition="1" size="55,45" alphatest="blend"/>\n\t\t\t<widget render="Label" source="weekday5_temp" position="520,270" zPosition="1" size="111,90" halign="center" valign="top" font="Regular;16" transparent="1"/>\n\t\t\t<widget render="Label" source="statustext" position="0,0" zPosition="1" size="664,364" font="Regular;20" halign="center" valign="center" transparent="1"/>\n\t\t</screen>'

    def __init__(self, session):
        Screen.__init__(self, session)
        self.title = _('Weather Plugin')
        self['actions'] = ActionMap(
            [
                'WizardActions', 'DirectionActions', 'ColorActions',
                'EPGSelectActions'
            ], {
                'ok': self.close,
                'back': self.close,
                'input_date_time': self.config,
                'menu': self.config,
                'right': self.nextItem,
                'left': self.previousItem,
                'info': self.showWebsite
            }, -1)
        self['statustext'] = StaticText()
        self['currenticon'] = WeatherIcon()
        self['caption'] = StaticText()
        self['currentTemp'] = StaticText()
        self['condition'] = StaticText()
        self['wind_condition'] = StaticText()
        self['humidity'] = StaticText()
        self['observationtime'] = StaticText()
        self['observationpoint'] = StaticText()
        self['feelsliketemp'] = StaticText()
        i = 1
        while i <= 5:
            self['weekday%s' % i] = StaticText()
            self['weekday%s_icon' % i] = WeatherIcon()
            self['weekday%s_temp' % i] = StaticText()
            i += 1

        del i
        self.weatherPluginEntryIndex = -1
        self.weatherPluginEntryCount = config.plugins.WeatherPlugin.entrycount.value
        if self.weatherPluginEntryCount >= 1:
            self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[0]
            self.weatherPluginEntryIndex = 1
        else:
            self.weatherPluginEntry = None
        self.webSite = ''
        self.weatherData = None
        self.onLayoutFinish.append(self.startRun)
        self.onClose.append(self.__onClose)
        return

    def __onClose(self):
        if self.weatherData is not None:
            self.weatherData.cancel()
        return

    def startRun(self):
        if self.weatherPluginEntry is not None:
            self['statustext'].text = _('Getting weather information...')
            if self.weatherData is not None:
                self.weatherData.cancel()
                self.weatherData = None
            self.weatherData = MSNWeather()
            self.weatherData.getWeatherData(
                self.weatherPluginEntry.degreetype.value,
                self.weatherPluginEntry.weatherlocationcode.value,
                self.weatherPluginEntry.city.value,
                self.getWeatherDataCallback, self.showIcon)
        else:
            self['statustext'].text = _(
                "No locations defined...\nPress 'Menu' to do that.")
        return

    def nextItem(self):
        if self.weatherPluginEntryCount != 0:
            if self.weatherPluginEntryIndex < self.weatherPluginEntryCount:
                self.weatherPluginEntryIndex = self.weatherPluginEntryIndex + 1
            else:
                self.weatherPluginEntryIndex = 1
            self.setItem()

    def previousItem(self):
        if self.weatherPluginEntryCount != 0:
            if self.weatherPluginEntryIndex >= 2:
                self.weatherPluginEntryIndex = self.weatherPluginEntryIndex - 1
            else:
                self.weatherPluginEntryIndex = self.weatherPluginEntryCount
            self.setItem()

    def setItem(self):
        self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[
            self.weatherPluginEntryIndex - 1]
        self.clearFields()
        self.startRun()

    def clearFields(self):
        self['caption'].text = ''
        self['currentTemp'].text = ''
        self['condition'].text = ''
        self['wind_condition'].text = ''
        self['humidity'].text = ''
        self['observationtime'].text = ''
        self['observationpoint'].text = ''
        self['feelsliketemp'].text = ''
        self['currenticon'].hide()
        self.webSite = ''
        i = 1
        while i <= 5:
            self['weekday%s' % i].text = ''
            self['weekday%s_icon' % i].hide()
            self['weekday%s_temp' % i].text = ''
            i += 1

    def showIcon(self, index, filename):
        if index != -1:
            self['weekday%s_icon' % index].updateIcon(filename)
            self['weekday%s_icon' % index].show()
        else:
            self['currenticon'].updateIcon(filename)
            self['currenticon'].show()

    def getWeatherDataCallback(self, result, errortext):
        self['statustext'].text = ''
        if result == MSNWeather.ERROR:
            self.error(errortext)
        else:
            self['caption'].text = self.weatherData.city
            self.webSite = self.weatherData.url
            for weatherData in self.weatherData.weatherItems.items():
                item = weatherData[1]
                if weatherData[0] == '-1':
                    self['currentTemp'].text = '%s\xc2\xb0%s' % (
                        item.temperature, self.weatherData.degreetype)
                    self['condition'].text = item.skytext
                    self['humidity'].text = _(
                        'Humidity: %s %%') % item.humidity
                    self['wind_condition'].text = item.winddisplay
                    c = time.strptime(item.observationtime, '%H:%M:%S')
                    self['observationtime'].text = _(
                        'Observation time: %s') % time.strftime('%H:%M', c)
                    self['observationpoint'].text = _(
                        'Observation point: %s') % item.observationpoint
                    self['feelsliketemp'].text = _(
                        'Feels like %s'
                    ) % item.feelslike + '\xc2\xb0' + self.weatherData.degreetype
                else:
                    index = weatherData[0]
                    c = time.strptime(item.date, '%Y-%m-%d')
                    self['weekday%s' %
                         index].text = '%s\n%s' % (item.day,
                                                   time.strftime('%d. %b', c))
                    lowTemp = item.low
                    highTemp = item.high
                    self['weekday%s_temp' %
                         index].text = '%s\xc2\xb0%s|%s\xc2\xb0%s\n%s' % (
                             highTemp, self.weatherData.degreetype, lowTemp,
                             self.weatherData.degreetype, item.skytextday)

        if self.weatherPluginEntryIndex == 1 and WeatherMSNComp is not None:
            WeatherMSNComp.updateWeather(self.weatherData, result, errortext)
        return

    def config(self):
        self.session.openWithCallback(self.setupFinished,
                                      MSNWeatherPluginEntriesListConfigScreen)

    def setupFinished(self, index, entry=None):
        self.weatherPluginEntryCount = config.plugins.WeatherPlugin.entrycount.value
        if self.weatherPluginEntryCount >= 1:
            if entry is not None:
                self.weatherPluginEntry = entry
                self.weatherPluginEntryIndex = index + 1
            if self.weatherPluginEntry is None:
                self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[0]
                self.weatherPluginEntryIndex = 1
        else:
            self.weatherPluginEntry = None
            self.weatherPluginEntryIndex = -1
        self.clearFields()
        self.startRun()
        return

    def error(self, errortext):
        self.clearFields()
        self['statustext'].text = errortext

    def showWebsite(self):
        try:
            from Plugins.Extensions.Browser.Browser import Browser
            if self.webSite:
                self.session.open(Browser,
                                  config.plugins.WebBrowser.fullscreen.value,
                                  self.webSite, False)
        except:
            pass