Advertisement
Guest User

radio.py

a guest
Dec 1st, 2017
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.32 KB | None | 0 0
  1. # addon.py
  2. import xbmc
  3. import xbmcgui
  4. import xbmcaddon
  5. import sys
  6. import socket
  7. import select
  8. import time
  9. #import random
  10. import threading
  11. import Queue
  12.  
  13. xbmc.executebuiltin('Skin.SetString(seekdown,False)')
  14. xbmc.executebuiltin('Skin.SetString(seekup,False)')
  15.  
  16. host = "192.168.47.140"
  17. port = 7844
  18. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  19. s.connect((host, port))
  20. s.settimeout(300)
  21. q = Queue.Queue()
  22.  
  23. def receiver() : # Thread T
  24.     while True :
  25.         data = s.recv(1000)
  26.         q.put(data)
  27.         if not data :
  28.             print '\n\tDisconnected from Radio Server!\n'
  29.             sys.exit()
  30.         else :
  31.             formatData(q)
  32.             time.sleep(.01)
  33.             print '\n\t KODI says that AbortRequested is: ' +   str(xbmc.abortRequested)
  34.            
  35.            
  36.        
  37. def sender(command) :
  38.     command = command + '\n'
  39.     print 'Sending command: ' + command
  40.     s.send(command)
  41.  
  42. def myui() : # Thread M
  43.     rCurr = 'True'
  44.     while True :
  45.     #while(not xbmc.abortRequested):
  46.         skUP = xbmc.getInfoLabel('Skin.String(seekup)')
  47.         skDN = xbmc.getInfoLabel('Skin.String(seekdown)')
  48.         tnUP = xbmc.getInfoLabel('Skin.String(tuneup)')
  49.         tnDN = xbmc.getInfoLabel('Skin.String(tunedown)')
  50.         rACT = xbmc.getInfoLabel('Skin.String(RadioActive)')
  51.         if 'True' in skUP :
  52.             #print '\t Seek UP Requested'
  53.             xbmc.executebuiltin('Skin.SetString(seekup,False)')
  54.             sender('seekup')
  55.             time.sleep(.1)
  56.         elif 'True' in skDN :
  57.             #print '\t Seek DOWN Requested'
  58.             xbmc.executebuiltin('Skin.SetString(seekdown,False)')  
  59.             sender('seekdown')
  60.             time.sleep(.1)     
  61.         elif 'True' in tnUP :
  62.             #print '\t Seek UP Requested'
  63.             xbmc.executebuiltin('Skin.SetString(tuneup,False)')
  64.             sender('tuneup')
  65.             time.sleep(.1)
  66.         elif 'True' in tnDN :
  67.             #print '\t Seek DOWN Requested'
  68.             xbmc.executebuiltin('Skin.SetString(tunedown,False)')  
  69.             sender('tunedown')
  70.             time.sleep(.1) 
  71.         if rACT == rCurr :
  72.             # Do Nothing
  73.             time.sleep(.1)
  74.             pass
  75.         elif 'True' in rACT :
  76.                 sender('muteoff')
  77.                 rCurr = 'True'
  78.                 time.sleep(.01)
  79.         elif 'False' in rACT :
  80.                 sender('muteon')
  81.                 rCurr = 'False'
  82.                 time.sleep(.01)
  83.         else :
  84.             time.sleep(.1)
  85.             pass
  86.        
  87. def formatData(q) :
  88.     while not q.empty() :
  89.         data = q.get()
  90.         if data.count('|') != 2 :
  91.             return
  92.         elif data.count('|') == 2 :
  93.             data = data.replace('|','')
  94.             cmd, val = data.split(':',1)
  95.             val = val.replace(':',' ')
  96.             val = val.replace('  ','')
  97.             val = val.replace('\n','')
  98.             if 'seek' in cmd :
  99.                 mpt = ''
  100.                 xbmcgui.Window(10000).setProperty('Tune', val)
  101.                 xbmcgui.Window(10000).setProperty('HDArtist', mpt)
  102.                 xbmcgui.Window(10000).setProperty('HDArtist2', mpt)
  103.                 xbmcgui.Window(10000).setProperty('HDTitle', mpt)
  104.                 xbmcgui.Window(10000).setProperty('HDTitle2', mpt)
  105.                 xbmcgui.Window(10000).setProperty('HDCallsign', mpt)
  106.                 xbmcgui.Window(10000).setProperty('HDStreamlock', 'False')             
  107.                 xbmcgui.Window(10000).setProperty('HDActive', 'False')                 
  108.             elif 'hd' in cmd :
  109.                 if 'artist' in cmd :
  110.                     if '1' in val[0]:
  111.                         val = val.replace('1 ','',1) # <~~ Does this work?
  112.                         xbmcgui.Window(10000).setProperty('HDArtist', val)
  113.                         #print 'HD Artist (1) ' + val
  114.                     if '2' in val[0]:
  115.                         val = val.replace('2 ','',1)
  116.                         xbmcgui.Window(10000).setProperty('HDArtist2', val)
  117.                         #print 'HD Artist (2) ' + val
  118.                 elif 'title' in cmd :
  119.                     if '1' in val[0]:
  120.                         val = val.replace('1 ','',1)
  121.                         xbmcgui.Window(10000).setProperty('HDTitle', val)
  122.                         #print 'HD Title  (1) ' + val
  123.                     if '2' in val[0]:
  124.                         val = val.replace('2 ','',1)
  125.                         xbmcgui.Window(10000).setProperty('HDTitle2', val)
  126.                         #print 'HD Title  (2) ' + val              
  127.                 elif 'call' in cmd :
  128.                     xbmcgui.Window(10000).setProperty('HDCallsign', val)
  129.                     #print 'HD Callsign ' + val        
  130.                 elif 'active' in cmd :
  131.                     if 'false' in val:
  132.                         xbmcgui.Window(10000).setProperty('HDActive', 'False')
  133.                         #pass
  134.                     if 'true' in val:
  135.                         xbmcgui.Window(10000).setProperty('HDActive', 'True')
  136.                         #print 'HD Active'
  137.                         #pass
  138.                 elif 'streamlock' in cmd:
  139.                     if 'false' in val :
  140.                         xbmcgui.Window(10000).setProperty('HDStreamlock', 'False')
  141.                         #print 'No stream lock'
  142.                         #pass
  143.                     if 'true' in val :
  144.                         xbmcgui.Window(10000).setProperty('HDStreamlock', 'True')
  145.                         #print 'Stream locked'
  146.                         #pass
  147.                 elif 'subchannel' in cmd :
  148.                     if val < '0':
  149.                         xbmcgui.Window(10000).setProperty('HDSubs', val)
  150.                         #print val + ' subchannels available'
  151.                         #pass
  152.                 else :
  153.                     #print 'Else! ' + val
  154.                     pass
  155.                    
  156.             elif 'rds' in cmd:
  157.                 if 'enable' in cmd :
  158.                     #print 'RDS Enabled'
  159.                     xbmcgui.Window(10000).setProperty('HDArtist2', 'RDS')  
  160.                     #pass                  
  161.                 elif 'service' in cmd :
  162.                     #print 'T.0 ' + val
  163.                     xbmcgui.Window(10000).setProperty('HDArtist', val)
  164.                     #pass
  165.                 elif 'text' in cmd :
  166.                     xbmcgui.Window(10000).setProperty('HDTitle', val)
  167.                     #print 'T.1 ' + val
  168.                     #pass
  169.                 elif 'genre' in cmd:
  170.                     xbmcgui.Window(10000).setProperty('HDTitle2', val) 
  171.                     #print 'Genre ' + val
  172.                     #pass
  173.                
  174.             elif 'tune' in cmd :
  175.                 val = val.replace('FM ','',1)
  176.                 xbmcgui.Window(10000).setProperty('Tune', val)
  177.                 #print '\tStation: ' + val
  178.         time.sleep(.001)
  179.  
  180. t = threading.Thread(name='receiver', target=receiver)
  181. t.setDaemon(True)
  182. t.start()
  183. m = threading.Thread(name='myui', target=myui)
  184. m.setDaemon(True)
  185. m.start()
  186.  
  187. sender('tune 1027 fm')
  188. sender('volume 100')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement