The branch, frodo has been updated
via adcbb17d1f325564a943019b0fa64fbc16ddb49b (commit)
from 221b5f21bfc97fbd541bc57f68cbb72ee4c82b03 (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=adcbb17d1f325564a943019b0fa64fbc16ddb49b
commit adcbb17d1f325564a943019b0fa64fbc16ddb49b
Author: Martijn Kaijser <[email protected]>
Date: Wed Jul 23 20:43:59 2014 +0200
[plugin.video.crunchyroll-takeout] 2.1.0
diff --git a/plugin.video.crunchyroll-takeout/CHANGELOG.txt
b/plugin.video.crunchyroll-takeout/CHANGELOG.txt
index f5b8c28..94787b1 100644
--- a/plugin.video.crunchyroll-takeout/CHANGELOG.txt
+++ b/plugin.video.crunchyroll-takeout/CHANGELOG.txt
@@ -1,3 +1,5 @@
+[B]2.1.0[/B]
+You MUST be a Premium Member to use this plug-in
[B]2.0.5[/B]
Added Auto-Resume of watched Videos
Increased Area to try to catch issues with loading save data on Android
diff --git a/plugin.video.crunchyroll-takeout/README.md
b/plugin.video.crunchyroll-takeout/README.md
index 7089d46..b3c9df0 100644
--- a/plugin.video.crunchyroll-takeout/README.md
+++ b/plugin.video.crunchyroll-takeout/README.md
@@ -10,8 +10,7 @@ Legacy Builds at https://code.google.com/p/urlxl-repo/
Forum Posting: http://forum.xbmc.org/showthread.php?tid=129709
Disclaimer:
-You will need a Crunchyroll account!
-(No you don't have to pay for it. But it's cheap.)
+You MUST be a Crunchyroll Premium Member!
Thanks to the following for code:
diff --git a/plugin.video.crunchyroll-takeout/addon.xml
b/plugin.video.crunchyroll-takeout/addon.xml
index 633ecf8..da3abad 100644
--- a/plugin.video.crunchyroll-takeout/addon.xml
+++ b/plugin.video.crunchyroll-takeout/addon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.crunchyroll-takeout" name="Crunchyroll;xbmc"
provider-name="Yoshi of the Wire" version="2.0.5">
+<addon id="plugin.video.crunchyroll-takeout" name="Crunchyroll;xbmc"
provider-name="Yoshi of the Wire" version="2.1.0">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
</requires>
@@ -13,7 +13,7 @@
<summary lang="no">Se på videoer fra crunchyroll.com!</summary>
<description lang="en">Crunchyroll is an online video service
and community that offers full-length episodes and movies of the very best in
Japanese anime and Asian entertainment.</description>
<description lang="no">Crunchyroll er en online video tjeneste
og fellesskap som tilbyr full-lengde episoder og filmer av det aller beste i
japansk anime og asiatiske tv serier.</description>
- <disclaimer lang="en">WARNING: You MUST login to use this
Plugin</disclaimer>
+ <disclaimer lang="en">WARNING: You MUST be a PREMIUM member to
use this Plugin</disclaimer>
<license>GNU GENERAL PUBLIC LICENSE. Version 2, June
1991</license>
<forum>http://forum.xbmc.org/showthread.php?tid=129709</forum>
<website>http://www.crunchyroll.com/</website>
diff --git a/plugin.video.crunchyroll-takeout/default.py
b/plugin.video.crunchyroll-takeout/default.py
index bc09fe1..e89ab78 100644
--- a/plugin.video.crunchyroll-takeout/default.py
+++ b/plugin.video.crunchyroll-takeout/default.py
@@ -12,12 +12,12 @@ import xbmcaddon
#plugin constants
__plugin__ = "Crunchyrollxbmc"
-__version__ = "2.0.5"
+__version__ = "2.1.0"
__XBMCBUILD__ = xbmc.getInfoLabel( "System.BuildVersion" )
__settings__ = xbmcaddon.Addon(id='plugin.video.crunchyroll-takeout')
__language__ = __settings__.getLocalizedString
-print "[PLUGIN] '%s: version %s' initialized!" % (__plugin__, __version__)
+xbmc.log("[PLUGIN] '%s: version %s' initialized!" % (__plugin__, __version__))
if __name__ == "__main__":
from resources.lib import crunchy_main
diff --git
a/plugin.video.crunchyroll-takeout/resources/language/English/strings.po
b/plugin.video.crunchyroll-takeout/resources/language/English/strings.po
index 7844a18..cfd1adc 100644
--- a/plugin.video.crunchyroll-takeout/resources/language/English/strings.po
+++ b/plugin.video.crunchyroll-takeout/resources/language/English/strings.po
@@ -166,3 +166,7 @@ msgstr ""
msgctxt "#30311"
msgid "Resume Video Playback"
msgstr ""
+
+msgctxt "#30312"
+msgid "You MUST be a Premium Member to use this plugin."
+msgstr ""
diff --git a/plugin.video.crunchyroll-takeout/resources/lib/crunchy_json.py
b/plugin.video.crunchyroll-takeout/resources/lib/crunchy_json.py
index c5f760b..5f87e67 100644
--- a/plugin.video.crunchyroll-takeout/resources/lib/crunchy_json.py
+++ b/plugin.video.crunchyroll-takeout/resources/lib/crunchy_json.py
@@ -53,6 +53,7 @@ class CrunchyJSON:
local_string = __settings__.getLocalizedString
notice_msg = local_string(30200).encode("utf8")
setup_msg = local_string(30203).encode("utf8")
+ acc_type_error = local_string(30312).encode("utf8")
change_language =
__settings__.getSetting("change_language")
if change_language == "0":
userData.setdefault('API_LOCALE',"enUS")
@@ -80,7 +81,7 @@ class CrunchyJSON:
char_set = string.ascii_letters + string.digits
device_id = ''.join(random.sample(char_set,32))
userData["device_id"] = device_id
- print "Crunchyroll;xbmc ----> New device_id
created. New device_id is: "+ str(device_id)
+ xbmc.log("Crunchyroll;xbmc ----> New device_id
created. New device_id is: "+ str(device_id))
userData['API_URL'] = "https://api.crunchyroll.com"
userData['API_HEADERS'] = [('User-Agent',"Mozilla/5.0
(PLAYSTATION 3; 4.46)"), ('Host',"api.crunchyroll.com"),
('Accept-Encoding',"gzip, deflate"), ('Accept',"*/*"),
('Content-Type',"application/x-www-form-urlencoded")]
userData['API_VERSION'] = "1.0.1"
@@ -91,61 +92,52 @@ class CrunchyJSON:
userData.setdefault('lastreported', (current_datetime
- dateutil.relativedelta.relativedelta( hours = +24 )))
self.userData = userData
except:
- print "Unexpected error:", sys.exc_info()
+ xbmc.log( "Unexpected error:", sys.exc_info())
userData['session_id'] = ''
userData['auth_expires'] = current_datetime -
dateutil.relativedelta.relativedelta( hours = +24 )
userData['lastreported'] = current_datetime -
dateutil.relativedelta.relativedelta( hours = +24 )
- userData['premium_type'] = 'unknown'
+ userData['premium_type'] = 'UNKNOWN'
userData['auth_token'] = ''
userData['session_expires'] = current_datetime -
dateutil.relativedelta.relativedelta( hours = +24 )
self.userData = userData
userData.close()
- print "Crunchyroll -> Unable to Load shelve"
+ xbmc.log( "Crunchyroll -> Unable to Load shelve")
return False
- if current_datetime > userData['lastreported']:
- userData['lastreported'] = (current_datetime +
dateutil.relativedelta.relativedelta( hours = +24 ))
- self.userData = userData
- self.usage_reporting() #Call for Usage Reporting
-
#Check to see if a session_id doesn't exist or if the current
auth token is invalid and if so start a new session and log it in.
if (not userData.has_key('session_id')) or (not
userData.has_key('auth_expires')) or current_datetime >
userData['auth_expires']:
#Start new session
- print "Crunchyroll;xbmc ----> Starting new session"
+ xbmc.log( "Crunchyroll;xbmc ----> Starting new
session")
opener = urllib2.build_opener()
opener.addheaders = userData['API_HEADERS']
options =
urllib.urlencode({'device_id':userData["device_id"],
'device_type':userData['API_DEVICE_TYPE'],
'access_token':userData['API_ACCESS_TOKEN'], 'version':userData['API_VERSION'],
'locale': userData['API_LOCALE']})
- #print options
urllib2.install_opener(opener)
url = userData['API_URL']+"/start_session.0.json"
- #print url
req = opener.open(url, options)
json_data = req.read()
if req.headers.get('content-encoding', None) == 'gzip':
json_data =
gzip.GzipFile(fileobj=StringIO.StringIO(json_data)).read().decode('utf-8','ignore')
req.close()
- #print json_data
request = json.loads(json_data)
- #print request
if request['error'] is False:
userData['session_id'] =
request['data']['session_id']
userData['session_expires'] =
(current_datetime + dateutil.relativedelta.relativedelta( hours = +4 ))
userData['test_session'] = current_datetime
- print "Crunchyroll.bundle ----> New session
created! Session ID is: "+ str(userData['session_id'])
+ xbmc.log( "Crunchyroll.bundle ----> New
session created! Session ID is: "+ str(userData['session_id']))
elif request['error'] is True:
- print "Crunchyroll.bundle ----> Error starting
new session. Error message is: "+ str(request['message'])
+ xbmc.log( "Crunchyroll.bundle ----> Error
starting new session. Error message is: "+ str(request['message']))
return False
#Login the session we just started.
if not userData['username'] or not
userData['password']:
- print"Crunchyroll.bundle ----> No Username or
Password set"
+ xbmc.log("Crunchyroll.bundle ----> No Username
or Password set")
self.userData = userData
userData.close()
ex =
'XBMC.Notification("'+notice_msg+':","'+setup_msg+'.", 3000)'
xbmc.executebuiltin(ex)
- print "crunchyroll-takeout -> NO CRUNCHYROLL
ACCOUNT FOUND!"
+ xbmc.log( "crunchyroll-takeout -> NO
CRUNCHYROLL ACCOUNT FOUND!")
return False
else:
- print"Crunchyroll.bundle ----> Logging in the
new session we just created."
+ xbmc.log("Crunchyroll.bundle ----> Logging in
the new session we just created.")
opener = urllib2.build_opener()
opener.addheaders = userData['API_HEADERS']
options =
urllib.urlencode({'session_id':userData['session_id'],
'password':userData['password'], 'account':userData['username'],
'version':userData['API_VERSION'], 'locale': userData['API_LOCALE']})
@@ -156,47 +148,51 @@ class CrunchyJSON:
json_data =
gzip.GzipFile(fileobj=StringIO.StringIO(json_data)).read().decode('utf-8','ignore')
req.close()
request = json.loads(json_data)
- #print request
if request['error'] is False:
userData['auth_token'] =
request['data']['auth']
userData['auth_expires'] =
dateutil.parser.parse(request['data']['expires'])
userData['premium_type'] = 'free' if
request['data']['user']['premium'] == '' else request['data']['user']['premium']
- print"Crunchyroll.bundle ----> Login
successful."
+ xbmc.log("Crunchyroll.bundle ---->
Login successful.")
elif request['error'] is True:
- print"Crunchyroll.bundle ----> Error
logging in new session. Error message was: "+ str(request['message'])
+ xbmc.log("Crunchyroll.bundle ---->
Error logging in new session. Error message was: "+ str(request['message']))
self.userData = userData
userData.close()
return False
+ #Call for Usage Reporting
+ if current_datetime > userData['lastreported']:
+ userData['lastreported'] = (current_datetime +
dateutil.relativedelta.relativedelta( hours = +24 ))
+ self.userData = userData
+ self.usage_reporting()
#Verify user is premium
if userData['premium_type'] in 'anime|drama|manga':
- print"Crunchyroll.bundle ----> User is a
premium "+str(userData['premium_type'])+" member."
+ xbmc.log("Crunchyroll.bundle ----> User is a
premium "+str(userData['premium_type'])+" member.")
self.userData = userData
userData.close()
return True
else:
- print"Crunchyroll.bundle ----> User is not
premium. "
- self.userData = userData
+ xbmc.log("Crunchyroll.bundle ----> User is not
premium. ")
+
xbmc.executebuiltin('Notification('+notice_msg+','+acc_type_error+',5000)')
+ self.userData = userData = None
userData.close()
- return True
+
crunchy_main.UI().addItem({'Title':acc_type_error, 'mode':'Fail'})
+ crunchy_main.UI().endofdirectory('none')
+ return False
#Check to see if a valid session and auth token exist and if
so reinitialize a new session using the auth token.
elif userData.has_key("session_id") and
userData.has_key("auth_expires") and current_datetime <
userData['auth_expires'] and current_datetime > userData['session_expires']:
#Re-start new session
- print "Crunchyroll.bundle ----> Valid auth token was
detected. Restarting session."
+ xbmc.log( "Crunchyroll.bundle ----> Valid auth token
was detected. Restarting session.")
opener = urllib2.build_opener()
options =
urllib.urlencode({'device_id':userData["device_id"],
'device_type':userData['API_DEVICE_TYPE'],
'access_token':userData['API_ACCESS_TOKEN'], 'version':userData['API_VERSION'],
'locale': userData['API_LOCALE'], 'auth':userData['auth_token']})
urllib2.install_opener(opener)
url = userData['API_URL']+"/start_session.0.json"
- #print url
req = opener.open(url, options)
json_data = req.read()
if req.headers.get('content-encoding', None) == 'gzip':
json_data =
gzip.GzipFile(fileobj=StringIO.StringIO(json_data)).read().decode('utf-8','ignore')
req.close()
- #print json_data
request = json.loads(json_data)
- #print request
try:
if request['error'] is False:
userData['session_id'] =
request['data']['session_id']
@@ -205,19 +201,27 @@ class CrunchyJSON:
userData['auth_token'] =
request['data']['auth']
userData['session_expires'] =
(current_datetime + dateutil.relativedelta.relativedelta( hours = +4 )) #4
hours is a guess. Might be +/- 4.
userData['test_session'] =
current_datetime
- print"Crunchyroll.bundle ----> Session
restart successful. New session_id is: "+ str(userData['session_id'])
-
+ xbmc.log("Crunchyroll.bundle ---->
Session restart successful. New session_id is: "+ str(userData['session_id']))
+ #Call for Usage Reporting
+ if current_datetime >
userData['lastreported']:
+ userData['lastreported'] =
(current_datetime + dateutil.relativedelta.relativedelta( hours = +24 ))
+ self.userData = userData
+ self.usage_reporting()
+
#Verify user is premium
if userData['premium_type'] in
'anime|drama|manga':
- print"Crunchyroll.bundle ---->
User is a premium "+str(userData['premium_type'])+" member."
+ xbmc.log("Crunchyroll.bundle
----> User is a premium "+str(userData['premium_type'])+" member.")
self.userData = userData
userData.close()
return True
else:
- print"Crunchyroll.bundle ---->
User is not premium."
- self.userData = userData
+ xbmc.log("Crunchyroll.bundle
----> User is not premium.")
+
xbmc.executebuiltin('Notification('+notice_msg+','+acc_type_error+',5000)')
+ self.userData = userData = None
userData.close()
- return True
+
crunchy_main.UI().addItem({'Title':acc_type_error, 'mode':'Fail'})
+
crunchy_main.UI().endofdirectory('none')
+ return False
elif request['error'] is True:
#Remove userData so we start a new
session next time around.
@@ -226,7 +230,7 @@ class CrunchyJSON:
del userData['premium_type']
del userData['auth_token']
del userData['session_expires']
- print"Crunchyroll.bundle ----> Error
restarting session. Error message was: "+ str(request['message'])
+ xbmc.log("Crunchyroll.bundle ---->
Error restarting session. Error message was: "+ str(request['message']))
self.userData = userData
userData.Save()
return False
@@ -236,7 +240,7 @@ class CrunchyJSON:
userData['premium_type'] = 'unknown'
userData['auth_token'] = ''
userData['session_expires'] = current_datetime
- dateutil.relativedelta.relativedelta( hours = +24 )
- print"Crunchyroll.bundle ----> Error
restarting session. Error message was: "+ str(request['message'])
+ xbmc.log("Crunchyroll.bundle ----> Error
restarting session. Error message was: "+ str(request['message']))
self.userData = userData
userData.Save()
return False
@@ -253,20 +257,28 @@ class CrunchyJSON:
options = {'media_types':"anime|drama",
'fields':fields}
request = self.makeAPIRequest('queue', options)
if request['error'] is False:
- print"Crunchyroll.bundle ----> A valid
session was detected. Using existing session_id of: "+
str(userData['session_id'])
+ xbmc.log("Crunchyroll.bundle ----> A
valid session was detected. Using existing session_id of: "+
str(userData['session_id']))
+ #Call for Usage Reporting
+ if current_datetime >
userData['lastreported']:
+ userData['lastreported'] =
(current_datetime + dateutil.relativedelta.relativedelta( hours = +24 ))
+ self.userData = userData
+ self.usage_reporting()
#Verify user is premium
if userData['premium_type'] in
'anime|drama|manga':
- print"Crunchyroll.bundle ---->
User is a premium "+str(userData['premium_type'])+" member."
+ xbmc.log("Crunchyroll.bundle
----> User is a premium "+str(userData['premium_type'])+" member.")
self.userData = userData
userData.close()
return True
else:
- print"Crunchyroll.bundle ---->
User is not premium."
- self.userData = userData
+ xbmc.log("Crunchyroll.bundle
----> User is not premium.")
+
xbmc.executebuiltin('Notification('+notice_msg+','+acc_type_error+',5000)')
+ self.userData = userData = None
userData.close()
- return True
+
crunchy_main.UI().addItem({'Title':acc_type_error, 'mode':'Fail'})
+
crunchy_main.UI().endofdirectory('none')
+ return False
elif request['error'] is True:
- print"Crunchyroll.bundle ---->
Something in the login process went wrong."
+ xbmc.log("Crunchyroll.bundle ---->
Something in the login process went wrong.")
del userData['session_id']
del userData['auth_expires']
del userData['premium_type']
@@ -285,7 +297,7 @@ class CrunchyJSON:
del userData['premium_type']
del userData['auth_token']
del userData['session_expires']
- print"Crunchyroll.bundle ----> Something in the login
process went wrong."
+ xbmc.log("Crunchyroll.bundle ----> Something in the
login process went wrong.")
self.userData = userData
userData.close()
return False
@@ -317,7 +329,6 @@ class CrunchyJSON:
def list_categories(self, title, media_type, filterx):
options = {'media_type':media_type.lower()}
request = self.makeAPIRequest('categories', options)
- #print request
if request['error'] is False:
if filterx == 'genre':
if 'genre' in request['data']:
@@ -344,12 +355,11 @@ class CrunchyJSON:
else:
for collection in request['data']:
complete = '1' if
collection['complete'] else '0'
-
crunchy_main.UI().addItem({'Title':collection['name'].encode("utf8"),'filterx':series_name.encode("utf8"),'mode':'list_media','count':str(count),'id':collection['collection_id'],'plot':collection['description'].encode("utf8"),'complete':complete,'season':str(collection['season'])
, 'series_id':series_id,'Thumb':thumb, 'Fanart_Image':fanart}, True)
+
crunchy_main.UI().addItem({'Title':collection['name'].encode("utf8"),'filterx':series_name,'mode':'list_media','count':str(count),'id':collection['collection_id'],'plot':collection['description'].encode("utf8"),'complete':complete,'season':str(collection['season'])
, 'series_id':series_id,'Thumb':thumb, 'Fanart_Image':fanart}, True)
crunchy_main.UI().endofdirectory('none')
####################################################################################################
def list_media(self, collection_id, series_name, count, complete,
season, fanart):
- #print art
sort = 'asc' if complete is '1' else 'desc'
fields =
"media.episode_number,media.name,media.description,media.media_type,media.series_name,media.available,media.available_time,media.free_available,media.free_available_time,media.playhead,media.duration,media.url,media.screenshot_image,image.fwide_url,image.fwidestar_url,series.landscape_image,image.full_url"
options = {'collection_id':collection_id, 'fields':fields,
'sort':sort, 'limit':'256'}
@@ -359,11 +369,7 @@ class CrunchyJSON:
####################################################################################################
def list_media_items(self, request, series_name, season, mode, fanart):
- #print request
for media in request:
-
- #print media
- #print art
#The following are items to help display Recently
Watched and Queue items correctly
season = media['collection']['season'] if mode ==
"history" else season
series_name = media['series']['name'] if mode ==
"history" else series_name
@@ -438,7 +444,6 @@ class CrunchyJSON:
thumb = '' if (series['portrait_image'] is
None or series['portrait_image']['large_url'] is None or 'portrait_image' not
in series or 'large_url' not in series['portrait_image']) else
series['portrait_image']['full_url'] #Becuase not all series have a thumbnail.
art = '' if (series['landscape_image'] is
None or series['landscape_image']['full_url'] is None or 'landscape_image' not
in series or 'full_url' not in series['landscape_image']) else
series['landscape_image']['full_url'] #Becuase not all series have art.
- #print art
rating = '0' if (series['rating'] == '' or
'rating' not in series) else series['rating'] #Because Crunchyroll seems to
like passing series without ratings
if ('media_count' in series and
'series_id' in series and 'name' in series and series['media_count'] > 0):
#Because Crunchyroll seems to like passing series without these things
crunchy_main.UI().addItem({'Title':series['name'].encode("utf8"),'mode':'list_coll',
'series_id':series['series_id'], 'Thumb':thumb, 'Fanart_Image':art,
'plot':description, 'year':year}, True)
@@ -479,7 +484,6 @@ class CrunchyJSON:
json_data =
gzip.GzipFile(fileobj=StringIO.StringIO(json_data)).read().decode('utf-8','ignore')
req.close()
request = json.loads(json_data)
- #print request
if int(resumetime) > 0:
playcount=0
else:
@@ -506,10 +510,14 @@ class CrunchyJSON:
else:
url = allurl['low']
playlist.add(url, item)
- xbmc.Player().play(playlist)
+ player = xbmc.Player()
+ player.play(playlist)
+ #xbmc.Player().play(playlist)
timeplayed = 1 + int(resumetime)
temptimeplayed = timeplayed
time.sleep(1)
+ if timeplayed < 60:
+ playback_resume = False
if playback_resume is True:
xbmc.Player().seekTime(float(resumetime))
x = 0
@@ -522,36 +530,34 @@ class CrunchyJSON:
strTimePlayed =
str(int(round(timeplayed)))
values =
{'session_id':session_id, 'event':'playback_status',
'locale':self.userData['API_LOCALE'], 'media_id':media_id, 'version':'221',
'playhead':strTimePlayed}
request =
self.makeAPIRequest('log', values)
- #print request
else:
x = x + 1
time.sleep(1)
except:
- print "XBMC stopped playing"
+ xbmc.log( "XBMC stopped playing")
strTimePlayed = str(int(round(timeplayed)))
values = {'session_id':session_id,
'event':'playback_status', 'locale':self.userData['API_LOCALE'],
'media_id':media_id, 'version':'221', 'playhead':strTimePlayed}
request = self.makeAPIRequest('log', values)
- #print request
-
def makeAPIRequest(self, method, options):
- print "Crunchyroll.bundle ----> get JSON"
- values = {'session_id':self.userData['session_id'],
'version':self.userData['API_VERSION'], 'locale':self.userData['API_LOCALE']}
- values.update(options)
- opener = urllib2.build_opener()
- opener.addheaders = self.userData['API_HEADERS']
- options = urllib.urlencode(values)
- #print options
- urllib2.install_opener(opener)
- url = self.userData['API_URL']+"/"+method+".0.json"
- #print url
- req = opener.open(url, options)
- json_data = req.read()
- if req.headers.get('content-encoding', None) == 'gzip':
- json_data =
gzip.GzipFile(fileobj=StringIO.StringIO(json_data)).read().decode('utf-8','ignore')
- req.close()
- #print json_data
- return json.loads(json_data)
+ if self.userData['premium_type'] in 'anime|drama|manga':
+ xbmc.log( "Crunchyroll.bundle ----> get JSON")
+ values = {'session_id':self.userData['session_id'],
'version':self.userData['API_VERSION'], 'locale':self.userData['API_LOCALE']}
+ values.update(options)
+ opener = urllib2.build_opener()
+ opener.addheaders = self.userData['API_HEADERS']
+ options = urllib.urlencode(values)
+ urllib2.install_opener(opener)
+ url = self.userData['API_URL']+"/"+method+".0.json"
+ req = opener.open(url, options)
+ json_data = req.read()
+ if req.headers.get('content-encoding', None) == 'gzip':
+ json_data =
gzip.GzipFile(fileobj=StringIO.StringIO(json_data)).read().decode('utf-8','ignore')
+ req.close()
+ return json.loads(json_data)
+ else:
+ return False
+
###############################################################################â#####################
@@ -566,20 +572,18 @@ class CrunchyJSON:
notice_done = local_string(30310).encode("utf8")
icon = xbmc.translatePath( __settings__.getAddonInfo('icon'))
if (self.userData['username'] != '' and
self.userData['password'] != ''):
- print "Crunchyroll.language: --> Attempting to log-in with
your user account..."
+ xbmc.log( "Crunchyroll.language: --> Attempting to log-in
with your user account...")
xbmc.executebuiltin('Notification('+notice+','+notice_msg+',5000,'+icon+')')
url = 'https://www.crunchyroll.com/?a=formhandler'
data = urllib.urlencode({'formname':'RpcApiUser_Login',
'next_url':'','fail_url':'/login','name':self.userData['username'],'password':self.userData['password']})
opener =
urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('Referer',
'https://www.crunchyroll.com'),('User-Agent','Mozilla/5.0 (X11; Linux i686;
rv:5.0) Gecko/20100101 Firefox/5.0')]
- # print "Crunchyroll.language: --> Saving new Cookie."
urllib2.install_opener(opener)
req = opener.open(url, data)
req.close()
else:
xbmc.executebuiltin('Notification('+notice+','+notice_err+',5000,'+icon+')')
- print "Crunchyroll.language: --> NO CRUNCHYROLL ACCOUNT
FOUND!"
- # print "Crunchyroll.language: --> logged in"
+ xbmc.log( "Crunchyroll.language: --> NO CRUNCHYROLL
ACCOUNT FOUND!")
url = 'https://www.crunchyroll.com/?a=formhandler'
data =
urllib.urlencode({'next_url':'','language':self.userData['API_LOCALE'],'formname':'RpcApiUser_UpdateDefaultSoftSubLanguage'})
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
@@ -591,18 +595,16 @@ class CrunchyJSON:
#Now do the actual language change.
req = self.opener.open(url, data)
req.close()
- print 'Crunchyroll.language: --> Now using
'+self.userData['API_LOCALE']
+ xbmc.log( 'Crunchyroll.language: --> Now using
'+self.userData['API_LOCALE'])
xbmc.executebuiltin('Notification('+notice+','+notice_done+',5000,'+icon+')')
- print "Crunchyroll.language: --> Disabling the force change
language setting."
+ xbmc.log( "Crunchyroll.language: --> Disabling the force
change language setting.")
__settings__.setSetting(id="change_language", value="0")
def usage_reporting(self):
import cookielib
cj = cookielib.LWPCookieJar()
- print "Crunchyroll.usage: --> Attempting to report usage"
+ xbmc.log( "Crunchyroll.usage: --> Attempting to report usage")
url =
'https://docs.google.com/forms/d/1_qB4UznRfx69JrGCYmKbbeQcFc_t2-9fuNvXGGvl8mk/formResponse'
-
- #print 'entry_1580743010' + self.userData['device_id'] +
'entry_623948459' + self.userData['premium_type'] + 'entry_1130326797' +
__version__ + 'entry.590894822' + str(__XBMCBUILD__)
data =
urllib.urlencode({'entry_1580743010':self.userData['device_id'],'entry_623948459':self.userData['premium_type'],'entry_1130326797':__version__,'entry.590894822':__XBMCBUILD__})
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent','Mozilla/5.0 (X11; Linux
i686; rv:5.0) Gecko/20100101 Firefox/5.0')]
diff --git a/plugin.video.crunchyroll-takeout/resources/lib/crunchy_main.py
b/plugin.video.crunchyroll-takeout/resources/lib/crunchy_main.py
index 8bca0a2..57eb7bb 100644
--- a/plugin.video.crunchyroll-takeout/resources/lib/crunchy_main.py
+++ b/plugin.video.crunchyroll-takeout/resources/lib/crunchy_main.py
@@ -72,8 +72,7 @@ class UI:
info.setdefault('year','0')
info.setdefault('playhead','0')
info.setdefault('duration','0')
- info.setdefault('plot','No description available.')
- #print info
+ info.setdefault('plot','None')
#create params for xbmcplugin module
u = sys.argv[0]+\
'?url='+urllib.quote_plus(info['url'])+\
@@ -92,9 +91,8 @@ class UI:
'&year='+urllib.quote_plus(info['year'])+\
'&playhead='+urllib.quote_plus(info['playhead'])+\
'&duration='+urllib.quote_plus(info['duration'])+\
- '&plot='+urllib.quote_plus(info['plot'])
+ '&plot='+urllib.quote_plus(info['plot']+'%20')
#create list item
- #print u
li=xbmcgui.ListItem(label = info['Title'], thumbnailImage =
info['Thumb'])
li.setInfo( type="Video", infoLabels={ "Title":info['Title'],
"Plot":info['plot'], "Year":info['year']})
li.setProperty( "Fanart_Image", info['Fanart_Image'])
@@ -128,6 +126,7 @@ class UI:
self.addItem({'Title':Anime,
'mode':'Channels','showtype':'Anime'})
self.addItem({'Title':Drama,
'mode':'Channels','showtype':'Drama'})
self.endofdirectory()
+
def channels(self):
local_string = __settings__.getLocalizedString
@@ -170,19 +169,19 @@ class UI:
def Fail(self):
local_string = __settings__.getLocalizedString
badstuff = local_string(30207).encode("utf8")
- self.addItem({'Title':badstuff,'mode':'none'})
- print "Crunchyroll takeout --> crunchy_main.py checkMode fall
through"
+ self.addItem({'Title':badstuff,'mode':'Fail'})
+ xbmc.log( "Crunchyroll takeout --> crunchy_main.py checkMode
fall through")
self.endofdirectory()
class Main:
def __init__(self, checkMode = True):
crunchy_json.CrunchyJSON().loadShelf()
- self.parseArgs()
- if checkMode:
- self.checkMode()
-
-
+ self.parseArgs()
+ if checkMode:
+ self.checkMode()
+
+
def parseArgs(self):
# call updateArgs() with our formatted argv to create the
self.args object
if (sys.argv[2]):
-----------------------------------------------------------------------
Summary of changes:
plugin.video.crunchyroll-takeout/CHANGELOG.txt | 2 +
plugin.video.crunchyroll-takeout/README.md | 3 +-
plugin.video.crunchyroll-takeout/addon.xml | 4 +-
plugin.video.crunchyroll-takeout/default.py | 4 +-
.../resources/language/English/strings.po | 4 +
.../resources/lib/crunchy_json.py | 172 ++++++++++----------
.../resources/lib/crunchy_main.py | 21 ++--
.../lib/dateutil/zoneinfo/zoneinfo-2010g.tar.gz | Bin 0 -> 171995 bytes
8 files changed, 108 insertions(+), 102 deletions(-)
create mode 100644
plugin.video.crunchyroll-takeout/resources/lib/dateutil/zoneinfo/zoneinfo-2010g.tar.gz
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons