Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from Plugins.Plugin import PluginDescriptor
- from Screens.Screen import Screen
- from Screens.MessageBox import MessageBox
- from Components.Button import Button
- from Components.ActionMap import ActionMap
- from Components.ConfigList import ConfigListScreen
- from Components.config import config, ConfigSubsection, ConfigDateTime, ConfigClock, ConfigText, getConfigListEntry
- import enigma
- from enigma import eTimer, iServiceInformation
- from datetime import datetime, time as dt_time
- from os import system
- import gettext
- import time, httplib
- config.plugins.SetClock = ConfigSubsection()
- config.plugins.SetClock.HostName = ConfigText(default='ya.ru', fixed_size=False)
- ver = '1.1'
- def _(txt):
- t = gettext.gettext(txt)
- return t
- def Plugins(**kwargs):
- return [PluginDescriptor(name='SetClock', description='SetClock plug-in v.' + ver + ' (c)2011 by SatCat', where=PluginDescriptor.WHERE_PLUGINMENU, icon='plugin.png', fnc=main), PluginDescriptor(name='SetClock', description='SetClock plug-in v.' + ver + '(c)2011 by SatCat', where=[PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc=autostart)]
- def main(session, servicereference = None, **kwargs):
- try:
- session.open(SetClockMain)
- except:
- print '[SetClock] Pluginexecution failed'
- def autostart(reason, **kwargs):
- global session
- if reason == 0 and kwargs.has_key('session'):
- session = kwargs['session']
- session.open(AutoCorrTime)
- def get_time_str(res_time):
- replace_months = {
- 'Jan': '1',
- 'Feb': '2',
- 'Mar': '3',
- 'Apr': '4',
- 'May': '5',
- 'June': '6',
- 'Jun': '6',
- 'July': '7',
- 'Jul': '7',
- 'Aug': '8',
- 'Sept': '9',
- 'Sep': '9',
- 'Oct': '10',
- 'Nov': '11',
- 'Dec': '12',
- }
- gmts = [
- 'GMT',
- ]
- _res_time = res_time
- try:
- time_tuple = time.strptime(res_time, '%a, %d %b %Y %H:%M:%S %Z')
- except ValueError:
- for m1, m2 in replace_months.items():
- res_time = res_time.replace(m1, m2)
- fro gmt in gmts:
- res_time = res_time.replace(gmt, '')
- res_time = res_time.split(', ')[1].strip()
- try:
- time_tuple = time.strptime(res_time, '%d %m %Y %H:%M:%S')
- except ValueError:
- open('/usr/lib/enigma2/python/Plugins/Extensions/SetClock/log.txt', 'a').write(_res_time)
- raise
- t = time.localtime(time.mktime(time_tuple) - time.timezone)
- return time.strftime('%Y%m%d%H%M.%S', t)
- class AutoCorrTime(Screen):
- skin = '''
- <screen position="100,100" size="280,300" title="SetClock" >
- </screen>'''
- def __init__(self, session):
- Screen.__init__(self, session)
- self.session = session
- if time.localtime().tm_year == 2000:
- self.limit = 0
- self.cursorTimer = eTimer()
- self.cursorTimer.callback.append(self.timer)
- self.cursorTimer.start(75, False)
- def timer(self):
- if time.localtime().tm_year > 2000:
- refstr = dtt = 'n/a'
- try:
- service = self.session.nav.getCurrentService()
- if service:
- info = service.info()
- if info:
- refstr = info.getInfoString(iServiceInformation.sServiceref)
- except:
- refstr = 'ref error'
- if refstr == '1:0:1:1:65:64:3840000:0:0:0:':
- tc = time.time() - 189391980
- dtt = datetime.fromtimestamp(tc).strftime('%Y%m%d%H%M')
- enigma.eDVBLocalTimeHandler.getInstance().setUseDVBTime(False)
- try:
- system('/bin/date -s %s' % dtt)
- print '[SetClock] Set clock!'
- except:
- pass
- self.cursorTimer.stop()
- print '[SetClock] Stop timer.'
- self.limit = self.limit + 1
- if self.limit > 1200:
- self.cursorTimer.stop()
- print '[SetClock] Stop timer (limit).'
- class SetClockMain(ConfigListScreen, Screen):
- skin = '''
- <screen position="center,250" size="420,190" title="SetClock Menu" >
- <widget name="config" position="10,10" size="400,130" scrollbarMode="showOnDemand" />
- <widget name="key_green" position="0,150" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;18" transparent="1"/>
- <ePixmap name="green" position="0,150" size="140,40" zPosition="2" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
- <widget name="key_blue" position="140,150" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;18" transparent="1"/>
- <ePixmap name="blue" position="140,150" size="140,40" zPosition="2" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
- <widget name="key_red" position="280,150" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;18" transparent="1"/>
- <ePixmap name="red" position="280,150" size="140,40" zPosition="2" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
- </screen>'''
- def __init__(self, session, args = 0):
- self.skin = SetClockMain.skin
- self.session = session
- Screen.__init__(self, session)
- self.list = []
- self.date_en = ConfigDateTime(default=time.time(), formatstring='%d.%m.%y')
- self.entryDate = getConfigListEntry(_('Date'), self.date_en)
- self.time_en = ConfigClock(default=time.time())
- self.entryTime = getConfigListEntry(_('Time'), self.time_en)
- self.list.append(self.entryDate)
- self.list.append(self.entryTime)
- self.list.append(getConfigListEntry('HTTP host:', config.plugins.SetClock.HostName))
- self['key_green'] = Button(_('SET!'))
- self['key_blue'] = Button(_('HTTP SET'))
- self['key_red'] = Button(_('Cancel'))
- ConfigListScreen.__init__(self, self.list, session=session)
- self['setupActions'] = ActionMap(['SetupActions', 'ColorActions'], {'red': self.cancel,
- 'green': self.set,
- 'blue': self.inet_set,
- 'save': self.set,
- 'cancel': self.cancel,
- 'ok': self.pressed_ok}, -2)
- self['config'].list = self.list
- self['config'].l.setList(self.list)
- def pressed_ok(self):
- config.plugins.SetClock.HostName.save()
- self.set()
- def set(self, dtt = 0):
- d = time.localtime(self.date_en.value)
- dtt = '%d%02d%02d%02d%02d' % (d.tm_year,
- d.tm_mon,
- d.tm_mday,
- self.time_en.value[0],
- self.time_en.value[1])
- enigma.eDVBLocalTimeHandler.getInstance().setUseDVBTime(False)
- try:
- system('/bin/date -s %s' % dtt)
- except:
- pass
- self.close()
- print '[SetClock] SET! ** %s' % time.strftime('%X %x (%Y) %Z')
- def inet_set(self):
- config.plugins.SetClock.HostName.save()
- conn = httplib.HTTPConnection(config.plugins.SetClock.HostName.value)
- try:
- conn.request('HEAD', '/favicon.ico')
- t_rtt = time.clock()
- res_time = conn.getresponse().getheader('date')
- except:
- self.session.open(MessageBox, 'Error: No server responce: ' + config.plugins.SetClock.HostName.value, MessageBox.TYPE_ERROR, timeout=3)
- return
- enigma.eDVBLocalTimeHandler.getInstance().setUseDVBTime(False)
- try:
- system('/bin/date -s %s' % get_time_str(res_time))
- except:
- pass
- self.close()
- print '[SetClock] inet SET! ** %s' % time.strftime('%X %x (%Y) %Z')
- def cancel(self):
- self.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement