Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- 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, ConfigInteger, ConfigSequence
- import enigma
- from enigma import eTimer, iServiceInformation
- from datetime import datetime, time as dt_time
- from os import system
- import gettext
- import time, httplib
- from Screens.Console import Console
- import os
- from os import popen
- config.plugins.SetClock = ConfigSubsection()
- config.plugins.SetClock.HostName = ConfigText(default='vniiftri.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName01 = ConfigText(default='vniiftri2.khv.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName02 = ConfigText(default='vniiftri.khv.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName03 = ConfigText(default='ntp2.niiftri.irkutsk.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName04 = ConfigText(default='ntp1.niiftri.irkutsk.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName05 = ConfigText(default='ntp21.vniiftri.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName06 = ConfigText(default='ntp4.vniiftri.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName07 = ConfigText(default='ntp3.vniiftri.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName08 = ConfigText(default='ntp1.vniiftri.ru', fixed_size=False)
- #config.plugins.SetClock.NTPName09 = ConfigText(default='ntp2.vniiftri.ru', fixed_size=False)
- config.plugins.SetClock.NTPName01 = ConfigText(default='ntp2.vniiftri.ru', fixed_size=False)
- config.plugins.SetClock.timeout = ConfigInteger(default = 20, limits = (0,120))
- ver = '1.1'
- def _(txt):
- t = gettext.gettext(txt)
- return t
- #def Plugins(**kwargs):
- def Plugins(path, **kwargs):
- global plugin_path
- plugin_path = path
- 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 = [
- 'UTC',
- '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)
- for 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')
- #open('/usr/lib/enigma2/python/Plugins/Extensions/SetClock/log.txt', 'a').write(_res_time)
- 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,200" size="560,365" title="SetClock" >
- <widget name="config" position="0,0" size="560,365" scrollbarMode="showOnDemand" />
- <widget name="key_red" position="0,325" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;20" transparent="1"/>
- <ePixmap name="red" position="0,325" size="140,40" zPosition="2" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
- <widget name="key_green" position="140,325" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;20" transparent="1"/>
- <ePixmap name="green" position="140,325" size="140,40" zPosition="2" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
- <widget name="key_yellow" position="280,325" size="140,40" valign="center" halign="center" zPosition="4" backgroundColor="#a08500" font="Regular;20" transparent="1"/>
- <ePixmap name="yellow" position="280,325" size="140,40" zPosition="2" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
- <widget name="key_blue" position="420,325" size="140,40" valign="center" halign="center" zPosition="4" backgroundColor="#a08500" font="Regular;20" transparent="1"/>
- <ePixmap name="blue" position="420,325" size="140,40" zPosition="2" pixmap="skin_default/buttons/blue.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.date_en = ConfigDate(default=time.time())
- 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.list.append(getConfigListEntry('NTP Server № 01:', config.plugins.SetClock.NTPName01))
- #self.list.append(getConfigListEntry('NTP Server № 02:', config.plugins.SetClock.NTPName02))
- #self.list.append(getConfigListEntry('NTP Server № 03:', config.plugins.SetClock.NTPName03))
- #self.list.append(getConfigListEntry('NTP Server № 04:', config.plugins.SetClock.NTPName04))
- #self.list.append(getConfigListEntry('NTP Server № 05:', config.plugins.SetClock.NTPName05))
- #self.list.append(getConfigListEntry('NTP Server № 06:', config.plugins.SetClock.NTPName06))
- #self.list.append(getConfigListEntry('NTP Server № 07:', config.plugins.SetClock.NTPName07))
- #self.list.append(getConfigListEntry('NTP Server № 08:', config.plugins.SetClock.NTPName08))
- #self.list.append(getConfigListEntry('NTP Server № 09:', config.plugins.SetClock.NTPName09))
- self.list.append(getConfigListEntry('NTP Server № 01:', config.plugins.SetClock.NTPName01))
- self.list.append(getConfigListEntry('NTP Server Timeout [s]:', config.plugins.SetClock.timeout))
- self['key_red'] = Button(_('Установить!'))
- self['key_green'] = Button(_('HTTP SET'))
- self['key_yellow'] = Button(_('NTP SET'))
- self['key_blue'] = Button(_('Cancel'))
- ConfigListScreen.__init__(self, self.list, session=session)
- self['setupActions'] = ActionMap(['OkCancelActions', 'ColorActions'], {'red': self.set,
- 'green': self.inet_set,
- 'yellow': self.NTP_set,
- 'blue': self.cancel,
- '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()
- config.plugins.SetClock.NTPName.save()
- self.set()
- def set(self, dtt = 0):
- dtt = '%d%02d%02d%02d%02d' % (self.date_en.value[2],
- self.date_en.value[1],
- self.date_en.value[0],
- 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()
- def NTP_set(self):
- #if (config.plugins.SetClock.NTPName01.value == "" and config.plugins.SetClock.NTPName02.value == "" and config.plugins.SetClock.NTPName03.value == "" and config.plugins.SetClock.NTPName04.value == "" and config.plugins.SetClock.NTPName05.value == "" and config.plugins.SetClock.NTPName06.value == "" and config.plugins.SetClock.NTPName07.value == "" and config.plugins.SetClock.NTPName08.value == "" and config.plugins.SetClock.NTPName09.value == ""):
- #self.session.open(MessageBox, _("no timeserver configured!"), MessageBox.TYPE_INFO)
- #else:
- if os.path.exists(os.path.join(plugin_path, "ntpdate")):
- #Lite_OutPut_In_Console_1_stroke
- #cmd = '/usr/bin/ntpdate -b -t %s %s && echo "\n"' % (config.plugins.SetClock.timeout.value, config.plugins.SetClock.NTPName.value)
- #cmd = '%s%s %s %s && echo "\n"' % (plugin_path, "/ntpdate -b -t ", config.plugins.SetClock.timeout.value, config.plugins.SetClock.NTPName01.value)
- #cmd = '%s%s %s %s %s %s %s %s %s %s %s %s && echo "\n"' % (plugin_path, "/ntpdate -b -t ", config.plugins.SetClock.timeout.value, config.plugins.SetClock.NTPName01.value, config.plugins.SetClock.NTPName02.value, config.plugins.SetClock.NTPName03.value, config.plugins.SetClock.NTPName04.value, config.plugins.SetClock.NTPName05.value, config.plugins.SetClock.NTPName06.value, config.plugins.SetClock.NTPName07.value, config.plugins.SetClock.NTPName08.value, config.plugins.SetClock.NTPName09.value)
- #Extended_OutPut_In_Console_2_stroke
- #cmd = '/usr/bin/ntpdate -v -u %s %s && echo "\n"' % (config.plugins.SetClock.timeout.value, config.plugins.SetClock.NTPName.value)
- cmd = '%s%s %s %s && echo "\n"' % (plugin_path, "/ntpdate -v -u ", config.plugins.SetClock.timeout.value, config.plugins.SetClock.NTPName01.value)
- #cmd = '%s%s %s %s %s %s %s %s %s %s %s %s && echo "\n"' % (plugin_path, "/ntpdate -v -u ", config.plugins.SetClock.timeout.value, config.plugins.SetClock.NTPName01.value, config.plugins.SetClock.NTPName02.value, config.plugins.SetClock.NTPName03.value, config.plugins.SetClock.NTPName04.value, config.plugins.SetClock.NTPName05.value, config.plugins.SetClock.NTPName06.value, config.plugins.SetClock.NTPName07.value, config.plugins.SetClock.NTPName08.value, config.plugins.SetClock.NTPName09.value)
- res = popen(cmd).read()
- if res == "":
- cmd = "ls -l %s%s" % (plugin_path, "/ntpdate")
- res = popen(cmd).read()
- if res[3]!="x":
- cmd = "chmod 755 %s%s" % (plugin_path, "/ntpdate")
- res = popen(cmd).read()
- self.session.open(MessageBox, _("ntpdate problem: attributes for 'ntpdate' have not been correct! Fixed now! Try again!\n%s" % res), MessageBox.TYPE_INFO)
- else:
- self.session.open(MessageBox, _("ntpdate problem: Internet connection ok? Time server ok?"), MessageBox.TYPE_INFO)
- else:
- self.session.open(MyConsole, _("Системное время с NTP ..."), [cmd])
- else:
- self.session.open(MessageBox, _("'ntpdate' не установлен !"), MessageBox.TYPE_ERROR)
- self.close()
- print '[SetClock] NTP SET! ** %s' % time.strftime('%X %x (%Y) %Z')
- self.close()
- print '[SetClock] NTP SET! ** %s' % time.strftime('%X %x (%Y) %Z')
- class MyConsole(Console):
- skin = '''
- <screen position="center,245" size="485,260" title="Command execution..." >
- <widget name="text" position="0,0" size="485,260" font="Regular;20" />
- </screen>'''
- def __init__(self, session, title = "My Console...", cmdlist = None):
- Console.__init__(self, session, title, cmdlist)
- date_limits = [(1, 31), (1, 12), (1970, 2050)]
- class ConfigDate(ConfigSequence):
- def __init__(self, default):
- d = time.localtime(default)
- ConfigSequence.__init__(self, seperator=".", limits=date_limits, default=[d.tm_mday, d.tm_mon, d.tm_year])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement