diff --git a/adobe.py b/adobe.py
index 3fcd06a..d01cfd4 100644
--- a/adobe.py
+++ b/adobe.py
@@ -1,5 +1,5 @@
import urllib, urllib2, xml.dom.minidom, uuid
-from settings import Settings
+from settings import Settings, log
from cookies import Cookies
@@ -32,7 +32,7 @@ def sessionDevice(streamProvider):
try:
resp = opener.open(AdobePass.SESSION_DEVICE_URI, urllib.urlencode(values))
except urllib2.URLError, e:
- print e.args
+ log (e.args, True)
return False
Cookies.saveCookieJar(jar)
@@ -82,7 +82,7 @@ def preAuthorize(streamProvider, channels):
try:
resp = opener.open(AdobePass.PREAUTHORIZE_URI, value_str)
except urllib2.URLError, e:
- print e.args
+ log (e.args, True)
return None
Cookies.saveCookieJar(jar)
@@ -128,19 +128,19 @@ def authorizeDevice(streamProvider, mso_id, channel):
try:
resp = opener.open(AdobePass.AUTHORIZE_URI, urllib.urlencode(values))
except urllib2.URLError, e:
- print e.args
+ log (e.args, True)
return False
Cookies.saveCookieJar(jar)
resp_xml = resp.read()
if resp_xml.find('notAuthorized') >= 0:
- print "Unable to authorise for channel '" + channel + "'"
+ log ("Unable to authorise for channel '" + channel + "'")
return False
try:
dom = xml.dom.minidom.parseString(resp_xml)
except:
- print "Unable to parse device authorization xml."
+ log ("Unable to parse device authorization xml.", True)
return False
result_node = dom.getElementsByTagName('result')[0]
@@ -189,7 +189,7 @@ def deviceShortAuthorize(streamProvider, mso_id):
try:
resp = opener.open(AdobePass.DEVICE_SHORT_AUTHORIZE, urllib.urlencode(values))
except urllib2.URLError, e:
- print e.args
+ log (e.args, True)
return ''
Cookies.saveCookieJar(jar)
diff --git a/default.py b/default.py
index 5a963db..7c290a1 100644
--- a/default.py
+++ b/default.py
@@ -27,6 +27,8 @@ def getAuthCredentials():
mso = __settings__.getSetting("mso")
+ log("Got from settings the username '" + username + "' for provider '" + mso + "'")
+
return { 'u' : username, 'p' : password, 'm' : mso }
@@ -49,6 +51,8 @@ def createMainMenu():
values = { 'menu' : 'channel', 'name' : desc,
'id' : channel['neulion_id'], 'abbr' : channel['id'] }
+ log("Channel information: " + format(values))
+
title = values['name']
showTitle = channel['name']
@@ -92,25 +96,25 @@ def playChannel(values):
token = stream['token']
stream = stream['stream']
headers = {
- ':authority': 'prod-lic2widevine.sd-ngp.net',
- ':method': 'POST',
- ':path': '/proxy',
- ':scheme': 'https',
+ 'method': 'POST',
'accept': '*/*',
+ 'origin': 'https://now.sportsnet.ca',
+ 'authority': 'prod-lic2widevine.sd-ngp.net',
+ 'path': '/proxy',
+ 'scheme': 'https',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-CA%2Cen-GB%3Bq%3D0.9%2Cen-US%3Bq%3D0.8%2Cen%3Bq%3D0.7',
'authorization': 'bearer {}'.format(token),
- 'origin': 'https://now.sportsnet.ca',
'referer': 'https://now.sportsnet.ca/',
- 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
- 'content-type': '',
- 'Accept-Charset': ''
+ 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
};
header_str = '&'.join(["{}={}".format(k, v) for k, v in headers.items()])
lic_srv = 'https://prod-lic2widevine.sd-ngp.net/proxy|{0}|R{{SSM}}|'.format(header_str)
name = values['name'][0]
+ log ("Trying to play '" + values['name'][0] + "' with license server string '" + lic_srv + "'")
+
inputstream_helper = inputstreamhelper.Helper('mpd', drm='widevine')
if inputstream_helper.check_inputstream():
li = xbmcgui.ListItem(name)
@@ -146,7 +150,7 @@ def getChannelStream(channelId, channelName, msoName):
stream = sn.getChannel(channelId, channelName, msoName)
if not stream:
# auth token may have expired - attempt re-auth first
- print('Auth token may have expired. Attempting re-auth.')
+ log ("Auth token may have expired. Attempting re-auth.")
creds = getAuthCredentials()
if sn.authorize(creds['u'], creds['p'], creds['m']):
return sn.getChannel(channelId, channelName, msoName)
diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml
index 1982bce..1becddd 100644
--- a/resources/language/English/strings.xml
+++ b/resources/language/English/strings.xml
@@ -15,4 +15,5 @@
Username
Password
Cable Provider
+ Turn on LOGNOTICE logging?
diff --git a/resources/settings.xml b/resources/settings.xml
index 1657895..986658c 100644
--- a/resources/settings.xml
+++ b/resources/settings.xml
@@ -3,4 +3,5 @@
+
diff --git a/rogers.py b/rogers.py
index e402a1b..dd51c82 100644
--- a/rogers.py
+++ b/rogers.py
@@ -1,5 +1,6 @@
import urllib, urllib2, re
from cookies import Cookies
+from settings import log
class Rogers:
"""
@@ -33,7 +34,7 @@ def authorize(streamProvider, username, password):
try:
resp = opener.open(uri)
except:
- print "Unable get OAUTH location"
+ log ("Unable get OAUTH location", True)
return None
Cookies.saveCookieJar(jar)
@@ -79,7 +80,7 @@ def getOAuthToken(username, password, viewstate, viewstategen, validation, url):
try:
resp = opener.open(url, urllib.urlencode(values))
except urllib2.URLError, e:
- print e.args
+ log (e.args, True)
Cookies.saveCookieJar(jar)
return True
\ No newline at end of file
diff --git a/settings.py b/settings.py
index 21b8908..b85e2b5 100644
--- a/settings.py
+++ b/settings.py
@@ -1,12 +1,18 @@
-import os, json
+import os, json, xbmcaddon
+__settings__ = xbmcaddon.Addon(id='plugin.video.snnow')
+noticeloglevel = __settings__.getSetting("LOGNOTICElevel")
def log(msg, error = False):
+ full_msg = "plugin.video.snnow: {0}".format(msg)
try:
import xbmc
- full_msg = "plugin.video.mlslive: {0}".format(msg)
xbmc.log(full_msg, level=xbmc.LOGERROR if error else xbmc.LOGINFO)
- except:
- print msg
+ if noticeloglevel == "Yes":
+ xbmc.log(full_msg, level=xbmc.LOGERROR if error else xbmc.LOGNOTICE)
+ else:
+ xbmc.log(full_msg, level=xbmc.LOGERROR if error else xbmc.LOGDEBUG)
+ except Exception as e:
+ xbmc.log(e, level= xbmc.LOGDEBUG)
class Settings:
diff --git a/snnow.py b/snnow.py
index 41895a7..cadc3d7 100644
--- a/snnow.py
+++ b/snnow.py
@@ -79,7 +79,7 @@ def checkMSOs(self):
try:
resp = opener.open(self.AUTHORIZED_MSO_URI)
except:
- print "Unable get OAUTH location"
+ log("Unable get OAUTH location", True)
return None
Cookies.saveCookieJar(jar)
@@ -113,7 +113,7 @@ def getGuideData(self):
try:
resp = opener.open(url)
except urllib2.URLError, e:
- print e.args
+ log(e.args, True)
return None
Cookies.saveCookieJar(jar)
@@ -171,7 +171,7 @@ def getChannels(self):
try:
resp = opener.open(self.CONFIG_URI)
except urllib2.URLError, e:
- print e.args
+ log(e.args, True)
return None
Cookies.saveCookieJar(jar)
@@ -193,12 +193,12 @@ def authorize(self, username, password, msoName='Rogers'):
# Get the MSO class from the
mso = MSOFactory.getMSO(msoName)
if mso == None:
- print "Invalid MSO"
+ log("Invalid MSO", True)
return None
# Authorize with the MSO
if not mso.authorize(self, username, password):
- print "Failed to authorize with MSO"
+ log ("Failed to authorize with MSO", True)
return False
channels = self.getChannels()
@@ -206,12 +206,12 @@ def authorize(self, username, password, msoName='Rogers'):
return True
if not AdobePass.sessionDevice(self):
- print "Session device failed."
+ log ("Session device failed.", True)
return False
result = AdobePass.preAuthorize(self, channels)
if not result:
- print "Preauthorize failed."
+ log ("Preauthorize failed.", True)
return False
return True
@@ -231,7 +231,7 @@ def getChannel(self, id, name, msoName):
"""
mso = MSOFactory.getMSO(msoName)
if mso == None:
- print "Invalid MSO"
+ log ("Invalid MSO", True)
return None
mso_id = mso.getID()
@@ -239,7 +239,7 @@ def getChannel(self, id, name, msoName):
if mso_id != 'Sportsnet':
ap = AdobePass()
if not ap.authorizeDevice(self, mso_id, name):
- print "Authorize device failed"
+ log ("Authorize device failed", True)
return None
token = AdobePass.deviceShortAuthorize(self, msoName)
diff --git a/sportsnet.py b/sportsnet.py
index 6f977ee..ab120fc 100644
--- a/sportsnet.py
+++ b/sportsnet.py
@@ -1,5 +1,6 @@
import urllib, urllib2, time, json, re
from cookies import Cookies
+from settings import log
class Sportsnet:
"""
@@ -51,7 +52,7 @@ def mvpd():
resp = opener.open('https://now.sportsnet.ca/mvpd?',
urllib.urlencode(values))
except:
- print "Unable to login with mvpd"
+ log ("Unable to login with mvpd", True)
return False
res = resp.read()
@@ -70,7 +71,7 @@ def signinmvpd():
resp = opener.open('https://now.sportsnet.ca/signinmvpd?',
urllib.urlencode(values))
except:
- print "Unable to login with signinmvpd"
+ log ("Unable to login with signinmvpd", True)
return False
res = resp.read()
@@ -90,7 +91,7 @@ def callback(username, password):
try:
resp = opener.open('https://now.sportsnet.ca/secure/mvpd/myrogers?'+urllib.urlencode(values))
except:
- print "Unable to login with signinmvpd"
+ log ("Unable to login with signinmvpd", True)
return False
res = resp.read()