# -*- 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, ConfigSelection
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))
config.plugins.SetClock.syncDVBtime = ConfigSelection(default = "1", choices = [("1", _("Нажмите OK"))])
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="640,365" title="SetClock" >
<widget name="config" position="0,0" size="640,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="395,325" size="270,40" valign="center" halign="center" zPosition="4" backgroundColor="#a08500" font="Regular;20" transparent="1"/>
<ePixmap name="blue" position="420,325" size="270,40" zPosition="2" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
<ePixmap name="blue" position="500,325" size="140,40" zPosition="2" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
</screen>'''
#def __init__(self, session, args = 0):
def __init__(self, session, servicelist = None, args = None):
self.servicelist = servicelist
self.skin = SetClockMain.skin
self.session = session
Screen.__init__(self, session)
self.list = []
self.date_en = ConfigDate(default=time.time())
self.entryDate = getConfigListEntry(_('Дата :'), self.date_en)
self.time_en = ConfigClock(default=time.time())
self.entryTime = getConfigListEntry(_('Время :'), self.time_en)
self.list.append(self.entryDate)
self.list.append(self.entryTime)
self.list.append(getConfigListEntry('HTTP хост :', config.plugins.SetClock.HostName))
#self.list.append(getConfigListEntry('NTP сервер № 01 :', config.plugins.SetClock.NTPName01))
#self.list.append(getConfigListEntry('NTP сервер № 02 :', config.plugins.SetClock.NTPName02))
#self.list.append(getConfigListEntry('NTP сервер № 03 :', config.plugins.SetClock.NTPName03))
#self.list.append(getConfigListEntry('NTP сервер № 04 :', config.plugins.SetClock.NTPName04))
#self.list.append(getConfigListEntry('NTP сервер № 05 :', config.plugins.SetClock.NTPName05))
#self.list.append(getConfigListEntry('NTP сервер № 06 :', config.plugins.SetClock.NTPName06))
#self.list.append(getConfigListEntry('NTP сервер № 07 :', config.plugins.SetClock.NTPName07))
#self.list.append(getConfigListEntry('NTP сервер № 08 :', config.plugins.SetClock.NTPName08))
#self.list.append(getConfigListEntry('NTP сервер № 09 :', config.plugins.SetClock.NTPName09))
self.list.append(getConfigListEntry('NTP сервер № 01 :', config.plugins.SetClock.NTPName01))
self.list.append(getConfigListEntry(_('NTP сервер таймаут [сек] :'), config.plugins.SetClock.timeout))
#self.list.append(getConfigListEntry(_('Синхронизировать сейчас с текущего транспондера'), config.plugins.SetClock.syncDVBtime))
#self.list.append(getConfigListEntry(_('Синхронизация сейчас с текущего транспондера'), config.plugins.SetClock.syncDVBtime))
#self.list.append(getConfigListEntry(_('Синхронизация с транспондера :'), config.plugins.SetClock.syncDVBtime))
self.list.append(getConfigListEntry(_('Синхронизация с текущего транспондера :'), config.plugins.SetClock.syncDVBtime))
self['key_red'] = Button(_('Отмена'))
self['key_green'] = Button(_('HTTP SET'))
self['key_yellow'] = Button(_('NTP SET'))
self['key_blue'] = Button(_('Установить!'))
ConfigListScreen.__init__(self, self.list, session=session)
self['setupActions'] = ActionMap(['OkCancelActions', 'ColorActions'], {'red': self.exit,
'green': self.inet_set,
'yellow': self.NTP_set,
#'blue': self.set,
'blue': self.keyBlue,
'cancel': self.exit,
#'ok': self.pressed_ok,
'ok': self.keyGo}, -2)
self['config'].list = self.list
self['config'].l.setList(self.list)
self["config"].onSelectionChanged.append(self.configPosition)
#def pressed_ok(self):
#sel = self["config"].getCurrent() and self["config"].getCurrent()[0]
#if sel == _("HTTP хост :"):
#config.plugins.SetClock.HostName.save()
#if sel == _("NTP сервер № 01 :"):
#config.plugins.SetClock.NTPName01.save()
#config.plugins.SetClock.NTPName02.save()
#config.plugins.SetClock.NTPName03.save()
#config.plugins.SetClock.NTPName04.save()
#config.plugins.SetClock.NTPName05.save()
#config.plugins.SetClock.NTPName06.save()
#config.plugins.SetClock.NTPName07.save()
#config.plugins.SetClock.NTPName08.save()
#config.plugins.SetClock.NTPName09.save()
#if sel == _("NTP сервер таймаут [сек] :"):
#config.plugins.SetClock.timeout.save()
#self.set()
#self.close()
#self.session.open(MessageBox, _("Настройки сохранены !"), MessageBox.TYPE_INFO)
##def pressed_ok1(self):
##config.plugins.SetClock.HostName.save()
#config.plugins.SetClock.NTPName01.save()
#config.plugins.SetClock.NTPName02.save()
#config.plugins.SetClock.NTPName03.save()
#config.plugins.SetClock.NTPName04.save()
#config.plugins.SetClock.NTPName05.save()
#config.plugins.SetClock.NTPName06.save()
#config.plugins.SetClock.NTPName07.save()
#config.plugins.SetClock.NTPName08.save()
#config.plugins.SetClock.NTPName09.save()
#config.plugins.SetClock.timeout.save()
#self.set()
#self.close()
##self.session.open(MessageBox, _("Настройки сохранены !"), MessageBox.TYPE_INFO)
#self.close()
##self.exit()
##def pressed_ok2(self):
#config.plugins.SetClock.HostName.save()
##config.plugins.SetClock.NTPName01.save()
#config.plugins.SetClock.NTPName02.save()
#config.plugins.SetClock.NTPName03.save()
#config.plugins.SetClock.NTPName04.save()
#config.plugins.SetClock.NTPName05.save()
#config.plugins.SetClock.NTPName06.save()
#config.plugins.SetClock.NTPName07.save()
#config.plugins.SetClock.NTPName08.save()
#config.plugins.SetClock.NTPName09.save()
#config.plugins.SetClock.timeout.save()
#self.set()
#self.close()
##self.session.open(MessageBox, _("Настройки сохранены !"), MessageBox.TYPE_INFO)
#self.close()
##self.exit()
##def pressed_ok3(self):
#config.plugins.SetClock.HostName.save()
#config.plugins.SetClock.NTPName01.save()
#config.plugins.SetClock.NTPName02.save()
#config.plugins.SetClock.NTPName03.save()
#config.plugins.SetClock.NTPName04.save()
#config.plugins.SetClock.NTPName05.save()
#config.plugins.SetClock.NTPName06.save()
#config.plugins.SetClock.NTPName07.save()
#config.plugins.SetClock.NTPName08.save()
#config.plugins.SetClock.NTPName09.save()
##config.plugins.SetClock.timeout.save()
#self.set()
#self.close()
##self.session.open(MessageBox, _("Настройки сохранены !"), MessageBox.TYPE_INFO)
#self.close()
##self.exit()
def set(self, dtt = 0):
if self.date_en.value[2] >= 2038 and self.date_en.value[1] >= 1 and self.date_en.value[0] >= 19 and self.time_en.value[0] >= 6 and self.time_en.value[1] >= 14 and self.time_en.value[2] > 5:
self.date_en.value[2] = 2038
self.date_en.value[1] = 1
self.date_en.value[0] = 19
self.time_en.value[0] = 6
self.time_en.value[1] = 14
self.time_en.value[2] = 5
dtt = '%d%02d%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],
self.time_en.value[2])
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 save(self):
for x in self['config'].list:
x[1].save()
self.close()
def exit(self):
for x in self['config'].list:
x[1].cancel()
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:
log_file = open('/usr/lib/enigma2/python/Plugins/Extensions/SetClock/log.txt', 'a')
def execute_cmd(cmd):
log_file.write("Начинаю выполнять команду: %s" % cmd)
fo = popen(cmd)
output = fo.read()
exit_code = fo.close()
log_file.write("Результат выполнения команды: %s; вывод: `%s`; код-завершения: %i" % (cmd, output, 0 if exit_code is None else exit_code))
return output
if os.path.exists(os.path.join(plugin_path, "ntpdate")):
log_file.write("Программа существует по указанному пути")
#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 = execute_cmd(cmd)
if res == "":
cmd = "ls -l %s%s" % (plugin_path, "/ntpdate")
res = execute_cmd(cmd)
if res[3]!="x":
cmd = "chmod 755 %s%s" % (plugin_path, "/ntpdate")
res = execute_cmd(cmd)
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])
self.close()
self.close()
else:
log_file.write("Программа не существует по указанному пути")
self.session.open(MessageBox, _("'ntpdate' не установлен !"), MessageBox.TYPE_ERROR)
log_file.close()
#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')
#def keyLeft(self):
def keyGo(self):
sel = self["config"].getCurrent() and self["config"].getCurrent()[0]
if sel == _("Синхронизация с текущего транспондера :"):
#if os.path.exists("/usr/bin/dvbdate"):
if os.path.exists(os.path.join(plugin_path, "dvbdate")):
#cmd = '/usr/bin/dvbdate -p -s -f && echo "\n"'
cmd = '%s%s && echo "\n"' % (plugin_path, "/dvbdate -p -s -f")
res = popen(cmd).read()
if res == "":
cmd = "ls -l %s%s" % (plugin_path, "/dvbdate")
res = popen(cmd).read()
if res[3]!="x":
cmd = "chmod 755 %s%s" % (plugin_path, "/dvbdate")
res = popen(cmd).read()
self.session.open(MessageBox, _("dvbdate problem: attributes for 'dvbdate' have not been correct! Fixed now! Try again!\n%s" % res), MessageBox.TYPE_INFO)
else:
self.session.open(MessageBox, _("dvbdate problem: Satellite connection ok?"), MessageBox.TYPE_INFO)
else:
self.session.open(MyConsole, _("Системное время с DVB ..."), [cmd])
self.close()
self.close()
else:
self.session.open(MessageBox, _("'dvbdate' не установлен !"), MessageBox.TYPE_ERROR)
if sel == _("Дата :"):
self.set()
if sel == _("Время :"):
self.set()
if sel == _("HTTP хост :"):
#self.pressed_ok1()
#self.pressed_ok()
config.plugins.SetClock.HostName.save()
self.session.open(MessageBox, _("Настройки сохранены !"), MessageBox.TYPE_INFO)
self.exit()
#self.close()
#self.close()
if sel == _("NTP сервер № 01 :"):
#self.pressed_ok2()
#self.pressed_ok()
config.plugins.SetClock.NTPName01.save()
self.session.open(MessageBox, _("Настройки сохранены !"), MessageBox.TYPE_INFO)
self.exit()
#self.close()
#self.close()
if sel == _("NTP сервер таймаут [сек] :"):
#self.pressed_ok3()
#self.pressed_ok()
config.plugins.SetClock.timeout.save()
self.session.open(MessageBox, _("Настройки сохранены !"), MessageBox.TYPE_INFO)
self.exit()
#self.close()
#self.close()
#else:
#self.pressed_ok()
def configPosition(self):
self["key_blue"].setText("")
#idx = self["config"].getCurrent()[1]
#if idx == self.ST.syncDVBtime:
sel = self["config"].getCurrent() and self["config"].getCurrent()[0]
#sel = self["config"].getCurrent() # Do Not Work
#self["config"].getCurrent()[0] # Do Not Work
#if sel == ((_("Дата")) or (_("Время"))):
#self["key_blue"].setText(_("Установить!"))
if sel == _("Дата :"):
self["key_blue"].setText(_("Установить!"))
if sel == _("Время :"):
self["key_blue"].setText(_("Установить!"))
#if sel == ((_("HTTP хост :")) or (_("NTP сервер № 01 :")) or (_("NTP сервер таймаут [сек] :"))):
#self["key_blue"].setText(_("Сохранить"))
if sel == _("HTTP хост :"):
self["key_blue"].setText(_("Сохранить"))
if sel == _("NTP сервер № 01 :"):
self["key_blue"].setText(_("Сохранить"))
if sel == _("NTP сервер таймаут [сек] :"):
self["key_blue"].setText(_("Сохранить"))
if sel == _("Синхронизация с текущего транспондера :"):
self["key_blue"].setText(_("Выбор транспондера"))
#else:
#self["key_blue"].setText(_("Установить!"))
def keyBlue(self):
if self["key_blue"].getText() == _("Выбор транспондера"):
if self.servicelist is None:
for (dlg,flag) in self.session.dialog_stack:
if dlg.__class__.__name__ == "InfoBar":
self.servicelist = dlg.servicelist
break
if not self.servicelist is None:
self.session.execDialog(self.servicelist)
#if self["key_blue"].getText() == _("Установить!"):
#self.set()
else:
self.keyGo()
class MyConsole(Console):
skin = '''
<screen position="center,245" size="485,290" title="Command execution..." >
<widget name="text" position="0,0" size="485,290" 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, 2090)]
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])
time_limits = [(0, 23), (0, 59), (0, 59)]
class ConfigClock(ConfigSequence):
def __init__(self, default):
d = time.localtime(default)
ConfigSequence.__init__(self, seperator=":", limits=time_limits, default=[d.tm_hour, d.tm_min, d.tm_sec])
Comments