Skip to content

Commit

Permalink
map selected services
Browse files Browse the repository at this point in the history
  • Loading branch information
edit4ever committed Jan 4, 2018
1 parent 0618bee commit a9a6756
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 25 deletions.
4 changes: 2 additions & 2 deletions addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="script.module.tvh2kodi"
name="Tvheadend Setup for Kodi"
version="2.0"
version="2.1"
provider-name="edit4ever">
<requires>
<import addon="xbmc.python" version="2.6.0"/>
Expand Down Expand Up @@ -30,7 +30,7 @@
<screenshot>resources/screenshot-03.jpg</screenshot>
</assets>
<news>
2.0 - add support for DVB-S adapter and LNB configuration | adds CA client support
2.1 - add support for mapping selected services to channels
</news>
</extension>
</addon>
3 changes: 3 additions & 0 deletions changelog.txt
@@ -1,3 +1,6 @@
v2.1 (2018-01-04)
- add support for mapping selected services to channels

v2.0 (2018-01-03)
- add support for DVB-S adapter and LNB configuration
- add support for Conditional Access Clients
Expand Down
136 changes: 113 additions & 23 deletions default.py
Expand Up @@ -2314,6 +2314,118 @@ def netiptv_param_edit(net_uuid_sel, net_info_list, net_name, net_bouquet, net_t
param_save = requests.get(param_url)
net_param_load(net_uuid_sel)

def services_param_load():
services_url = 'http://' + tvh_url + ':' + tvh_port + '/api/service/mapper/load'
services_load = requests.get(services_url).json()
services_opt_name = ['MAP ALL SERVICES TO CHANNELS', 'MAP SELECTED SERVICES TO CHANNELS']
services_opt_id = ['','']
services_opt_label = ['','']
services_node = {}
for param in services_load['entries'][0]['params']:
serv_id = param['id']
if serv_id != 'services':
services_opt_id.append(serv_id)
serv_label = param['caption']
services_opt_label.append(serv_label)
serv_value_orig = param['value']
if serv_value_orig == True:
serv_value = 'Enabled'
else:
serv_value = 'Disabled'
serv_list_add = serv_label + ': ' + serv_value
services_opt_name.append(serv_list_add)
services_node[serv_id] = serv_value_orig
services_param_edit(services_opt_name, services_opt_id, services_opt_label, services_node)

def services_param_edit(services_opt_name, services_opt_id, services_opt_label, services_node):
sel_param = dialog.select('Edit Options or Select to Map Services', list=services_opt_name)
if sel_param == 0:
if dialog.yesno("Map ALL Services to Channels", "Are you sure you want to map all services to channels?"):
serv_url = 'http://' + tvh_url + ':' + tvh_port + '/api/mpegts/service/grid?limit=999999999&sort=multiplex'
services = requests.get(serv_url).json()
serv_total = services['total']
serv_uuid = []
for serv_id in services['entries']:
if serv_id['channel'] == []:
serv_uuid.append(serv_id['uuid'])
serv_uuid_str = str(serv_uuid)
serv_uuid_str = re.sub("u\'","\"",serv_uuid_str)
serv_uuid_str = re.sub("\'","\"",serv_uuid_str)
serv_node_str = json.dumps(services_node)
serv_node_str = re.sub('{','',serv_node_str)
map_url = 'http://' + tvh_url + ':' + tvh_port + '/api/service/mapper/save?node={"services":' + serv_uuid_str + ',' + serv_node_str
map_ch = requests.get(map_url)
status_url = 'http://' + tvh_url + ':' + tvh_port + '/api/service/mapper/status'
time.sleep(3)
map_status = requests.get(status_url).json()
map_total_num = map_status['total']
map_ok_num = map_status['ok']
map_fail_num = map_status['fail']
map_ignore_num = map_status['ignore']
map_complete = (map_ok_num + map_fail_num + map_ignore_num)
map_total_perc = ((float(map_complete) / float(serv_total)) * 100)
dialog.ok("Channel mapping complete.", str(map_ok_num) + " new channels added.", str(map_ignore_num) + " services ignored.", str(map_fail_num) + " services failed.")
if sel_param == 1:
serv_url = 'http://' + tvh_url + ':' + tvh_port + '/api/mpegts/service/grid?limit=999999999&sort=multiplex'
services = requests.get(serv_url).json()
serv_total = services['total']
services_uuid = []
services_list = []
services_chan = []
services_sel = []
for serv in services['entries']:
try:
serv_name = serv['svcname']
except:
serv_name = 'NO SERVICE NAME'
serv_uuid = serv['uuid']
serv_multiplex = serv['multiplex']
serv_network = serv['network']
serv_channel = serv['channel']
services_uuid.append(serv_uuid)
if serv_channel != []:
services_chan.append(serv_uuid)
serv_list = serv_network + ' / ' + serv_multiplex + ' / ' + serv_name + ' ** MAPPED **'
else:
serv_list = serv_network + ' / ' + serv_multiplex + ' / ' + serv_name
services_list.append(serv_list)
serv_preselect = [i for i, item in enumerate(services_uuid) if item not in set(services_chan)]
sel_service = dialog.multiselect('Select which services to map to channels', options=services_list, preselect=serv_preselect)
if sel_service == [] or sel_service == None:
services_param_load()
else:
for sel in sel_service:
services_sel.append(services_uuid[sel])
services_node['services'] = services_sel
serv_node_str = json.dumps(services_node)
serv_update_url = 'http://' + tvh_url + ':' + tvh_port + '/api/service/mapper/save?node=' + serv_node_str
serv_update_load = requests.get(serv_update_url)
status_url = 'http://' + tvh_url + ':' + tvh_port + '/api/service/mapper/status'
time.sleep(3)
map_status = requests.get(status_url).json()
map_total_num = map_status['total']
map_ok_num = map_status['ok']
map_fail_num = map_status['fail']
map_ignore_num = map_status['ignore']
map_complete = (map_ok_num + map_fail_num + map_ignore_num)
map_total_perc = ((float(map_complete) / float(serv_total)) * 100)
dialog.ok("Channel mapping complete.", str(map_ok_num) + " new channels added.", str(map_ignore_num) + " services ignored.", str(map_fail_num) + " services failed.")
if sel_param > 1:
serv_param_name = services_opt_label[sel_param]
serv_param_id = services_opt_id[sel_param]
serv_param_desc = serv_param_name + ': Select to Enable/Disable'
sel_param_edit = dialog.select(serv_param_desc, list=enabledisable)
if sel_param_edit >= 0:
if sel_param_edit == 0:
services_node[serv_param_id] = True
if sel_param_edit == 1:
services_node[serv_param_id] = False
services_node['services'] = ''
serv_node_str = json.dumps(services_node)
serv_update_url = 'http://' + tvh_url + ':' + tvh_port + '/api/service/mapper/save?node=' + serv_node_str
serv_update_load = requests.get(serv_update_url)
services_param_load()

def start_scan(net_uuid_sel):
adapters_url = 'http://' + tvh_url + ':' + tvh_port + '/api/hardware/tree?uuid=root'
adapters_get = requests.get(adapters_url).json()
Expand Down Expand Up @@ -2593,29 +2705,7 @@ def mux_scan():

@plugin.route('/services')
def services():
if dialog.yesno("Map Services to Channels", "Would you like to try to map all services to channels?"):
serv_url = 'http://' + tvh_url + ':' + tvh_port + '/api/mpegts/service/grid?limit=999999999&sort=multiplex'
services = requests.get(serv_url).json()
serv_total = services['total']
serv_uuid = []
for serv_id in services['entries']:
if serv_id['channel'] == []:
serv_uuid.append(serv_id['uuid'])
serv_uuid_str = str(serv_uuid)
serv_uuid_str = re.sub("u\'","\"",serv_uuid_str)
serv_uuid_str = re.sub("\'","\"",serv_uuid_str)
map_url = 'http://' + tvh_url + ':' + tvh_port + '/api/service/mapper/save?node={"services":' + serv_uuid_str + ',"encrypted":false,"merge_same_name":false,"check_availability":false,"type_tags":true,"provider_tags":false,"network_tags":false}'
map_ch = requests.get(map_url)
status_url = 'http://' + tvh_url + ':' + tvh_port + '/api/service/mapper/status'
time.sleep(3)
map_status = requests.get(status_url).json()
map_total_num = map_status['total']
map_ok_num = map_status['ok']
map_fail_num = map_status['fail']
map_ignore_num = map_status['ignore']
map_complete = (map_ok_num + map_fail_num + map_ignore_num)
map_total_perc = ((float(map_complete) / float(serv_total)) * 100)
dialog.ok("Channel mapping complete.", str(map_ok_num) + " new channels added.", str(map_ignore_num) + " services ignored.", str(map_fail_num) + " services failed.")
services_param_load()

@plugin.route('/channels')
def channels():
Expand Down

0 comments on commit a9a6756

Please sign in to comment.