Advertisement
Guest User

siva_pythoncode

a guest
Feb 27th, 2017
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 36.14 KB | None | 0 0
  1. import cgi
  2. import os
  3. import sys
  4. #import OpenSSL
  5. import urllib
  6. import urllib2
  7. import urlparse
  8. import threading
  9. import uuid
  10. import xbmc
  11. import xbmcaddon
  12. import xbmcgui
  13. import xbmcplugin
  14. import socket
  15. from pyxbmct.addonwindow import *
  16. from threading import Thread
  17. from time import sleep
  18.  
  19. version="[VERSION_25]"
  20.  
  21. # ===================== GET GLOBAL DATA ========================================
  22. addon_handle = int(sys.argv[1])
  23. args = urlparse.parse_qs(sys.argv[2][1:])
  24. ADDON = xbmcaddon.Addon('plugin.video.tamiliptv')
  25.  
  26. # ----------------- GET IP ADDRESS ---------------------------------------------
  27. urlIp = "http://www.tamiliptv.tv/tv_episodes/system/1.0/framework.php?view_name=roku_interface&action=getIpAddress"
  28. hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  29.        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  30.        'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  31.        'Accept-Encoding': 'none',
  32.        'Accept-Language': 'en-US,en;q=0.8',
  33.        'Connection': 'keep-alive'}
  34.  
  35. req = urllib2.Request(urlIp, headers=hdr)
  36. proxy_handler = urllib2.ProxyHandler({})
  37. opener = urllib2.build_opener(proxy_handler)    
  38. r = opener.open(req)
  39. ipAddress = the_page = r.read()
  40.  
  41. mySessionID = args.get('sessionID', uuid.uuid1().hex)
  42. if (type(mySessionID) is list):
  43.     mySessionID = mySessionID[0]
  44.  
  45. myMemberID = args.get('memberID', '0')[0]
  46. #-------------------------------------------------------------------------------
  47.  
  48. ACTION_PREVIOUS_MENU = 10
  49. ACTION_NAV_BACK = 92
  50. ACTION_MOUSE_MOVE = 107
  51. ACTION_MOVE_UP = 3
  52. ACTION_MOVE_DOWN = 4
  53.  
  54. #===============================================================================
  55. # ===================== COMMON ROUTINES ========================================
  56. #===============================================================================
  57. def build_url(query):
  58.     query['memberID'] = myMemberID
  59.     query['sessionID'] = mySessionID
  60.     return sys.argv[0] + '?' + urllib.urlencode(query)
  61.  
  62. #-------------------------------------------------------------------------------
  63. def RequestURL(param):
  64.     proxy_handler = urllib2.ProxyHandler({})    
  65.     opener = urllib2.build_opener(proxy_handler)    
  66.     url = "http://www.tamiliptv.tv/tv_episodes/system/1.0/framework.php?view_name=roku_interface&deviceID=XBMC_" + str(mySessionID) +"&userID=" + str(myMemberID) + str(param)
  67.     hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  68.            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  69.            'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  70.            'Accept-Encoding': 'none',
  71.            'Accept-Language': 'en-US,en;q=0.8',
  72.            'Connection': 'keep-alive'}
  73.  
  74.     print ('  URL==> ' + url)
  75.     req = urllib2.Request(url, headers=hdr)
  76.     r = opener.open(req)
  77.     the_page = r.read()
  78.     return the_page
  79.  
  80. #-------------------------------------------------------------------------------
  81. def InitHistory():
  82.     programPath = xbmcaddon.Addon().getAddonInfo('path')
  83.     f = open(os.path.abspath(programPath + "/tamiliptv_history.txt"), 'w')
  84.     f.close()
  85.  
  86. #-------------------------------------------------------------------------------
  87. def SaveUsername(u, p):
  88.     programPath = xbmcaddon.Addon().getAddonInfo('path')
  89.     f = open(os.path.abspath(programPath + "/tamiliptv_history.dat"), 'w')
  90.     f.write(u + "," + p)
  91.     f.close()
  92.  
  93. #-------------------------------------------------------------------------------
  94. def GetUsername():
  95.     up = ","
  96.     programPath = xbmcaddon.Addon().getAddonInfo('path')
  97.     fullPath = os.path.abspath(programPath + "/tamiliptv_history.dat")
  98.     if (os.path.exists(fullPath)):
  99.         f = open(fullPath, 'r')
  100.         up = f.readline()
  101.         f.close()
  102.  
  103.     return up
  104.  
  105. #-------------------------------------------------------------------------------
  106. def SetViewType():
  107.     skin_used = xbmc.getSkinDir()
  108.     if skin_used == 'skin.confluence':
  109.         xbmc.executebuiltin('Container.SetViewMode(500)') # "Thumbnail" view
  110.     elif skin_used == 'skin.aeon.nox':
  111.         xbmc.executebuiltin('Container.SetViewMode(512)') # "info-wall" view.
  112.     elif skin_used == 'skin.confluence-vertical':
  113.         xbmc.executebuiltin('Container.SetViewMode(500)') # "Thumbnail" view.
  114.     elif skin_used == 'skin.jx720':
  115.         xbmc.executebuiltin('Container.SetViewMode(52)') # "Thumbnail" view.
  116.     elif skin_used == 'skin.pm3-hd':
  117.         xbmc.executebuiltin('Container.SetViewMode(53)') # "Thumbnail" view.
  118.     elif skin_used == 'skin.rapier':
  119.         xbmc.executebuiltin('Container.SetViewMode(50)') # "Thumbnail" view.
  120.     elif skin_used == 'skin.simplicity':
  121.         xbmc.executebuiltin('Container.SetViewMode(500)') # "Thumbnail" view.
  122.     elif skin_used == 'skin.slik':
  123.         xbmc.executebuiltin('Container.SetViewMode(53)') # "Thumbnail" view.
  124.     elif skin_used == 'skin.touched':
  125.         xbmc.executebuiltin('Container.SetViewMode(500)') # "Thumbnail" view.
  126.     elif skin_used == 'skin.transparency':
  127.         xbmc.executebuiltin('Container.SetViewMode(53)') # "Thumbnail" view.
  128.     elif skin_used == 'skin.xeebo':
  129.         xbmc.executebuiltin('Container.SetViewMode(55)') # "Thumbnail" view.
  130.     else:    
  131.         xbmc.executebuiltin('Container.SetViewMode(500)')
  132. #===============================================================================
  133. # ===================== COMMON CLASSES =========================================
  134. #===============================================================================
  135.  
  136. class login(AddonDialogWindow):
  137.      memberId = 0
  138.      sessionID = 0
  139.      def __init__(self, title=''):
  140.          super(login, self).__init__(title)
  141.          
  142.          screenx = self.getWidth()
  143.          screeny = self.getHeight()
  144.          
  145.          self.setGeometry(700, 300, 16, 7)
  146.          self.connect(ACTION_NAV_BACK, self.close)
  147.          up = GetUsername().split(",")
  148.  
  149.          #----------------------------------------------------------------------
  150.          username_label = Label('Username')
  151.          self.placeControl(username_label, 2, 1, 3, 2)
  152.  
  153.          self.usernameText = Edit('Username','font15')
  154.          self.placeControl(self.usernameText, 2, 3, 3, 3)
  155.          self.usernameText.setText(up[0])        
  156.          #----------------------------------------------------------------------
  157.          password_label = Label('Password')
  158.          self.placeControl(password_label, 7, 1, 3, 2)
  159.  
  160.          self.passwordText = Edit('Password','font16','0xFFFFFFFF',isPassword=1)
  161.          self.placeControl(self.passwordText, 7, 3, 3, 3)
  162.          self.passwordText.setText(up[1])
  163.  
  164.          #----------------------------------------------------------------------
  165.          self.button0 = Button("Login")
  166.          self.placeControl(self.button0, 12, 1, 3, 2)
  167.  
  168.          self.button1 = Button("Cancel")
  169.          self.placeControl(self.button1, 12, 4, 3, 2)
  170.  
  171.          #----------------------------------------------------------------------
  172.          self.set_navigation()        
  173.      #-------------------------------------------------------------------------------
  174.      def set_navigation(self):
  175.         self.usernameText.controlUp(self.button1)
  176.         self.usernameText.controlDown(self.passwordText)
  177.         self.passwordText.controlUp(self.usernameText)
  178.         self.passwordText.controlDown(self.button0)
  179.         self.button0.controlUp(self.passwordText)
  180.         self.button0.controlDown(self.button1)
  181.         self.button1.controlUp(self.button0)
  182.         self.button1.controlDown(self.usernameText)
  183.         # Set initial focus
  184.         self.setFocus(self.usernameText)
  185.      
  186.      #-------------------------------------------------------------------------------
  187.      def RequestId(self, param):
  188.          proxy_handler = urllib2.ProxyHandler({})
  189.          opener = urllib2.build_opener(proxy_handler)
  190.          myUrl = "http://www.tamiliptv.tv/roku/members/connect/?deviceID=XBMC_" + self.sessionID +"_"+ipAddress + param
  191.          hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  192.                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  193.                'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  194.                'Accept-Encoding': 'none',
  195.                'Accept-Language': 'en-US,en;q=0.8',
  196.                'Connection': 'keep-alive'}
  197.  
  198.          req = urllib2.Request(myUrl, headers=hdr)
  199.  
  200.          r = opener.open(req)
  201.          the_page = r.read()
  202.          #print myUrl
  203.          #print the_page
  204.          return the_page
  205.  
  206.      #-------------------------------------------------------------------------------    
  207.      def onControl(self, control):        
  208.         if control == self.button0:            
  209.             userId = self.RequestId("&username=" + self.usernameText.getText() + "&password=" + self.passwordText.getText())
  210.             if (int(userId) == 0):
  211.                 dialog = xbmcgui.Dialog()
  212.                 dialog.ok(" Error ! ", " The user name or password is incorrect ")                
  213.             elif (int(userId) == -10):
  214.                 dialog = xbmcgui.Dialog()
  215.                 dialog.ok(" Error ! ", " Multiple connections are not allowed ")
  216.             else:
  217.                 SaveUsername(self.usernameText.getText(), self.passwordText.getText())
  218.  
  219.                 programPath = xbmcaddon.Addon().getAddonInfo('path')
  220.                 f = open(os.path.abspath(programPath + "/tamiliptv_history.txt"), 'w')
  221.                 f.write(self.sessionID + "_" + ipAddress + ':' + userId)
  222.                 f.close()
  223.  
  224.                 ADDON.setSetting('sessionUsernameText',self.usernameText.getText())    
  225.                 ADDON.setSetting('sessionPasswordText',self.passwordText.getText())
  226.                 self.memberId = int(userId)
  227.  
  228.             self.close()
  229.  
  230.         if control == self.button1:
  231.             self.close()
  232.  
  233. #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  234. #+++++++++++++++++++++++   END OF CLASS ++++++++++++++++++++++++++++++++++++++++
  235. #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  236.  
  237. def Login():
  238.     mydisplay = login("TamilipTv Login")    
  239.     mydisplay.sessionID = mySessionID
  240.     mydisplay.doModal()
  241.     uid = mydisplay.memberId
  242.     del mydisplay
  243.     return uid
  244.  
  245. #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  246. #+++++++++++++++++++++++   END OF CLASS ++++++++++++++++++++++++++++++++++++++++
  247. #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  248. def OpenCatchupTimeBox(st,indexOfServer,pid):
  249.     global startTime
  250.     global indexServer
  251.     global tsList
  252.     global dataStr
  253.     global gPid
  254.     global UP
  255.     global DOWN
  256.     UP = 0
  257.     DOWN = 1
  258.     tsList = ['','','','','','','']
  259.     dataStr = ['','','']  
  260.    
  261.     startTime = st
  262.     indexServer = indexOfServer
  263.     gPid = pid
  264.     if( indexServer != '' ):        
  265.         startTime1 = startTime.replace(" ", "%20");
  266.         argument = str("&action=GetTimeDiff&rtm="+ startTime1)
  267.         response = RequestURL(argument)
  268.         responseArray = response.split('^')        
  269.         newResponseArray = []        
  270.        
  271.         for dt in responseArray:            
  272.             newResponseArray.append(dt)
  273.        
  274.         tsList.append([])
  275.         tsList0 = newResponseArray[0].replace('|',',')        
  276.         ts0 = tsList0.split(",")        
  277.         tsList[0] = []
  278.         for i in ts0:    tsList[0].append( i )
  279.        
  280.         tsList1 = newResponseArray[1].replace('|',',')        
  281.         ts1 = tsList1.split(",")        
  282.         tsList[1] = []
  283.         for j in ts1:    tsList[1].append( j )
  284.        
  285.         tsList2 = newResponseArray[2].replace('|',',')        
  286.         ts2 = tsList2.split(",")                        
  287.         tsList[2] = []
  288.         for k in ts2: tsList[2].append( k )    
  289.  
  290.         tsList3 = newResponseArray[3].replace('|',',')        
  291.         ts3 = tsList3.split(",")                        
  292.         tsList[3] = []
  293.         for l in ts3: tsList[3].append( l )
  294.  
  295.         tsList4 = newResponseArray[4].replace('|',',')        
  296.         ts4 = tsList4.split(",")                        
  297.         tsList[4] = []
  298.         for m in ts4: tsList[4].append( m )
  299.  
  300.         tsList5 = newResponseArray[5].replace('|',',')        
  301.         ts5 = tsList5.split(",")                        
  302.         tsList[5] = []
  303.         for n in ts5: tsList[5].append( n )
  304.        
  305.         tsList6 = newResponseArray[6].replace('|',',')        
  306.         ts6 = tsList6.split(",")                        
  307.         tsList[6] = []
  308.         for o in ts6: tsList[6].append( o )
  309.        
  310.         dataStr[0] = tsList[2][0]
  311.         dataStr[1] = tsList[1][0]
  312.         dataStr[2] = tsList[0][0]
  313.  
  314.     catchdisplay = openCatchupTimeBox("You can view Recorded stream from")        
  315.     catchdisplay.doModal()
  316.     urlCatch = catchdisplay.catchupUrl
  317.     del catchdisplay    
  318.     return urlCatch
  319.    
  320. class openCatchupTimeBox(AddonDialogWindow):    
  321.      catchupUrl = ''
  322.      def __init__(self, title=''):
  323.          super(openCatchupTimeBox, self).__init__(title)        
  324.          
  325.          screenx = self.getWidth()
  326.          screeny = self.getHeight()
  327.          
  328.          self.setGeometry(800,500, 16, 7)
  329.          self.connect(ACTION_NAV_BACK, self.close)        
  330.          
  331.          label = Label(startTime, alignment=ALIGN_CENTER)
  332.          self.placeControl(label,1, 1, 3, 5)        
  333.          #----------- Day Start ------------------
  334.          day_label = Label('Day')
  335.          self.placeControl(day_label,4,0)        
  336.          self.dayTb = Edit('Day','font15',disabledColor='0xFFFFFF00')
  337.          self.placeControl(self.dayTb,6,0,2,2)
  338.          self.dayTb.setText( dataStr[0] )
  339.          self.dayTb.setEnabled(False)                          
  340.  
  341.          self.dayUp = Button("",textOffsetX=20,textOffsetY=20,font='font13',focusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/up-x-hover.png",noFocusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/up-x.png")
  342.          self.placeControl(self.dayUp, 5, 1,0,0,0)
  343.          self.connect(self.dayUp, lambda: self._updateDay(UP,tsList))        
  344.          
  345.          self.daydown = Button("",textOffsetX=20,textOffsetY=20,font='font13',focusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/down-x-hover.png",noFocusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/down-x.png")
  346.          self.placeControl(self.daydown, 8, 1,0,0,0)
  347.          self.connect(self.daydown, lambda: self._updateDay(DOWN,tsList))        
  348.          #----------- Hour Start ------------------
  349.          hour_label = Label('Hour')
  350.          self.placeControl(hour_label,4,3,40)
  351.          self.hourTb = Edit('Hour','font15',disabledColor='0xFFFFFF00')
  352.          self.placeControl(self.hourTb,6, 3,2,2)
  353.          self.hourTb.setText( dataStr[1] )
  354.          self.hourTb.setEnabled(False)
  355.          
  356.          self.hourUp = Button("",textOffsetX=20,textOffsetY=20,font='font13',focusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/up-x-hover.png",noFocusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/up-x.png")
  357.          self.placeControl(self.hourUp, 5,4,0,0,0)
  358.          self.connect(self.hourUp, lambda: self._OnHourChange(UP,tsList))
  359.  
  360.          self.hourdown = Button("",textOffsetX=20,textOffsetY=20,font='font13',focusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/down-x-hover.png",noFocusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/down-x.png")
  361.          self.placeControl(self.hourdown, 8, 4,0,0,0)
  362.          self.connect(self.hourdown, lambda: self._OnHourChange(DOWN,tsList))
  363.          #----------- Minute Start ------------------
  364.          Min_label = Label('Min')
  365.          self.placeControl(Min_label,4,5,10)        
  366.          self.minTb = Edit('Min','font15',disabledColor='0xFFFFFF00')
  367.          self.placeControl(self.minTb,6, 5,2,2)
  368.          self.minTb.setText( dataStr[2] )
  369.          self.minTb.setEnabled(False)
  370.          
  371.          self.minUp = Button("",textOffsetX=20,textOffsetY=20,font='font13',focusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/up-x-hover.png",noFocusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/up-x.png")
  372.          self.placeControl(self.minUp, 5, 6,0,0,0)
  373.          self.connect(self.minUp, lambda: self._OnMinuteChange(UP,tsList))
  374.  
  375.          self.mindown = Button("",textOffsetX=20,textOffsetY=20,font='font13',focusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/down-x-hover.png",noFocusTexture="http://tamiliptv.tv/tv_episodes/system/1.0/images/down-x.png")
  376.          self.placeControl(self.mindown, 8,6,0,0,0)
  377.          self.connect(self.mindown, lambda: self._OnMinuteChange(DOWN,tsList))
  378.  
  379.          self.selectBtn = Button("Select")
  380.          self.placeControl(self.selectBtn,12,2,3,2)
  381.          self.connect(self.selectBtn, lambda: self._prepareVideoUrl())
  382.          
  383.          self.closeBtn = Button("Cancel")
  384.          self.placeControl(self.closeBtn, 12, 4, 3, 2)
  385.          self.connect(self.closeBtn, lambda: self.close())
  386.  
  387.          self.set_navigation_focus()
  388.          
  389.      def set_navigation_focus(self):                
  390.        
  391.         self.daydown.controlUp(self.dayUp)
  392.         self.daydown.controlDown(self.hourUp)
  393.         self.dayUp.controlUp(self.selectBtn)
  394.         self.dayUp.controlDown(self.daydown)
  395.         self.daydown.controlLeft(self.selectBtn)
  396.         self.dayUp.controlLeft(self.selectBtn)
  397.        
  398.         self.hourUp.controlUp(self.daydown)
  399.         self.hourUp.controlDown(self.hourdown)
  400.         self.hourdown.controlUp(self.hourUp)
  401.         self.hourdown.controlDown(self.minUp)
  402.         #self.hourdown.controlLeft(self.selectBtn)
  403.  
  404.         self.minUp.controlUp(self.hourdown)
  405.         self.minUp.controlDown(self.mindown)
  406.         self.mindown.controlUp(self.minUp)
  407.         self.mindown.controlDown(self.selectBtn)
  408.  
  409.         self.selectBtn.controlRight(self.closeBtn)
  410.         self.selectBtn.controlLeft(self.mindown)
  411.         self.selectBtn.controlDown(self.closeBtn)
  412.         self.selectBtn.controlUp(self.closeBtn)
  413.  
  414.         self.closeBtn.controlLeft(self.selectBtn)
  415.         self.closeBtn.controlRight(self.dayUp)
  416.         self.closeBtn.controlDown(self.dayUp)
  417.         self.closeBtn.controlUp(self.mindown)
  418.         # Set initial focus
  419.         self.setFocus(self.dayUp)
  420.      
  421.      def _prepareVideoUrl(self):                
  422.         #arg = "&day="+str(self.dayTb.getText())+"&hour="+str(self.hourTb.getText())+"&min="+str(self.minTb.getText())+"&pid="+str(gPid)+"&index="+str(indexServer)
  423.         arg = "&day="+str(dataStr[0])+"&hour="+str(dataStr[1])+"&min="+str(dataStr[2])+"&pid="+str(gPid)+"&index="+str(indexServer)
  424.         self.catchupUrl = self.RequestId(arg)
  425.         self.close()
  426.      
  427.      def RequestId(self, param):
  428.         proxy_handler = urllib2.ProxyHandler({})
  429.         opener = urllib2.build_opener(proxy_handler)
  430.         myUrl = "http://www.tamiliptv.tv/tv_episodes/system/1.0/framework.php?view_name=catchupUrl&action=getUrl" + param
  431.         hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  432.                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  433.                'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  434.                'Accept-Encoding': 'none',
  435.                'Accept-Language': 'en-US,en;q=0.8',
  436.                'Connection': 'keep-alive'}
  437.  
  438.         #print "DDDD:",myUrl
  439.         req = urllib2.Request(myUrl, headers=hdr)
  440.         r = opener.open(req)
  441.         the_page = r.read()      
  442.         #print the_page
  443.         return the_page  
  444.        
  445.      def _OnMinuteChange(self,action,tsList):
  446.         d = self._DayIndex(tsList[2])
  447.         if(d==0):
  448.             h = self._HourIndex(tsList[1])
  449.             if (h == 0):
  450.                 self._SetMinute(action, tsList[0])
  451.             else:
  452.                 self._SetMinute(action, tsList[6])            
  453.         elif(d == len(tsList[2])-1):
  454.             if (self._HourIndex(tsList[3]) == len(tsList[3])-1):
  455.                 self._SetMinute(action, tsList[4])
  456.             else:
  457.                 self._SetMinute(action, tsList[6])
  458.         else:
  459.             self._SetMinute(action, tsList[6])
  460.        
  461.      def _SetMinute(self,action, tsList):
  462.         c = self._MinIndex(tsList)
  463.         if(action == 0):
  464.             c = c-1
  465.             if (c < 0):
  466.                 c = len(tsList)-1
  467.             dataStr[2] = tsList[c]
  468.         elif (action == 1):
  469.             c = c+1;
  470.             if (c > len(tsList)-1):
  471.                 c = 0
  472.             dataStr[2] = tsList[c]
  473.          
  474.         self._setTextVal()
  475.            
  476.      
  477.      def _OnHourChange(self,action,tsArray):        
  478.         d = self._DayIndex( tsArray[2] )        
  479.         if (d==0):
  480.             self._SetHour(action, tsArray[1])
  481.         elif (d >= len(tsList[2])-1):
  482.             self._SetHour(action, tsArray[3])
  483.         else:
  484.             self._SetHour(action, tsArray[5])
  485.  
  486.      def _SetHour(self,action,tsListArra):
  487.         c = self._HourIndex( tsListArra )
  488.         if (action == 0): #Up
  489.             c = c-1
  490.             if (c < 0):
  491.                 c = len(tsListArra)- 1
  492.             dataStr[1] = tsListArra[c]
  493.         elif(action == 1):
  494.             c = c + 1
  495.             if (c > len(tsListArra)-1):
  496.                 c = 0
  497.             dataStr[1] = tsListArra[c]        
  498.  
  499.         self._setTextVal()
  500.  
  501.      def _updateDay(self,action,tsArray):        
  502.         c = self._DayIndex( tsArray[2] )        
  503.         if (action == 0):  #Up
  504.             c = c-1
  505.             if(c<=0):
  506.                 c = 0
  507.                 h = self._HourIndex( tsArray[1] )                
  508.                 if (h == -1):
  509.                     dataStr[1] = tsArray[1][0]
  510.                    
  511.                     #Check if min is out of range
  512.                     m = self._MinIndex( tsArray[0] );
  513.                     if (m == -1):
  514.                         dataStr[2] = tsArray[0][0]
  515.                        
  516.             dataStr[0] =  tsArray[2][c]            
  517.             self._setTextVal()            
  518.         else:   #down            
  519.             c = c+1            
  520.             if( c >=  len(tsArray[2])-1 ):
  521.                 c = len(tsArray[2])-1
  522.                 #Check if hour is not out of range
  523.                 h = self._HourIndex( tsArray[3] )
  524.                 if (h == -1):
  525.                      z = len(tsArray[3]) - 1
  526.                      dataStr[1] = tsArray[3][z]
  527.                      
  528.                      #Check if min is not out of range
  529.                      m = self._MinIndex(tsArray[4])
  530.                      if (m == -1):
  531.                         z = len(tsArray[4]) - 1
  532.                         dataStr[2] = tsArray[4][z]                        
  533.             dataStr[0] = tsArray[2][c]            
  534.             self._setTextVal()
  535.      
  536.      def _setTextVal(self):        
  537.         self.dayTb.setText( dataStr[0] )
  538.         self.minTb.setText( dataStr[2] )
  539.         self.hourTb.setText( dataStr[1] )        
  540.      
  541.      def _MinIndex(self,minStr):
  542.         for mi in range(len(minStr)):        
  543.             if(minStr[mi] == dataStr[2]): return mi
  544.         return -1      
  545.  
  546.      def _HourIndex(self,hourStr):
  547.         for index in range(len(hourStr)):            
  548.             if(hourStr[index] == dataStr[1]): return index
  549.         return -1        
  550.  
  551.      def _DayIndex (self,dayStr):        
  552.         for index in range(len(dayStr)):            
  553.             if(dayStr[index] == dataStr[0]): return index
  554.         return -1    
  555.  
  556. # --------------------- End of Class openCatchupTimeBox --------------------------------
  557.          
  558. def InformServerIAmAlive(arg1, stop_event):
  559.     print ("Thread Started")
  560.     programPath = xbmcaddon.Addon().getAddonInfo('path')
  561.     count = 0
  562.  
  563.     while (not stop_event.is_set()):
  564.         if (count >= 4):
  565.             print ("In Thread")
  566.             count = 0
  567.  
  568.             f = open(os.path.abspath(programPath + "/tamiliptv_history.txt"), 'r')
  569.             historyList = f.readline();
  570.             f.close()
  571.  
  572.             if (len(historyList) == 0):
  573.                 continue
  574.  
  575.             upArray = historyList.split(':')
  576.             if (len(upArray) < 2):
  577.                 continue
  578.  
  579.             if (int(upArray[1]) > 0):
  580.                 proxy_handler = urllib2.ProxyHandler({})
  581.                 opener = urllib2.build_opener(proxy_handler)    
  582.                 url = "http://www.tamiliptv.tv/tv_episodes/system/1.0/framework.php?view_name=roku_interface&action=XBMCIAmAlive&deviceID=XBMC_" + upArray[0] + "&userID=" + upArray[1]    
  583.                 hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
  584.                        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  585.                        'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  586.                        'Accept-Encoding': 'none',
  587.                        'Accept-Language': 'en-US,en;q=0.8',
  588.                        'Connection': 'keep-alive'}
  589.  
  590.                 req = urllib2.Request(url, headers=hdr)
  591.                 r = opener.open(req)
  592.                 the_page = r.read()
  593.  
  594.                 #print "URL==>" + url
  595.                 #print "From Thread X [myMemberID  ==>" + upArray[1] + ", mySessionID ==>" + upArray[0] + ", Result ==>" + the_page + "]"
  596.  
  597.         sleep(5)
  598.         count = count + 1
  599.     print ("Thread Terminated")
  600. #-------------------------------------------------------------------------------
  601.  
  602. def xbmc_Home():
  603.     global myMemberID
  604.    
  605.     InitHistory()
  606.     myMemberID = Login()
  607.     if (int(myMemberID) == 0):
  608.         return
  609.  
  610.     SetViewType()
  611.     Fanart = ADDON.getAddonInfo('Fanart')
  612.     par = str("&action=collectCategoryData")
  613.     msg = RequestURL(par)
  614.     catArray = msg.split('~')    
  615.     for cat in catArray:        
  616.         fields = cat.split('|');
  617.         print ("FILD: ",fields)
  618.         mode = ''
  619.         type = ''
  620.         if (fields[0]=='1'):
  621.             type = 'products'
  622.             mode = 'Streaming'
  623.         elif (fields[0]=='3'):
  624.             mode = 'catchuptv'
  625.             type = 'products'            
  626.         elif (fields[0]=='5' or fields[0]=='6'):
  627.             type = 'category'
  628.             mode = 'VOD'
  629.         elif (fields[0]=='2'):
  630.             type = 'category'
  631.             mode = 'TV'
  632.         else: type = 'category'
  633.        
  634.         subUrl = str(fields[0])+'|'+ mode + '|' + mode + '|' + mode + '|' + mode + '|' + type + '|'    
  635.         url = build_url({'mode': mode, 'data':subUrl })            
  636.         icon = fields[6]
  637.         icon = icon.replace("/tv_episodes/..", "");
  638.         li = xbmcgui.ListItem(fields[1], fields[2], iconImage=icon, thumbnailImage=icon, path=url)
  639.         li.setProperty('Fanart_Image', Fanart)
  640.         xbmcplugin.addDirectoryItem(handle=addon_handle, url=url, listitem=li, isFolder=True)
  641.    
  642.     thread_stop = threading.Event()
  643.     thread = Thread(target = InformServerIAmAlive, args = (1, thread_stop) )
  644.     thread.start()
  645.  
  646.     xbmcplugin.endOfDirectory(addon_handle)
  647.     return;
  648. #-------------------------------------------------------------------------------
  649.  
  650. def xbmc_ShowScreen(cType, contentArray,basicMode):
  651.     SetViewType()
  652.     Fanart = ADDON.getAddonInfo('Fanart')      
  653.  
  654.     for content in contentArray:                
  655.         cdata = content.split('|')
  656.         if(basicMode !='' and basicMode == 'catchuptv'):
  657.             url = build_url({'mode':basicMode, 'foldername':cdata[1], 'data':content })            
  658.         else :
  659.             url = build_url({'mode':cType, 'foldername':cdata[1], 'data':content })
  660.            
  661.  
  662.         if (cdata[5] == 'video' or cdata[5] == 'channel' or cdata[5] == 'channels'):
  663.             icon = 'http://www.tamiliptv.tv/roku/devs/photos/' + cdata[6]
  664.         elif (len(cdata[6]) > 0 and cdata[6].find('http:') == -1):
  665.             icon = 'http://www.tamiliptv.tv/roku/devs/photos/' + cdata[6]
  666.         else:
  667.             icon = ADDON.getAddonInfo('icon')
  668.        
  669.         li = xbmcgui.ListItem(cdata[1], '', iconImage=icon, thumbnailImage=icon, path=url)        
  670.         li.setProperty('iconImage', icon)
  671.         li.setProperty('Fanart_Image', Fanart)
  672.         if (cdata[5] == 'video' or cdata[5] == 'channels'):
  673.             li.setInfo(type='Video', infoLabels={ "Title": cdata[1] })
  674.            
  675.         xbmcplugin.addDirectoryItem(handle=addon_handle, url=url, listitem=li, isFolder=True)
  676.     SetViewType()
  677.     xbmcplugin.endOfDirectory(addon_handle)
  678.     return;
  679.  
  680. #-------------------------------------------------------------------------------
  681. def xbmc_PlayVideo(url, nameofVideo, thumb=''):
  682.     dialog = xbmcgui.Dialog()
  683.     print (url)
  684.     dialog.ok(url, url)
  685.     if( thumb == '' ):
  686.         img = ADDON.getAddonInfo('icon')  
  687.     if( thumb != '' ):
  688.         img = 'http://www.tamiliptv.tv/roku/devs/photos/'+thumb
  689.  
  690.     playlist = xbmc.PlayList( xbmc.PLAYLIST_VIDEO )
  691.     playlist.clear()    
  692.  
  693.     video_listitem = xbmcgui.ListItem(nameofVideo, thumbnailImage=img)
  694.     #print "URL :",url
  695.     #playlist.add('http://208.77.16.220:1935/live/test/playlist.m3u8', video_listitem)
  696.     playlist.add(url, video_listitem)
  697.     xbmc.Player(xbmc.PLAYER_CORE_AUTO).play(playlist, video_listitem)
  698.    
  699. #-------------------------------------------------------------------------------
  700. def xbmc_VOD(vodData):
  701.     if (vodData[5] == 'category'):
  702.         data = RequestURL("&action=getPosterData&pid=" + vodData[0] + "&pid_type=" + vodData[5])        
  703.         if (vodData[0] == '5' or vodData[0] == '6'):
  704.             catDataArray = data.split("^")
  705.             catDataArray.pop(0)
  706.             newCat = []
  707.             cdArray = catDataArray.pop(0).split('~')
  708.             k = 1            
  709.             for catData in cdArray:
  710.                 if(vodData[0] == '6'):
  711.                     temp = '6|' + catData + '|' + catData + '||' + str(k+1) + '|list|||'
  712.                 else:  
  713.                     temp = '5|' + catData + '|' + catData + '||' + str(k+1) + '|list|||'
  714.                 newCat.append(temp)
  715.                 k = k + 1
  716.             return newCat
  717.         else:
  718.             catDataArray = data.split("~")
  719.             catDataArray.pop(0)
  720.             catDataArray.pop(0)
  721.  
  722.         return catDataArray
  723.  
  724.     elif (vodData[5] == 'list'):
  725.         data = RequestURL("&action=getPosterData&pid=" + vodData[0] + "&pid_type=category")
  726.         catDataArray = data.split("^")
  727.         x = int(float(vodData[4]))
  728.         catData = catDataArray.pop(x).split('~')
  729.         return catData
  730.  
  731.     return ''
  732.  
  733. #----------------------- Streaming --------------------------------------------------------
  734. def executeStraming( StramingData, basicMode ):
  735.     dialog = xbmcgui.Dialog()
  736.     if (StramingData[5] == 'products' or StramingData[5] ==  'catchuptv'):
  737.         urlStreaming = "&action=getPosterData&pid=" + StramingData[0] + "&pid_type=" + StramingData[5]        
  738.         if(basicMode ==  'catchuptv'):
  739.             urlStreaming = "&mode=catchuptv" + urlStreaming
  740.         catDataArray = RequestURL(urlStreaming).split("^")        
  741.         catDataArray.pop(0)        
  742.         xbmc_ShowScreen('Streaming', catDataArray,basicMode)
  743.     elif (StramingData[5] == 'packages'):
  744.         urlPackage = "&action=getPosterData&pid=" + StramingData[0] + "&pid_type=" + StramingData[5]
  745.         if(basicMode ==  'catchuptv'):            
  746.             urlPackage = "&mode=catchuptv" + urlPackage
  747.         catDataArray = RequestURL( urlPackage ).split("^")
  748.         catDataArray.pop(0)        
  749.         if(len(catDataArray) > 1):            
  750.             xbmc_ShowScreen('Streaming', catDataArray,basicMode)
  751.     elif (StramingData[5] == 'channels'):
  752.         catDataArray = RequestURL("&action=getPosterData&pid=" + StramingData[0] + "&pid_type=" + StramingData[5]).split("^")
  753.         if(basicMode ==  'catchuptv'):
  754.             print ("channels",catDataArray)
  755.         catDataArray = catDataArray.pop(1).split("|")
  756.         streams = catDataArray[16].split(',')
  757.  
  758.         newCat = []
  759.         for stream in streams:
  760.             temp = list(catDataArray)
  761.             sData = stream.split('=')            
  762.             if(basicMode != 'catchuptv'):
  763.                 sData = stream.split('=')
  764.                 temp[16] = sData[1]
  765.             else:                
  766.                 temp[16] = stream                
  767.             temp[1] = catDataArray[1] + ' ' + sData[0]            
  768.             temp[5] = 'channel'      
  769.             temp[6] = StramingData[6]
  770.                      
  771.             newCat.append('|'.join(temp))
  772.        
  773.         xbmc_ShowScreen('Streaming', newCat,basicMode)
  774.     elif (StramingData[5] == 'channel'):
  775.         # we are entering here for channel option
  776.         #dialog.ok(StramingData[5], StramingData[5])
  777.         if(basicMode == 'catchuptv'):            
  778.             streams = StramingData[16]
  779.             if(streams.find('[STARTTIME]') != -1):                
  780.                 startTime = StramingData[19].split('=')
  781.                 finalStreamUrl = OpenCatchupTimeBox(startTime[1],0,StramingData[0])                
  782.                 if(finalStreamUrl!=""):
  783.                     thumb = ADDON.getAddonInfo('icon')
  784.                     xbmc_PlayVideo(finalStreamUrl,StramingData[4],'')                    
  785.         else:
  786.             # and then to here
  787.             # dialog.ok(StramingData[5], StramingData[5])
  788.             thumb = ADDON.getAddonInfo('icon')
  789.             #dialog.ok(StramingData[16], StramingData[16])
  790.             #dialog.ok(StramingData[4], StramingData[4])
  791.             xbmc_PlayVideo(StramingData[16],StramingData[4],'')
  792.  
  793. #----------------------- VOD --------------------------------------------------------
  794. def executeVOD( VodData ):    
  795.     if (VodData[5] != 'video'):
  796.         catDataArray = xbmc_VOD(VodData)        
  797.         xbmc_ShowScreen('VOD', catDataArray,'')
  798.     else:
  799.         data = RequestURL("&action=getPosterData&pid=" + VodData[0] + "&pid_type=video").split('|')                        
  800.         xbmc_PlayVideo(data[16],data[1],data[14])
  801.  
  802. #----------------------- TV --------------------------------------------------------
  803. def executeTV( TVData ):    
  804.     if (TVData[5] == 'video' and len(TVData) <= 9):        
  805.         TVData[5] = 'episodes';
  806.    
  807.     if (TVData[5] != 'video'):        
  808.         catDataArray = xbmc_TVEpisodes(TVData)        
  809.         xbmc_ShowScreen('TV', catDataArray,'')
  810.     else:            
  811.         xbmc_PlayVideo(TVData[16],TVData[1],TVData[14])
  812.  
  813. #-------------------------------------------------------------------------------
  814. def xbmc_TVEpisodes(vodData):    
  815.     if (vodData[5] == 'category'):
  816.         data = RequestURL("&action=getPosterData&pid=" + vodData[0] + "&pid_type=" + vodData[5])
  817.  
  818.         if (vodData[0]=='2'):
  819.             catDataArray = data.split("^")
  820.             catDataArray.pop(0)
  821.             newCat = []
  822.             cdArray = catDataArray.pop(0).split('~')
  823.             k = 1
  824.             for catData in cdArray:
  825.                 temp = '2|' + catData + '|' + catData + '||' + str(k+1) + '|list|||'
  826.                 newCat.append(temp)
  827.                 k = k + 1
  828.             return newCat
  829.         else:
  830.             catDataArray = data.split("~")
  831.             catDataArray.pop(0)
  832.             catDataArray.pop(0)
  833.  
  834.         return catDataArray
  835.  
  836.     elif (vodData[5] == 'list'):
  837.         catDataArray = RequestURL("&action=getPosterData&pid=" + vodData[0] + "&pid_type=category").split("^")
  838.         x = int(vodData[4])
  839.         return catDataArray.pop(x).split('~')
  840.  
  841.     elif (vodData[5] == 'episodes'):
  842.         catDataArray = RequestURL("&action=getPosterData&pid=" + vodData[0] + "&pid_type=video").split("^")
  843.         data = catDataArray.pop(1).split('|')
  844.         newCat = []
  845.         for x in xrange(1, int(data[17])+1):
  846.             temp = list(data)
  847.             temp[1] = data[1] + ' Episode ' + str(x)            
  848.             temp[5] = 'video'            
  849.             temp[6] = temp[14]            
  850.             temp[16] = data[16] + str(x) + data[19]            
  851.             temp[17] = '1'            
  852.             temp[18] = ''            
  853.             temp[19] = ''            
  854.             newCat.append('|'.join(temp))
  855.            
  856.         return newCat
  857.  
  858.     return ''
  859. #-------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement