Jump to content


Photo

CustomSubservices

plugin

  • Please log in to reply
49 replies to this topic

Re: CustomSubservices #21 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 5 November 2018 - 22:45

Xml is not easier... it is more complicated... especially with making changes... one mistake and it does not work anymore. Think also about the crashlogs we de-xml-de... A simple list with just service references is much more sinple and we also don’t need the service names as they are already in lamedb... one subservices file with empty lines between the groups was already much quicker and easier to create... With a service ref in a quick check if the service is in a groep...
A lost with just servicerefs is sinple.
Embeded in the image is fine as the current system is obsolete...

Edited by littlesat, 5 November 2018 - 22:51.

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #22 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 6 November 2018 - 10:35

This is how a subservices file in non xml could look like...

# Sky Sport HD
1:0:19:6C:C:85:C00000:0:0:0:
1:0:19:81:6:85:C00000:0:0:0:
1:0:19:72:D:85:C00000:0:0:0:
1:0:19:10C:6:85:C00000:0:0:0:
1:0:19:116:D:85:C00000:0:0:0:
1:0:19:120:C:85:C00000:0:0:0:
1:0:19:12A:B:85:C00000:0:0:0:
1:0:19:134:8:85:C00000:0:0:0:
1:0:19:13E:9:85:C00000:0:0:0:
1:0:19:148:10:85:C00000:0:0:0:
1:0:19:152:A:85:C00000:0:0:0:
1:0:19:102:E:85:C00000:0:0:0:
1:0:19:8F:9:85:C00000:0:0:0:
# Sky Sport
1:0:16:DD:4:85:C00000:0:0:0:
1:0:16:DE:2:85:C00000:0:0:0:
1:0:D3:107:3:85:C00000:0:0:0:
1:0:D3:111:2:85:C00000:0:0:0:
1:0:D3:11B:2:85:C00000:0:0:0:
1:0:D3:125:3:85:C00000:0:0:0:
1:0:D3:12F:3:85:C00000:0:0:0:
1:0:D3:139:3:85:C00000:0:0:0:
1:0:D3:143:3:85:C00000:0:0:0:
1:0:D3:14D:2:85:C00000:0:0:0:
1:0:D3:FD:3:85:C00000:0:0:0:
1:0:16:1E:2:85:C00000:0:0:0:
# Sky Bundesliga HD
1:0:19:69:C:85:C00000:0:0:0:
1:0:19:10B:6:85:C00000:0:0:0:
1:0:19:115:D:85:C00000:0:0:0:
1:0:19:11F:C:85:C00000:0:0:0:
1:0:19:129:B:85:C00000:0:0:0:
1:0:19:133:8:85:C00000:0:0:0:
1:0:19:13D:9:85:C00000:0:0:0:
1:0:19:147:10:85:C00000:0:0:0:
1:0:19:151:A:85:C00000:0:0:0:
1:0:19:101:E:85:C00000:0:0:0:
# Sky Bundesliga
1:0:16:DF:4:85:C00000:0:0:0:
1:0:D3:106:3:85:C00000:0:0:0:
1:0:D3:110:2:85:C00000:0:0:0:
1:0:D3:11A:2:85:C00000:0:0:0:
1:0:D3:124:3:85:C00000:0:0:0:
1:0:D3:12E:3:85:C00000:0:0:0:
1:0:D3:138:3:85:C00000:0:0:0:
1:0:D3:142:3:85:C00000:0:0:0:
1:0:D3:14C:2:85:C00000:0:0:0:
1:0:D3:FC:3:85:C00000:0:0:0:
# Sport1
1:0:1:384:21:85:C00000:0:0:0:
1:0:19:1581:41F:1:C00000:0:0:0:
1:0:19:7A:B:85:C00000:0:0:0:
# Eurosport HD
1:0:19:84:B:85:C00000:0:0:0:
1:0:19:6D:9:85:C00000:0:0:0:
1:0:1:79E0:443:1:C00000:0:0:0:
1:0:19:10E:6:85:C00000:0:0:0:
1:0:19:118:D:85:C00000:0:0:0:
1:0:19:122:C:85:C00000:0:0:0:
1:0:19:12C:B:85:C00000:0:0:0:
1:0:19:136:8:85:C00000:0:0:0:
1:0:19:140:9:85:C00000:0:0:0:
1:0:19:14A:10:85:C00000:0:0:0:
1:0:19:154:A:85:C00000:0:0:0:
1:0:19:104:E:85:C00000:0:0:0:
# Sky Select
1:0:16:12:4:85:C00000:0:0:0:
1:0:19:78:E:85:C00000:0:0:0:
1:0:16:FB:3:85:C00000:0:0:0:
1:0:16:105:3:85:C00000:0:0:0:
1:0:16:10F:2:85:C00000:0:0:0:
1:0:16:119:2:85:C00000:0:0:0:
1:0:16:123:3:85:C00000:0:0:0:
1:0:16:12D:3:85:C00000:0:0:0:
1:0:16:137:3:85:C00000:0:0:0:
1:0:16:141:3:85:C00000:0:0:0:
1:0:16:14B:2:85:C00000:0:0:0:
1:0:16:FE:3:85:C00000:0:0:0:
1:0:16:14E:2:85:C00000:0:0:0:
1:0:16:201:4:85:C00000:0:0:0:
1:0:D3:159:2:85:C00000:0:0:0:
1:0:D3:163:2:85:C00000:0:0:0:
1:0:D3:16D:2:85:C00000:0:0:0:
1:0:19:79:E:85:C00000:0:0:0:
# NDR HD
1:0:19:285A:401:1:C00000:0:0:0:
1:0:19:2857:401:1:C00000:0:0:0:
1:0:19:2859:401:1:C00000:0:0:0:
1:0:19:2858:401:1:C00000:0:0:0:
# WDR HD
1:0:19:6F80:457:1:C00000:0:0:0:
1:0:19:6EA6:4B1:1:C00000:0:0:0:
1:0:19:6EA7:4B1:1:C00000:0:0:0:
1:0:19:6F83:457:1:C00000:0:0:0:
1:0:19:6EA8:4B1:1:C00000:0:0:0:
1:0:19:6EA9:4B1:1:C00000:0:0:0:
1:0:19:6EA5:4B1:1:C00000:0:0:0:
1:0:19:6EAA:4B1:1:C00000:0:0:0:
1:0:19:6EAB:4B1:1:C00000:0:0:0:
1:0:19:6F81:457:1:C00000:0:0:0:
1:0:19:6F82:457:1:C00000:0:0:0:
# SWR HD
1:0:19:283F:3FB:1:C00000:0:0:0:
1:0:19:2840:3FB:1:C00000:0:0:0:
1:0:1:6F46:445:1:C00000:0:0:0:
# BR HD
1:0:19:2856:401:1:C00000:0:0:0:
1:0:19:2855:401:1:C00000:0:0:0:
# MDR HD
1:0:19:2872:425:1:C00000:0:0:0:
1:0:19:2870:425:1:C00000:0:0:0:
1:0:19:2871:425:1:C00000:0:0:0:
# rbb HD
1:0:19:286F:425:1:C00000:0:0:0:
1:0:19:286E:425:1:C00000:0:0:0:
# ORF 2 HD
1:0:19:33F7:3ED:1:C00000:0:0:0:
1:0:19:33F6:3ED:1:C00000:0:0:0:
1:0:19:1334:3EF:1:C00000:0:0:0:
1:0:19:33F8:3ED:1:C00000:0:0:0:
1:0:19:33F9:3ED:1:C00000:0:0:0:
1:0:19:33F5:3ED:1:C00000:0:0:0:
1:0:19:33FA:3ED:1:C00000:0:0:0:
1:0:19:33FB:3ED:1:C00000:0:0:0:
1:0:19:1330:3EF:1:C00000:0:0:0:
# ORF 2 SD
1:0:1:32CD:45D:1:C00000:0:0:0:
1:0:1:32D3:45D:1:C00000:0:0:0:
1:0:1:32CC:45D:1:C00000:0:0:0:
1:0:1:32CE:45D:1:C00000:0:0:0:
1:0:1:32CF:45D:1:C00000:0:0:0:
1:0:1:32D2:45D:1:C00000:0:0:0:
1:0:1:32D0:45D:1:C00000:0:0:0:
1:0:1:32D1:45D:1:C00000:0:0:0:
1:0:1:32CB:45D:1:C00000:0:0:0:

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #23 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 6 November 2018 - 10:41

Or something like this when you want to comment the service names to it to make it more clear...

# Sky Sport HD
1:0:19:6C:C:85:C00000:0:0:0: #Sky Sport News HD
1:0:19:81:6:85:C00000:0:0:0: #Sky Sport 1 HD
1:0:19:72:D:85:C00000:0:0:0: #Sky Sport 2 HD
1:0:19:10C:6:85:C00000:0:0:0: #Sky Sport 3 HD
1:0:19:116:D:85:C00000:0:0:0: #Sky Sport 4 HD
1:0:19:120:C:85:C00000:0:0:0: #Sky Sport 5 HD
1:0:19:12A:B:85:C00000:0:0:0: #Sky Sport 6 HD
1:0:19:134:8:85:C00000:0:0:0: #Sky Sport 7 HD
1:0:19:13E:9:85:C00000:0:0:0: #Sky Sport 8 HD
1:0:19:148:10:85:C00000:0:0:0: #Sky Sport 9 HD
1:0:19:152:A:85:C00000:0:0:0: #Sky Sport 10 HD
1:0:19:102:E:85:C00000:0:0:0: #Sky Sport 11 HD
1:0:19:8F:9:85:C00000:0:0:0: #Sky Sport Austria HD
# Sky Sport
1:0:16:DD:4:85:C00000:0:0:0: #Sky Sport 1
1:0:16:DE:2:85:C00000:0:0:0: #Sky Sport 2
1:0:D3:107:3:85:C00000:0:0:0: #Sky Sport 3
1:0:D3:111:2:85:C00000:0:0:0: #Sky Sport 4
1:0:D3:11B:2:85:C00000:0:0:0: #Sky Sport 5
1:0:D3:125:3:85:C00000:0:0:0: #Sky Sport 6
1:0:D3:12F:3:85:C00000:0:0:0: #Sky Sport 7
1:0:D3:139:3:85:C00000:0:0:0: #Sky Sport 8
1:0:D3:143:3:85:C00000:0:0:0: #Sky Sport 9
1:0:D3:14D:2:85:C00000:0:0:0: #Sky Sport 10
1:0:D3:FD:3:85:C00000:0:0:0: #Sky Sport 11
1:0:16:1E:2:85:C00000:0:0:0: #Sky Sport Austria
# Sky Bundesliga HD
1:0:19:69:C:85:C00000:0:0:0: #Sky Sport Bundesliga 1 HD
1:0:19:10B:6:85:C00000:0:0:0: #Sky Sport Bundesliga 2 HD
1:0:19:115:D:85:C00000:0:0:0: #Sky Sport Bundesliga 3 HD
1:0:19:11F:C:85:C00000:0:0:0: #Sky Sport Bundesliga 4 HD
1:0:19:129:B:85:C00000:0:0:0: #Sky Sport Bundesliga 5 HD
1:0:19:133:8:85:C00000:0:0:0: #Sky Sport Bundesliga 6 HD
1:0:19:13D:9:85:C00000:0:0:0: #Sky Sport Bundesliga 7 HD
1:0:19:147:10:85:C00000:0:0:0: #Sky Sport Bundesliga 8 HD
1:0:19:151:A:85:C00000:0:0:0: #Sky Sport Bundesliga 9 HD
1:0:19:101:E:85:C00000:0:0:0: #Sky Sport Bundesliga 10 HD
# Sky Bundesliga
1:0:16:DF:4:85:C00000:0:0:0: #Sky Sport Bundesliga 1
1:0:D3:106:3:85:C00000:0:0:0: #Sky Sport Bundesliga 2
1:0:D3:110:2:85:C00000:0:0:0: #Sky Sport Bundesliga 3
1:0:D3:11A:2:85:C00000:0:0:0: #Sky Sport Bundesliga 4
1:0:D3:124:3:85:C00000:0:0:0: #Sky Sport Bundesliga 5
1:0:D3:12E:3:85:C00000:0:0:0: #Sky Sport Bundesliga 6
1:0:D3:138:3:85:C00000:0:0:0: #Sky Sport Bundesliga 7
1:0:D3:142:3:85:C00000:0:0:0: #Sky Sport Bundesliga 8
1:0:D3:14C:2:85:C00000:0:0:0: #Sky Sport Bundesliga 9
1:0:D3:FC:3:85:C00000:0:0:0: #Sky Sport Bundesliga 10
# Sport1
1:0:1:384:21:85:C00000:0:0:0: #Sport1
1:0:19:1581:41F:1:C00000:0:0:0: #Sport1 HD
1:0:19:7A:B:85:C00000:0:0:0: #Sport1+ HD
# Eurosport HD
1:0:19:84:B:85:C00000:0:0:0: #Eurosport HD
1:0:19:6D:9:85:C00000:0:0:0: #Eurosport 2 HD
1:0:1:79E0:443:1:C00000:0:0:0: #Eurosport 1 Deutschland
1:0:19:10E:6:85:C00000:0:0:0: #Eurosport 360 HD 01
1:0:19:118:D:85:C00000:0:0:0: #Eurosport 360 HD 02
1:0:19:122:C:85:C00000:0:0:0: #Eurosport 360 HD 03
1:0:19:12C:B:85:C00000:0:0:0: #Eurosport 360 HD 04
1:0:19:136:8:85:C00000:0:0:0: #Eurosport 360 HD 05
1:0:19:140:9:85:C00000:0:0:0: #Eurosport 360 HD 06
1:0:19:14A:10:85:C00000:0:0:0: #Eurosport 360 HD 07
1:0:19:154:A:85:C00000:0:0:0: #Eurosport 360 HD 08
1:0:19:104:E:85:C00000:0:0:0: #Eurosport 360 HD 09
# Sky Select
1:0:16:12:4:85:C00000:0:0:0: #Sky Select
1:0:19:78:E:85:C00000:0:0:0: #Sky Select HD
1:0:16:FB:3:85:C00000:0:0:0: #Sky Select 1
1:0:16:105:3:85:C00000:0:0:0: #Sky Select 2
1:0:16:10F:2:85:C00000:0:0:0: #Sky Select 3
1:0:16:119:2:85:C00000:0:0:0: #Sky Select 4
1:0:16:123:3:85:C00000:0:0:0: #Sky Select 5
1:0:16:12D:3:85:C00000:0:0:0: #Sky Select 6
1:0:16:137:3:85:C00000:0:0:0: #Sky Select 7
1:0:16:141:3:85:C00000:0:0:0: #Sky Select 8
1:0:16:14B:2:85:C00000:0:0:0: #Sky Select 9
1:0:16:FE:3:85:C00000:0:0:0: #Sky Select Event A
1:0:16:14E:2:85:C00000:0:0:0: #Sky Select Event B
1:0:16:201:4:85:C00000:0:0:0: #Blue Movie
1:0:D3:159:2:85:C00000:0:0:0: #Blue Movie 1
1:0:D3:163:2:85:C00000:0:0:0: #Blue Movie 2
1:0:D3:16D:2:85:C00000:0:0:0: #Blue Movie 3
1:0:19:79:E:85:C00000:0:0:0: #Blue Movie HD
# NDR HD
1:0:19:285A:401:1:C00000:0:0:0: #NDR Schleswig Holstein HD
1:0:19:2857:401:1:C00000:0:0:0: #NDR Niedersachsen HD
1:0:19:2859:401:1:C00000:0:0:0: #NDR Hamburg HD
1:0:19:2858:401:1:C00000:0:0:0: #NDR Mecklenburg Vorpommern HD
# WDR HD
1:0:19:6F80:457:1:C00000:0:0:0: #WDR Aachen HD
1:0:19:6EA6:4B1:1:C00000:0:0:0: #WDR Bielefeld HD
1:0:19:6EA7:4B1:1:C00000:0:0:0: #WDR Dortmund HD
1:0:19:6F83:457:1:C00000:0:0:0: #WDR Duisburg HD
1:0:19:6EA8:4B1:1:C00000:0:0:0: #WDR Düsseldorf HD
1:0:19:6EA9:4B1:1:C00000:0:0:0: #WDR Essen HD
1:0:19:6EA5:4B1:1:C00000:0:0:0: #WDR Köln HD
1:0:19:6EAA:4B1:1:C00000:0:0:0: #WDR Münster HD
1:0:19:6EAB:4B1:1:C00000:0:0:0: #WDR Siegen HD
1:0:19:6F81:457:1:C00000:0:0:0: #WDR Wuppertal HD
1:0:19:6F82:457:1:C00000:0:0:0: #WDR Bonn HD
# SWR HD
1:0:19:283F:3FB:1:C00000:0:0:0: #SWR Baden Würtenberg HD
1:0:19:2840:3FB:1:C00000:0:0:0: #SWR Reinland Pfalz HD
1:0:1:6F46:445:1:C00000:0:0:0: #SR Fernsehen
# BR HD
1:0:19:2856:401:1:C00000:0:0:0: #BR Nord HD
1:0:19:2855:401:1:C00000:0:0:0: #BR Süd HD
# MDR HD
1:0:19:2872:425:1:C00000:0:0:0: #MDR Thüringen HD
1:0:19:2870:425:1:C00000:0:0:0: #MDR Sachsen HD
1:0:19:2871:425:1:C00000:0:0:0: #MDR S-Anhalt HD
# rbb HD
1:0:19:286F:425:1:C00000:0:0:0: #rbb Berlin HD
1:0:19:286E:425:1:C00000:0:0:0: #rbb Brandenburg HD
# ORF 2 HD
1:0:19:33F7:3ED:1:C00000:0:0:0: #ORF 2 B HD
1:0:19:33F6:3ED:1:C00000:0:0:0: #ORF 2 K HD
1:0:19:1334:3EF:1:C00000:0:0:0: #ORF 2 N HD
1:0:19:33F8:3ED:1:C00000:0:0:0: #ORF 2 O HD
1:0:19:33F9:3ED:1:C00000:0:0:0: #ORF 2 S HD
1:0:19:33F5:3ED:1:C00000:0:0:0: #ORF 2 St HD
1:0:19:33FA:3ED:1:C00000:0:0:0: #ORF 2 T HD
1:0:19:33FB:3ED:1:C00000:0:0:0: #ORF 2 V HD
1:0:19:1330:3EF:1:C00000:0:0:0: #ORF 2 W HD
# ORF 2 SD
1:0:1:32CD:45D:1:C00000:0:0:0: #ORF 2 B
1:0:1:32D3:45D:1:C00000:0:0:0: #ORF 2 K
1:0:1:32CC:45D:1:C00000:0:0:0: #ORF 2 N
1:0:1:32CE:45D:1:C00000:0:0:0: #ORF 2 O
1:0:1:32CF:45D:1:C00000:0:0:0: #ORF 2 S
1:0:1:32D2:45D:1:C00000:0:0:0: #ORF 2 St
1:0:1:32D0:45D:1:C00000:0:0:0: #ORF 2 T
1:0:1:32D1:45D:1:C00000:0:0:0: #ORF 2 V
1:0:1:32CB:45D:1:C00000:0:0:0: #ORF 2 W

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #24 Dimitrij

  • PLi® Core member
  • 10,022 posts

+338
Excellent

Posted 6 November 2018 - 10:42

the second option is more informative

+

https://www.onlineko...eis_213710.html


Edited by Dimitrij, 6 November 2018 - 10:43.

GigaBlue UHD Quad 4K /Lunix3-4K/Solo 4K


Re: CustomSubservices #25 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 6 November 2018 - 10:52

You can read this very quickly....

 

With subservicelist below you can quickly check if a service ref is in a group...

And with the servicegroup dict you can check in which group the service is included so you have a list which is in the group.

 

subservicelist = [line.strip() if line.startswith('#') else line.split('#')[0].s
subservicegroup = {}
for x in subservicelist:
        if x.startswith("#"):
                groupname = x.split('#')[1].strip()
                subservicegroup[groupname] = []
        else:
                subservicegroup[groupname].append(x)

Edited by littlesat, 6 November 2018 - 10:52.

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #26 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 6 November 2018 - 11:12

Maybe even more simple to parse... without a dict... creates a lists with grouplists..

import itertools
groupslist = [list(g) for k,g in itertools.groupby([line.split('#')[0].strip() for line in open('/etc/enigma2/groupedservices').readlines()], lambda x:not x) if not k]

Edited by littlesat, 6 November 2018 - 11:13.

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #27 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 6 November 2018 - 11:23

With this you can then check if a service is in a group an what service are within this group... (check is here the sevice reference to check)...

ref_in_subservices_group = [x for x in groupslist if current_service in x]
if ref_in_subservices_group:
    #current service is in groep
    services_in_group = ref_in_subservices_group[0]



Edited by littlesat, 6 November 2018 - 15:07.

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #28 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 6 November 2018 - 11:25

The line in the xml what should be shown should actually be done in the skin (e.g. parameter section)


WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #29 Dimitrij

  • PLi® Core member
  • 10,022 posts

+338
Excellent

Posted 7 November 2018 - 16:56

 

With this you can then check if a service is in a group an what service are within this group... (check is here the sevice reference to check)...

ref_in_subservices_group = [x for x in groupslist if current_service in x]
if ref_in_subservices_group:
    #current service is in groep
    services_in_group = ref_in_subservices_group[0]


Ok.

I will make a patch for the image.


GigaBlue UHD Quad 4K /Lunix3-4K/Solo 4K


Re: CustomSubservices #30 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 7 November 2018 - 17:48

Please do not add the epg stuf to the patch in e2 as that should be added later by changing the use of ChoiceBox by something else and please do it by adding a Function that in once slice derive the configged subservices and when it is not found there return what we currently have...
I hope you understand this design!

Edited by littlesat, 7 November 2018 - 17:49.

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #31 Dimitrij

  • PLi® Core member
  • 10,022 posts

+338
Excellent

Posted 7 November 2018 - 17:53

It seems to me that without an EPG check this makes no sense.


GigaBlue UHD Quad 4K /Lunix3-4K/Solo 4K


Re: CustomSubservices #32 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 7 November 2018 - 17:59

It was never there... so first add just the configed subservices and then later add epg, but in a different way like channelselection is made... (shows epg, progressbar, picon etc...)

Edited by littlesat, 7 November 2018 - 18:00.

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #33 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 9 November 2018 - 07:33

This makes (likely) the stuff compatible with the current subservices list stuff.. avoids (later) an if ....

 

ref_in_subservices_group = [x for x in groupslist if current_service in x]
if ref_in_subservices_group:
    #current service is in groep
    services_in_group = [eServiceReference(x) for x in ref_in_subservices_group[0]]

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #34 Dimitrij

  • PLi® Core member
  • 10,022 posts

+338
Excellent

Posted 9 November 2018 - 08:59

I already made a patch, I'll post it for the weekend.


GigaBlue UHD Quad 4K /Lunix3-4K/Solo 4K


Re: CustomSubservices #35 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 9 November 2018 - 09:30

Can you post a diff here so before the merge request 'we' already can discuss it?

 

Hopefully you left out the EPG... As I was considering to remove the ChoiceBox from it and make a 'special' ChannelSelection box for it... It is kind of tricky but you got the look and feeling from a normal ChannelSelection list and the EPG+Picons+NumberSelection when you see the screen etc... for free... But you need to change the color buttons... I know this is more 'work' but when doing this it is really right!


Edited by littlesat, 9 November 2018 - 09:33.

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #36 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 9 November 2018 - 10:49

I just discovered that adding the subservices with the channelselector will be complicated as you need to add the services to the servicecenter somehow.


WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #37 Dimitrij

  • PLi® Core member
  • 10,022 posts

+338
Excellent

Posted 9 November 2018 - 11:48

I just discovered that adding the subservices with the channelselector will be complicated as you need to add the services to the servicecenter somehow.

This is not necessary.

We will save the green button to call ChoiceBox.
We will add in ChannelSelection/key menu optons add/remove grouped service.

Each user can create their own list to quickly switch between them.


GigaBlue UHD Quad 4K /Lunix3-4K/Solo 4K


Re: CustomSubservices #38 Dimitrij

  • PLi® Core member
  • 10,022 posts

+338
Excellent

Posted 12 November 2018 - 21:32

draft code

--- a/InfoBarGenerics.py
+++ b/InfoBarGenerics.py
@@ -44,6 +44,7 @@
 from time import time, localtime, strftime
 import os
 from bisect import insort
+import itertools, datetime
 
 from RecordTimer import RecordTimerEntry, RecordTimer, findSafeRecordPath
 
@@ -130,6 +131,44 @@
 	whitelist_vbi = [line.strip() for line in open('/etc/enigma2/whitelist_vbi', 'r').readlines()] if os.path.isfile('/etc/enigma2/whitelist_vbi') else []
 reload_whitelist_vbi()
 
+subservice_groupslist = None
+def reload_subservice_groupslist(force=False):
+	global subservice_groupslist
+	if subservice_groupslist is None or force:
+		try:
+			subservice_groupslist = [list(g) for k,g in itertools.groupby([line.split('#')[0].strip() for line in open('/etc/enigma2/groupedservices').readlines()], lambda x:not x) if not k]
+		except:
+			subservice_groupslist = []
+reload_subservice_groupslist()
+
+def getPossibleSubservicesForCurrentChannel(current_service):
+	if current_service and subservice_groupslist:
+		ref_in_subservices_group = [x for x in subservice_groupslist if current_service in x]
+		if ref_in_subservices_group:
+			return ref_in_subservices_group[0]
+	return None
+
+def getActiveSubservicesForCurrentChannel(possibleSubservices, only_current=False):
+	activeSubservices = []
+	epgCache = eEPGCache.getInstance()
+	idx = 0
+	for subservice in possibleSubservices:
+		events = epgCache.lookupEvent(['BDTS', (subservice, 0, -1)])
+		if events is not None and len(events) == 1:
+			event = events[0]
+			title = event[2]
+			starttime = datetime.datetime.fromtimestamp(event[0]).strftime('%H:%M')
+			endtime = datetime.datetime.fromtimestamp(event[0] + event[1]).strftime('%H:%M')
+			if title and "Sendepause" not in title:
+				current_show_name = title + " " + str(starttime) + "-" + str(endtime)
+				activeSubservices.append((subservice, current_show_name))
+				if only_current:
+					if only_current != subservice:
+						idx += 1
+					elif idx:
+						return activeSubservices
+	return activeSubservices
+
 class InfoBarDish:
 	def __init__(self):
 		self.dishDialog = self.session.instantiateDialog(Dish)
@@ -2738,7 +2777,7 @@
 			{
 				"nextSubservice": (self.nextSubservice, _("Switch to next sub service")),
 				"prevSubservice": (self.prevSubservice, _("Switch to previous sub service"))
-			}, -1)
+			}, -10)
 		self["SubserviceQuickzapAction"].setEnabled(False)
 
 		self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
@@ -2747,17 +2786,30 @@
 			})
 		self.onClose.append(self.__removeNotifications)
 
-		self.bsel = None
+		self.bouquets = self.bsel = self.selectedSubservice = None
 
 	def __removeNotifications(self):
 		self.session.nav.event.remove(self.checkSubservicesAvail)
 
 	def checkSubservicesAvail(self):
-		service = self.session.nav.getCurrentService()
-		subservices = service and service.subServices()
-		if not subservices or subservices.getNumberOfSubservices() == 0:
+		serviceRef = self.session.nav.getCurrentlyPlayingServiceReference()
+		activeSubservice = False
+		if serviceRef:
+			refstr = serviceRef.toString()
+			possibleSubservices = getPossibleSubservicesForCurrentChannel(refstr)
+			if possibleSubservices:
+				activeSubservice = getActiveSubservicesForCurrentChannel(possibleSubservices, refstr)
+		if not activeSubservice:
 			self["SubserviceQuickzapAction"].setEnabled(False)
+			self.bouquets = self.bsel = self.selectedSubservice = None
 
+	def getAvailableSubservices(self, currentRef):
+		activeSubservices = None
+		possibleSubservices = getPossibleSubservicesForCurrentChannel(currentRef)
+		if possibleSubservices:
+			activeSubservices = getActiveSubservicesForCurrentChannel(possibleSubservices)
+		return activeSubservices
+
 	def nextSubservice(self):
 		self.changeSubservice(+1)
 
@@ -2770,15 +2822,14 @@
 		self.session.nav.playService(ref, checkParentalControl=False, adjust=False)
 
 	def changeSubservice(self, direction):
-		service = self.session.nav.getCurrentService()
-		subservices = service and service.subServices()
-		n = subservices and subservices.getNumberOfSubservices()
-		if n and n > 0:
+		serviceRef = self.session.nav.getCurrentlyPlayingServiceReference()
+		subservices = serviceRef and self.getAvailableSubservices(serviceRef.toString()) or None
+		if subservices and len(subservices) > 1:
+			n = len(subservices)
 			selection = -1
-			ref = self.session.nav.getCurrentlyPlayingServiceReference()
 			idx = 0
 			while idx < n:
-				if subservices.getSubservice(idx).toString() == ref.toString():
+				if subservices[idx][0] == serviceRef.toString():
 					selection = idx
 					break
 				idx += 1
@@ -2788,82 +2839,82 @@
 					selection = 0
 				elif selection < 0:
 					selection = n - 1
-				newservice = subservices.getSubservice(selection)
-				if newservice.valid():
-					del subservices
-					del service
+				try:
+					newservice = eServiceReference(subservices[selection][0])
+				except:
+					newservice = None
+				if newservice and newservice.valid():
 					self.playSubservice(newservice)
 
 	def subserviceSelection(self):
-		service = self.session.nav.getCurrentService()
-		subservices = service and service.subServices()
-		self.bouquets = self.servicelist.getBouquetList()
-		n = subservices and subservices.getNumberOfSubservices()
-		selection = 0
-		if n and n > 0:
-			ref = self.session.nav.getCurrentlyPlayingServiceReference()
-			tlist = []
-			idx = 0
-			cnt_parent = 0
-			while idx < n:
-				i = subservices.getSubservice(idx)
-				if i.toString() == ref.toString():
-					selection = idx
-				tlist.append((i.getName(), i))
-				if i.getUnsignedData(6):
-					cnt_parent += 1
-				idx += 1
-
-			if cnt_parent and self.bouquets and len(self.bouquets):
-				keys = ["red", "blue", "", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
-				if config.usage.multibouquet.value:
-					tlist = [(_("Quick zap"), "quickzap", service.subServices()), (_("Add to bouquet"), "CALLFUNC", self.addSubserviceToBouquetCallback), ("--", "")] + tlist
+		serviceRef = self.session.nav.getCurrentlyPlayingServiceReference()
+		subservices = serviceRef and self.getAvailableSubservices(serviceRef.toString()) or None
+		if subservices and len(subservices) > 1:
+			self.bouquets = self.servicelist and self.servicelist.getBouquetList()
+			n = len(subservices)
+			selection = 0
+			if n and n > 0:
+				tlist = []
+				idx = 0
+				while idx < n:
+					i = subservices[idx][0]
+					if i == serviceRef.toString():
+						selection = idx
+					tlist.append((subservices[idx][1], i))
+					idx += 1
+				if self.bouquets and len(self.bouquets):
+					keys = ["red", "blue", "", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
+					call_func_title = _("Add to favourites")
+					if config.usage.multibouquet.value:
+						call_func_title = _("Add to bouquet")
+						tlist = [(_("Quick zap"), "quickzap", subservices), (call_func_title, "CALLFUNC", self.addSubserviceToBouquetCallback), ("--", "")] + tlist
+					selection += 3
 				else:
-					tlist = [(_("Quick zap"), "quickzap", service.subServices()), (_("Add to favourites"), "CALLFUNC", self.addSubserviceToBouquetCallback), ("--", "")] + tlist
-				selection += 3
-			else:
-				tlist = [(_("Quick zap"), "quickzap", service.subServices()), ("--", "")] + tlist
-				keys = ["red", "", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
-				selection += 2
+					tlist = [(_("Quick zap"), "quickzap", subservices), ("--", "")] + tlist
+					keys = ["red", "", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
+					selection += 2
+				self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a sub service..."), list=tlist, selection=selection, keys=keys, skin_name ="SubserviceSelection")
 
-			self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a sub service..."), list = tlist, selection = selection, keys = keys, skin_name = "SubserviceSelection")
-
 	def subserviceSelected(self, service):
-		del self.bouquets
-		if not service is None:
-			if isinstance(service[1], str):
-				if service[1] == "quickzap":
-					from Screens.SubservicesQuickzap import SubservicesQuickzap
-					self.session.open(SubservicesQuickzap, service[2])
+		if service and len(service) > 1:
+			if service[1] == "quickzap":
+				from Screens.SubservicesQuickzap import SubservicesQuickzap
+				self.session.open(SubservicesQuickzap, service[2])
 			else:
-				self["SubserviceQuickzapAction"].setEnabled(True)
-				self.playSubservice(service[1])
+				try:
+					ref = eServiceReference(service[1])
+				except:
+					ref = None
+				if ref and ref.valid():
+					self["SubserviceQuickzapAction"].setEnabled(True)
+					self.playSubservice(ref)
 
 	def addSubserviceToBouquetCallback(self, service):
-		if service and len(service) > 1 and isinstance(service[1], eServiceReference):
-			self.selectedSubservice = service
-			if self.bouquets is None:
-				cnt = 0
-			else:
-				cnt = len(self.bouquets)
-			if cnt > 1: # show bouquet list
+		if service and len(service) > 1:
+			try:
+				self.selectedSubservice = eServiceReference(service[1])
+			except:
+				self.selectedSubservice = None
+			if self.selectedSubservice is None or not self.selectedSubservice.valid() or self.bouquets is None:
+				self.bouquets = self.bsel = self.selectedSubservice = None
+				return
+			cnt = len(self.bouquets)
+			if cnt > 1:
 				self.bsel = self.session.openWithCallback(self.bouquetSelClosed, BouquetSelector, self.bouquets, self.addSubserviceToBouquet)
-			elif cnt == 1: # add to only one existing bouquet
+			elif cnt == 1:
 				self.addSubserviceToBouquet(self.bouquets[0][1])
 				self.session.open(MessageBox, _("Service has been added to the favourites."), MessageBox.TYPE_INFO, timeout=5)
 
 	def bouquetSelClosed(self, confirmed):
-		self.bsel = None
-		del self.selectedSubservice
+		self.bouquets = self.bsel = self.selectedSubservice = None
 		if confirmed:
 			self.session.open(MessageBox, _("Service has been added to the selected bouquet."), MessageBox.TYPE_INFO, timeout=5)
 
 	def addSubserviceToBouquet(self, dest):
-		self.servicelist.addServiceToBouquet(dest, self.selectedSubservice[1])
+		self.servicelist.addServiceToBouquet(dest, self.selectedSubservice)
 		if self.bsel:
 			self.bsel.close(True)
-		else:
-			del self.selectedSubservice
+			self.bouquets = self.bsel = self.selectedSubservice = None
 
 class InfoBarRedButton:
 	def __init__(self):
--- a/RecordTimer.py
+++ b/RecordTimer.py
@@ -1014,10 +1014,6 @@
 		elif timersanitycheck.doubleCheck():
 			print "[RecordTimer] ignore double timer..."
 			return None
-		elif not loadtimer and not entry.disabled and not entry.justplay and entry.state == 0 and not (entry.service_ref and '%3a//' in entry.service_ref.ref.toString()):
-			for x in check_timer_list:
-				if x.begin == entry.begin and not x.disabled and not x.justplay and not (x.service_ref and '%3a//' in x.service_ref.ref.toString()):
-					entry.begin += 1
 		entry.timeChanged()
 		print "[Timer] Record " + str(entry)
 		entry.Timer = self
@@ -1141,33 +1137,6 @@
 		refstr = ':'.join(service.split(':')[:11])
 		for x in self.getAllTimersList():
 			check = ':'.join(x.service_ref.ref.toString().split(':')[:11]) == refstr
-			if not check:
-				sref = x.service_ref.ref
-				parent_sid = sref.getUnsignedData(5)
-				parent_tsid = sref.getUnsignedData(6)
-				if parent_sid and parent_tsid:
-					# check for subservice
-					sid = sref.getUnsignedData(1)
-					tsid = sref.getUnsignedData(2)
-					sref.setUnsignedData(1, parent_sid)
-					sref.setUnsignedData(2, parent_tsid)
-					sref.setUnsignedData(5, 0)
-					sref.setUnsignedData(6, 0)
-					check = sref.toCompareString() == refstr
-					num = 0
-					if check:
-						check = False
-						event = eEPGCache.getInstance().lookupEventId(sref, eventid)
-						num = event and event.getNumOfLinkageServices() or 0
-					sref.setUnsignedData(1, sid)
-					sref.setUnsignedData(2, tsid)
-					sref.setUnsignedData(5, parent_sid)
-					sref.setUnsignedData(6, parent_tsid)
-					for cnt in range(num):
-						subservice = event.getLinkageService(sref, cnt)
-						if sref.toCompareString() == subservice.toCompareString():
-							check = True
-							break
 			if check:
 				timer_end = x.end
 				timer_begin = x.begin
@@ -1185,7 +1154,6 @@
 						type_offset = 30
 				if x.always_zap:
 					type_offset = 10
-
 				timer_repeat = x.repeated
 				# if set 'don't stop current event but disable coming events' for repeat timer
 				running_only_curevent = x.disabled and x.isRunning() and timer_repeat
--- a/ServiceInfo.py
+++ b/ServiceInfo.py
@@ -1,5 +1,6 @@
 from Components.Converter.Converter import Converter
 from enigma import iServiceInformation, iPlayableService
+from Screens.InfoBarGenerics import getPossibleSubservicesForCurrentChannel, getActiveSubservicesForCurrentChannel
 from Components.Element import cached
 
 WIDESCREEN = [3, 4, 7, 8, 0xB, 0xC, 0xF, 0x10]
@@ -118,8 +119,13 @@
 		elif self.type == self.IS_NOT_WIDESCREEN:
 			return info.getInfo(iServiceInformation.sAspect) not in WIDESCREEN
 		elif self.type == self.SUBSERVICES_AVAILABLE:
-			subservices = service.subServices()
-			return bool(subservices) and subservices.getNumberOfSubservices() > 0
+			refstr = ':'.join(info.getInfoString(iServiceInformation.sServiceref).split(':')[:11])
+			possibleSubservices = getPossibleSubservicesForCurrentChannel(refstr)
+			if possibleSubservices:
+				activeSubservice = getActiveSubservicesForCurrentChannel(possibleSubservices, refstr)
+				if activeSubservice and len(activeSubservice) > 1:
+					return True
+			return False
 		elif self.type == self.HAS_HBBTV:
 			return info.getInfoString(iServiceInformation.sHBBTVUrl) != ""
 		elif self.type == self.AUDIOTRACKS_AVAILABLE:
--- a/SubservicesQuickzap.py
+++ b/SubservicesQuickzap.py
@@ -1,19 +1,16 @@
 from Screens.Screen import Screen
 from Components.ActionMap import NumberActionMap
 from Components.Label import Label
-
 from Screens.ChoiceBox import ChoiceBox
 from Screens.MessageBox import MessageBox
 from InfoBarGenerics import InfoBarShowHide, InfoBarMenu, InfoBarInstantRecord, InfoBarTimeshift, InfoBarSeek, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, InfoBarAudioSelection
+from enigma import eServiceReference
 from Components.ServiceEventTracker import InfoBarBase
 
-from enigma import eTimer
-
 class SubservicesQuickzap(InfoBarBase, InfoBarShowHide, InfoBarMenu, \
 		InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, \
 		InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, \
 		InfoBarAudioSelection, Screen):
-
 	def __init__(self, session, subservices):
 		Screen.__init__(self, session)
 		self.setTitle(_("Subservices"))
@@ -22,19 +19,14 @@
 				InfoBarTimeshiftState, InfoBarSubtitleSupport, \
 				InfoBarExtensions, InfoBarAudioSelection:
 			x.__init__(self)
-
 		self.restoreService = self.session.nav.getCurrentlyPlayingServiceOrGroup()
-
+		self.subservices = subservices
+		self.n = None
+		if self.subservices:
+			self.n = len(self.subservices)
+		self.__lastservice = self.currentlyPlayingSubservice = self.getSubserviceIndex(self.session.nav.getCurrentlyPlayingServiceReference())
 		self["CurrentSubserviceNumber"] = Label("")
 		self.currentSubserviceNumberLabel = self["CurrentSubserviceNumber"]
-
-		self.updateSubservices()
-		self.currentlyPlayingSubservice = 0
-
-		self.timer = eTimer()
-		self.timer.callback.append(self.playSubservice)
-		self.onLayoutFinish.append(self.onLayoutFinished)
-
 		self["actions"] = NumberActionMap( [ "InfobarSubserviceQuickzapActions", "NumberActions", "DirectionActions", "ColorActions" ],
 			{
 				"up": self.showSelection,
@@ -54,7 +46,7 @@
 				"9": self.keyNumberGlobal,
 				"0": self.keyNumberGlobal
 			}, 0)
-
+		self.onLayoutFinish.append(self.onLayoutFinished)
 		self.onClose.append(self.__onClose)
 
 	def __onClose(self):
@@ -62,15 +54,11 @@
 		self.session.nav.playService(self.restoreService, checkParentalControl=False, adjust=False)
 
 	def onLayoutFinished(self):
-		self.timer.start(0, True)
+		cur_num = self.currentlyPlayingSubservice
+		if cur_num is not None or cur_num != -1:
+			self.currentSubserviceNumberLabel.setText(str(cur_num + 1))
 
-	def updateSubservices(self):
-		self.service = self.session.nav.getCurrentService()
-		self.subservices = self.service and self.service.subServices()
-		self.n = self.subservices and self.subservices.getNumberOfSubservices()
-
 	def nextSubservice(self):
-		self.updateSubservices()
 		if self.n:
 			if self.currentlyPlayingSubservice >= self.n - 1:
 				self.playSubservice(0)
@@ -78,7 +66,6 @@
 				self.playSubservice(self.currentlyPlayingSubservice + 1)
 
 	def previousSubservice(self):
-		self.updateSubservices()
 		if self.n:
 			if self.currentlyPlayingSubservice > self.n:
 				self.currentlyPlayingSubservice = self.n
@@ -88,42 +75,40 @@
 				self.playSubservice(self.currentlyPlayingSubservice - 1)
 
 	def getSubserviceIndex(self, service):
-		self.updateSubservices()
-		if self.n is None:
+		if self.n is None or service is None:
 			return -1
 		for x in range(self.n):
-			if service == self.subservices.getSubservice(x):
-				return x
+			try:
+				if service == eServiceReference(self.subservices[x][0]):
+					return x
+			except:
+				pass
+		return -1
 
 	def keyNumberGlobal(self, number):
-		print number, "pressed"
-		self.updateSubservices()
 		if number == 0:
 			self.playSubservice(self.__lastservice)
 		elif self.n is not None and number <= self.n:
-			self.playSubservice(number -1)
+			self.playSubservice(number - 1)
 
 	def showSelection(self):
-		self.updateSubservices()
 		tlist = []
 		n = self.n or 0
 		if n:
 			idx = 0
 			while idx < n:
-				i = self.subservices.getSubservice(idx)
-				tlist.append((i.getName(), idx))
+				i = self.subservices[idx]
+				tlist.append((i[1], idx))
 				idx += 1
+			keys = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "green", "yellow"] + [""] * n
+			self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice..."), list=tlist, selection=self.currentlyPlayingSubservice, keys=keys, windowTitle=_("Subservices"))
 
-		keys = [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
-		self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice..."), list = tlist, selection = self.currentlyPlayingSubservice, keys = keys, windowTitle=_("Subservices"))
-
 	def subserviceSelected(self, service):
-		print "playing subservice number", service
-		if service is not None:
+		if service:
 			self.playSubservice(service[1])
 
 	def keyOK(self):
-		pass
+		self.doShow()
 
 	def quitQuestion(self):
 		self.session.openWithCallback(self.quit, MessageBox, _("Really exit the subservices quickzap?"))
@@ -132,14 +117,15 @@
 		if answer:
 			self.close()
 
-	def playSubservice(self, number = 0):
-		newservice = self.subservices.getSubservice(number)
-		if newservice.valid():
-			del self.subservices
-			del self.service
+	def playSubservice(self, number=0):
+		try:
+			newservice = eServiceReference(self.subservices[number][0])
+		except:
+			newservice = None
+		if newservice and newservice.valid():
 			self.__lastservice = self.currentlyPlayingSubservice
 			self.session.nav.stopService()
 			self.session.nav.playService(newservice, checkParentalControl=False, adjust=False)
 			self.currentlyPlayingSubservice = number
-			self.currentSubserviceNumberLabel.setText(str(number+1))
+			self.currentSubserviceNumberLabel.setText(str(number + 1))
 			self.doShow()


GigaBlue UHD Quad 4K /Lunix3-4K/Solo 4K


Re: CustomSubservices #39 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 12 November 2018 - 21:42

In RecordTimer something came unintended on (the 1 sec delay when recordings on same same time) that should stay (@@ -1014,10 +1014,6 @@ + @@ -1141,33 +1137,6 @@?)...There are also cosmetic adaption (e.,g. number+1 to number + 1) that belong in a separate patch. And you also changed the prio on the buttons to -10. That also belongs in a separate patch.

 

Why do you need this.., which is twice in it...

+                try:
+                    newservice = eServiceReference(subservices[selection][0])
+                except:
+                    newservice = None

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: CustomSubservices #40 littlesat

  • PLi® Core member
  • 56,274 posts

+691
Excellent

Posted 12 November 2018 - 21:44

reload_subservice_groupslist() should be added when the settings are read from the server box + it needs also be downloaded....

 

Just looking at the code for the rest it seems to work... ;).,, and looks fine for the rest... + I investigating using channelselection is not simple so when keeping Choicebox the way the EPG is read for now looks fine to me.


Edited by littlesat, 12 November 2018 - 21:46.

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W




Also tagged with one or more of these keywords: plugin

1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users