SharkyEXE icon

Untitled

SharkyEXE | PRO | 08/21/18 09:29:31 AM UTC | 0 ⭐ | 767 👁️ | Never ⏰ | []
text |

14.75 KB

|

None

|

0 👍

/

0 👎

# -*- 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])

Comments