# -*- 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 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 = ''' ''' 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 = ''' ''' 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.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): 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() 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 = ''' ''' def __init__(self, session, title = "My Console...", cmdlist = None): Console.__init__(self, session, title, cmdlist)