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.
Posted 5 November 2018 - 22:45
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
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
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
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/Duo 4K
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
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
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
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/Duo 4K
Posted 7 November 2018 - 17:48
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
Posted 7 November 2018 - 17:59
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
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
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
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/Duo 4K
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/Duo 4K
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
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
Missing Softcams PluginStarted by MifPT, 12 Jan 2024 softcams, Plugin and 1 more... |
|
|||
openpli 9 and Xtream pluginStarted by frossie, 10 Dec 2023 plugin |
|
|||
Advanced transcoding setupStarted by Dimitrij, 14 May 2022 plugin |
|
|||
Plugin - Power LNB/ToneBurst in standby for FBC tunersStarted by Dimitrij, 6 Apr 2022 plugin |
|
|||
imdb plugin
IMDB plugin issuesStarted by scriptmelvin †, 1 Jun 2021 imdb plugin, imdb, plugin |
|
0 members, 6 guests, 0 anonymous users