@@ -60,6 +60,81 @@ def has_widevine_cdm(self):
60
60
self .log ('Widevine is not installed.' )
61
61
return False
62
62
63
+ def _json_rpc_request (self , payload ):
64
+ self ._log ('jsonrpc payload: {0}' .format (payload ))
65
+ response = xbmc .executeJSONRPC (json .dumps (payload ))
66
+ self ._log ('jsonrpc response: {0}' .format (response ))
67
+
68
+ return json .loads (response )
69
+
70
+ def _has_inputstream (self ):
71
+ """Checks if selected InputStream add-on is installed."""
72
+ payload = {
73
+ 'jsonrpc' : '2.0' ,
74
+ 'id' : 1 ,
75
+ 'method' : 'Addons.GetAddonDetails' ,
76
+ 'params' : {
77
+ 'addonid' : self ._inputstream_addon
78
+ }
79
+ }
80
+ data = self ._json_rpc_request (payload )
81
+ if 'error' in data :
82
+ return False
83
+ else :
84
+ return True
85
+
86
+ def _inputstream_enabled (self ):
87
+ """Returns whether selected InputStream add-on is enabled.."""
88
+ payload = {
89
+ 'jsonrpc' : '2.0' ,
90
+ 'id' : 1 ,
91
+ 'method' : 'Addons.GetAddonDetails' ,
92
+ 'params' : {
93
+ 'addonid' : self ._inputstream_addon ,
94
+ 'properties' : ['enabled' ]
95
+ }
96
+ }
97
+ data = self ._json_rpc_request (payload )
98
+ if data ['result' ]['addon' ]['enabled' ]:
99
+ return True
100
+ else :
101
+ return False
102
+
103
+ def _enable_inputstream (self ):
104
+ """Enable selected InputStream add-on."""
105
+ payload = {
106
+ 'jsonrpc' : '2.0' ,
107
+ 'id' : 1 ,
108
+ 'method' : 'Addons.SetAddonEnabled' ,
109
+ 'params' : {
110
+ 'addonid' : self ._inputstream_addon ,
111
+ 'enabled' : True
112
+ }
113
+ }
114
+ data = self ._json_rpc_request (payload )
115
+ if 'error' in data :
116
+ return False
117
+ else :
118
+ return True
119
+
120
+ def check_for_inputstream (self ):
121
+ """Ensures that selected InputStream add-on is installed and enabled.
122
+ Displays a select dialog if add-on is installed but not enabled."""
123
+ dialog = xbmcgui .Dialog ()
124
+ if not self ._has_inputstream ():
125
+ self ._log ('{0} is not installed.' .format (self ._inputstream_addon ))
126
+ dialog .ok (self ._language (30004 ), self ._language (30008 ).format (self ._inputstream_addon ))
127
+ elif not self ._inputstream_enabled ():
128
+ self ._log ('{0} is not enabled.' .format (self ._inputstream_addon ))
129
+ ok = dialog .yesno (self ._language (30001 ), self ._language (30009 ).format (self ._inputstream_addon , self ._inputstream_addon ))
130
+ if ok :
131
+ return self ._enable_inputstream ()
132
+ else :
133
+ return False
134
+ else :
135
+ self ._log ('{0} is installed and enabled.' .format (self ._inputstream_addon ))
136
+ return True
137
+
63
138
def supports_hls (self ):
64
139
if self .protocol == 'hls' and LooseVersion (self ._inputstream_version ()) >= LooseVersion (config .HLS_MINIMUM_IA_VERSION ):
65
140
return True
0 commit comments