From eef39b01170ba8da1a2829a8e9a4f55aff6fba16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Wed, 8 Feb 2017 17:25:41 +0100 Subject: [PATCH 01/23] /fetchlibrary: Simkl to Kodi (Movies) --- .gitignore | 1 + addon.xml | 6 +-- resources/data/compdate.txt | 2 +- resources/lib/engine.py | 76 +++++++++++++++++++------------------ resources/lib/simklapi.py | 16 +++++++- service.py | 7 ++-- tozip.sh | 29 +++++++++++--- 7 files changed, 85 insertions(+), 52 deletions(-) diff --git a/.gitignore b/.gitignore index 97c83b6..7844917 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,4 @@ ENV/ .ropeprojectKodi.rar script\.simkl\.zip +.bak diff --git a/addon.xml b/addon.xml index e899dcb..c16fefd 100644 --- a/addon.xml +++ b/addon.xml @@ -1,10 +1,10 @@ - + @@ -21,7 +21,7 @@ https://github.com/SIMKL/script.simkl resources/icon.png - resources/fanart.png + resources/fanart.jpg en diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 83f0026..3099a11 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1 @@ -2017-01-28 17:22:32+01:00 +2017-02-08 16:50:21+01:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index f435ba4..d97d095 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -13,45 +13,49 @@ def __init__(self, api, player): self.player = player player.engine = self player.api = api - self.synclibrary() def synclibrary(self): - ### UPLOAD ### - #DISABLED UNTIL WORKING FINE - pass - # kodilibrary = xbmc.executeJSONRPC(json.dumps({ - # "jsonrpc": "2.0", - # "method": "VideoLibrary.GetMovies", - # "params": { - # "limits": { - # "start": 0, - # "end": 1000 - # }, - # "properties": [ - # "playcount", - # "imdbnumber", - # "file", - # "lastplayed" - # ], - # "sort": { - # "order": "ascending", - # "method": "label", - # "ignorearticle": True - # } - # }, - # "id": "libMovies" - # })) - # xbmc.log("Simkl: Ret: {0}".format(kodilibrary)) - # kodilibrary = json.loads(kodilibrary) - - # if kodilibrary["result"]["limits"]["total"] > 0: - # for movie in kodilibrary["result"]["movies"]: - # #Dont do that, upload all at once + xbmc.log("Simkl: Syncing library (Simkl to Kodi)") + kodilibrary = xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.GetMovies", + "params": { + "limits": { + "start": 0, + "end": 1000 + }, + "properties": [ + "playcount", + "imdbnumber", + "file", + "lastplayed" + ], + "sort": { + "order": "ascending", + "method": "label", + "ignorearticle": True + } + }, + "id": "libMovies" + })) + kodilibrary = json.loads(kodilibrary) + if kodilibrary["result"]["limits"]["total"] > 0: + for movie in kodilibrary["result"]["movies"]: + ### DOWNLOAD FROM KODI + #Separate big list in chunks + if self.api.check_if_watched(movie): + xbmc.log("Simkl: {0}".format(movie)) + ret = xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": { + "playcount":max(movie["playcount"], 1), + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) + xbmc.log(ret) - # if movie["playcount"] > 0: - # imdb = movie["imdbnumber"] - # date = movie["lastplayed"] - # self.api.watched(imdb, "movie", date) class Player(xbmc.Player): def __init__(self): diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 5a87212..74a24a8 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -13,7 +13,7 @@ __addon__ = interface.__addon__ def getstr(strid): return interface.getstr(strid) -REDIRECT_URI = "http://simkl.com" +REDIRECT_URI = "https://simkl.com/apps/kodi/connected" USERFILE = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"), "simkl_key") xbmc.translatePath("special://profile/simkl_key") @@ -128,7 +128,8 @@ def lock(self, fname, duration): def is_locked(self, fname): exp = self.scrobbled_dict if not (fname in exp.keys()): return 0 - xbmc.log("Time: {0}, exp: {1}, Dif: {2}".format(int(time.time()), exp[fname], int(exp[fname]-time.time()))) + xbmc.log("Time: {0}, exp: {1}, Dif: {2}".format(int(time.time()), + exp[fname], int(exp[fname]-time.time()))) #When Dif reaches 0, scrobble. if time.time() < exp[fname]: xbmc.log("Simkl: Can't scrobble, file locked (alredy scrobbled)") @@ -193,6 +194,17 @@ def watched(self, filename, mediatype, duration, date=time.strftime('%Y-%m-%d %H xbmc.log("Simkl: Can't scrobble. User not logged in or file locked") return 0 + def check_if_watched(self, item): + con = httplib.HTTPSConnection("api.simkl.com") + values = json.dumps([{ + "type":"movie", + "imdb": item["imdbnumber"] + }]) + con.request("GET", "/sync/watched", body=values, headers=headers) + r1 = con.getresponse().read() + xbmc.log("Simkl: {}".format(r1)) + return json.loads(r1)[0]["result"] + api = API() if __name__ == "__main__": if sys.argv[1] == "login": diff --git a/service.py b/service.py index 56c9b03..8d3a423 100644 --- a/service.py +++ b/service.py @@ -33,10 +33,6 @@ def getstr(strid): return __addon__.getLocalizedString(strid) player = engine.Player() player.addon = __addon__ eng = engine.Engine(API.api, player) - #Remember: if getTime() is more than x% scrobble file - - #Testing: - #API.api.login() if not API.api.is_user_logged(): API.api.login() #Add "remind me tomorrow button" @@ -44,6 +40,9 @@ def getstr(strid): return __addon__.getLocalizedString(strid) else: interface.notify(getstr(32025).format(API.api.USERSETTINGS["user"]["name"])) + #Only for testing purposes: + eng.synclibrary() + #__addon__.openSettings() while not monitor.abortRequested(): if monitor.waitForAbort(90): diff --git a/tozip.sh b/tozip.sh index e17fe3d..aa8257d 100755 --- a/tozip.sh +++ b/tozip.sh @@ -1,10 +1,27 @@ #!/bin/bash #Creates a zip file compatible with Kodi -date --rfc-3339=seconds > resources/data/compdate.txt -mkdir script.simkl -rm script.simkl.zip +if [ "$1" == "zip" ]; then + date --rfc-3339=seconds > resources/data/compdate.txt + mkdir script.simkl + rm script.simkl.zip -rsync -rv --progress ./ ./script.simkl --exclude-from .gitignore --exclude tozip.sh -zip -rx@.gitignore script.simkl.zip script.simkl/* -x script.simkl/script.simkl/ -rm -Rf script.simkl \ No newline at end of file + rsync -rv --progress ./ ./script.simkl --exclude-from .gitignore --exclude tozip.sh + zip -rx@.gitignore script.simkl.zip script.simkl/* -x script.simkl/script.simkl/ + rm -Rf script.simkl +elif [ "$1" == "pull" ]; then + #Remember. It should've been checkout before + REPO="/home/$USER/Documentos/repo-scripts/script.simkl" + rm -Rf $REPO/* $REPO/.* + rsync -rv --progress ./ $REPO --exclude-from .gitignore --exclude tozip.sh --exclude script.simkl.zip --exclude ".git*" + echo + ls -a --color=auto $REPO +elif [ "$1" == "bak" ]; then + #Workaround. Use rsync or unison first pls + BAKDATE="$(date '+%F %T')" + echo $BAKDATE + zip -r ".bak/$BAKDATE" ./* -x .bak +else + echo "$1 Does nothing" +fi +exit \ No newline at end of file From e8afdfe2a6d61e6e5216c71467944c9a58f581b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Sat, 11 Feb 2017 18:30:38 +0100 Subject: [PATCH 02/23] /fetchlibrary: Simkl to Kodi (TV Shows) --- .gitignore | 1 - addon.xml | 2 +- resources/data/compdate.txt | 2 +- resources/lib/engine.py | 127 ++++++++++++++++++++++++++++++------ resources/lib/interface.py | 2 +- resources/lib/simklapi.py | 39 +++++++---- script.simkl.zip | Bin 0 -> 380957 bytes service.py | 4 +- tozip.sh | 10 ++- 9 files changed, 146 insertions(+), 41 deletions(-) create mode 100644 script.simkl.zip diff --git a/.gitignore b/.gitignore index 7844917..0ee6228 100644 --- a/.gitignore +++ b/.gitignore @@ -91,5 +91,4 @@ ENV/ # Rope project settings .ropeprojectKodi.rar -script\.simkl\.zip .bak diff --git a/addon.xml b/addon.xml index c16fefd..ac293a7 100644 --- a/addon.xml +++ b/addon.xml @@ -1,7 +1,7 @@ diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 3099a11..5c7dd28 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1 @@ -2017-02-08 16:50:21+01:00 +2017-02-11 18:25:32+01:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index d97d095..8cd0122 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -16,33 +16,38 @@ def __init__(self, api, player): def synclibrary(self): xbmc.log("Simkl: Syncing library (Simkl to Kodi)") - kodilibrary = xbmc.executeJSONRPC(json.dumps({ + + todump = { "jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": { - "limits": { - "start": 0, - "end": 1000 - }, - "properties": [ - "playcount", - "imdbnumber", - "file", - "lastplayed" - ], - "sort": { - "order": "ascending", - "method": "label", - "ignorearticle": True - } + "limits": { + "start": 0, + "end": 1000 + }, + "properties": [ + "playcount", + "imdbnumber", + "file", + "lastplayed" + ], + "sort": { + "order": "ascending", + "method": "label", + "ignorearticle": True + } }, "id": "libMovies" - })) + } + kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) kodilibrary = json.loads(kodilibrary) + #Use result limits total to make a percentage dialog if kodilibrary["result"]["limits"]["total"] > 0: for movie in kodilibrary["result"]["movies"]: + break ### DOWNLOAD FROM KODI #Separate big list in chunks + movie["media"] = "movie" if self.api.check_if_watched(movie): xbmc.log("Simkl: {0}".format(movie)) ret = xbmc.executeJSONRPC(json.dumps({ @@ -56,6 +61,80 @@ def synclibrary(self): })) xbmc.log(ret) + todump["method"] = "VideoLibrary.GetTVShows" + todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] + #If watchedepisodes > 0 + kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) + kodilibrary = json.loads(kodilibrary) + debug_cnt = 0 + if kodilibrary["result"]["limits"]["total"] >0: + for tvshow in kodilibrary["result"]["tvshows"]: + #if debug_cnt >= 3: break #I have a lot of TV Shows, only for testing + debug_cnt += 1 + + todump["method"] = "VideoLibrary.GetSeasons" + #todump["params"]["Library.Id"] = tvshow["tvshowid"] + todump["id"] = tvshow["tvshowid"] + todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] + seasons = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(json.dumps(tvshow)) + xbmc.log(seasons) + seasons = json.loads(seasons) + + + for season in seasons["result"]["seasons"]: + values = [] + + todump["method"] = "VideoLibrary.GetEpisodes" + todump["params"]["tvshowid"] = tvshow["tvshowid"] + todump["params"]["season"] = season["season"] + todump["params"]["properties"] = ["title", "rating", "playcount", + "season", "episode", "showtitle", "lastplayed", "tvshowid"] + + episodes = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(episodes) + episodes = json.loads(episodes) + + if episodes["result"]["limits"]["total"] > 0: + for episode in episodes["result"]["episodes"]: + values.append({ + "type": "tv", + "season": episode["season"], + "episode": episode["episode"], + "title": episode["showtitle"], + "tvdb": tvshow["imdbnumber"] + }) + + watched = self.api.check_if_watched(values, False) + xbmc.log(json.dumps(watched)) + + for i, episode in enumerate(episodes["result"]["episodes"]): + toupdate = { + "jsonrpc": "2.0", + "method": "VideoLibrary.SetEpisodeDetails", + "params": { + "episodeid":episode["episodeid"], + "playcount": int(watched[i]["result"]), + }, + "id": "libMovies" + } + try: + toupdate["params"]["lastplayed"] = watched[i]["last_watched"] + except KeyError: + toupdate["params"]["lastplayed"] = "" + + info = xbmc.executeJSONRPC(json.dumps(toupdate)) + xbmc.log("Simkl: Info: {0}".format(info)) + + del todump["params"]["tvshowid"] + del todump["params"]["season"] + + #series = self.api.get_all_items("shows") + #xbmc.log(series) + + xbmc.log("Simkl: Finished syncing library") + interface.notify("Finished syncing library") + class Player(xbmc.Player): def __init__(self): @@ -84,13 +163,19 @@ def onPlayBackResumed(self): def onPlayBackEnded(self): xbmc.log("Simkl: ONPLAYBACKENDED") self.onPlayBackStopped() + def onPlayBackStopped(self): - '''Gets the info needed to pass to the api''' + """ Gets the info needed to pass to the api """ try: movie = self.getVideoInfoTag() - thing = xbmc.executeJSONRPC(json.dumps({"jsonrpc": "2.0", "method": "Player.GetItem", - "params": { "properties": [ "showtitle", "title", "season", "episode", "file", "imdbnumber", "genre" ] - , "playerid": 1 }, "id": "VideoGetItem"})) + thing = xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "Player.GetItem", + "params": { + "properties": [ "showtitle", "title", "season", "episode", "file", "imdbnumber", "genre" ], + "playerid": 1 }, + "id": "VideoGetItem" + })) xbmc.log("Simkl: Full: {0}".format(thing)) item = json.loads(thing)["result"]["item"] #imdb = movie.getIMDBNumber().strip(" ") diff --git a/resources/lib/interface.py b/resources/lib/interface.py index a551335..7f3d088 100644 --- a/resources/lib/interface.py +++ b/resources/lib/interface.py @@ -100,4 +100,4 @@ def onAction(self, action): def onClick(self, controlID): xbmc.log("Simkl: onclick {0}, {1}".format(controlID, self)) if controlID == CANCEL_BUTTON: - self.canceled = True \ No newline at end of file + self.canceled = True diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 74a24a8..751b02f 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -2,8 +2,6 @@ # -*- coding: UTF-8 -*- import sys, os, time -#import urllib -#import request import json import xbmc @@ -59,6 +57,7 @@ def __init__(self): self.internet = False def login(self): + """ Logins the API class to Simkl """ url = "/oauth/pin?client_id=" url += APIKEY + "&redirect=" + REDIRECT_URI @@ -139,7 +138,8 @@ def is_locked(self, fname): del exp[fname] return 0 - def watched(self, filename, mediatype, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0): #OR IDMB, member: only works with movies + def watched(self, filename, mediatype, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0): + """ Filename can also be an imdb number """ filename = filename.replace("\\", "/") if self.is_user_logged() and not self.is_locked(filename): try: @@ -194,16 +194,31 @@ def watched(self, filename, mediatype, duration, date=time.strftime('%Y-%m-%d %H xbmc.log("Simkl: Can't scrobble. User not logged in or file locked") return 0 - def check_if_watched(self, item): + def get_all_items(self, mediatype): + """ + mediatype can be 'shows', 'movies' or 'anime' + http://docs.simkl.apiary.io/#reference/sync/last-activities/get-all-items-in-the-user's-watchlist + """ con = httplib.HTTPSConnection("api.simkl.com") - values = json.dumps([{ - "type":"movie", - "imdb": item["imdbnumber"] - }]) - con.request("GET", "/sync/watched", body=values, headers=headers) - r1 = con.getresponse().read() - xbmc.log("Simkl: {}".format(r1)) - return json.loads(r1)[0]["result"] + con.request("GET", "/sync/all-items/{0}?extended=full".format(mediatype), headers=headers) + return con.getresponse().read() + + def check_if_watched(self, item, movie=True): + """ Checks if an item has been watched """ + con = httplib.HTTPSConnection("api.simkl.com") + if movie: + values = json.dumps([{ + "type": item["media"], + "imdb": item["imdbnumber"] + }]) + con.request("GET", "/sync/watched", body=values, headers=headers) + r1 = con.getresponse().read() + xbmc.log("Simkl: {}".format(r1)) + return json.loads(r1)[0]["result"] + else: + values = json.dumps(item) + con.request("GET", "/sync/watched", body=values, headers=headers) + return json.loads(con.getresponse().read()) api = API() if __name__ == "__main__": diff --git a/script.simkl.zip b/script.simkl.zip new file mode 100644 index 0000000000000000000000000000000000000000..5f89e38e12bcd707d2df96ecd74d4f0b09012cff GIT binary patch literal 380957 zcmaHxL$oLgjBJl>+qP}nxW~3_+qP}nwr$(C{`=WunfLGi zmy0_z03gUYFaQ9E@qc}GRAy|K84!BkD8+j1Eshq^APcM~rBKTYMJ2Wzg@kt9U5!@x z2V5I>&JGdX8OdDPWzmf1+=&;u3ZQ4@cFWP zOb`m|mCVf?2H-H(U0jr)D04tb(P@@-TN)rHuUWVQzMBRS+*#lE52$(E74PQd4>khq zBA=SDuges!bm~Yxn`9h_$ALV5e?f7O2&*8pJij+6;|ioAN|JR{^0Z~OyRDY3`C{d?6}ndU8TLiiP`HiV}wD01UBZBTOt^!6oL zQNfDhiJ;ifaJY=ZQJOKxVp3H-G^;kdUNnosdLm(I>+M8>gRXQvrp-Se

K`4eWtisW>W04Lm`LgakY?XRC5rmW9E@*d099 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

u7>w8Z8W}R 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%0A6}9s`)MapcvJ{|UzL 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

$!;VevcX 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⁣*o;+=NX4tWlg&~7N!g(Yj%VFy)!Fo`~zMmg^ z-d6hWo0-ds*cpa=FjS41^v%G}5})5Oob~Hw!pHMNcL4#?xQT4F`d%WZiIF4pS2;c( zIKg;OSZ|#d@*E4oX!e8(G#QZ;ncmEB#X4N*z5!3=Yc2zle08UFO#p`#z@mYSR)K(J z0@%NsdSzw?DjfFirW3xXFsMqWXRr}cqBlQa8?^Et7|PO%rzL}D0{0Eq)?f?>AOsntV1*u=KgU(x8n|;5jG#VD+ z9)(;UgWwXRSI)$;T;^UomI9~1Iw zs&qNULgZi*1?K^BO$=WHzwqUa%o111g(HVTd|YX^LGJQ<_=nH7qyv88nXf`BJa*n< zBA?R&yE0NSW0azwv$l!|NBGc#D(t7+IB^!4^a}G|sI;OXe6YTVv{fu;5n}0NH;wm( zpncd!FQH9TY2vIGU9GT1q{=7ydePkFuVT>P*aFyG+s2tPn2hLAJ*#xUf6V6KKdy&x8Kz_vT6SB7usgWDF+fvY9<3N|o8c%G<%;Bft7gN16{?nL0#riGkE|ZCCEF1RF7HFg zaycH^;QhtmCaz-Av-2LemEERPTmgKW?i?YM@Jd9`bYena|5`?&j&KBasc~dtDxRIv z$h=$B%DZ)RlM#h$57=`Ntux`DqZJ-8i#_Zd|4JZSdI>HB_f(U9(}%&2;Zq>ti%}BR zTRC~Av_Gezq*>I!S(V$Kj`!NYK8o(cn*AC$Urk0yM^PXe~Er5BC!Kki3G|HgM5 zSfCsju0D9VRG`2Po8y__%+IBq;pq`H=DSm+8%1fE6`bwnMxz@wh%qW;7{h8*jTnB6 zGX1)BiDP}J)-`0#w=TUuAeb6PX4j$#`q~~9@YW~`9+B9?Zk4j5-iXMni6NbQ6?500 z$X!nFpCfE9!mG{|uUn->9igTB-`k--mYCn^ryUr*F){+N?$fG0yK?B&+b@74N`c6Z zVb9k{_)^h$k{GpfIwKRt@2Yk=cKq(eNExT2G3BU9bv?OPzd#xmOO?d3(7cM*>c*c7 zX=DP`%K6D{%s;HTJqFR$VbJX%n{L2Cpei&gMwfD#*NV}8F~W#XfMcKK12n1#im}-d zJV(3Lm#2-{39~7hzU<*O8);+>c$RqijE`M@VLpb&RydL&fg}HRphR+BUVl%W2X)@= zW>v4iAVEF<@!WJ)0 z!39p}2^t;34%YGny|rEmG>P4yRpojLG>%-cy3e-$6lPVtoTCYcEWB9*#K)oP>ZwY1 zw`O*tzU+K{hyC0ZFEP)$<{(l?cN?`chaNLB){4e=XLU09HV$zx#o= z!%O;WoEoo7_ek@07goupQN>r614qu5&i(YO04+JG?tm(kVuw04Qus>ia^zvqnAQ_j z*w6)SM$PY)1a^=y$*($s))n1JW>$R&DiYVX{(zgAp9XGaTu3k&vho zXlf>kOPg~7-yf4yWd5}ayg^VY_W_Xh`8?B~mnUyRL<(Ek>er^#-r92?s4# zT6sxaoVKJ40(s|DhItTWG}Vz5#A# zCOyJm==wUNz+ctVIMO-2F*Vyhg%z;osz#tQ4pH4_L}8=d1bH+HFVT929n=*Y_pQ(f zkl~V$iyHSVSKKfwv5Ocd3e$mobG2$!~yZ-=27U8Qs#r6vs0&1jSRcHWy`eg`GpCs#@< zr|iwMJolT6F~tX5=1^}nOuXwA;~(*!ERf|>ih>K!6jH5-ZTZl)na&T zDF1G>J@;vDD~%&DG*Kk|i%DkD$KV2zk*hr>2VHfypFn1W5nu$G57(ZvN+|$&#e%^U z?5EyloFXCaiIzv{th~cuV&*~_JGYK7rQGu-T~MF_aVYM*7a0eT8HTJm@eMa)H^EG` z{(^mE$Z6I50v~@uWwKl5Uv$&_t?ya+;#aT|i3Rq+~j;L}8vw|-&^EFk(h zYR*)rlbs=B<`9EctiTWi)(*@T-B0m*ny5Icb0gkfjTO5hdG#JDLnsBPyzbUqhKn1mgVaQ-o&9IgEbPalQ=R>#EXxF|-}5?Wdk;eu}D zRj6LE!o4ZIY3p9ujecsf`aaZ>BXPC*h*slo;nLM(9Au$iUI+u3aC*#(rr|K$!PO2e zSsK#JKWZ7=ys3Enr3S`WRDb(k7*MqGK{m@6ZnCgv>`SBU0m@pW5ezjJ$&3ot9l^L>ALnyMz^>l>%||O2KG}F8Io1DV`SyHpqAq7D0kG zwe_y`$ilrlAnZ{wyRt3n{?yrLznnrrxmFj7R<3leDFQ?I1};5A9J^!sPT?YfWM(FW z;-Y3`H?jlLaPe+-a|j{r8H8npJ49cP1mW7XI6(TM)QadSGC;7ogC)v1oyM!lj(*V5 zHZKeAVxURfF$r~$NXQvPtm<2_KytL61s?90UT)tNrHh27S(SOGWnSYYD1GvTIiOGQ z8qLHi?fB`#xGGK<_K>#LdcWA@(%;qIDPNK9AidsF8PN?anf3sNnFv3 z3|^ga9RnV|Bgc_GD|!-BIllm_`xmB%Dx&Qo+W5fIEbI3YN{L$@r=)feia@zi z=yW@IB<%ZNsn4#&)c%4~g7c|fT-i^rbIHzmU>YC)mCzP+LQT@hBDUE$!11roGL#+V6q+xLbfp@$CiUkCz zIJJ94r*eqEZr!0--KbL}_u4|6j-X$sRI&lZnM)+d1-HN%tQLw;kw3MdaX z=SDET^(pQN#jAjd=BMz8qWSjJRIwyN0D`1g3y0y-ew^>6Sv2R^3(bo`gtI>q0{JVy zM;P_Ul29@_*gtw|1V0mjLonCVb3nHp|pC{Ahs!{eHxJaVI~Cgwcq` zQZABehUFKGlyp(1t8e88<7uw{0~#h`Lu~nxSxx3_m5$}X1bMT9J5gjM8~n^W;t^4~ zr?PIryHlZ|xCg+?y5LZd`Hsl`0U4hF#+0Eh0!9TR#>*LaWO4oF4@L(ze@NxI7 z$hr`0UaH@Obg)}~A$Ky(S3p+QBqo2mX3s;Y9P}f!Y+go)NO42c34u@+9pmlTE%$m= z@r-p_k@_GezcKT$dba=%Xh>5{LFB|h)GuZtoRnUi3v@0+8Gp+wY2J&L#E__O)m(0@ za9TAsv`2kJ>Ov*brs1#Vzq$M|4zTasMGkvV9pmlW_fqcVqqxAkpR;IH^`Z++x=_DK zZ{Nrqe0O_ zjA}?F)Y~x;Nl0;V4`G$?#>YbBU|1~RQGH9{jSLhd`SeH5`Lo2qZnv_MT((ltyf=r4 zahRaFA>?HE?TRt2NYH~4azz?MEfea3kfO$ATXT)2w!g(`-TJikD!7|T_OQALA zW1UC21pl&4-WX$MzDLO6QAa(f&J-Kz6zQ{}yw4}xHEJFF?~zF%)M-0Z@?2~xiKOH< zyO+C8O-x_jWB9r(s0sCqpU_#%HAEm8`Pr9*jW)KV>76iMSQHt1pe0+o>VS4K-W<X;5}`3IOq zkm#{3$WgpUN1yB9!2Jj^v;9z;ln(P`np(}|J5K1Vpurq&R4Ry*4Kx|6>&NTX^oIFp8= zNG;(oTxZ2Mk_?W$Z0B=cillX*+4-u3$9YCBepe6|1|0T1#rwRne#rr{U$D-|*L1)Pg;4ocaKY{`1<6aWoa# zFl1_JGv$6T^IAr-C2UKU^z%spvUj9V+qY-G0i8rQybs}aA3}>!Q7dX~G7Cgf9o#5` z_e@eDV}emh!SwAergNEYI};ju^a)=(io8FSd`P?XT}UQfqfF~y>$d^AP*`DP{rbqQ z^6L{OF{n^pRYS17wUVMvy*O@jtJVQ$VI)b6ysGt*Sm=cvzi|&=vPAdYZ)YDyUtGi-4kEU!%AnS z@@Z+rO+3Iy67HhXC=t(^{+01kyw_-5auE?3&41#wsdMO3``M#>;;--IiA5IZCJi@7 zhB645+UQIYJ!rZz7=D=5XInZmk+gS&!U6A7d<<_b^FWnDfrgAbZEwqeaZ&s%AJh(-w`-L0fxz{O3-DM9LQbVKLNEh$l82L!^ z73f5&z+id{m|yy|DJISFgZ#1~fVDQ42033M7HhGvvnXF~I6!yTO`@5xf4!~U`d z3Opzc+8rO}Jtd?{l`hSzocRR`#mv;QV*4tUJTB2ONz4MnM1>jU&1tg2ldFk;r?Ln@2o|EcV|!`XV@|5YhEjG9GlQexMvptjhX*t15B)(A0cRVx&c(8j8w zHnploDXo#Hy-KYTYLD3a8}Ik$`h2hJcm4kP=6RjxJm=)O@B5ke$aSt02`t(L_U*4q zuga!CgTeU6TzX?&J4n9!*Hx1tL9aTk$)AG(21L-ivDQHA$P6Y~|HX=QT{Xwj4~_kF zW9T@5l|_Q_vg_-W321Ehdkt_|>d-?wx86G6LsYNYTT*%7%9(4ob0>)ev1>Rs(<2A` zEMhM2#$b%7ui`VsxVvZd*u~eri^oKV>Aw-oPam4pjp**Dk%fINhz$945dRw<`9jcp zQ|wOj$eq{z`5`?l%Fxo5z`rFZU~lsbE&gwS9e)^fO)|Km@$od_>@CHjy|#;fkEd#E zdSNH9XdtQUdr&z~wjD?Y#9KG`p1shnNTyV)uM+garwM;Ise&@+x)(9rI8koeHm#Jx16ID)_Q+2dlr)~Q#a=_D(_r+(4Evb2Wr zOqhIg+@^-yu3h$G58k@P{7`c;#CnHpF}7it9 ze0fb|lS~ZzZ{6^xe|@h?6jwxZU8#EGzyBqR{OMOg(1_>Vr&Zl5cHiuP*?0TN^-05i zZl_Q6Q-u4q)3(!or~MAe4S(ij=LZraB;J3jP=x&qwHGWVDD1lh6vmop7YafVKMriL z4aP@4xvjnF8dLL~wjJ_Ea69d`lVLVf>|-*N^(~2B+Q)Is{kPREPfJguUlRnduV&u{ z5@YoU~?AAoJ$wyFVg*LCXK6ry$AWwnRcB ze-KhykT!@D#Cs?@PsCPTpoMxs0D&6GOR!>_0_HQq9FMc_wk7Bj+Uy$hY2n(7nIK0u z*7ja5lB?H{1v!cv5SkLJ#{cAROsni4Wt7CX;+dtC-6HysDaqey8EAV$2_gprPD26r z(+y*j20xQgiWfbLekLN2? zz~pL-kS=6P(YZlv)&M7r*;491GTpCaUNzuee(w$Uhbq3T zdv6Ibhy?aZvbssd)9s{(0kk&lbGvtXe7OA;+nm^5>GydYUJ|+Q1gzZDr9KwEt8?=9 z_LmPofyU35Dgv+#cHF|(4*{qysTS=QJ@_PvyvFLV-e)q8m z>fIB_X;k}D3#Mz5R2)Vj{ZxO6$xSGev3rjNUl|<0x4#ce1r*>)$g7_q57EXm?)tC- z`K8!Hq=3m#3qExUtKZ8nzl1s));etmrYXLFDJ_L|Wvz#fA4VtRsU-2O94kxW-|#Qd z@5PU$^(FB&f;|r-9^gJ!y)M&L{wXL+uD*RMo4qf{Pm>rbCfAP~a5GUd@2>cPH}p;Y zk1&E<^Qmt{$5^!aj8RB-AjPir)xR0oB_C7en6SRUUoBb`5T*6ksKAd6it9>7^1`kq zcAszK$z3+++Mnb}FBW}MTC2j*T@Sq^daKh)#d+k~Ez73SEvv|LBx~Ie+V(pcop47| z*XV4C9Mo8VFF%9-Gv&U-=8p(o6sW6^3r3+#4T^X2l~*|OWsMQlo}m?n;FwOo&7wtg z3w%O<`ox^e0*rBNdQ)Y}?bfYxs>Rl8spLeaGX^ah-Cq?J%nwdemSoA?DCFLPvyy;u z2DrOp$7MdEcN=oVcW;H+TRv=93@tGka`83e0$%TL#tbJPQB6S?Z8dOlL%gqjkCWzr zSz0k(G#<>mfGKOTEqJ6PL)ud}*)4NnfmM`s8e3*kiUVu+E~T<*uhZ6yd3|lOeO(UXL$pupL2C}(iAkJ-qBHK3 za4$)s2NbT!F}|QKc~KbhdY}}pc`7g(W*eNvm8FucABQ+2L-}o7!`(T~NIpe`MsL1A zs~+jisC2LMdi93ldR`3T?j$ujY4<9y3w$1N3HUg9(*g{NDQ{qN%JNfqEQr01*nRGl z%>GPOy(KJ(XARr%ii#KX1K=Zh-r-we`qTINDE1dyhBjF~>kG-yQpDcwtVJuG1T=bc zc7ExRFSoZT8B$|emM!z!?_}14Me7*b#Gf~p{?=aiY2f0_>j!+tD9|nfFeTT+Rfyl5 zwc!amYO%s8h4r=cCv@amRr*%XJg5`_`*qT=2S0?!7OGH9v%kPoD-q#9b!0q8f7UQJ zrhW~)0!3q0S^L{z06Tt#$KiABAQZMM8Gpl0e2_}~eSgexoW81~wcA zN0CoLUuflatNhe@d5tl5H&D?(^xY$0yO?99V+|lqI)mKmr);)L@+mz1C;G+2(&Jc< z>rUymPyY@JNJQCAG$wujv0(mOTcq*P;yF9a$S9 z=S+Wed}FAeiv!hH;7dJ|N9Te6Gzmys+$DI%kyF}Bvouj6wyuR!RGfdUlaTn0B@0** z?=czpdEZoO?q7rbT`%hwS(F2KHhY)Zw0?m}Dqbxd_d&+=V_@>q*QY6QS-TCcZ%;E` zZ1kQjY$iQg{M{#8_`Sd3G#BI24h5yozogVXye~T|usDnH=j{;{D}qhD*d>nRru(%d z_0sEsuITx|?wguclx%jk6JapEg`X_;ObRN5;5egGeeL4j`G{t`CA#l|2gT4f15kM4 zxtEmY*u`(5FW!Z|-lwJZGyaWvrbVm6eZ;x_# zAzO!TCY>*;r7yG>ZJ+=2Q>1u}vy+Ld+~&^6YA9oEI!@xe-4NP!^@K^~mm@lS>n=9f>e6gJ`hXY3?07~KHdqCrr+;W~~r?wzdlL!Ff+K4{eSpE*LuWXWtA`NVO_VckoLF92`x(SH?8 zPuFl#2@X}j7^$f<%_hsV6j!`{yoejAD@N zE1ivJzN|lqsl*8rBOBT6%bJ9wFgT9Ogo$Kb5;5tE;lAi2{k~9%Ewz{%z%(*xyYcry zbv+JCMKE%*WY{;90iLyM+C1%;s+rBOdzVccpB-2)wnVn+9mjcXi8H$Y$yszC?{14m z*0E}fE0$xIs)5}Xw192?vC(}#fFGfbAX2~`$4#@Tpmy1wh0asS>|Q(Lz`>}#uqM5Q zX`Z%`ZQuH-bY`(6%cQUki<_Am6}H<}>G_S7r6Opk#iTE6hT#r}PJN(xa?tl~7*#X- zGtgu~&uQBdo8cmB9D?AyoH1R{!Qy7kleN>&4Dis?KY!W3XRBZgRL+7`il@3Ll6}j$o3x+`irbE&61^l^xsC-zALS7u_qc8Dqvwa$-(C_ObYF;u z{UMy~PutF(T@o#Sza;wOa7ncD>5}MzLI3gxksu8b@ih|StIsu(>qJ+dYc#~v9HMt0 zbBZY$T(_rvCeEeo@WL>8;Bu0P{2KAKYl=k8_APaLt@l?$_yaSZ)8|A9=H6=OO@5xF zQt}~3jqZ$G>yg$rFS=$;ICXh&bKkRI7OyB3J^FzP8i6-@RQ{u+B=y08QOx@!`J1){ zff0|)w5C>NML5^LJcJyMa~gOIHE}5476|;xilIi zLhr6FE;U8|k^E%&$ZtHXC^bF0L(Qbk2$8eHk08gJHPc-Zp|alZ2|U?WBDrJ3C2F=9 ztU+)kFtpWd58Z21D@hgKFc?M;oZrMwy#`R!rUv9XNPCY=OjDURwcWSta?N#7 z;&qY8^umLA5MY2{xLO9l1fh4cH#O@K-^OyVJOtKEGnzMDGWGTMZmZy#|IvMMrBw<- zU7khwVeu`-=;r}JZInIqt{(nvBoJGq5@XaO_cqMjzTD8qis(kHbZIYYzTc?612tx# z#KeV^#6<~_P%Feg^L5?`kM$TCB{r*&ol7M$yt{th3z3^ac%2onQ zsXNl$2is0QOx%7|gKI#Ega*Fy(b&DuXJAG+=?W1|Qwi2YfZUt2N!m2JbK z`eQ$tAuh%8IYQ6enGPs~?N>~3Aj^fo8E3=PHv0#vAv&}?GvIcxtOF_V3pNn2Z*t1Q zQlFV((BWa}^njrtR%X=tmMR2t+U8+Hw{2;bKIWs$^wriR>D$*=!D%n&3i?p)n9{PD zSeK~fmi6fg%Nu7%$VMSU!72{mx^)jLN4H{W2U&3pEY=p__x&NSbx9;s^#Chewqxee zBPBSd{ox{dY1b8(OAb|K)#Rpo6dyJL)GLz7g;a92!TD;dJOT^zPfCs3PVXu2x(3N4 zt3Pv7|lUglh*X=^x78igXJ1JGJ zJ`55#bmwn&AhAhsGe78F782+&!Z@(2mVF9Tp--crgIiB#GSn47oHrXy7Fg^IZ}x32 zyGWTqBRztIry&06Lwe*+H4LJ_&hTdz!vS@W6_t)sVZ@38azpiIzaOK1O84TNDNHuA zPlG!-Yb-r#rKQ&OUK@#}cWqwcxDsTpPlMCMPxe?g^Nmx{hf*>3AV55Um;Z8wv*c&>J!KU3K_0z?6$=Lw>Hz}lcGR-jEkgZlM1VXIo}=ByrWiTBFh)Pmeeh6ZiJ07IBpZ0D_nZ=g#-S$DvW;Ysga#Cp}{g0&8{S2*cJJw zyyH)0?yiBQvJ>2GEI1Mfn~9tBR|3bIGlcHgGI#BE6nQgY``I^%1#vHrPgac39G2#v z0P9G?gq#UF0-?<}1ePKcZ1_MkX+Ju(c@bbiJXjE?&67dM`*a9MBizI|S3?BTv}GTr z%0Ap_m3yyWv~i_ks%>x?7#`$4{Xlh~6Vp4MYKZVqzZ9XKxSlEkBT$UNWWFOn@V_js zIAX1`H^O-LJXNsZ2@*ovSnsuELOPP41)kY%!+Y~c-BwN43iJoR-bww~8VFY+p?>aq z7`fx^{3>=br3p8Kbpd699a6}rM^GFc~jGp~TT%KJQ*{0OXeU0Gz!3R9%R zq=yPirJ_^1^?Ia$Z9MCx)2Y!JvNiw3yDQSf-r~btE{({!xcj^I8^G~H6> z=C3}?X^FzNT9|~=O_1Y(oc2xH%S*#qY}8s0*^f^ti)-rRYRh!1I%UM7w z+0pcGb>s0GA5>$VIdkpH>dL))s)$#H78t!%TB{{<9V<4^?SG|E`%<6(UK$W&pekB# zq6z-GXOMkcgG)d07E{~I2hX>d+HCOm-h4ct@b~JKP$wzNJX68_0M{pCo>uplhB&jI z<6-p(wfHsR+6l|bV2(s`+ZzDa%|6oAp0V_RtRN`~pl0$9IiO~21^HyB@k|t@jM9%N z@{U(-yB-Dv4HJ;{cH1^y9lY5c=sfW>QmA6&pyZG+iHy;&NoWvlT=@cTl%bH^m8RuqB`~PDS20|@p|`@54=?1I6k;j`Rz!Dr*%W$&NQMC3zxpb?VJT4_;8sAT zwIL_u-P5FGxDybUY4OR1EEg!53(fJa45Jg1@${J3nO(bQGFF~qw&LkK8BmU!1#CsU7kxeY?& z>TK#0^(L<`$8l7{Yr07|4lXykMUp@Nj5$#=NWw@0SpH1i^hs-%jY4B89EE0xZD6HY zEtTc}sCV7KD8Kw>^s5#4kUF_}fNhm!j=AMrf~`MtdO<3$m}d^B=h@}rlIvMIJxX4z zBo5<(5Y{w$+gSC@TUYYNnl_u!5=qmXjthU`!nWNfp%aj4Xo;<7Nk*$0dF7yXU4Shd z2;|fJ^(in*tQZ#~VpdlAC^)`vmf$J$t*()^R0b9fLbPIh8z0zusg;xnm!1F7=36T? z^VoN@v1k{@TQcAj@dA6sn-`l%s+%|Tp3=pQI1Zb|2Ulg(G&`}Z9tPj+kH(pKYN|p` z8}FabHzujn3^V~%)&`ds+%#1$iAwrDq?xR5J>L8j74lSaStpo(vq`wlcI&9~Xd1P8eaw1hC_;CBv@<}herz4SCa70P5MmSdvWCxR8Hq%7x=1#v(; zlb9!;RL13;?Miv$F;A*;KHGs=-m9#aG5RWC6>{Or+*@q>4PgQ&u@hlrC*13;1L;G8 zj4l_G+jgNXDfUfU2Z2#TaVPUzoGZaht;S|SKn*o_y8_{6X!@$&R#`^@G<{5vaYW>k zo%Kn-(fNHFH=6^I5|~JSaCY~|C6NgP;4%Rb3*$Z|sR;~b|0Pll;XQx$S@ENV$VmF2 zFnXZz*52s3K+C&{u<8x5@K24U>+A=r;fL&>H4X^Aek;Ly2%Up>S&~nacq1Z|2@WvL zXq2=P%ij%v>SXX*InTPCkK%L1uVUeIgb>i^wEpz>CDAzkV%x4vWQ+8CuCAN+E_4)(VhTlflcVTjzfhfDfMA2mZJwY+u^lhC0= z@}a~BF>dNtc*HS~NIsBAH~GjE;-i+bK>9guI7*1AjCu!BHQ^~>SinqE0KTdF;GbH= z1rlxsZtC&sjXv=5v2y+Ui_YcJ!|^JO?V{$;tXCX_u)>yHB3VPP$@r_eo?iiYTmJK7 zOv}3t&S}ryjOq}=nzAG;M0f6DbB4m;QsXWM*j)v2D14*?QQbxx^D1&E)RW+U#ZYTl zw!)1&_rpXIlQeNYF0=CkYAsT10{s*m{;#YETpUQKHOwl6)c36|vmf1ZObRI3mQyzj zYO}A{!VRevnUyKGIZ4B%iEH=2Y74D)WAE^#g7b&mr}I*bo_|U)!mIyy(h=7 RmL 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 Date: Sun, 12 Feb 2017 01:00:51 +0100 Subject: [PATCH 03/23] /fetchlibrary: Progress Dialog --- addon.xml | 2 +- changelog.txt | 2 + resources/data/compdate.txt | 2 +- resources/lib/engine.py | 248 +++++++++++++++++++----------------- resources/lib/interface.py | 12 ++ resources/lib/simklapi.py | 6 +- resources/settings.xml | 12 +- script.simkl.zip | Bin 380957 -> 381632 bytes service.py | 12 +- 9 files changed, 176 insertions(+), 120 deletions(-) diff --git a/addon.xml b/addon.xml index ac293a7..b3ba0a8 100644 --- a/addon.xml +++ b/addon.xml @@ -2,7 +2,7 @@ + provider-name="David Davó, Simkl"> diff --git a/changelog.txt b/changelog.txt index 2335e8f..6439be6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,5 @@ +- When you log in, it redirects you to a confirmation page + v 1.0.1 [18/02/04]: -Fixed problem when downloading from Repositories diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 5c7dd28..112e127 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1 @@ -2017-02-11 18:25:32+01:00 +2017-02-12 00:59:28+01:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 8cd0122..c5baa8f 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -14,134 +14,150 @@ def __init__(self, api, player): player.engine = self player.api = api - def synclibrary(self): + def synclibrary(self, mode="quick"): + """ + Fetches the library from Simkl to Kodi + Mode can be "quick" or "full" + """ xbmc.log("Simkl: Syncing library (Simkl to Kodi)") - todump = { - "jsonrpc": "2.0", - "method": "VideoLibrary.GetMovies", - "params": { - "limits": { - "start": 0, - "end": 1000 + mode = "full" + + if mode == "full": + todump = { + "jsonrpc": "2.0", + "method": "VideoLibrary.GetMovies", + "params": { + "limits": { + "start": 0, + "end": 1000 + }, + "properties": [ + "playcount", + "imdbnumber", + "file", + "lastplayed", + "year" + ], + "sort": { + "order": "ascending", + "method": "playcount", + #"ignorearticle": True + } }, - "properties": [ - "playcount", - "imdbnumber", - "file", - "lastplayed" - ], - "sort": { - "order": "ascending", - "method": "label", - "ignorearticle": True - } - }, - "id": "libMovies" - } - kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) - kodilibrary = json.loads(kodilibrary) - #Use result limits total to make a percentage dialog - if kodilibrary["result"]["limits"]["total"] > 0: - for movie in kodilibrary["result"]["movies"]: - break - ### DOWNLOAD FROM KODI - #Separate big list in chunks - movie["media"] = "movie" - if self.api.check_if_watched(movie): - xbmc.log("Simkl: {0}".format(movie)) - ret = xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount":max(movie["playcount"], 1), - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) - xbmc.log(ret) - - todump["method"] = "VideoLibrary.GetTVShows" - todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] - #If watchedepisodes > 0 - kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) - kodilibrary = json.loads(kodilibrary) - debug_cnt = 0 - if kodilibrary["result"]["limits"]["total"] >0: - for tvshow in kodilibrary["result"]["tvshows"]: - #if debug_cnt >= 3: break #I have a lot of TV Shows, only for testing - debug_cnt += 1 - - todump["method"] = "VideoLibrary.GetSeasons" - #todump["params"]["Library.Id"] = tvshow["tvshowid"] - todump["id"] = tvshow["tvshowid"] - todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] - seasons = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(json.dumps(tvshow)) - xbmc.log(seasons) - seasons = json.loads(seasons) - - - for season in seasons["result"]["seasons"]: - values = [] - - todump["method"] = "VideoLibrary.GetEpisodes" - todump["params"]["tvshowid"] = tvshow["tvshowid"] - todump["params"]["season"] = season["season"] - todump["params"]["properties"] = ["title", "rating", "playcount", - "season", "episode", "showtitle", "lastplayed", "tvshowid"] - - episodes = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(episodes) - episodes = json.loads(episodes) - - if episodes["result"]["limits"]["total"] > 0: - for episode in episodes["result"]["episodes"]: - values.append({ - "type": "tv", - "season": episode["season"], - "episode": episode["episode"], - "title": episode["showtitle"], - "tvdb": tvshow["imdbnumber"] - }) - - watched = self.api.check_if_watched(values, False) - xbmc.log(json.dumps(watched)) - - for i, episode in enumerate(episodes["result"]["episodes"]): - toupdate = { - "jsonrpc": "2.0", - "method": "VideoLibrary.SetEpisodeDetails", - "params": { - "episodeid":episode["episodeid"], - "playcount": int(watched[i]["result"]), - }, - "id": "libMovies" - } - try: - toupdate["params"]["lastplayed"] = watched[i]["last_watched"] - except KeyError: - toupdate["params"]["lastplayed"] = "" - - info = xbmc.executeJSONRPC(json.dumps(toupdate)) - xbmc.log("Simkl: Info: {0}".format(info)) - - del todump["params"]["tvshowid"] - del todump["params"]["season"] - - #series = self.api.get_all_items("shows") - #xbmc.log(series) + "id": "libMovies" + } + kodilibrary = json.loads(xbmc.executeJSONRPC(json.dumps(todump))) + if kodilibrary["result"]["limits"]["total"] > 0: + xbmc.log(str(kodilibrary)) + progress = interface.SyncProgress("movies", "full") + each = float(100) / kodilibrary["result"]["limits"]["total"] + for movie in kodilibrary["result"]["movies"]: + progress.push(each, "{0} ({1})".format(movie["label"], movie["year"])) + if movie["playcount"] == 0: + ### DOWNLOAD FROM KODI + #Separate big list in chunks + movie["media"] = "movie" + if self.api.check_if_watched(movie): + xbmc.log("Simkl: {0}".format(movie)) + ret = xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": { + "playcount": 1, + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) + #xbmc.log(ret) + del progress + + todump["method"] = "VideoLibrary.GetTVShows" + todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] + #If watchedepisodes > 0 + kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) + kodilibrary = json.loads(kodilibrary) + + if kodilibrary["result"]["limits"]["total"] > 0: + progress = interface.SyncProgress("TV Shows", "full") + each = float(100) / kodilibrary["result"]["limits"]["total"] + debug_cnt = 0 + for tvshow in kodilibrary["result"]["tvshows"]: + #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing + progress.push(each, tvshow["label"]) + debug_cnt += 1 + + + todump["method"] = "VideoLibrary.GetSeasons" + #todump["params"]["Library.Id"] = tvshow["tvshowid"] + todump["id"] = tvshow["tvshowid"] + todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] + seasons = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(json.dumps(tvshow)) + xbmc.log(seasons) + seasons = json.loads(seasons) + + + for season in seasons["result"]["seasons"]: + values = [] + + todump["method"] = "VideoLibrary.GetEpisodes" + todump["params"]["tvshowid"] = tvshow["tvshowid"] + todump["params"]["season"] = season["season"] + todump["params"]["properties"] = ["title", "rating", "playcount", + "season", "episode", "showtitle", "lastplayed", "tvshowid"] + + episodes = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(episodes) + episodes = json.loads(episodes) + + if episodes["result"]["limits"]["total"] > 0: + for episode in episodes["result"]["episodes"]: + values.append({ + "type": "tv", + "season": episode["season"], + "episode": episode["episode"], + "title": episode["showtitle"], + "tvdb": tvshow["imdbnumber"] + }) + + watched = self.api.check_if_watched(values, False) + xbmc.log(json.dumps(watched)) + + for i, episode in enumerate(episodes["result"]["episodes"]): + toupdate = { + "jsonrpc": "2.0", + "method": "VideoLibrary.SetEpisodeDetails", + "params": { + "episodeid":episode["episodeid"], + "playcount": int(watched[i]["result"]), + }, + "id": "libMovies" + } + try: + toupdate["params"]["lastplayed"] = watched[i]["last_watched"] + except KeyError: + toupdate["params"]["lastplayed"] = "" + + info = xbmc.executeJSONRPC(json.dumps(toupdate)) + xbmc.log("Simkl: Info: {0}".format(info)) + + del todump["params"]["tvshowid"] + del todump["params"]["season"] + del progress xbmc.log("Simkl: Finished syncing library") interface.notify("Finished syncing library") class Player(xbmc.Player): + """ Replaces the Kodi player class """ def __init__(self): xbmc.Player.__init__(self) @staticmethod def getMediaType(): + """ Returns the MediaType of the file currently playing """ if xbmc.getCondVisibility('Container.Content(tvshows)'): return "show" elif xbmc.getCondVisibility('Container.Content(seasons)'): @@ -154,13 +170,17 @@ def getMediaType(): return None def onPlayBackStarted(self): + """ Activated at start """ #self.onPlayBackStopped() pass def onPlayBackSeek(self, *args): + """ Activated on seek """ self.onPlayBackStopped() def onPlayBackResumed(self): + """ Activated on resume """ self.onPlayBackStopped() def onPlayBackEnded(self): + """ Activated at end """ xbmc.log("Simkl: ONPLAYBACKENDED") self.onPlayBackStopped() diff --git a/resources/lib/interface.py b/resources/lib/interface.py index 7f3d088..041cf56 100644 --- a/resources/lib/interface.py +++ b/resources/lib/interface.py @@ -29,6 +29,7 @@ def login(logged): __addon__.setSetting("loginbool", str(bool(1)).lower()) class loginDialog(xbmcgui.WindowXMLDialog): + """ The login dialog popped when you click on LogIn """ def __init__(self, xmlFilename, scriptPath, pin, url, check_login, log, exp=900, inter=5, api=None): self.pin = pin @@ -101,3 +102,14 @@ def onClick(self, controlID): xbmc.log("Simkl: onclick {0}, {1}".format(controlID, self)) if controlID == CANCEL_BUTTON: self.canceled = True + +class SyncProgress(xbmcgui.DialogProgressBG): + def __init__(self, media="None", mode="None"): + self.cnt = 0 + self.msg = "Simkl: Syncing {0} library, {1} mode".format(media, mode) + self.create(self.msg, "Starting") + + def push(self, i, message=None): + self.cnt += i + self.update(int(self.cnt), message=message) + diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 751b02f..67eedec 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -194,7 +194,8 @@ def watched(self, filename, mediatype, duration, date=time.strftime('%Y-%m-%d %H xbmc.log("Simkl: Can't scrobble. User not logged in or file locked") return 0 - def get_all_items(self, mediatype): + @staticmethod + def get_all_items(mediatype): """ mediatype can be 'shows', 'movies' or 'anime' http://docs.simkl.apiary.io/#reference/sync/last-activities/get-all-items-in-the-user's-watchlist @@ -203,7 +204,8 @@ def get_all_items(self, mediatype): con.request("GET", "/sync/all-items/{0}?extended=full".format(mediatype), headers=headers) return con.getresponse().read() - def check_if_watched(self, item, movie=True): + @staticmethod + def check_if_watched(item, movie=True): """ Checks if an item has been watched """ con = httplib.HTTPSConnection("api.simkl.com") if movie: diff --git a/resources/settings.xml b/resources/settings.xml index fce50a8..1c0d72c 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -9,7 +9,6 @@ - @@ -17,4 +16,15 @@ percent" visible="false"/> + + + + + + + + + + + diff --git a/script.simkl.zip b/script.simkl.zip index 5f89e38e12bcd707d2df96ecd74d4f0b09012cff..0b1fc7a4da0ad7a8712f3c72f14a17c69be34d85 100644 GIT binary patch delta 11809 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 Uk5QOV#4#``9Cp`TM+@-(045u%$N&HU delta 11166 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 Z2`2ib|85tC4K1Ajqrtg%-CYU+{vVyEA@~3Q diff --git a/service.py b/service.py index 101e498..00335f3 100644 --- a/service.py +++ b/service.py @@ -23,16 +23,26 @@ def getstr(strid): return __addon__.getLocalizedString(strid) except IOError: __compdate__ = "ERROR: No such file or directory" +class Monitor(xbmc.Monitor): + """ http://mirrors.kodi.tv/docs/python-docs/16.x-jarvis/xbmc.html#Monitor """ + def __init__(self, engine): + self.engine = engine + + def onScanFinished(self): + """ When library scan finishes """ + ### Connect with config + self.engine.synclibrary() + if __name__ == "__main__": xbmc.log("Simkl dir: " + str(xbmc.translatePath("special://home"))) xbmc.log("Simkl | Python Version: " + str(sys.version)) xbmc.log("Simkl | "+ str(sys.argv), level=xbmc.LOGDEBUG) xbmc.log("Simkl | compdate: {0}".format(__compdate__)) - monitor = xbmc.Monitor() player = engine.Player() player.addon = __addon__ eng = engine.Engine(API.api, player) + monitor = Monitor(eng) if not API.api.is_user_logged(): API.api.login() #Add "remind me tomorrow button" From bdafa24d1222aaca174c8f44d0c47a8c9b3dfa67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Sun, 12 Feb 2017 01:33:32 +0100 Subject: [PATCH 04/23] onPlayBackStopped improved --- resources/lib/engine.py | 49 +++++++++------------------------------- script.simkl.zip | Bin 381632 -> 381313 bytes service.py | 3 --- 3 files changed, 11 insertions(+), 41 deletions(-) diff --git a/resources/lib/engine.py b/resources/lib/engine.py index c5baa8f..474c046 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -144,7 +144,7 @@ def synclibrary(self, mode="quick"): del todump["params"]["tvshowid"] del todump["params"]["season"] - del progress + del progress xbmc.log("Simkl: Finished syncing library") interface.notify("Finished syncing library") @@ -196,55 +196,28 @@ def onPlayBackStopped(self): "playerid": 1 }, "id": "VideoGetItem" })) - xbmc.log("Simkl: Full: {0}".format(thing)) item = json.loads(thing)["result"]["item"] - #imdb = movie.getIMDBNumber().strip(" ") - #fname = self.getPlayingFile() - imdb = item["imdbnumber"] - fname = item["file"] + fname = item["imdbnumber"] + if fname == "": fname = item["file"] media = item["type"] - xbmc.log("Simkl: IMDb: {0}".format(imdb)) - xbmc.log("Simkl: Genre: {0}".format(item["genre"])) - xbmc.log("Simkl: MediaType: " + str(media)) percentage = 100 * self.getTime() / self.getTotalTime() pctconfig = int(self.addon.getSetting("scr-pct")) if 99 > percentage > pctconfig: bubble = __addon__.getSetting("bubble") - xbmc.log("Simkl: Bubble == {0}".format(bubble)) - xbmc.log("Percentage: {0}, pctconfig {1}".format(percentage, pctconfig)) - - xbmc.log("Simkl: Ready to scrobble {0}".format(movie.getTitle())) - if imdb == "": - #if True: - xbmc.log("Simkl: No imdb - Fname: {0}".format(fname)) - r = self.api.watched(fname, media, self.getTotalTime()) - else: - xbmc.log("Simkl: IMDB: " + str(imdb)) - r = self.api.watched(imdb, media, self.getTotalTime()) + r = self.api.watched(fname, media, self.getTotalTime()) if bubble=="true" and r: - if item["label"] in item["file"]: - #if True: #For testing purposes - xbmc.log("Simkl: Label and file are the same") - lstw = self.api.lastwatched - if lstw["type"] == "episode": - item["showtitle"] = lstw["show"]["title"] - item["season"] = lstw["episode"]["season"] - item["episode"] = lstw["episode"]["episode"] - elif lstw["type"] == "movie": - item["title"] = "".join([lstw["movie"]["title"], " (", str(lstw["movie"]["year"]), ")"]) - media = lstw["type"] - - txt = item["label"] title = "" - if media == "movie": + lstw = self.api.lastwatched + if lstw["type"] == "episode": + txt = lstw["show"]["title"] + title = "- S{:02}E{:02}".format(lstw["episode"]["season"], lstw["episode"]["episode"]) + elif lstw["type"] == "movie": + item["title"] = "".join([lstw["movie"]["title"], " (", str(lstw["movie"]["year"]), ")"]) txt = item["title"] - elif media == "episode": - txt = item["showtitle"] - title = "- S{:02}E{:02}".format(item["season"], item["episode"]) - xbmc.log("Simkl: " + "; ".join([media, txt, title])) + interface.notify(getstr(32028).format(title), title=txt) r = 0 diff --git a/script.simkl.zip b/script.simkl.zip index 0b1fc7a4da0ad7a8712f3c72f14a17c69be34d85..5a52950af84e85ffbd8870c7b407b038a62ba94a 100644 GIT binary patch delta 4834 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 delta 5423 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 diff --git a/service.py b/service.py index 00335f3..8e62afc 100644 --- a/service.py +++ b/service.py @@ -50,9 +50,6 @@ def onScanFinished(self): else: interface.notify(getstr(32025).format(API.api.USERSETTINGS["user"]["name"])) - #Only for testing purposes: - eng.synclibrary() - #__addon__.openSettings() while not monitor.abortRequested(): if monitor.waitForAbort(90): From 2629a1c06bdd8b4963fb67e396cb1775c990111b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Wed, 15 Feb 2017 16:21:01 +0100 Subject: [PATCH 05/23] Simplify --- resources/data/compdate.txt | 2 +- resources/lib/engine.py | 19 ++++++++++--------- resources/lib/interface.py | 6 ++++-- resources/lib/utils.py | 19 +++++++++++++++++++ resources/settings.xml | 1 + service.py | 9 ++++++--- 6 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 resources/lib/utils.py diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 112e127..e1c88eb 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1 @@ -2017-02-12 00:59:28+01:00 +2017-02-12 01:33:25+01:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 474c046..fc76d51 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -60,16 +60,17 @@ def synclibrary(self, mode="quick"): movie["media"] = "movie" if self.api.check_if_watched(movie): xbmc.log("Simkl: {0}".format(movie)) - ret = xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount": 1, - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) + xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": { + "playcount": 1, + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) #xbmc.log(ret) + progress.push(10, "") del progress todump["method"] = "VideoLibrary.GetTVShows" diff --git a/resources/lib/interface.py b/resources/lib/interface.py index 041cf56..b961f95 100644 --- a/resources/lib/interface.py +++ b/resources/lib/interface.py @@ -45,9 +45,9 @@ def __init__(self, xmlFilename, scriptPath, pin, url, check_login, log, def threaded(self): """ A loop threaded function, so you can do another things meanwhile """ xbmc.log("Simkl: threaded: {0}".format(self)) - cnt = 0 + cnt = 1 while self.waiting: - if cnt % (self.inter+1) == 0 and cnt>1: + if cnt % (self.inter+1) == 0: xbmc.log("Simkl: Still waiting... {0}".format(cnt)) if self.check_login(self.pin, self.log): @@ -104,12 +104,14 @@ def onClick(self, controlID): self.canceled = True class SyncProgress(xbmcgui.DialogProgressBG): + """ The progress dialog when syncing """ def __init__(self, media="None", mode="None"): self.cnt = 0 self.msg = "Simkl: Syncing {0} library, {1} mode".format(media, mode) self.create(self.msg, "Starting") def push(self, i, message=None): + """ Updates the percentage and description """ self.cnt += i self.update(int(self.cnt), message=message) diff --git a/resources/lib/utils.py b/resources/lib/utils.py new file mode 100644 index 0000000..30fd062 --- /dev/null +++ b/resources/lib/utils.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +""" +Utils module. Some basic functions that maybe I'll need more than once +""" +import sys +import xbmc, xbmcaddon +__addon__ = xbmcaddon.Addon("script.simkl") + +def getstr(strid): + """ Given an id, returns the localized string """ + return __addon__.getLocalizedString(strid) + +def getSetting(settingid): + """ Given an id, return the setting """ + ret = __addon__.getSetting(settingid) + xbmc.log("Simkl: {0}: {1}".format(settingid, ret)) + if ret == "false": ret = False + return ret \ No newline at end of file diff --git a/resources/settings.xml b/resources/settings.xml index 1c0d72c..a765679 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -17,6 +17,7 @@ + diff --git a/service.py b/service.py index 8e62afc..b8f02ac 100644 --- a/service.py +++ b/service.py @@ -8,13 +8,14 @@ import sys, os import xbmcaddon import xbmc +import resources from resources.lib import interface, engine from resources.lib import simklapi as API +from resources.lib.utils import * __addon__ = xbmcaddon.Addon() interface.__addon__ = __addon__ autoscrobble = __addon__.getSetting("autoscrobble") -def getstr(strid): return __addon__.getLocalizedString(strid) try: compdatefile = os.path.join(__addon__.getAddonInfo("path").decode("utf-8"), "resources", "data", "compdate.txt") @@ -28,10 +29,11 @@ class Monitor(xbmc.Monitor): def __init__(self, engine): self.engine = engine - def onScanFinished(self): + def onScanFinished(self, arg): """ When library scan finishes """ ### Connect with config - self.engine.synclibrary() + xbmc.log("Simkl: onScanFinished {0}".format(str(arg))) + if bool(getSetting("synclib")): self.engine.synclibrary() if __name__ == "__main__": xbmc.log("Simkl dir: " + str(xbmc.translatePath("special://home"))) @@ -44,6 +46,7 @@ def onScanFinished(self): eng = engine.Engine(API.api, player) monitor = Monitor(eng) + if not API.api.is_user_logged(): API.api.login() #Add "remind me tomorrow button" #interface.notify(getstr(32026)) From 0796b770b7bd7c6919499bfea829ca118f4b5f08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Thu, 16 Feb 2017 23:46:24 +0100 Subject: [PATCH 06/23] Error fixed --- resources/lib/engine.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 8319c97..ec1bb56 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -192,7 +192,7 @@ def onPlayBackStopped(self): item = json.loads(xbmc.executeJSONRPC(json.dumps({ "jsonrpc": "2.0", "method": "Player.GetItem", "params": { - "properties": ["showtitle", "title", "season", "episode", "file", "tvshowid", "imdbnumber", "genre" ], + "properties": ["showtitle", "title", "season", "episode", "file", "tvshowid", "imdbnumber", "year" ], "playerid": 1}, "id": "VideoGetItem"})))["result"]["item"] if item["tvshowid"] != -1: @@ -208,8 +208,6 @@ def onPlayBackStopped(self): if percentage > pctconfig: bubble = __addon__.getSetting("bubble") - r = self.api.watched(fname, media, self.getTotalTime()) - r = self.api.watched(item, self.getTotalTime()) if bubble=="true" and r: @@ -228,7 +226,7 @@ def onPlayBackStopped(self): txt = item["label"] title = "" if item["type"] == "movie": - txt = item["title"] + txt = "".join([item["title"], " (", str(item["year"]), ")"]) elif item["type"] == "episode": txt = item["showtitle"] title = "- S{:02}E{:02}".format(item["season"], item["episode"]) From 1178f050109af89c14c7529345ece6389552ccd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Tue, 21 Feb 2017 17:08:48 +0100 Subject: [PATCH 07/23] w/ Settings --- resources/lib/engine.py | 197 ++++++++++++++++++++-------------------- resources/lib/utils.py | 1 + 2 files changed, 101 insertions(+), 97 deletions(-) diff --git a/resources/lib/engine.py b/resources/lib/engine.py index ec1bb56..d65ef99 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -4,6 +4,7 @@ import os import xbmc import interface +from utils import * import json __addon__ = interface.__addon__ def getstr(strid): return interface.getstr(strid) @@ -48,105 +49,107 @@ def synclibrary(self, mode="quick"): }, "id": "libMovies" } - kodilibrary = json.loads(xbmc.executeJSONRPC(json.dumps(todump))) - if kodilibrary["result"]["limits"]["total"] > 0: - xbmc.log(str(kodilibrary)) - progress = interface.SyncProgress("movies", "full") - each = float(100) / kodilibrary["result"]["limits"]["total"] - for movie in kodilibrary["result"]["movies"]: - progress.push(each, "{0} ({1})".format(movie["label"], movie["year"])) - if movie["playcount"] == 0: - ### DOWNLOAD FROM KODI - #Separate big list in chunks - movie["media"] = "movie" - if self.api.check_if_watched(movie): - xbmc.log("Simkl: {0}".format(movie)) - xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount": 1, - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) - #xbmc.log(ret) - progress.push(10, "") - del progress - - todump["method"] = "VideoLibrary.GetTVShows" - todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] - #If watchedepisodes > 0 - kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) - kodilibrary = json.loads(kodilibrary) - - if kodilibrary["result"]["limits"]["total"] > 0: - progress = interface.SyncProgress("TV Shows", "full") - each = float(100) / kodilibrary["result"]["limits"]["total"] - debug_cnt = 0 - for tvshow in kodilibrary["result"]["tvshows"]: - #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing - progress.push(each, tvshow["label"]) - debug_cnt += 1 - - - todump["method"] = "VideoLibrary.GetSeasons" - #todump["params"]["Library.Id"] = tvshow["tvshowid"] - todump["id"] = tvshow["tvshowid"] - todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] - seasons = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(json.dumps(tvshow)) - xbmc.log(seasons) - seasons = json.loads(seasons) - - - for season in seasons["result"]["seasons"]: - values = [] - - todump["method"] = "VideoLibrary.GetEpisodes" - todump["params"]["tvshowid"] = tvshow["tvshowid"] - todump["params"]["season"] = season["season"] - todump["params"]["properties"] = ["title", "rating", "playcount", - "season", "episode", "showtitle", "lastplayed", "tvshowid"] - - episodes = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(episodes) - episodes = json.loads(episodes) - - if episodes["result"]["limits"]["total"] > 0: - for episode in episodes["result"]["episodes"]: - values.append({ - "type": "tv", - "season": episode["season"], - "episode": episode["episode"], - "title": episode["showtitle"], - "tvdb": tvshow["imdbnumber"] - }) - - watched = self.api.check_if_watched(values, False) - xbmc.log(json.dumps(watched)) - - for i, episode in enumerate(episodes["result"]["episodes"]): - toupdate = { + if getSetting("movie-pull"): + kodilibrary = json.loads(xbmc.executeJSONRPC(json.dumps(todump))) + if kodilibrary["result"]["limits"]["total"] > 0: + xbmc.log(str(kodilibrary)) + progress = interface.SyncProgress("movies", "full") + each = float(100) / kodilibrary["result"]["limits"]["total"] + for movie in kodilibrary["result"]["movies"]: + progress.push(each, "{0} ({1})".format(movie["label"], movie["year"])) + if movie["playcount"] == 0: + ### DOWNLOAD FROM KODI + #Separate big list in chunks + movie["media"] = "movie" + if self.api.check_if_watched(movie): + xbmc.log("Simkl: {0}".format(movie)) + xbmc.executeJSONRPC(json.dumps({ "jsonrpc": "2.0", - "method": "VideoLibrary.SetEpisodeDetails", + "method": "VideoLibrary.SetMovieDetails", "params": { - "episodeid":episode["episodeid"], - "playcount": int(watched[i]["result"]), - }, - "id": "libMovies" - } - try: - toupdate["params"]["lastplayed"] = watched[i]["last_watched"] - except KeyError: - toupdate["params"]["lastplayed"] = "" - - info = xbmc.executeJSONRPC(json.dumps(toupdate)) - xbmc.log("Simkl: Info: {0}".format(info)) - - del todump["params"]["tvshowid"] - del todump["params"]["season"] - del progress + "playcount": 1, + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) + #xbmc.log(ret) + progress.push(10, "") + del progress + + if getSetting("shows-pull"): + todump["method"] = "VideoLibrary.GetTVShows" + todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] + #If watchedepisodes > 0 + kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) + kodilibrary = json.loads(kodilibrary) + + if kodilibrary["result"]["limits"]["total"] > 0: + progress = interface.SyncProgress("TV Shows", "full") + each = float(100) / kodilibrary["result"]["limits"]["total"] + debug_cnt = 0 + for tvshow in kodilibrary["result"]["tvshows"]: + #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing + progress.push(each, tvshow["label"]) + debug_cnt += 1 + + + todump["method"] = "VideoLibrary.GetSeasons" + #todump["params"]["Library.Id"] = tvshow["tvshowid"] + todump["id"] = tvshow["tvshowid"] + todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] + seasons = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(json.dumps(tvshow)) + xbmc.log(seasons) + seasons = json.loads(seasons) + + + for season in seasons["result"]["seasons"]: + values = [] + + todump["method"] = "VideoLibrary.GetEpisodes" + todump["params"]["tvshowid"] = tvshow["tvshowid"] + todump["params"]["season"] = season["season"] + todump["params"]["properties"] = ["title", "rating", "playcount", + "season", "episode", "showtitle", "lastplayed", "tvshowid"] + + episodes = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(episodes) + episodes = json.loads(episodes) + + if episodes["result"]["limits"]["total"] > 0: + for episode in episodes["result"]["episodes"]: + values.append({ + "type": "tv", + "season": episode["season"], + "episode": episode["episode"], + "title": episode["showtitle"], + "tvdb": tvshow["imdbnumber"] + }) + + watched = self.api.check_if_watched(values, False) + xbmc.log(json.dumps(watched)) + + for i, episode in enumerate(episodes["result"]["episodes"]): + toupdate = { + "jsonrpc": "2.0", + "method": "VideoLibrary.SetEpisodeDetails", + "params": { + "episodeid":episode["episodeid"], + "playcount": int(watched[i]["result"]), + }, + "id": "libMovies" + } + try: + toupdate["params"]["lastplayed"] = watched[i]["last_watched"] + except KeyError: + toupdate["params"]["lastplayed"] = "" + + info = xbmc.executeJSONRPC(json.dumps(toupdate)) + xbmc.log("Simkl: Info: {0}".format(info)) + + del todump["params"]["tvshowid"] + del todump["params"]["season"] + del progress xbmc.log("Simkl: Finished syncing library") interface.notify("Finished syncing library") diff --git a/resources/lib/utils.py b/resources/lib/utils.py index 30fd062..6ee445e 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -16,4 +16,5 @@ def getSetting(settingid): ret = __addon__.getSetting(settingid) xbmc.log("Simkl: {0}: {1}".format(settingid, ret)) if ret == "false": ret = False + elif ret == "true": ret = True return ret \ No newline at end of file From 55b56be4569bd4665868b7732ebec592784ac983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Thu, 16 Mar 2017 19:27:13 +0100 Subject: [PATCH 08/23] Push TvShows and Movies --- resources/data/compdate.txt | 6 +---- resources/lib/engine.py | 50 +++++++++++++++++++++--------------- resources/lib/simklapi.py | 11 +++----- resources/settings.xml | 8 +++--- script.simkl.zip | Bin 380781 -> 382470 bytes 5 files changed, 39 insertions(+), 36 deletions(-) diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 344af54..cbcddec 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1,5 +1 @@ -<<<<<<< HEAD -2017-02-12 01:33:25+01:00 -======= -2017-03-04 21:39:23+01:00 ->>>>>>> master +2017-03-16 19:28:38+01:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 12418a5..8b48344 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -16,14 +16,13 @@ def __init__(self, api, player): player.engine = self player.api = api - def synclibrary(self, mode="quick"): + def synclibrary(self, mode="full"): """ - Fetches the library from Simkl to Kodi - Mode can be "quick" or "full" + Fetches the library from Simkl to Kodi, and uploads what is not on Simkl """ xbmc.log("Simkl: Syncing library (Simkl to Kodi)") - mode = "full" + watched_on_kodi = {"movies":[],"shows":[]} if mode == "full": todump = { @@ -61,19 +60,21 @@ def synclibrary(self, mode="quick"): ### DOWNLOAD FROM KODI #Separate big list in chunks movie["media"] = "movie" - if self.api.check_if_watched(movie): - xbmc.log("Simkl: {0}".format(movie)) - xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount": 1, - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) - #xbmc.log(ret) - progress.push(10, "") + if getSetting("movie-pull"): + if self.api.check_if_watched(movie): + xbmc.log("Simkl: {0}".format(movie)) + xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": { + "playcount": 1, + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) + elif getSetting("movie-push"): + watched_on_kodi["movies"].append({"ids":{"imdb":movie["imdbnumber"]}}) + progress.push(100, "") del progress if getSetting("shows-pull"): @@ -86,12 +87,11 @@ def synclibrary(self, mode="quick"): if kodilibrary["result"]["limits"]["total"] > 0: progress = interface.SyncProgress("TV Shows", "full") each = float(100) / kodilibrary["result"]["limits"]["total"] - debug_cnt = 0 + #debug_cnt = 0 for tvshow in kodilibrary["result"]["tvshows"]: #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing + #debug_cnt += 1 progress.push(each, tvshow["label"]) - debug_cnt += 1 - todump["method"] = "VideoLibrary.GetSeasons" #todump["params"]["Library.Id"] = tvshow["tvshowid"] @@ -144,6 +144,13 @@ def synclibrary(self, mode="quick"): except KeyError: toupdate["params"]["lastplayed"] = "" + if episode["playcount"] > int(watched[i]["result"]) and getSetting("shows-push"): + watched_on_kodi["shows"].append({ + "ids":{"tvdb":tvshow["imdbnumber"]}, + "seasons":[{"number":episode["season"], + "episodes":[{"watched_at": episode["lastplayed"], "number":episode["episode"]}]}] + }) + info = xbmc.executeJSONRPC(json.dumps(toupdate)) xbmc.log("Simkl: Info: {0}".format(info)) @@ -151,6 +158,9 @@ def synclibrary(self, mode="quick"): del todump["params"]["season"] del progress + xbmc.log(str(watched_on_kodi)) + xbmc.log(str(self.api.watched_from_list(watched_on_kodi))) + xbmc.log("Simkl: Finished syncing library") interface.notify("Finished syncing library") diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 99afe21..3c777b1 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -203,14 +203,11 @@ def watched(self, item, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0 return 0 @staticmethod - def get_all_items(mediatype): - """ - mediatype can be 'shows', 'movies' or 'anime' - http://docs.simkl.apiary.io/#reference/sync/last-activities/get-all-items-in-the-user's-watchlist - """ + def watched_from_list(lst): con = httplib.HTTPSConnection("api.simkl.com") - con.request("GET", "/sync/all-items/{0}?extended=full".format(mediatype), headers=headers) - return con.getresponse().read() + con.request("GET", "/sync/history", body=json.dumps(lst), headers=headers) + r = con.getresponse().read() + return min(max(json.loads(r)["added"].values()),1) @staticmethod def check_if_watched(item, movie=True): diff --git a/resources/settings.xml b/resources/settings.xml index a765679..47c3184 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -17,15 +17,15 @@ - + - - + + - + diff --git a/script.simkl.zip b/script.simkl.zip index 10814b90b5ad949c1090b9f1e6a403e1614debf7..7be3aec4498ee15c62a03354af64ecedffb12371 100644 GIT binary patch delta 12316 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 K=j}&4!2bYf7!~;d delta 10687 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 A#Q*>R From 025850e4e2fe359bfa57cebc8e7fb8280e0258c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Wed, 8 Feb 2017 17:25:41 +0100 Subject: [PATCH 09/23] /fetchlibrary: Simkl to Kodi (Movies) --- addon.xml | 4 +-- resources/lib/engine.py | 76 ++++++++++++++++++++------------------- resources/lib/simklapi.py | 18 ++++++++-- service.py | 7 ++-- tozip.sh | 29 +++++++++++---- 5 files changed, 83 insertions(+), 51 deletions(-) diff --git a/addon.xml b/addon.xml index 1c934a7..a2ab894 100644 --- a/addon.xml +++ b/addon.xml @@ -4,7 +4,7 @@ version="1.2-Dev" provider-name="David Davó, Simkl"> - + @@ -21,7 +21,7 @@ https://github.com/SIMKL/script.simkl resources/icon.png - resources/fanart.png + resources/fanart.jpg en diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 387befe..d73a8b3 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -14,45 +14,49 @@ def __init__(self, api, player): self.player = player player.engine = self player.api = api - self.synclibrary() def synclibrary(self): - ### UPLOAD ### - #DISABLED UNTIL WORKING FINE - pass - # kodilibrary = xbmc.executeJSONRPC(json.dumps({ - # "jsonrpc": "2.0", - # "method": "VideoLibrary.GetMovies", - # "params": { - # "limits": { - # "start": 0, - # "end": 1000 - # }, - # "properties": [ - # "playcount", - # "imdbnumber", - # "file", - # "lastplayed" - # ], - # "sort": { - # "order": "ascending", - # "method": "label", - # "ignorearticle": True - # } - # }, - # "id": "libMovies" - # })) - # xbmc.log("Simkl: Ret: {0}".format(kodilibrary)) - # kodilibrary = json.loads(kodilibrary) - - # if kodilibrary["result"]["limits"]["total"] > 0: - # for movie in kodilibrary["result"]["movies"]: - # #Dont do that, upload all at once + xbmc.log("Simkl: Syncing library (Simkl to Kodi)") + kodilibrary = xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.GetMovies", + "params": { + "limits": { + "start": 0, + "end": 1000 + }, + "properties": [ + "playcount", + "imdbnumber", + "file", + "lastplayed" + ], + "sort": { + "order": "ascending", + "method": "label", + "ignorearticle": True + } + }, + "id": "libMovies" + })) + kodilibrary = json.loads(kodilibrary) + if kodilibrary["result"]["limits"]["total"] > 0: + for movie in kodilibrary["result"]["movies"]: + ### DOWNLOAD FROM KODI + #Separate big list in chunks + if self.api.check_if_watched(movie): + xbmc.log("Simkl: {0}".format(movie)) + ret = xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": { + "playcount":max(movie["playcount"], 1), + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) + xbmc.log(ret) - # if movie["playcount"] > 0: - # imdb = movie["imdbnumber"] - # date = movie["lastplayed"] - # self.api.watched(imdb, "movie", date) class Player(xbmc.Player): def __init__(self): diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 40d77f4..3e56a26 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -13,7 +13,7 @@ __addon__ = interface.__addon__ def getstr(strid): return interface.getstr(strid) -REDIRECT_URI = "http://simkl.com" +REDIRECT_URI = "https://simkl.com/apps/kodi/connected" USERFILE = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"), "simkl_key") xbmc.translatePath("special://profile/simkl_key") @@ -132,7 +132,8 @@ def lock(self, fname, duration): def is_locked(self, fname): exp = self.scrobbled_dict if not (fname in exp.keys()): return 0 - xbmc.log("Time: {0}, exp: {1}, Dif: {2}".format(int(time.time()), exp[fname], int(exp[fname]-time.time()))) + xbmc.log("Time: {0}, exp: {1}, Dif: {2}".format(int(time.time()), + exp[fname], int(exp[fname]-time.time()))) #When Dif reaches 0, scrobble. if time.time() < exp[fname]: xbmc.log("Simkl: Can't scrobble, file locked (alredy scrobbled)") @@ -202,6 +203,17 @@ def watched(self, item, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0 xbmc.log("Simkl: Can't scrobble. User not logged in or file locked") return 0 + def check_if_watched(self, item): + con = httplib.HTTPSConnection("api.simkl.com") + values = json.dumps([{ + "type":"movie", + "imdb": item["imdbnumber"] + }]) + con.request("GET", "/sync/watched", body=values, headers=headers) + r1 = con.getresponse().read() + xbmc.log("Simkl: {}".format(r1)) + return json.loads(r1)[0]["result"] + def check_connection(self, cnt=0): if cnt < 3: try: @@ -218,4 +230,4 @@ def check_connection(self, cnt=0): if __name__ == "__main__": if sys.argv[1] == "login": xbmc.log("Logging in", level=xbmc.LOGDEBUG) - api.login() \ No newline at end of file + api.login() diff --git a/service.py b/service.py index 92108d2..beab2e7 100644 --- a/service.py +++ b/service.py @@ -33,10 +33,6 @@ def getstr(strid): return __addon__.getLocalizedString(strid) player = engine.Player() player.addon = __addon__ eng = engine.Engine(API.api, player) - #Remember: if getTime() is more than x% scrobble file - - #Testing: - #API.api.login() if API.api.internet == False: interface.notify(getstr(32027)) @@ -46,6 +42,9 @@ def getstr(strid): return __addon__.getLocalizedString(strid) else: interface.notify(getstr(32025).format(API.api.USERSETTINGS["user"]["name"])) + #Only for testing purposes: + eng.synclibrary() + #__addon__.openSettings() while not monitor.abortRequested(): if monitor.waitForAbort(90): diff --git a/tozip.sh b/tozip.sh index e17fe3d..aa8257d 100755 --- a/tozip.sh +++ b/tozip.sh @@ -1,10 +1,27 @@ #!/bin/bash #Creates a zip file compatible with Kodi -date --rfc-3339=seconds > resources/data/compdate.txt -mkdir script.simkl -rm script.simkl.zip +if [ "$1" == "zip" ]; then + date --rfc-3339=seconds > resources/data/compdate.txt + mkdir script.simkl + rm script.simkl.zip -rsync -rv --progress ./ ./script.simkl --exclude-from .gitignore --exclude tozip.sh -zip -rx@.gitignore script.simkl.zip script.simkl/* -x script.simkl/script.simkl/ -rm -Rf script.simkl \ No newline at end of file + rsync -rv --progress ./ ./script.simkl --exclude-from .gitignore --exclude tozip.sh + zip -rx@.gitignore script.simkl.zip script.simkl/* -x script.simkl/script.simkl/ + rm -Rf script.simkl +elif [ "$1" == "pull" ]; then + #Remember. It should've been checkout before + REPO="/home/$USER/Documentos/repo-scripts/script.simkl" + rm -Rf $REPO/* $REPO/.* + rsync -rv --progress ./ $REPO --exclude-from .gitignore --exclude tozip.sh --exclude script.simkl.zip --exclude ".git*" + echo + ls -a --color=auto $REPO +elif [ "$1" == "bak" ]; then + #Workaround. Use rsync or unison first pls + BAKDATE="$(date '+%F %T')" + echo $BAKDATE + zip -r ".bak/$BAKDATE" ./* -x .bak +else + echo "$1 Does nothing" +fi +exit \ No newline at end of file From cecbb42a81ea91d8288aca8f55a42c989e2271ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Sat, 11 Feb 2017 18:30:38 +0100 Subject: [PATCH 10/23] /fetchlibrary: Simkl to Kodi (TV Shows) --- resources/lib/engine.py | 76 ++++++++++++++++++++++++++++++++++++++ resources/lib/interface.py | 2 +- resources/lib/simklapi.py | 34 ++++++++++++----- service.py | 4 +- tozip.sh | 10 ++++- 5 files changed, 112 insertions(+), 14 deletions(-) diff --git a/resources/lib/engine.py b/resources/lib/engine.py index d73a8b3..eedcc26 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -44,6 +44,7 @@ def synclibrary(self): for movie in kodilibrary["result"]["movies"]: ### DOWNLOAD FROM KODI #Separate big list in chunks + movie["media"] = "movie" if self.api.check_if_watched(movie): xbmc.log("Simkl: {0}".format(movie)) ret = xbmc.executeJSONRPC(json.dumps({ @@ -57,6 +58,80 @@ def synclibrary(self): })) xbmc.log(ret) + todump["method"] = "VideoLibrary.GetTVShows" + todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] + #If watchedepisodes > 0 + kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) + kodilibrary = json.loads(kodilibrary) + debug_cnt = 0 + if kodilibrary["result"]["limits"]["total"] >0: + for tvshow in kodilibrary["result"]["tvshows"]: + #if debug_cnt >= 3: break #I have a lot of TV Shows, only for testing + debug_cnt += 1 + + todump["method"] = "VideoLibrary.GetSeasons" + #todump["params"]["Library.Id"] = tvshow["tvshowid"] + todump["id"] = tvshow["tvshowid"] + todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] + seasons = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(json.dumps(tvshow)) + xbmc.log(seasons) + seasons = json.loads(seasons) + + + for season in seasons["result"]["seasons"]: + values = [] + + todump["method"] = "VideoLibrary.GetEpisodes" + todump["params"]["tvshowid"] = tvshow["tvshowid"] + todump["params"]["season"] = season["season"] + todump["params"]["properties"] = ["title", "rating", "playcount", + "season", "episode", "showtitle", "lastplayed", "tvshowid"] + + episodes = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(episodes) + episodes = json.loads(episodes) + + if episodes["result"]["limits"]["total"] > 0: + for episode in episodes["result"]["episodes"]: + values.append({ + "type": "tv", + "season": episode["season"], + "episode": episode["episode"], + "title": episode["showtitle"], + "tvdb": tvshow["imdbnumber"] + }) + + watched = self.api.check_if_watched(values, False) + xbmc.log(json.dumps(watched)) + + for i, episode in enumerate(episodes["result"]["episodes"]): + toupdate = { + "jsonrpc": "2.0", + "method": "VideoLibrary.SetEpisodeDetails", + "params": { + "episodeid":episode["episodeid"], + "playcount": int(watched[i]["result"]), + }, + "id": "libMovies" + } + try: + toupdate["params"]["lastplayed"] = watched[i]["last_watched"] + except KeyError: + toupdate["params"]["lastplayed"] = "" + + info = xbmc.executeJSONRPC(json.dumps(toupdate)) + xbmc.log("Simkl: Info: {0}".format(info)) + + del todump["params"]["tvshowid"] + del todump["params"]["season"] + + #series = self.api.get_all_items("shows") + #xbmc.log(series) + + xbmc.log("Simkl: Finished syncing library") + interface.notify("Finished syncing library") + class Player(xbmc.Player): def __init__(self): @@ -85,6 +160,7 @@ def onPlayBackResumed(self): def onPlayBackEnded(self): xbmc.log("Simkl: ONPLAYBACKENDED") self.onPlayBackStopped() + def onPlayBackStopped(self): ''' Gets the info needed to pass to the api ''' self.api.check_connection() diff --git a/resources/lib/interface.py b/resources/lib/interface.py index a551335..7f3d088 100644 --- a/resources/lib/interface.py +++ b/resources/lib/interface.py @@ -100,4 +100,4 @@ def onAction(self, action): def onClick(self, controlID): xbmc.log("Simkl: onclick {0}, {1}".format(controlID, self)) if controlID == CANCEL_BUTTON: - self.canceled = True \ No newline at end of file + self.canceled = True diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 3e56a26..7abf8e8 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -62,6 +62,7 @@ def get_usersettings(self): xbmc.log("Simkl: Usersettings: " + str(self.USERSETTINGS)) def login(self): + """ Logins the API class to Simkl """ url = "/oauth/pin?client_id=" url += APIKEY + "&redirect=" + REDIRECT_URI @@ -203,16 +204,31 @@ def watched(self, item, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0 xbmc.log("Simkl: Can't scrobble. User not logged in or file locked") return 0 - def check_if_watched(self, item): + def get_all_items(self, mediatype): + """ + mediatype can be 'shows', 'movies' or 'anime' + http://docs.simkl.apiary.io/#reference/sync/last-activities/get-all-items-in-the-user's-watchlist + """ con = httplib.HTTPSConnection("api.simkl.com") - values = json.dumps([{ - "type":"movie", - "imdb": item["imdbnumber"] - }]) - con.request("GET", "/sync/watched", body=values, headers=headers) - r1 = con.getresponse().read() - xbmc.log("Simkl: {}".format(r1)) - return json.loads(r1)[0]["result"] + con.request("GET", "/sync/all-items/{0}?extended=full".format(mediatype), headers=headers) + return con.getresponse().read() + + def check_if_watched(self, item, movie=True): + """ Checks if an item has been watched """ + con = httplib.HTTPSConnection("api.simkl.com") + if movie: + values = json.dumps([{ + "type": item["media"], + "imdb": item["imdbnumber"] + }]) + con.request("GET", "/sync/watched", body=values, headers=headers) + r1 = con.getresponse().read() + xbmc.log("Simkl: {}".format(r1)) + return json.loads(r1)[0]["result"] + else: + values = json.dumps(item) + con.request("GET", "/sync/watched", body=values, headers=headers) + return json.loads(con.getresponse().read()) def check_connection(self, cnt=0): if cnt < 3: diff --git a/service.py b/service.py index beab2e7..8d41aa4 100644 --- a/service.py +++ b/service.py @@ -20,7 +20,7 @@ def getstr(strid): return __addon__.getLocalizedString(strid) compdatefile = os.path.join(__addon__.getAddonInfo("path").decode("utf-8"), "resources", "data", "compdate.txt") with open(xbmc.translatePath(compdatefile), "r") as f: __compdate__ = f.read() -except: +except IOError: __compdate__ = "ERROR: No such file or directory" if __name__ == "__main__": @@ -50,4 +50,4 @@ def getstr(strid): return __addon__.getLocalizedString(strid) if monitor.waitForAbort(90): break elif player.isPlaying(): - player.onPlayBackStopped() \ No newline at end of file + player.onPlayBackStopped() diff --git a/tozip.sh b/tozip.sh index aa8257d..dc2b901 100755 --- a/tozip.sh +++ b/tozip.sh @@ -9,6 +9,7 @@ if [ "$1" == "zip" ]; then rsync -rv --progress ./ ./script.simkl --exclude-from .gitignore --exclude tozip.sh zip -rx@.gitignore script.simkl.zip script.simkl/* -x script.simkl/script.simkl/ rm -Rf script.simkl + elif [ "$1" == "pull" ]; then #Remember. It should've been checkout before REPO="/home/$USER/Documentos/repo-scripts/script.simkl" @@ -16,12 +17,17 @@ elif [ "$1" == "pull" ]; then rsync -rv --progress ./ $REPO --exclude-from .gitignore --exclude tozip.sh --exclude script.simkl.zip --exclude ".git*" echo ls -a --color=auto $REPO + elif [ "$1" == "bak" ]; then - #Workaround. Use rsync or unison first pls + #Workaround. Use rsync or unison first so you don't have two files that are the same BAKDATE="$(date '+%F %T')" echo $BAKDATE zip -r ".bak/$BAKDATE" ./* -x .bak + fdupes -irndN .bak/ + ls -l .bak + else - echo "$1 Does nothing" + echo "$1 Does nothing. Use zip / pull / bak" + fi exit \ No newline at end of file From 0bb98ad98e7cd4d1147bf62fbc2c5623dc7fbaa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Sun, 12 Feb 2017 01:00:51 +0100 Subject: [PATCH 11/23] /fetchlibrary: Progress Dialog --- changelog.txt | 5 +- resources/lib/engine.py | 247 ++++++++++++++++++++----------------- resources/lib/interface.py | 12 ++ resources/lib/simklapi.py | 6 +- resources/settings.xml | 12 +- service.py | 12 +- 6 files changed, 177 insertions(+), 117 deletions(-) diff --git a/changelog.txt b/changelog.txt index ca129b5..7b2ae4b 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,8 +1,9 @@ v 1.2.0 []: - Using tvdb id for series scrobbling +- When you log in, it redirects you to a confirmation page -v 1.1.0 [17/02/04]: -- Fixed problem when downloading from Repositories +v 1.0.1 [18/02/04]: +-Fixed problem when downloading from Repositories v 1.0.0 [17/01/25]: - Ready for submiting to the Kodi repositories diff --git a/resources/lib/engine.py b/resources/lib/engine.py index eedcc26..b53d66a 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -14,131 +14,152 @@ def __init__(self, api, player): self.player = player player.engine = self player.api = api + self.synclibrary() - def synclibrary(self): + def synclibrary(self, mode="quick"): + """ + Fetches the library from Simkl to Kodi + Mode can be "quick" or "full" + """ xbmc.log("Simkl: Syncing library (Simkl to Kodi)") - kodilibrary = xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.GetMovies", - "params": { - "limits": { - "start": 0, - "end": 1000 - }, - "properties": [ - "playcount", - "imdbnumber", - "file", - "lastplayed" - ], - "sort": { - "order": "ascending", - "method": "label", - "ignorearticle": True + + mode = "full" + + if mode == "full": + todump = { + "jsonrpc": "2.0", + "method": "VideoLibrary.GetMovies", + "params": { + "limits": { + "start": 0, + "end": 1000 + }, + "properties": [ + "playcount", + "imdbnumber", + "file", + "lastplayed", + "year" + ], + "sort": { + "order": "ascending", + "method": "playcount", + #"ignorearticle": True + } + }, + "id": "libMovies" } - }, - "id": "libMovies" - })) - kodilibrary = json.loads(kodilibrary) - if kodilibrary["result"]["limits"]["total"] > 0: - for movie in kodilibrary["result"]["movies"]: - ### DOWNLOAD FROM KODI - #Separate big list in chunks - movie["media"] = "movie" - if self.api.check_if_watched(movie): - xbmc.log("Simkl: {0}".format(movie)) - ret = xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount":max(movie["playcount"], 1), - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) - xbmc.log(ret) - - todump["method"] = "VideoLibrary.GetTVShows" - todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] - #If watchedepisodes > 0 - kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) - kodilibrary = json.loads(kodilibrary) - debug_cnt = 0 - if kodilibrary["result"]["limits"]["total"] >0: - for tvshow in kodilibrary["result"]["tvshows"]: - #if debug_cnt >= 3: break #I have a lot of TV Shows, only for testing - debug_cnt += 1 - - todump["method"] = "VideoLibrary.GetSeasons" - #todump["params"]["Library.Id"] = tvshow["tvshowid"] - todump["id"] = tvshow["tvshowid"] - todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] - seasons = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(json.dumps(tvshow)) - xbmc.log(seasons) - seasons = json.loads(seasons) - - - for season in seasons["result"]["seasons"]: - values = [] - - todump["method"] = "VideoLibrary.GetEpisodes" - todump["params"]["tvshowid"] = tvshow["tvshowid"] - todump["params"]["season"] = season["season"] - todump["params"]["properties"] = ["title", "rating", "playcount", - "season", "episode", "showtitle", "lastplayed", "tvshowid"] - - episodes = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(episodes) - episodes = json.loads(episodes) - - if episodes["result"]["limits"]["total"] > 0: - for episode in episodes["result"]["episodes"]: - values.append({ - "type": "tv", - "season": episode["season"], - "episode": episode["episode"], - "title": episode["showtitle"], - "tvdb": tvshow["imdbnumber"] - }) - - watched = self.api.check_if_watched(values, False) - xbmc.log(json.dumps(watched)) - - for i, episode in enumerate(episodes["result"]["episodes"]): - toupdate = { - "jsonrpc": "2.0", - "method": "VideoLibrary.SetEpisodeDetails", - "params": { - "episodeid":episode["episodeid"], - "playcount": int(watched[i]["result"]), - }, - "id": "libMovies" - } - try: - toupdate["params"]["lastplayed"] = watched[i]["last_watched"] - except KeyError: - toupdate["params"]["lastplayed"] = "" - - info = xbmc.executeJSONRPC(json.dumps(toupdate)) - xbmc.log("Simkl: Info: {0}".format(info)) - - del todump["params"]["tvshowid"] - del todump["params"]["season"] - - #series = self.api.get_all_items("shows") - #xbmc.log(series) + kodilibrary = json.loads(xbmc.executeJSONRPC(json.dumps(todump))) + if kodilibrary["result"]["limits"]["total"] > 0: + xbmc.log(str(kodilibrary)) + progress = interface.SyncProgress("movies", "full") + each = float(100) / kodilibrary["result"]["limits"]["total"] + for movie in kodilibrary["result"]["movies"]: + progress.push(each, "{0} ({1})".format(movie["label"], movie["year"])) + if movie["playcount"] == 0: + ### DOWNLOAD FROM KODI + #Separate big list in chunks + movie["media"] = "movie" + if self.api.check_if_watched(movie): + xbmc.log("Simkl: {0}".format(movie)) + ret = xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": { + "playcount": 1, + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) + #xbmc.log(ret) + del progress + + todump["method"] = "VideoLibrary.GetTVShows" + todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] + #If watchedepisodes > 0 + kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) + kodilibrary = json.loads(kodilibrary) + + if kodilibrary["result"]["limits"]["total"] > 0: + progress = interface.SyncProgress("TV Shows", "full") + each = float(100) / kodilibrary["result"]["limits"]["total"] + debug_cnt = 0 + for tvshow in kodilibrary["result"]["tvshows"]: + #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing + progress.push(each, tvshow["label"]) + debug_cnt += 1 + + + todump["method"] = "VideoLibrary.GetSeasons" + #todump["params"]["Library.Id"] = tvshow["tvshowid"] + todump["id"] = tvshow["tvshowid"] + todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] + seasons = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(json.dumps(tvshow)) + xbmc.log(seasons) + seasons = json.loads(seasons) + + + for season in seasons["result"]["seasons"]: + values = [] + + todump["method"] = "VideoLibrary.GetEpisodes" + todump["params"]["tvshowid"] = tvshow["tvshowid"] + todump["params"]["season"] = season["season"] + todump["params"]["properties"] = ["title", "rating", "playcount", + "season", "episode", "showtitle", "lastplayed", "tvshowid"] + + episodes = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(episodes) + episodes = json.loads(episodes) + + if episodes["result"]["limits"]["total"] > 0: + for episode in episodes["result"]["episodes"]: + values.append({ + "type": "tv", + "season": episode["season"], + "episode": episode["episode"], + "title": episode["showtitle"], + "tvdb": tvshow["imdbnumber"] + }) + + watched = self.api.check_if_watched(values, False) + xbmc.log(json.dumps(watched)) + + for i, episode in enumerate(episodes["result"]["episodes"]): + toupdate = { + "jsonrpc": "2.0", + "method": "VideoLibrary.SetEpisodeDetails", + "params": { + "episodeid":episode["episodeid"], + "playcount": int(watched[i]["result"]), + }, + "id": "libMovies" + } + try: + toupdate["params"]["lastplayed"] = watched[i]["last_watched"] + except KeyError: + toupdate["params"]["lastplayed"] = "" + + info = xbmc.executeJSONRPC(json.dumps(toupdate)) + xbmc.log("Simkl: Info: {0}".format(info)) + + del todump["params"]["tvshowid"] + del todump["params"]["season"] + del progress xbmc.log("Simkl: Finished syncing library") interface.notify("Finished syncing library") class Player(xbmc.Player): + """ Replaces the Kodi player class """ def __init__(self): xbmc.Player.__init__(self) @staticmethod def getMediaType(): + """ Returns the MediaType of the file currently playing """ if xbmc.getCondVisibility('Container.Content(tvshows)'): return "show" elif xbmc.getCondVisibility('Container.Content(seasons)'): @@ -151,13 +172,17 @@ def getMediaType(): return None def onPlayBackStarted(self): + """ Activated at start """ #self.onPlayBackStopped() pass def onPlayBackSeek(self, *args): + """ Activated on seek """ self.onPlayBackStopped() def onPlayBackResumed(self): + """ Activated on resume """ self.onPlayBackStopped() def onPlayBackEnded(self): + """ Activated at end """ xbmc.log("Simkl: ONPLAYBACKENDED") self.onPlayBackStopped() diff --git a/resources/lib/interface.py b/resources/lib/interface.py index 7f3d088..041cf56 100644 --- a/resources/lib/interface.py +++ b/resources/lib/interface.py @@ -29,6 +29,7 @@ def login(logged): __addon__.setSetting("loginbool", str(bool(1)).lower()) class loginDialog(xbmcgui.WindowXMLDialog): + """ The login dialog popped when you click on LogIn """ def __init__(self, xmlFilename, scriptPath, pin, url, check_login, log, exp=900, inter=5, api=None): self.pin = pin @@ -101,3 +102,14 @@ def onClick(self, controlID): xbmc.log("Simkl: onclick {0}, {1}".format(controlID, self)) if controlID == CANCEL_BUTTON: self.canceled = True + +class SyncProgress(xbmcgui.DialogProgressBG): + def __init__(self, media="None", mode="None"): + self.cnt = 0 + self.msg = "Simkl: Syncing {0} library, {1} mode".format(media, mode) + self.create(self.msg, "Starting") + + def push(self, i, message=None): + self.cnt += i + self.update(int(self.cnt), message=message) + diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 7abf8e8..f892544 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -204,7 +204,8 @@ def watched(self, item, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0 xbmc.log("Simkl: Can't scrobble. User not logged in or file locked") return 0 - def get_all_items(self, mediatype): + @staticmethod + def get_all_items(mediatype): """ mediatype can be 'shows', 'movies' or 'anime' http://docs.simkl.apiary.io/#reference/sync/last-activities/get-all-items-in-the-user's-watchlist @@ -213,7 +214,8 @@ def get_all_items(self, mediatype): con.request("GET", "/sync/all-items/{0}?extended=full".format(mediatype), headers=headers) return con.getresponse().read() - def check_if_watched(self, item, movie=True): + @staticmethod + def check_if_watched(item, movie=True): """ Checks if an item has been watched """ con = httplib.HTTPSConnection("api.simkl.com") if movie: diff --git a/resources/settings.xml b/resources/settings.xml index fce50a8..1c0d72c 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -9,7 +9,6 @@ - @@ -17,4 +16,15 @@ percent" visible="false"/> + + + + + + + + + + + diff --git a/service.py b/service.py index 8d41aa4..aac8e8d 100644 --- a/service.py +++ b/service.py @@ -23,16 +23,26 @@ def getstr(strid): return __addon__.getLocalizedString(strid) except IOError: __compdate__ = "ERROR: No such file or directory" +class Monitor(xbmc.Monitor): + """ http://mirrors.kodi.tv/docs/python-docs/16.x-jarvis/xbmc.html#Monitor """ + def __init__(self, engine): + self.engine = engine + + def onScanFinished(self): + """ When library scan finishes """ + ### Connect with config + self.engine.synclibrary() + if __name__ == "__main__": xbmc.log("Simkl dir: " + str(xbmc.translatePath("special://home"))) xbmc.log("Simkl | Python Version: " + str(sys.version)) xbmc.log("Simkl | "+ str(sys.argv), level=xbmc.LOGDEBUG) xbmc.log("Simkl | compdate: {0}".format(__compdate__)) - monitor = xbmc.Monitor() player = engine.Player() player.addon = __addon__ eng = engine.Engine(API.api, player) + monitor = Monitor(eng) if API.api.internet == False: interface.notify(getstr(32027)) From d92ab21340f51c24a6d481fa7615e300f6d7a8e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Sun, 12 Feb 2017 01:33:32 +0100 Subject: [PATCH 12/23] onPlayBackStopped improved --- service.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/service.py b/service.py index aac8e8d..b9f816e 100644 --- a/service.py +++ b/service.py @@ -38,6 +38,7 @@ def onScanFinished(self): xbmc.log("Simkl | Python Version: " + str(sys.version)) xbmc.log("Simkl | "+ str(sys.argv), level=xbmc.LOGDEBUG) xbmc.log("Simkl | compdate: {0}".format(__compdate__)) + monitor = xbmc.Monitor() player = engine.Player() player.addon = __addon__ @@ -52,9 +53,6 @@ def onScanFinished(self): else: interface.notify(getstr(32025).format(API.api.USERSETTINGS["user"]["name"])) - #Only for testing purposes: - eng.synclibrary() - #__addon__.openSettings() while not monitor.abortRequested(): if monitor.waitForAbort(90): From 4ef415d1cecf9030899ce83b47fc20ca8d9c0333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Wed, 15 Feb 2017 16:21:01 +0100 Subject: [PATCH 13/23] Simplify --- resources/data/compdate.txt | 4 ++++ resources/lib/engine.py | 19 ++++++++++--------- resources/lib/interface.py | 6 ++++-- resources/settings.xml | 1 + service.py | 9 +++++---- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 826d6f8..90254c9 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1,5 @@ +<<<<<<< master 2017-03-04 21:39:23+01:00 +======= +2017-02-12 01:33:25+01:00 +>>>>>>> Simplify diff --git a/resources/lib/engine.py b/resources/lib/engine.py index b53d66a..ce27547 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -62,16 +62,17 @@ def synclibrary(self, mode="quick"): movie["media"] = "movie" if self.api.check_if_watched(movie): xbmc.log("Simkl: {0}".format(movie)) - ret = xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount": 1, - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) + xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": { + "playcount": 1, + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) #xbmc.log(ret) + progress.push(10, "") del progress todump["method"] = "VideoLibrary.GetTVShows" diff --git a/resources/lib/interface.py b/resources/lib/interface.py index 041cf56..b961f95 100644 --- a/resources/lib/interface.py +++ b/resources/lib/interface.py @@ -45,9 +45,9 @@ def __init__(self, xmlFilename, scriptPath, pin, url, check_login, log, def threaded(self): """ A loop threaded function, so you can do another things meanwhile """ xbmc.log("Simkl: threaded: {0}".format(self)) - cnt = 0 + cnt = 1 while self.waiting: - if cnt % (self.inter+1) == 0 and cnt>1: + if cnt % (self.inter+1) == 0: xbmc.log("Simkl: Still waiting... {0}".format(cnt)) if self.check_login(self.pin, self.log): @@ -104,12 +104,14 @@ def onClick(self, controlID): self.canceled = True class SyncProgress(xbmcgui.DialogProgressBG): + """ The progress dialog when syncing """ def __init__(self, media="None", mode="None"): self.cnt = 0 self.msg = "Simkl: Syncing {0} library, {1} mode".format(media, mode) self.create(self.msg, "Starting") def push(self, i, message=None): + """ Updates the percentage and description """ self.cnt += i self.update(int(self.cnt), message=message) diff --git a/resources/settings.xml b/resources/settings.xml index 1c0d72c..a765679 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -17,6 +17,7 @@ + diff --git a/service.py b/service.py index b9f816e..f3e0320 100644 --- a/service.py +++ b/service.py @@ -8,13 +8,14 @@ import sys, os import xbmcaddon import xbmc +import resources from resources.lib import interface, engine from resources.lib import simklapi as API +from resources.lib.utils import * __addon__ = xbmcaddon.Addon() interface.__addon__ = __addon__ autoscrobble = __addon__.getSetting("autoscrobble") -def getstr(strid): return __addon__.getLocalizedString(strid) try: compdatefile = os.path.join(__addon__.getAddonInfo("path").decode("utf-8"), "resources", "data", "compdate.txt") @@ -28,17 +29,17 @@ class Monitor(xbmc.Monitor): def __init__(self, engine): self.engine = engine - def onScanFinished(self): + def onScanFinished(self, arg): """ When library scan finishes """ ### Connect with config - self.engine.synclibrary() + xbmc.log("Simkl: onScanFinished {0}".format(str(arg))) + if bool(getSetting("synclib")): self.engine.synclibrary() if __name__ == "__main__": xbmc.log("Simkl dir: " + str(xbmc.translatePath("special://home"))) xbmc.log("Simkl | Python Version: " + str(sys.version)) xbmc.log("Simkl | "+ str(sys.argv), level=xbmc.LOGDEBUG) xbmc.log("Simkl | compdate: {0}".format(__compdate__)) - monitor = xbmc.Monitor() player = engine.Player() player.addon = __addon__ From 2c68a86ccd60f1ade1215c19c0d04259f9a81b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Thu, 16 Feb 2017 23:46:24 +0100 Subject: [PATCH 14/23] Error fixed --- resources/lib/engine.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/resources/lib/engine.py b/resources/lib/engine.py index ce27547..13b38f5 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -194,7 +194,7 @@ def onPlayBackStopped(self): item = json.loads(xbmc.executeJSONRPC(json.dumps({ "jsonrpc": "2.0", "method": "Player.GetItem", "params": { - "properties": ["showtitle", "title", "season", "episode", "file", "tvshowid", "imdbnumber", "genre" ], + "properties": ["showtitle", "title", "season", "episode", "file", "tvshowid", "imdbnumber", "year" ], "playerid": 1}, "id": "VideoGetItem"})))["result"]["item"] if item["tvshowid"] != -1: @@ -210,9 +210,6 @@ def onPlayBackStopped(self): if percentage > pctconfig: bubble = __addon__.getSetting("bubble") - xbmc.log("Simkl: Bubble == {0}".format(bubble)) - xbmc.log("Percentage: {0}, pctconfig {1}".format(percentage, pctconfig)) - r = self.api.watched(item, self.getTotalTime()) if bubble=="true" and r: @@ -231,7 +228,7 @@ def onPlayBackStopped(self): txt = item["label"] title = "" if item["type"] == "movie": - txt = item["title"] + txt = "".join([item["title"], " (", str(item["year"]), ")"]) elif item["type"] == "episode": txt = item["showtitle"] title = "- S{:02}E{:02}".format(item["season"], item["episode"]) From 081017568ebcdf160e4c9dc204d5b59187bc4738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Tue, 21 Feb 2017 17:08:48 +0100 Subject: [PATCH 15/23] w/ Settings --- resources/lib/engine.py | 195 ++++++++++++++++++++-------------------- resources/lib/utils.py | 1 + 2 files changed, 100 insertions(+), 96 deletions(-) diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 13b38f5..715fa81 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -4,6 +4,7 @@ import os import xbmc import interface +from utils import * import json __addon__ = interface.__addon__ def getstr(strid): return interface.getstr(strid) @@ -49,104 +50,106 @@ def synclibrary(self, mode="quick"): }, "id": "libMovies" } - kodilibrary = json.loads(xbmc.executeJSONRPC(json.dumps(todump))) - if kodilibrary["result"]["limits"]["total"] > 0: - xbmc.log(str(kodilibrary)) - progress = interface.SyncProgress("movies", "full") - each = float(100) / kodilibrary["result"]["limits"]["total"] - for movie in kodilibrary["result"]["movies"]: - progress.push(each, "{0} ({1})".format(movie["label"], movie["year"])) - if movie["playcount"] == 0: - ### DOWNLOAD FROM KODI - #Separate big list in chunks - movie["media"] = "movie" - if self.api.check_if_watched(movie): - xbmc.log("Simkl: {0}".format(movie)) - xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount": 1, - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) - #xbmc.log(ret) - progress.push(10, "") - del progress - - todump["method"] = "VideoLibrary.GetTVShows" - todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] - #If watchedepisodes > 0 - kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) - kodilibrary = json.loads(kodilibrary) - - if kodilibrary["result"]["limits"]["total"] > 0: - progress = interface.SyncProgress("TV Shows", "full") - each = float(100) / kodilibrary["result"]["limits"]["total"] - debug_cnt = 0 - for tvshow in kodilibrary["result"]["tvshows"]: - #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing - progress.push(each, tvshow["label"]) - debug_cnt += 1 - - - todump["method"] = "VideoLibrary.GetSeasons" - #todump["params"]["Library.Id"] = tvshow["tvshowid"] - todump["id"] = tvshow["tvshowid"] - todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] - seasons = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(json.dumps(tvshow)) - xbmc.log(seasons) - seasons = json.loads(seasons) - - - for season in seasons["result"]["seasons"]: - values = [] - - todump["method"] = "VideoLibrary.GetEpisodes" - todump["params"]["tvshowid"] = tvshow["tvshowid"] - todump["params"]["season"] = season["season"] - todump["params"]["properties"] = ["title", "rating", "playcount", - "season", "episode", "showtitle", "lastplayed", "tvshowid"] - - episodes = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(episodes) - episodes = json.loads(episodes) - - if episodes["result"]["limits"]["total"] > 0: - for episode in episodes["result"]["episodes"]: - values.append({ - "type": "tv", - "season": episode["season"], - "episode": episode["episode"], - "title": episode["showtitle"], - "tvdb": tvshow["imdbnumber"] - }) - - watched = self.api.check_if_watched(values, False) - xbmc.log(json.dumps(watched)) - - for i, episode in enumerate(episodes["result"]["episodes"]): - toupdate = { + if getSetting("movie-pull"): + kodilibrary = json.loads(xbmc.executeJSONRPC(json.dumps(todump))) + if kodilibrary["result"]["limits"]["total"] > 0: + xbmc.log(str(kodilibrary)) + progress = interface.SyncProgress("movies", "full") + each = float(100) / kodilibrary["result"]["limits"]["total"] + for movie in kodilibrary["result"]["movies"]: + progress.push(each, "{0} ({1})".format(movie["label"], movie["year"])) + if movie["playcount"] == 0: + ### DOWNLOAD FROM KODI + #Separate big list in chunks + movie["media"] = "movie" + if self.api.check_if_watched(movie): + xbmc.log("Simkl: {0}".format(movie)) + xbmc.executeJSONRPC(json.dumps({ "jsonrpc": "2.0", - "method": "VideoLibrary.SetEpisodeDetails", + "method": "VideoLibrary.SetMovieDetails", "params": { - "episodeid":episode["episodeid"], - "playcount": int(watched[i]["result"]), - }, - "id": "libMovies" - } - try: - toupdate["params"]["lastplayed"] = watched[i]["last_watched"] - except KeyError: - toupdate["params"]["lastplayed"] = "" - - info = xbmc.executeJSONRPC(json.dumps(toupdate)) - xbmc.log("Simkl: Info: {0}".format(info)) - - del todump["params"]["tvshowid"] - del todump["params"]["season"] + "playcount": 1, + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) + #xbmc.log(ret) + progress.push(10, "") + del progress + + if getSetting("shows-pull"): + todump["method"] = "VideoLibrary.GetTVShows" + todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] + #If watchedepisodes > 0 + kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) + kodilibrary = json.loads(kodilibrary) + + if kodilibrary["result"]["limits"]["total"] > 0: + progress = interface.SyncProgress("TV Shows", "full") + each = float(100) / kodilibrary["result"]["limits"]["total"] + debug_cnt = 0 + for tvshow in kodilibrary["result"]["tvshows"]: + #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing + progress.push(each, tvshow["label"]) + debug_cnt += 1 + + + todump["method"] = "VideoLibrary.GetSeasons" + #todump["params"]["Library.Id"] = tvshow["tvshowid"] + todump["id"] = tvshow["tvshowid"] + todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] + seasons = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(json.dumps(tvshow)) + xbmc.log(seasons) + seasons = json.loads(seasons) + + + for season in seasons["result"]["seasons"]: + values = [] + + todump["method"] = "VideoLibrary.GetEpisodes" + todump["params"]["tvshowid"] = tvshow["tvshowid"] + todump["params"]["season"] = season["season"] + todump["params"]["properties"] = ["title", "rating", "playcount", + "season", "episode", "showtitle", "lastplayed", "tvshowid"] + + episodes = xbmc.executeJSONRPC(json.dumps(todump)) + xbmc.log(episodes) + episodes = json.loads(episodes) + + if episodes["result"]["limits"]["total"] > 0: + for episode in episodes["result"]["episodes"]: + values.append({ + "type": "tv", + "season": episode["season"], + "episode": episode["episode"], + "title": episode["showtitle"], + "tvdb": tvshow["imdbnumber"] + }) + + watched = self.api.check_if_watched(values, False) + xbmc.log(json.dumps(watched)) + + for i, episode in enumerate(episodes["result"]["episodes"]): + toupdate = { + "jsonrpc": "2.0", + "method": "VideoLibrary.SetEpisodeDetails", + "params": { + "episodeid":episode["episodeid"], + "playcount": int(watched[i]["result"]), + }, + "id": "libMovies" + } + try: + toupdate["params"]["lastplayed"] = watched[i]["last_watched"] + except KeyError: + toupdate["params"]["lastplayed"] = "" + + info = xbmc.executeJSONRPC(json.dumps(toupdate)) + xbmc.log("Simkl: Info: {0}".format(info)) + + del todump["params"]["tvshowid"] + del todump["params"]["season"] del progress xbmc.log("Simkl: Finished syncing library") diff --git a/resources/lib/utils.py b/resources/lib/utils.py index 30fd062..6ee445e 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -16,4 +16,5 @@ def getSetting(settingid): ret = __addon__.getSetting(settingid) xbmc.log("Simkl: {0}: {1}".format(settingid, ret)) if ret == "false": ret = False + elif ret == "true": ret = True return ret \ No newline at end of file From fbca0f15f6e41702e4ec61a7bdf438d38f55b014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Thu, 16 Mar 2017 19:27:13 +0100 Subject: [PATCH 16/23] Push TvShows and Movies --- resources/data/compdate.txt | 4 +++ resources/lib/engine.py | 50 +++++++++++++++++++++--------------- resources/lib/simklapi.py | 11 +++----- resources/settings.xml | 8 +++--- script.simkl.zip | Bin 380781 -> 382470 bytes 5 files changed, 42 insertions(+), 31 deletions(-) diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 90254c9..c5a1702 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1,5 +1,9 @@ <<<<<<< master +<<<<<<< master 2017-03-04 21:39:23+01:00 ======= 2017-02-12 01:33:25+01:00 >>>>>>> Simplify +======= +2017-03-16 19:28:38+01:00 +>>>>>>> Push TvShows and Movies diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 715fa81..5a6029d 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -17,14 +17,13 @@ def __init__(self, api, player): player.api = api self.synclibrary() - def synclibrary(self, mode="quick"): + def synclibrary(self, mode="full"): """ - Fetches the library from Simkl to Kodi - Mode can be "quick" or "full" + Fetches the library from Simkl to Kodi, and uploads what is not on Simkl """ xbmc.log("Simkl: Syncing library (Simkl to Kodi)") - mode = "full" + watched_on_kodi = {"movies":[],"shows":[]} if mode == "full": todump = { @@ -62,19 +61,21 @@ def synclibrary(self, mode="quick"): ### DOWNLOAD FROM KODI #Separate big list in chunks movie["media"] = "movie" - if self.api.check_if_watched(movie): - xbmc.log("Simkl: {0}".format(movie)) - xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount": 1, - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) - #xbmc.log(ret) - progress.push(10, "") + if getSetting("movie-pull"): + if self.api.check_if_watched(movie): + xbmc.log("Simkl: {0}".format(movie)) + xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": { + "playcount": 1, + #"lastplayed":"", + "movieid":movie["movieid"] + } + })) + elif getSetting("movie-push"): + watched_on_kodi["movies"].append({"ids":{"imdb":movie["imdbnumber"]}}) + progress.push(100, "") del progress if getSetting("shows-pull"): @@ -87,12 +88,11 @@ def synclibrary(self, mode="quick"): if kodilibrary["result"]["limits"]["total"] > 0: progress = interface.SyncProgress("TV Shows", "full") each = float(100) / kodilibrary["result"]["limits"]["total"] - debug_cnt = 0 + #debug_cnt = 0 for tvshow in kodilibrary["result"]["tvshows"]: #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing + #debug_cnt += 1 progress.push(each, tvshow["label"]) - debug_cnt += 1 - todump["method"] = "VideoLibrary.GetSeasons" #todump["params"]["Library.Id"] = tvshow["tvshowid"] @@ -145,6 +145,13 @@ def synclibrary(self, mode="quick"): except KeyError: toupdate["params"]["lastplayed"] = "" + if episode["playcount"] > int(watched[i]["result"]) and getSetting("shows-push"): + watched_on_kodi["shows"].append({ + "ids":{"tvdb":tvshow["imdbnumber"]}, + "seasons":[{"number":episode["season"], + "episodes":[{"watched_at": episode["lastplayed"], "number":episode["episode"]}]}] + }) + info = xbmc.executeJSONRPC(json.dumps(toupdate)) xbmc.log("Simkl: Info: {0}".format(info)) @@ -152,6 +159,9 @@ def synclibrary(self, mode="quick"): del todump["params"]["season"] del progress + xbmc.log(str(watched_on_kodi)) + xbmc.log(str(self.api.watched_from_list(watched_on_kodi))) + xbmc.log("Simkl: Finished syncing library") interface.notify("Finished syncing library") diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index f892544..3dd87b5 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -205,14 +205,11 @@ def watched(self, item, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0 return 0 @staticmethod - def get_all_items(mediatype): - """ - mediatype can be 'shows', 'movies' or 'anime' - http://docs.simkl.apiary.io/#reference/sync/last-activities/get-all-items-in-the-user's-watchlist - """ + def watched_from_list(lst): con = httplib.HTTPSConnection("api.simkl.com") - con.request("GET", "/sync/all-items/{0}?extended=full".format(mediatype), headers=headers) - return con.getresponse().read() + con.request("GET", "/sync/history", body=json.dumps(lst), headers=headers) + r = con.getresponse().read() + return min(max(json.loads(r)["added"].values()),1) @staticmethod def check_if_watched(item, movie=True): diff --git a/resources/settings.xml b/resources/settings.xml index a765679..47c3184 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -17,15 +17,15 @@ - + - - + + - + diff --git a/script.simkl.zip b/script.simkl.zip index 10814b90b5ad949c1090b9f1e6a403e1614debf7..7be3aec4498ee15c62a03354af64ecedffb12371 100644 GIT binary patch delta 12316 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 K=j}&4!2bYf7!~;d delta 10687 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 A#Q*>R From f9f382967386b46e9e3e7387a27eb59b703c3c63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Sat, 18 Mar 2017 20:12:16 +0100 Subject: [PATCH 17/23] Started new way of syncing libraries --- resources/lib/engine.py | 216 +++++++++++++------------------------- resources/lib/simklapi.py | 2 +- resources/lib/utils.py | 10 +- 3 files changed, 83 insertions(+), 145 deletions(-) diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 8b48344..e6d626b 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -17,153 +17,85 @@ def __init__(self, api, player): player.api = api def synclibrary(self, mode="full"): - """ - Fetches the library from Simkl to Kodi, and uploads what is not on Simkl - """ - xbmc.log("Simkl: Syncing library (Simkl to Kodi)") + simkl_old = get_old_file("simkl") + kodi_old = get_old_file("kodi") + kodi_current = {"movies": self.get_movies(), "episodes": self.get_episodes()} + if not os.path.exists(old_kodi): + #if True: + with open(kodi_old, "w+") as f: + f.write(json.dumps(kodi_current, indent=2)) - watched_on_kodi = {"movies":[],"shows":[]} + @staticmethod + def get_movies(): + movies_list = [] + movies = json.loads(xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.GetMovies", + "params": { + "limits": { + "start": 0, + "end": 0 + }, + "properties": [ + "playcount", + "imdbnumber", + "file", + "lastplayed", + "year" + ], + "sort": { + "order": "ascending", + "method": "playcount", + #"ignorearticle": True + } + }, + "id": "libMovies" + })))["result"]["movies"] + for movie in movies: + if movie["playcount"] > 0: + movies_list.append(movie) + return movies_list - if mode == "full": - todump = { + @staticmethod + def get_episodes(): + shows_library = json.loads(xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.GetTVShows", + "params": { + "limits": {"start": 0, "end": 0}, + "properties": ["imdbnumber", "title", "watchedepisodes", "year"], + "sort": {"order": "ascending", "method": "season"} + }, + "id": "libMovies" + }))) + if shows_library["result"]["limits"]["total"] == 0: return None + list_tvshows = [] + for tvshow in shows_library["result"]["tvshows"]: + list_episodes = [] + episodes = json.loads(xbmc.executeJSONRPC(json.dumps({ "jsonrpc": "2.0", - "method": "VideoLibrary.GetMovies", + "method": "VideoLibrary.GetEpisodes", "params": { - "limits": { - "start": 0, - "end": 1000 - }, - "properties": [ - "playcount", - "imdbnumber", - "file", - "lastplayed", - "year" - ], - "sort": { - "order": "ascending", - "method": "playcount", - #"ignorearticle": True - } + "limits": {"start": 0, "end": 0}, + "properties": ["playcount", "season", "episode", "lastplayed", "tvshowid"], + "sort": {"order": "ascending", "method": "playcount"}, + #"season": season["season"], + "tvshowid": tvshow["tvshowid"] }, - "id": "libMovies" - } - if getSetting("movie-pull"): - kodilibrary = json.loads(xbmc.executeJSONRPC(json.dumps(todump))) - if kodilibrary["result"]["limits"]["total"] > 0: - xbmc.log(str(kodilibrary)) - progress = interface.SyncProgress("movies", "full") - each = float(100) / kodilibrary["result"]["limits"]["total"] - for movie in kodilibrary["result"]["movies"]: - progress.push(each, "{0} ({1})".format(movie["label"], movie["year"])) - if movie["playcount"] == 0: - ### DOWNLOAD FROM KODI - #Separate big list in chunks - movie["media"] = "movie" - if getSetting("movie-pull"): - if self.api.check_if_watched(movie): - xbmc.log("Simkl: {0}".format(movie)) - xbmc.executeJSONRPC(json.dumps({ - "jsonrpc": "2.0", - "method": "VideoLibrary.SetMovieDetails", - "params": { - "playcount": 1, - #"lastplayed":"", - "movieid":movie["movieid"] - } - })) - elif getSetting("movie-push"): - watched_on_kodi["movies"].append({"ids":{"imdb":movie["imdbnumber"]}}) - progress.push(100, "") - del progress - - if getSetting("shows-pull"): - todump["method"] = "VideoLibrary.GetTVShows" - todump["params"]["properties"] = ["imdbnumber", "title", "watchedepisodes"] - #If watchedepisodes > 0 - kodilibrary = xbmc.executeJSONRPC(json.dumps(todump)) - kodilibrary = json.loads(kodilibrary) - - if kodilibrary["result"]["limits"]["total"] > 0: - progress = interface.SyncProgress("TV Shows", "full") - each = float(100) / kodilibrary["result"]["limits"]["total"] - #debug_cnt = 0 - for tvshow in kodilibrary["result"]["tvshows"]: - #if debug_cnt >= 10: break #I have a lot of TV Shows, only for testing - #debug_cnt += 1 - progress.push(each, tvshow["label"]) - - todump["method"] = "VideoLibrary.GetSeasons" - #todump["params"]["Library.Id"] = tvshow["tvshowid"] - todump["id"] = tvshow["tvshowid"] - todump["params"]["properties"] = ["season", "episode", "watchedepisodes", "showtitle"] - seasons = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(json.dumps(tvshow)) - xbmc.log(seasons) - seasons = json.loads(seasons) - - - for season in seasons["result"]["seasons"]: - values = [] - - todump["method"] = "VideoLibrary.GetEpisodes" - todump["params"]["tvshowid"] = tvshow["tvshowid"] - todump["params"]["season"] = season["season"] - todump["params"]["properties"] = ["title", "rating", "playcount", - "season", "episode", "showtitle", "lastplayed", "tvshowid"] - - episodes = xbmc.executeJSONRPC(json.dumps(todump)) - xbmc.log(episodes) - episodes = json.loads(episodes) - - if episodes["result"]["limits"]["total"] > 0: - for episode in episodes["result"]["episodes"]: - values.append({ - "type": "tv", - "season": episode["season"], - "episode": episode["episode"], - "title": episode["showtitle"], - "tvdb": tvshow["imdbnumber"] - }) - - watched = self.api.check_if_watched(values, False) - xbmc.log(json.dumps(watched)) - - for i, episode in enumerate(episodes["result"]["episodes"]): - toupdate = { - "jsonrpc": "2.0", - "method": "VideoLibrary.SetEpisodeDetails", - "params": { - "episodeid":episode["episodeid"], - "playcount": int(watched[i]["result"]), - }, - "id": "libMovies" - } - try: - toupdate["params"]["lastplayed"] = watched[i]["last_watched"] - except KeyError: - toupdate["params"]["lastplayed"] = "" - - if episode["playcount"] > int(watched[i]["result"]) and getSetting("shows-push"): - watched_on_kodi["shows"].append({ - "ids":{"tvdb":tvshow["imdbnumber"]}, - "seasons":[{"number":episode["season"], - "episodes":[{"watched_at": episode["lastplayed"], "number":episode["episode"]}]}] - }) - - info = xbmc.executeJSONRPC(json.dumps(toupdate)) - xbmc.log("Simkl: Info: {0}".format(info)) - - del todump["params"]["tvshowid"] - del todump["params"]["season"] - del progress - - xbmc.log(str(watched_on_kodi)) - xbmc.log(str(self.api.watched_from_list(watched_on_kodi))) - - xbmc.log("Simkl: Finished syncing library") - interface.notify("Finished syncing library") - + "id": tvshow["tvshowid"] + }))) + + if episodes["result"]["limits"]["end"] > 0: + for episode in episodes["result"]["episodes"]: + if episode["playcount"] > 0: list_episodes.append(episode) + if len(list_episodes) > 0: + list_tvshows.append({ + "title":tvshow["title"], + "year":tvshow["year"], + "imdbnumber":tvshow["imdbnumber"], + "episodes":list_episodes}) + + return list_tvshows class Player(xbmc.Player): """ Replaces the Kodi player class """ diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index e65fe29..b1a479a 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -13,7 +13,7 @@ def getstr(strid): return interface.getstr(strid) REDIRECT_URI = "https://simkl.com/apps/kodi/connected" USERFILE = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"), "simkl_key") -xbmc.translatePath("special://profile/simkl_key") +#xbmc.translatePath("special://profile/simkl_key") if not os.path.exists(USERFILE): os.mkdir(os.path.dirname(USERFILE)) diff --git a/resources/lib/utils.py b/resources/lib/utils.py index 6ee445e..94374aa 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -3,7 +3,7 @@ """ Utils module. Some basic functions that maybe I'll need more than once """ -import sys +import sys, os import xbmc, xbmcaddon __addon__ = xbmcaddon.Addon("script.simkl") @@ -17,4 +17,10 @@ def getSetting(settingid): xbmc.log("Simkl: {0}: {1}".format(settingid, ret)) if ret == "false": ret = False elif ret == "true": ret = True - return ret \ No newline at end of file + return ret + +def get_old_file(filename): + """ Gets filename, returns full path """ + fullpath = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"), "old_{}.json".format(filename)) + xbmc.log("Simkl: {} -- {}".format(filename, fullpath)) + return fullpath \ No newline at end of file From 83ebff44318854a5da84d3f40f02c4d7d918d0d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Fri, 7 Apr 2017 18:02:08 +0200 Subject: [PATCH 18/23] /fetchlibrary: diff and intersect --- resources/lib/engine.py | 79 +++++++++++++++++++++++++++++++++++---- resources/lib/simklapi.py | 14 +++++++ resources/lib/utils.py | 30 ++++++++++++++- 3 files changed, 114 insertions(+), 9 deletions(-) diff --git a/resources/lib/engine.py b/resources/lib/engine.py index e6d626b..ee03230 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -4,7 +4,9 @@ import os import xbmc import interface -from utils import * +import utils +from datetime import datetime +from utils import getstr, getSetting import json __addon__ = interface.__addon__ def getstr(strid): return interface.getstr(strid) @@ -16,14 +18,75 @@ def __init__(self, api, player): player.engine = self player.api = api + #Note 4 myself: Maybe you should handle movies and series completly different + #I mean: Two different functions, two different "databases", etc. def synclibrary(self, mode="full"): - simkl_old = get_old_file("simkl") - kodi_old = get_old_file("kodi") - kodi_current = {"movies": self.get_movies(), "episodes": self.get_episodes()} - if not os.path.exists(old_kodi): - #if True: - with open(kodi_old, "w+") as f: - f.write(json.dumps(kodi_current, indent=2)) + simkl_old_f = utils.get_old_file("simkl") + kodi_old_f = utils.get_old_file("kodi") + kodi_current = { + "movies": self.get_movies(), "episodes": self.get_episodes(), + "lastcheck": datetime.today().strftime(utils.SIMKL_TIME_FORMAT)} + #Don't update if library hasn't changed + simkl_current = self.api.get_all_items() + + def open_file(filename, current): + if not os.path.exists(filename): + #if True: + with open(filename, "w") as f: + f.write(json.dumps(current, indent=2)) + return current + else: + with open(filename, "r") as f: + old = json.loads(f.read()) + with open(filename, "w") as f: + f.write(json.dumps(current, indent=2)) + return old + + kodi_old = open_file(kodi_old_f, kodi_current) + simkl_old = open_file(simkl_old_f, simkl_current) + + self.syncmovies(simkl_old["movies"], simkl_current["movies"], kodi_old["movies"], kodi_current["movies"], kodi_old["lastcheck"]) + + # simkl_removed = self.diff(utils.simkl2kodi(simkl_current),utils.simkl2kodi(simkl_old)) + # simkl_added = self.diff(utils.simkl2kodi(simkl_old), utils.simkl2kodi(simkl_current)) + # kodi_removed = self.diff(kodi_current, kodi_old) + # kodi_added = self.diff(kodi_old, kodi_current) + # diff_kodi_simkl = self.diff(kodi_current, utils.simkl2kodi(simkl_current)) + # diff_simkl_kodi = self.diff(utils.simkl2kodi(simkl_current), kodi_current) + + def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, kodi_lastcheck): + simkl_lastcheck = utils.simkl_time_to_kodi(self.api.get_last_activity()["movies"]["completed"]) + xbmc.log("Simkl: Lastcheck movies %s" % simkl_lastcheck) + + simkl_added = self.diff(utils.simkl2kodi(simkl_old), utils.simkl2kodi(simkl_current)) + simkl_removed = self.diff(utils.simkl2kodi(simkl_current), utils.simkl2kodi(simkl_old)) + # U iterate through this, not through the WHOLE library + in_both = self.intersect(kodi_current, utils.simkl2kodi(simkl_current)) + for movie in in_both: + xbmc.log("Movie: %s" % movie) + + for movie in simkl_added: + xbmc.log("Added %s" % movie) + for movie in simkl_removed: + xbmc.log("Removed %s" % movie) + + @staticmethod + def diff(A, B): + """ + Returns the difference between A and B. About data return: B > A + """ + A_movies = set([x["imdbnumber"] for x in A]) + B_movies = set([x["imdbnumber"] for x in B]) + diff = list(B_movies - A_movies) + return [movie_B for movie_B in B if movie_B["imdbnumber"] in diff] + + @staticmethod + def intersect(A, B): + """ Returns the intersection between A and B. About data return: B > A """ + A_movies = set([x["imdbnumber"] for x in A]) + B_movies = set([x["imdbnumber"] for x in B]) + inter = A_movies & B_movies + return [movie_B for movie_B in B if movie_B["imdbnumber"] in inter] @staticmethod def get_movies(): diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index b1a479a..1e68f42 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -202,6 +202,13 @@ def watched(self, item, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0 xbmc.log("Simkl: Can't scrobble. User not logged in or file locked") return 0 + @staticmethod + def get_all_items(): + """ http://docs.simkl.apiary.io/#reference/sync/get-all-items/get-all-items-in-the-user's-watchlist """ + con = httplib.HTTPSConnection("api.simkl.com") + con.request("GET", "/sync/all-items/?extended=full", headers=headers) + return json.loads(con.getresponse().read()) + @staticmethod def watched_from_list(lst): con = httplib.HTTPSConnection("api.simkl.com") @@ -239,6 +246,13 @@ def check_connection(self, cnt=0): self.internet = False interface.notify(getstr(32027)) + @staticmethod + def get_last_activity(): + """ Method http://docs.simkl.apiary.io/#reference/sync/last-activities/get-last-activity """ + con = httplib.HTTPSConnection("api.simkl.com") + con.request("GET", "/sync/activities", headers=headers) + return json.loads(con.getresponse().read()) + api = API() if __name__ == "__main__": if sys.argv[1] == "login": diff --git a/resources/lib/utils.py b/resources/lib/utils.py index 94374aa..162a680 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -5,8 +5,12 @@ """ import sys, os import xbmc, xbmcaddon +from datetime import datetime __addon__ = xbmcaddon.Addon("script.simkl") +KODI_TIME_FORMAT = "%Y-%m-%d %H:%M:%S" +SIMKL_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.000Z" + def getstr(strid): """ Given an id, returns the localized string """ return __addon__.getLocalizedString(strid) @@ -23,4 +27,28 @@ def get_old_file(filename): """ Gets filename, returns full path """ fullpath = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"), "old_{}.json".format(filename)) xbmc.log("Simkl: {} -- {}".format(filename, fullpath)) - return fullpath \ No newline at end of file + return fullpath + +def simkl_time_to_kodi(string): + return datetime.strptime(string, SIMKL_TIME_FORMAT).strftime(KODI_TIME_FORMAT) +def kodi_time_to_simkl(string): + return datetime.strptime(string, KODI_TIME_FORMAT).strftime(SIMKL_TIME_FORMAT) + +def simkl2kodi(objects): + watched_movies_list = [] + for movie in objects: + if movie["status"] == "completed": + watched_movies_list.append({ + "year": movie["movie"]["year"], + "imdbnumber": movie["movie"]["ids"]["imdb"], + "label": movie["movie"]["title"], + "playcount": 1, + "lastplayed": simkl_time_to_kodi(movie["last_watched_at"]), + }) + + return watched_movies_list + +def find_match(item, database): + for item_database in database: + if item["imdbnumber"] == item_database["imdbnumber"]: return item_database + return None From ebe972b7539b296d3210f8501e365617cc968674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Sun, 9 Apr 2017 10:23:36 +0200 Subject: [PATCH 19/23] Almost done --- resources/data/compdate.txt | 14 +---- resources/lib/engine.py | 105 ++++++++++++++++++++++++++++-------- resources/lib/simklapi.py | 22 ++++++++ script.simkl.zip | Bin 382470 -> 384050 bytes 4 files changed, 106 insertions(+), 35 deletions(-) diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index f7a91c3..1968779 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1,13 +1 @@ -<<<<<<< HEAD -<<<<<<< master -<<<<<<< master -2017-03-04 21:39:23+01:00 -======= -2017-02-12 01:33:25+01:00 ->>>>>>> Simplify -======= -2017-03-16 19:28:38+01:00 ->>>>>>> Push TvShows and Movies -======= -2017-03-16 19:28:38+01:00 ->>>>>>> fetchlibrary +2017-04-09 10:22:34+02:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index ee03230..fc0f3b7 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -24,10 +24,14 @@ def synclibrary(self, mode="full"): simkl_old_f = utils.get_old_file("simkl") kodi_old_f = utils.get_old_file("kodi") kodi_current = { - "movies": self.get_movies(), "episodes": self.get_episodes(), - "lastcheck": datetime.today().strftime(utils.SIMKL_TIME_FORMAT)} - #Don't update if library hasn't changed + "movies": self.get_movies(), "episodes": self.get_episodes(), + "lastcheck": datetime.today().strftime(utils.SIMKL_TIME_FORMAT)} simkl_current = self.api.get_all_items() + # with open("/home/davo/.kodi/userdata/addon_data/script.simkl/current_simkl.json", "r") as f: + # simkl_current = json.loads(f.read()) + # with open("/home/davo/.kodi/userdata/addon_data/script.simkl/old_simkl.json", "r") as f: + # simkl_old = json.loads(f.read()) + def open_file(filename, current): if not os.path.exists(filename): @@ -47,28 +51,55 @@ def open_file(filename, current): self.syncmovies(simkl_old["movies"], simkl_current["movies"], kodi_old["movies"], kodi_current["movies"], kodi_old["lastcheck"]) - # simkl_removed = self.diff(utils.simkl2kodi(simkl_current),utils.simkl2kodi(simkl_old)) - # simkl_added = self.diff(utils.simkl2kodi(simkl_old), utils.simkl2kodi(simkl_current)) - # kodi_removed = self.diff(kodi_current, kodi_old) - # kodi_added = self.diff(kodi_old, kodi_current) - # diff_kodi_simkl = self.diff(kodi_current, utils.simkl2kodi(simkl_current)) - # diff_simkl_kodi = self.diff(utils.simkl2kodi(simkl_current), kodi_current) - def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, kodi_lastcheck): simkl_lastcheck = utils.simkl_time_to_kodi(self.api.get_last_activity()["movies"]["completed"]) xbmc.log("Simkl: Lastcheck movies %s" % simkl_lastcheck) simkl_added = self.diff(utils.simkl2kodi(simkl_old), utils.simkl2kodi(simkl_current)) simkl_removed = self.diff(utils.simkl2kodi(simkl_current), utils.simkl2kodi(simkl_old)) + kodi_added = self.diff(kodi_old, kodi_current) + kodi_removed = self.diff(kodi_current, kodi_old) # U iterate through this, not through the WHOLE library - in_both = self.intersect(kodi_current, utils.simkl2kodi(simkl_current)) - for movie in in_both: - xbmc.log("Movie: %s" % movie) + #in_both = self.intersect(kodi_current, utils.simkl2kodi(simkl_current)) + + for movie in simkl_added[0]: + if movie["imdbnumber"] not in kodi_removed[1]: + pass + for movie in simkl_removed[0]: + if movie["imdbnumber"] not in kodi_added[1]: + pass + + xbmc.log("Kodi_removed %s, %s" % kodi_removed) + movies_to_simkl = [] + for movie in self.get_movies(0): + #xbmc.log("Movie: %s" % movie) + if movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] not in kodi_removed[1]: + xbmc.log("Added %s" % movie) + movie["playcount"] = 1 + self.update_movie(movie) + elif movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] in kodi_removed[1]: + xbmc.log("Conflicting %s" % movie) + + if movie["imdbnumber"] in simkl_removed[1] and movie["imdbnumber"] not in kodi_added[1]: + xbmc.log("Removed %s" % movie) + movie["playcount"] = 0 + self.update_movie(movie) + elif movie["imdbnumber"] in simkl_removed and movie["imdbnumber"] in kodi_added[1]: + xbmc.log("Conflicting %s" % movie) + + if movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] not in simkl_removed[1]: + movie["playcount"] = 1 + movies_to_simkl.append(movie) + elif movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] in simkl_removed[1]: + xbmc.log("Conflicting %s" % movie) - for movie in simkl_added: - xbmc.log("Added %s" % movie) - for movie in simkl_removed: - xbmc.log("Removed %s" % movie) + if movie["imdbnumber"] in kodi_removed[1] and movie["imdbnumber"] not in simkl_added[1]: + movie["playcount"] = 0 + movies_to_simkl.append(movie) + elif movie["imdbnumber"] in kodi_removed[1] and movie["imdbnumber"] in simkl_added[1]: + xbmc.log("Conflicting %s" % movie) + + self.api.update_movies(movies_to_simkl) @staticmethod def diff(A, B): @@ -77,8 +108,21 @@ def diff(A, B): """ A_movies = set([x["imdbnumber"] for x in A]) B_movies = set([x["imdbnumber"] for x in B]) - diff = list(B_movies - A_movies) - return [movie_B for movie_B in B if movie_B["imdbnumber"] in diff] + diff = B_movies - A_movies + return [movie_B for movie_B in B if movie_B["imdbnumber"] in diff], diff + + ''' + @staticmethod + def sym_diff(A, B): + """ Return the symetric difference between A and B """ + A_movies = set([x["imdbnumber"] for x in A]) + B_movies = set([x["imdbnumber"] for x in B]) + diff1 = B_movies - A_movies + diff2 = A_movies - B_movies + symet = diff1 | diff2 + + [movie_B for movie_B in B if movie_B["imdbnumber"] in symet] + ''' @staticmethod def intersect(A, B): @@ -86,10 +130,17 @@ def intersect(A, B): A_movies = set([x["imdbnumber"] for x in A]) B_movies = set([x["imdbnumber"] for x in B]) inter = A_movies & B_movies - return [movie_B for movie_B in B if movie_B["imdbnumber"] in inter] + return [movie_B for movie_B in B if movie_B["imdbnumber"] in inter], inter @staticmethod - def get_movies(): + def union(A, B): + A_movies = set([x["imdbnumber"] for x in A]) + B_movies = set([x["imdbnumber"] for x in B]) + union = A_movies | B_movies + return [movie_B for movie_B in B if movie_B["imdbnumber"] in inter], union + + @staticmethod + def get_movies(playcount=1): movies_list = [] movies = json.loads(xbmc.executeJSONRPC(json.dumps({ "jsonrpc": "2.0", @@ -115,7 +166,7 @@ def get_movies(): "id": "libMovies" })))["result"]["movies"] for movie in movies: - if movie["playcount"] > 0: + if movie["playcount"] >= playcount: movies_list.append(movie) return movies_list @@ -160,6 +211,16 @@ def get_episodes(): return list_tvshows + @staticmethod + def update_movie(movie): + movie1 = {"movieid":movie["movieid"], "playcount":movie["playcount"]} #Y tho? + r = xbmc.executeJSONRPC(json.dumps({ + "jsonrpc": "2.0", + "method": "VideoLibrary.SetMovieDetails", + "params": movie1 + })) + xbmc.log(str(r)) + class Player(xbmc.Player): """ Replaces the Kodi player class """ def __init__(self): diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 1e68f42..8fc0c07 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -7,6 +7,7 @@ import xbmc import interface import httplib +import utils __addon__ = interface.__addon__ def getstr(strid): return interface.getstr(strid) @@ -253,6 +254,27 @@ def get_last_activity(): con.request("GET", "/sync/activities", headers=headers) return json.loads(con.getresponse().read()) + @staticmethod + def update_movies(movies): + con = httplib.HTTPSConnection("api.simkl.com") + movies_values = [] + for movie in movies: + xbmc.log("Updating to simkl: %s" % movie) + tmpdict = {} + tmpdict["ids"] = {"imdb": movie["imdbnumber"]} + if movie["playcount"] == 0: tmpdict["status"] = "plantowatch" + else: + tmpdict["status"] = "completed" + tmpdict["watched_at"] = utils.kodi_time_to_simkl(movie["lastplayed"]) + movies_values.append(tmpdict) + + values = json.dumps({"movies":movies_values}) + + xbmc.log("Values %s" % values) + con.request("GET", "/sync/history/", body=values, headers=headers) + r = con.getresponse().read() + xbmc.log("Respones: %s" % r) + api = API() if __name__ == "__main__": if sys.argv[1] == "login": diff --git a/script.simkl.zip b/script.simkl.zip index 7be3aec4498ee15c62a03354af64ecedffb12371..26dcb1e0780fdab8fd4cdfcedf4398448c98f4cf 100644 GIT binary patch delta 11141 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 delta 9553 zcmZ`;byO7G)81uSy1P4trKCerknWa{?hp_}U_oh+h6R+82BidP1f;t=1tg@Ako*Aq z_nr^V?jQ5aJTrIZ?mctwlvNQ1z9mFgkq5!!0RR9bKrbheF$n!y zB-g}>9Bl&x0K#J5ff%4aQ5`oAQ~(fu4Fmwdn_XKQL~}Yeb6^Fy`?SjHirtYVdthDb zW<{?t;#Y1WhK9l0LQ|@0f_u92jF69cE8%3W{%m^|tdr=^Y3Ht-$?U}|N7-a3g(272 zG&0bk*NKqqZNFdFvSH=gL?8{Z!)}$u>#rTtc8iCD_A#-TgYBt#kcKygoWxUurZh?t zEQgtFJBH3$>M_G&$`5qq*&5ERVA@?z#1QPL7kiPwhoX^0d&5n%>%zR;A_pBvD>d&h z3gVKr_c0=do-ZUk%Tv(I<)ZUJBKitht*4iF9783bhPw;|HmAr}tZD_m2sE`wC?V}g zsgV8z<@ZQLTVd623M$y`<`2u3xl_OP{HsVq{Fl5u>XdI(?HcXNi_Np&AFH? z`MN6VR>%?Gi}xdl9ONgRN+t8|%MPRS$}QnDuMs&akso8rziD|dEL7JMDP(AhqU&d( z(73etskRjSR4XTEK0AOQm+BZN&nelCGcA5-8@q(cQkWQg^n&G=K%&#aM0u1 zydxn%))({pU@BLLx$%6h&L-Q?)gm3?WM@n}d~`evWQIZF0e)U zdsJ5RN7G4wI8xIgHtP$bUB`+nKVwa(D(NZoYcMlLNr3MWLX2Nzju|{wEr0L{*TMUg z=tr;o?c}td;;GVtvNbN~mS1-oe}a!Dl|~~_O?bVx47F%~fa1ju_rJ znAGTLM@+w7$DpHv&tMN^Vx<2Z(qXI`I2!C&{kFKdCd!B5(Nkg9aozCExrlaCTW?3u zAh*0)f^4=>waeh(nRrZl%-Gt#eO36u7Bt5EFa3OU0?E zJ)=#joXp}($}%I)Hspxs#*O%k0-D68S#M_5n|d1FQ^7WmCr4L$4`r0?O@on@gP>E! z98AnWp|A<^-oy@C*;V)ZiH&?o4@BR%?5Bn^CU~wiHL;pvm*#z%?2q9Yz*D05g!{yv zx9;-*T5oAdX%eL!zy;hTi%H`orj!aPx^EG0CgltyuGxKwcM!6)Byp~q9QHEkvu|SL zlE@y#{5GO1d|V|}vIGM0IX$RP(gfTSs>u+ap(Fdlugvg zo1cD_Pur*?w{SR2a3Fk<6Bf=Y@P*ZH91WTGsTaFVdf-+G|S6pNy*aet^7YE>1j zbQH#mGq4dv!Dht5THHpq##ntknWs?KYIgBr;`w8yBtaGO5H|~)ugtOc9*#o|Cf?cGjqr~T3lEOI zD$I_d(=BOrV2K-A6&~kv7H{?9k}}p))U4a99?1l`rLDq_osxqHBkLLZK*zCniTwTJ3%ssWWZh6IULnv{-Q(SwX-tc@tW+wWY_VS_H!U3T;CBK+NNC>q_gyi&|AAMGFB&=IvDNOq{{&^f<6ndWP zIvn>o0=a~aOp(8YYdk%$ zCahc}P3zM<3o|0r8(}WIL2$5X=gjf@@gBIo;XEX&Y(9& ze5_gxMMaL+OjobSfD773#Rzs-WIHZE77q67N7W0(0ZdapZ1jU5@3Weg`fDM9r9{H8 zh3Jszkp?akTNbsUY$rI$T-65=3+`12CRmssfi=v{tqXZQpfBc<DvQ>j9ZP|8gh|8g>+G@3@JLK6LF>ta_XvPqUTozK!^gCr?;s@bluXSVk zEn_-uNPd=o({`C%c)H;~frs;;I3w3oC?MFD>(S<%@Lb&<^nHbud7Sa5PuueM5GSfe z92dGKDAa&VmMC9V%KJa>A}=+z4qd3Yx;?%4{s{`b*xehRTv?yY7r089(XY#_WCcb< zL?Ch7ohIhvQQTb%l=SkJSXxq^X|Ck?5&#)P>z|P~5mP!{sBZ71-DlB~f(U`st_<24|Z!!)NeA#Oj*Xj;|a!3&bF1^OBz{ zyUn?EpCUKOw#}#9`yRwB;G-YU>N(HGZfL#xf?+4o_`~Q(HYx>6KBF5Xut*tWM5fE) z2(QqALy?<1rboXv?@LOuOoa>}uB3oftPD_=`LV6R4BBnFvziukLMJ=7wi`6!*uCbR^Xh&%bZsB$2ss)}{1akzVtIhfhE`H^)Vv+3 zF{j<;LZcryl4tHJsvOLQL4`7oDdnvpC6Sexrbtg%zFIv3kH_eV9Bure`zo0{ZGw}1 z;)*t+<|r7w{u^YzNHZHdJM$wBKiHkbh*q~d-2Jhd`>w*4Qlf7&7z}Jy@@!c$`2^im80@ zkP+R7Q%^UK?HI8QVWU0NSU{+8d%)Re)`;gx-;>5Fuk;&U~K5me)WHw$$%(DLt?_Q7=l!IW@bPlt9 zn#olLQulIN?xU4oDaAP01%u*k`1;OHokgm3F`C%*&0%Mtt=ABSk}7>)C$-6j=UW!_ z9t!c#IkoI$*8y#v;-<(Icab2Na$qr74=Yc0)OpicV2KgCijL)m>`O%QHj1Rj(K0; zdm@D+TGi9k`Drt>FW6Vs=g`Q6~u?Ms%%=3 z-#-GmuCnUe+KevlUrh6|3=7I_oiY~=!`(Tl5pCObGBaPTTXf|#`)pU9?_l=U*X<#q z*=R_$QZB2wH$9E$L+)1|RdY%T^Eda%KevnQGO+M}JNw&<3HUu&|72dH!52g;kg@RvG@s3WKOo)Y9 z2d_YEV7bFYF?zG7aI-T)~&cp+;2ECp?G?6h$S;%O0c=9Z)o4Lsrt_B^7qwRnI zZ4o!iU;}l|KJYIxGg_#R4-4LewoZpxk?V6W?g=6hS8Vz9H~RFv5vtz4lG>ukkb_^1 z*vg-^PM5vkT-S&$J`vY5(6R<^i_^+Q_)-Kx0)+*4hQeLNRcChYJFt?AqbhO+!m?lo zKE~=m55Xl^L8V&w#90x-(xC?(ZnhQiSnz}A5rZQ@;dN;L!ef?gMl`SI8WHNth&;iq z60Y)C!D)O9)c0_{OuV44*obWeL*uQHCfzfH7LLJZestuBb`eTZI(T04#53;M@{7f< z-~&e${nS!T_qjcDUbyvC7L^adsMIqoPm6LGj>YE`P!AD|jF|wG-Zd`(c6d&AuLNm z1kpT^mGJK-CVgqbQGGq$SaQPa(w&8QH?I-(BB_3@<_gZdXY=5h9NgBpw@N{zo;i-N zyP)A3ieKcE7Ex~mu9TlEluW+F$)2$2c_e6Y@8k=ES;G=ysuXdmtUE=l7>=j~jVCCH z5lp?Kv5hU|K!m+O*fL#(yzKwlCEHnJ02&D{`hk$R*zDdNctFsQA(A(@FxS7>zWE|MFhi>qpsri zwKN8)1L7UV^_4?)m!GBwrzy8S)ik(M-*tOTS*TmkIZky9vd{}bpd<`qKe%gvA;yd< z=^6z?Gqt??aMxGV9jf4~Mkz+@^eW>se~(9V;RujneI5n9{LHIH=ix)|MA%*FKDciS z3UtnN1O2X{`3d-EPG!9<#H+-WZDi_>76SE?_%5n)o%C#L#xI;01WU{n@L2piGTeow zFe%&Cjy}-^`|LFX%7SrEV!1~4=;TA&{V!kMeXwhMfsA59um@F&fFJViP5|n;Rr+4| zT`V?&qYX{3YQ9&CBMs?fli-B~wzIrXlU$c^ZPXol*7m|J*_J#ip~w^bhM_KN%^5=u zRG4q-km$b3^jJhA113>`)&ajfCoLft^Ng=&Z6cue5lH+6$;YlImB{vHFQqCyv<%Xl z>7wh{#ql2#<1j<-$A>nQ>Eyd{Lz2d_yFZUEIFk+;GRK$mK8~U(4FX&+BJ1IPOG=-P zD?xvzOu}dUh8I|#(x|MADhT9xmZ;A-HD(`*etzPzS(_2<iI?7Bjx@zQaP#w9MOTz=0+_Ct|RAM$;KT&2w| ziO_0F2I&R_y1IuYo*9yuyivvDxJuMTNp&+h-BAn1J}T~I*qRiUpP%vdd)^1b3*MFp z(E=Y9i4F#iH94V)If+CfFXma^J=MdzV2R&?zVT#xk}b8*MJj@rFhxedo47pe)=I~0 zk!_9Szd<|z{pgT1uL0^GxPsRs2M&&Mvr4(;!xb4=WnI)kIG+>_Rc2u=l}RB8o4;;< zP4gmI9AUs#5|f{8VpJ@F`LcjPlH`#wxtvLAtgodxsA6-i@>>7`W-Z#N_LsK2Z%y&b zb}u)NW|?@oUU9!K)PsEW4lh!6t;phM&?2u5^%-IcfbKI?3~W8=Jhyw|?dgf!(s>yE z+WU2?cTE+SC;bjvucYnr1ns4gGVzmPc&}8ph|cKrWu~BaaUFpI9sW9Zvtm|)(s*Vw`(_IK+N%XQ4)G7i1Aca4RxgCK%R65J`(8GIaGuc3& zsA7gyDqjsh(!IPd4^bY@&;BwoRPj9Ba8dE{d?tSo-mSv?`8z1?)hT&;{bF@=whg9@f{Qt+^9TiZ zFzt@&>v7p(+iV4}ONJ&~Xm_p_6*zH7S-^(dCBaroPE&oE1&`~UcK=CnbogW30ReYd zwsoy0dM?G%q-M9s&U=pyn2j6-$StiEl|kG};r-FjyglwCk#!X^%e?;HJRaoBYEvv- zDE)S_7wS$ME#(Blwte769);md%cako{JH^JOF~hg{Zxc!%{xnUM4ngKu6I^j86lyX zQ*Jz_yL#%W209fSRSAVhc?E=79)zbBiX^dx21H*_Du~3GRo~5h(L6St z+ivj~T_O(*g|p0`dq*;?^fER4zFaBFH_6NG+44*{(%{Z! zja3EugQafQS9sNZ`2rM2(R?%T5^Y{-i2e+Fp}q@Vn zW;&KbqO@`1>T~l|ZLB!l#JfFhG)f)|GDgNad7fMIPO9?d8s%B1iAPH?_OU( zI0ZR4Q2q>uZbk+JZQwtH2+VeH0`AR7&$3*Eq4aumw}=P;5CX_x?9*Tpl474b|c zYDw^a;Ej@}<-(hcz=_eE(L1@%5)vr#=?V4@Cv&!n;J5-~tlp_c!fa+-(zMd!lu51S zrQM5O(j)#$XiKlwl&tR^1A~`(!jX7bE~-@OA#L0*-{yrXS?w*3%=H{;2|p&^Px&pBXP50i92%gvbvciTcCp=d?j9_*FgTx19~TNm>C9kIxqA z;-w!!>Sl8Lhd!k-Le;gb)LjU5EoqeLBF>z28|A*4lkh8p@_At57!w%EsiE)YYLRf{@VVy;fowX4w=Uf+zRK0FJp|c9#h#nPE!#u zz;OEbHe$53$jUv4Y~+M=H|y}cLK?ii_fOA0M7)t;ow>I#>1rAvTPkcjaw0aBg1Egf z6Z*)1xGOSKuYk-3s5DN(z5#m6+h@&#bqWivTMvPr8*R+D8bAf5-NVcp9wc;69*%wn z9e!JH#~eXT^w~V+6-3h$#hYe%G~FN)=Og`Hu-whkD*#I7vez!Hb6k$0Q_{EYC-0u$ zn{@orho6}LyJZ0FK|`g#T;*xhSYew{rzQ1PgO<+~dH*({65q>y<;&|A5+ED}=*PVN zcAD$l0~Wmb-NF_pz-0f<>tW+PVD8`8tu~|=ObXP1$@YTDe*=^^CxX|ZyM;D803aU% z01#dO-~3%ay#TWOlwn!DV5;BR)Hm9GR}++0*XM`W_4z^YkM>C@5GEQ1Bt`(=o+dEy zaWEOx&53r)`16bKrwIUn1=tcViGVo|f{BqdHLh*0kGor&+h>QgJ}@a9F!Bbb{1^TY zCH+5?I=42A|JvMA+V@{mR{ns|`M5Zou1BCh-QFbdR%iA`hcxQOE#u9Yn(SsVzXJP@ zXO@3FyT;y_LH>BYVZF5xAZSRrx=sN0by|gf+uUS$^45m!X3UI$ZQ*F@=ECOWVEIp6 zls73vV)kHkDPJ>|4+ZcbZVsP+!6_B2raM)mELtuj6@GV*MM>Lk- z{!8O#2i$Vh+-N)`ywM!;1-AjWxkAit%Z^ytWzZq{Aw}@X|H*)=q*@E!D zj3qy9Skl4R|4Etg_;tzvnXu9cF!`Sa{N7Uk4BY>TQ}c%n>}(v2@oyymJgWX@Q(ywPls`IP*psQh+~4k+{Hbdm;^rSb s^HYCs#Q!!&e; Date: Mon, 10 Apr 2017 20:53:21 +0200 Subject: [PATCH 20/23] Fixed conflicting comparisions --- resources/data/compdate.txt | 2 +- resources/lib/engine.py | 54 +++++++++++++++++++++++------------- resources/lib/simklapi.py | 2 +- resources/lib/utils.py | 10 +++++++ script.simkl.zip | Bin 384050 -> 384294 bytes 5 files changed, 46 insertions(+), 22 deletions(-) diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 1968779..d228d7f 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1 @@ -2017-04-09 10:22:34+02:00 +2017-04-10 20:52:24+02:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index fc0f3b7..98efa27 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -6,7 +6,7 @@ import interface import utils from datetime import datetime -from utils import getstr, getSetting +from utils import getstr import json __addon__ = interface.__addon__ def getstr(strid): return interface.getstr(strid) @@ -24,7 +24,7 @@ def synclibrary(self, mode="full"): simkl_old_f = utils.get_old_file("simkl") kodi_old_f = utils.get_old_file("kodi") kodi_current = { - "movies": self.get_movies(), "episodes": self.get_episodes(), + "movies": self.get_movies(), "episodes": self.get_episodes(), "lastcheck": datetime.today().strftime(utils.SIMKL_TIME_FORMAT)} simkl_current = self.api.get_all_items() # with open("/home/davo/.kodi/userdata/addon_data/script.simkl/current_simkl.json", "r") as f: @@ -32,8 +32,8 @@ def synclibrary(self, mode="full"): # with open("/home/davo/.kodi/userdata/addon_data/script.simkl/old_simkl.json", "r") as f: # simkl_old = json.loads(f.read()) - def open_file(filename, current): + """ Reads and overwrites files """ if not os.path.exists(filename): #if True: with open(filename, "w") as f: @@ -49,9 +49,17 @@ def open_file(filename, current): kodi_old = open_file(kodi_old_f, kodi_current) simkl_old = open_file(simkl_old_f, simkl_current) - self.syncmovies(simkl_old["movies"], simkl_current["movies"], kodi_old["movies"], kodi_current["movies"], kodi_old["lastcheck"]) + simkl_lastcheck = utils.simkl_time_to_kodi(self.api.get_last_activity()["movies"]["all"]) + self.syncmovies(simkl_old["movies"], simkl_current["movies"], kodi_old["movies"], \ + kodi_current["movies"], kodi_old["lastcheck"], simkl_lastcheck) + + lstchk_anime = self.api.get_last_activity()["anime"]["all"] + lstchk_tv_shows = self.api.get_last_activity()["tv_shows"]["all"] + simkl_lastcheck = max(lstchk_anime, lstchk_tv_shows) - def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, kodi_lastcheck): + def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, \ + kodi_lastcheck, simkl_lastcheck): + """ Syncs movies with simkl """ simkl_lastcheck = utils.simkl_time_to_kodi(self.api.get_last_activity()["movies"]["completed"]) xbmc.log("Simkl: Lastcheck movies %s" % simkl_lastcheck) @@ -61,7 +69,7 @@ def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, kodi_last kodi_removed = self.diff(kodi_current, kodi_old) # U iterate through this, not through the WHOLE library #in_both = self.intersect(kodi_current, utils.simkl2kodi(simkl_current)) - + for movie in simkl_added[0]: if movie["imdbnumber"] not in kodi_removed[1]: pass @@ -77,33 +85,39 @@ def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, kodi_last xbmc.log("Added %s" % movie) movie["playcount"] = 1 self.update_movie(movie) - elif movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] in kodi_removed[1]: - xbmc.log("Conflicting %s" % movie) - - if movie["imdbnumber"] in simkl_removed[1] and movie["imdbnumber"] not in kodi_added[1]: + elif movie["imdbnumber"] in simkl_removed[1] and movie["imdbnumber"] not in kodi_added[1]: xbmc.log("Removed %s" % movie) movie["playcount"] = 0 self.update_movie(movie) - elif movie["imdbnumber"] in simkl_removed and movie["imdbnumber"] in kodi_added[1]: - xbmc.log("Conflicting %s" % movie) - - if movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] not in simkl_removed[1]: + elif movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] not in simkl_removed[1]: movie["playcount"] = 1 movies_to_simkl.append(movie) - elif movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] in simkl_removed[1]: - xbmc.log("Conflicting %s" % movie) - - if movie["imdbnumber"] in kodi_removed[1] and movie["imdbnumber"] not in simkl_added[1]: + elif movie["imdbnumber"] in kodi_removed[1] and movie["imdbnumber"] not in simkl_added[1]: movie["playcount"] = 0 movies_to_simkl.append(movie) - elif movie["imdbnumber"] in kodi_removed[1] and movie["imdbnumber"] in simkl_added[1]: + + elif movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] in kodi_removed[1]: xbmc.log("Conflicting %s" % movie) + if simkl_lastcheck >= kodi_lastcheck: + movie["playcount"] = 1 + else: + movie["playcount"] = 0 + movies_to_simkl.append(movie) + self.update_movie(movie) + elif movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] in simkl_removed[1]: + xbmc.log("Conflicting %s" % movie) + if simkl_lastcheck >= kodi_lastcheck: + movie["playcount"] = 0 + else: + movie["playcount"] = 1 + movies_to_simkl.append(movie) + self.update_movie(movie) self.api.update_movies(movies_to_simkl) @staticmethod def diff(A, B): - """ + """ Returns the difference between A and B. About data return: B > A """ A_movies = set([x["imdbnumber"] for x in A]) diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 8fc0c07..5ecf53f 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -262,7 +262,7 @@ def update_movies(movies): xbmc.log("Updating to simkl: %s" % movie) tmpdict = {} tmpdict["ids"] = {"imdb": movie["imdbnumber"]} - if movie["playcount"] == 0: tmpdict["status"] = "plantowatch" + if movie["playcount"] == 0: tmpdict["status"] = "plantowatch" # NO METHOD YET. WAITING. else: tmpdict["status"] = "completed" tmpdict["watched_at"] = utils.kodi_time_to_simkl(movie["lastplayed"]) diff --git a/resources/lib/utils.py b/resources/lib/utils.py index 162a680..9ba3988 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -30,11 +30,14 @@ def get_old_file(filename): return fullpath def simkl_time_to_kodi(string): + """ gets simkl time and returns kodi time """ return datetime.strptime(string, SIMKL_TIME_FORMAT).strftime(KODI_TIME_FORMAT) def kodi_time_to_simkl(string): + """ gets kodi time and returns simkl time """ return datetime.strptime(string, KODI_TIME_FORMAT).strftime(SIMKL_TIME_FORMAT) def simkl2kodi(objects): + """ Simkl dictionary format to kodi library format """ watched_movies_list = [] for movie in objects: if movie["status"] == "completed": @@ -49,6 +52,13 @@ def simkl2kodi(objects): return watched_movies_list def find_match(item, database): + """ returns match from database """ for item_database in database: if item["imdbnumber"] == item_database["imdbnumber"]: return item_database return None + +def compare_max(tuple1, tuple2): + if tuple1[1] >= tuple2[1]: + return tuple1[0] + else: + return tuple2[0] \ No newline at end of file diff --git a/script.simkl.zip b/script.simkl.zip index 26dcb1e0780fdab8fd4cdfcedf4398448c98f4cf..81eb01842239d3f79244e86cc50f817f23140226 100644 GIT binary patch delta 9093 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 delta 8879 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 rPc&-?23`2|KZ}1#b{k3S!mmhnZVh-a%#nZ7ya Date: Wed, 12 Apr 2017 21:45:30 +0200 Subject: [PATCH 21/23] Hook working? --- resources/data/compdate.txt | 2 +- resources/lib/engine.py | 14 ++++++-------- resources/lib/interface.py | 13 ++++++++++++- resources/lib/simklapi.py | 19 ++++++++++++------- resources/lib/utils.py | 17 +++++++++-------- script.simkl.zip | Bin 384294 -> 390334 bytes service.py | 17 +++++++++-------- 7 files changed, 49 insertions(+), 33 deletions(-) diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index d228d7f..14a70ae 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1 @@ -2017-04-10 20:52:24+02:00 +2017-04-12 21:45:10+02:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index 98efa27..a3900f5 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -9,7 +9,6 @@ from utils import getstr import json __addon__ = interface.__addon__ -def getstr(strid): return interface.getstr(strid) class Engine: def __init__(self, api, player): @@ -95,20 +94,20 @@ def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, \ elif movie["imdbnumber"] in kodi_removed[1] and movie["imdbnumber"] not in simkl_added[1]: movie["playcount"] = 0 movies_to_simkl.append(movie) - + elif movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] in kodi_removed[1]: xbmc.log("Conflicting %s" % movie) - if simkl_lastcheck >= kodi_lastcheck: + if simkl_lastcheck >= kodi_lastcheck: movie["playcount"] = 1 - else: + else: movie["playcount"] = 0 movies_to_simkl.append(movie) self.update_movie(movie) elif movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] in simkl_removed[1]: xbmc.log("Conflicting %s" % movie) - if simkl_lastcheck >= kodi_lastcheck: + if simkl_lastcheck >= kodi_lastcheck: movie["playcount"] = 0 - else: + else: movie["playcount"] = 1 movies_to_simkl.append(movie) self.update_movie(movie) @@ -151,7 +150,7 @@ def union(A, B): A_movies = set([x["imdbnumber"] for x in A]) B_movies = set([x["imdbnumber"] for x in B]) union = A_movies | B_movies - return [movie_B for movie_B in B if movie_B["imdbnumber"] in inter], union + return [movie_B for movie_B in B if movie_B["imdbnumber"] in union], union @staticmethod def get_movies(playcount=1): @@ -305,7 +304,6 @@ def onPlayBackStopped(self): item["episode"] = lstw["episode"]["episode"] elif lstw["type"] == "movie": item["title"] = "".join([lstw["movie"]["title"], " (", str(lstw["movie"]["year"]), ")"]) - media = lstw["type"] txt = item["label"] title = "" diff --git a/resources/lib/interface.py b/resources/lib/interface.py index b961f95..dd4f172 100644 --- a/resources/lib/interface.py +++ b/resources/lib/interface.py @@ -78,7 +78,7 @@ def onInit(self): if API.is_user_logged(): #If user is alredy logged in dialog = xbmcgui.Dialog() - username = API.USERSETTINGS["user"]["name"] + username = API.usersettings["user"]["name"] ret = dialog.yesno("Simkl LogIn Warning", getstr(32032).format(username), nolabel=getstr(32034), yeslabel=getstr(32033), autoclose=30000) #xbmc.log("Ret: {0}".format(ret)) @@ -103,6 +103,17 @@ def onClick(self, controlID): if controlID == CANCEL_BUTTON: self.canceled = True +class SyncDialog(xbmcgui.WindowXMLDialog): + """ The Dialog popped the first time you try to sync your files """ + def __init__(self, xmlFilename, scriptPath): + pass + + def onInit(self): + """ The function that is loaded on window init """ + #dialog = xbmcgui.Dialog() + pass + + class SyncProgress(xbmcgui.DialogProgressBG): """ The progress dialog when syncing """ def __init__(self, media="None", mode="None"): diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 5ecf53f..0e9440b 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -1,5 +1,9 @@ #!/usr/bin/python # -*- coding: UTF-8 -*- +""" +The module that connects with simkl api +http://docs.simkl.apiary.io/ +""" import sys, os, time import json @@ -57,8 +61,8 @@ def __init__(self): def get_usersettings(self): self.con = httplib.HTTPSConnection("api.simkl.com") self.con.request("GET", "/users/settings", headers=headers) - self.USERSETTINGS = json.loads(self.con.getresponse().read().decode("utf-8")) - xbmc.log("Simkl: Usersettings: " + str(self.USERSETTINGS)) + self.usersettings = json.loads(self.con.getresponse().read().decode("utf-8")) + xbmc.log("Simkl: Usersettings: " + str(self.usersettings)) def login(self): """ Logins the API class to Simkl """ @@ -102,7 +106,7 @@ def check_login(self, ucode, log): #Log is the connection self.set_atoken(r["access_token"]) log.request("GET", "/users/settings", headers=headers) r = json.loads(log.getresponse().read().decode("utf-8")) - self.USERSETTINGS = r + self.usersettings = r return True elif r["result"] == "KO": return False @@ -111,13 +115,13 @@ def is_user_logged(self): """ Checks if user is logged in """ failed = False if self.internet == False: return False - if "error" in self.USERSETTINGS.keys(): failed = self.USERSETTINGS["error"] + if "error" in self.usersettings.keys(): failed = self.usersettings["error"] if self.token == "" or failed == "user_token_failed": xbmc.log("Simkl: User not logged in") interface.login(0) return False else: - #interface.login(self.USERSETTINGS["user"]["name"]) + #interface.login(self.usersettings["user"]["name"]) interface.login(1) return True @@ -143,7 +147,8 @@ def is_locked(self, fname): del exp[fname] return 0 - def watched(self, item, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0): #OR IDMB, member: only works with movies + def watched(self, item, duration, date=time.strftime('%Y-%m-%d %H:%M:%S'), cnt=0): + """ Sets a 'item' as watched on simkl """ filename = item["file"].replace("\\", "/") if self.is_user_logged() and not self.is_locked(filename): try: @@ -263,7 +268,7 @@ def update_movies(movies): tmpdict = {} tmpdict["ids"] = {"imdb": movie["imdbnumber"]} if movie["playcount"] == 0: tmpdict["status"] = "plantowatch" # NO METHOD YET. WAITING. - else: + else: tmpdict["status"] = "completed" tmpdict["watched_at"] = utils.kodi_time_to_simkl(movie["lastplayed"]) movies_values.append(tmpdict) diff --git a/resources/lib/utils.py b/resources/lib/utils.py index 9ba3988..a8957db 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -25,7 +25,8 @@ def getSetting(settingid): def get_old_file(filename): """ Gets filename, returns full path """ - fullpath = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"), "old_{}.json".format(filename)) + fullpath = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"),\ + "old_{}.json".format(filename)) xbmc.log("Simkl: {} -- {}".format(filename, fullpath)) return fullpath @@ -42,11 +43,11 @@ def simkl2kodi(objects): for movie in objects: if movie["status"] == "completed": watched_movies_list.append({ - "year": movie["movie"]["year"], - "imdbnumber": movie["movie"]["ids"]["imdb"], - "label": movie["movie"]["title"], - "playcount": 1, - "lastplayed": simkl_time_to_kodi(movie["last_watched_at"]), + "year": movie["movie"]["year"], + "imdbnumber": movie["movie"]["ids"]["imdb"], + "label": movie["movie"]["title"], + "playcount": 1, + "lastplayed": simkl_time_to_kodi(movie["last_watched_at"]), }) return watched_movies_list @@ -58,7 +59,7 @@ def find_match(item, database): return None def compare_max(tuple1, tuple2): + """ Pretty simple, no comments """ if tuple1[1] >= tuple2[1]: return tuple1[0] - else: - return tuple2[0] \ No newline at end of file + return tuple2[0] diff --git a/script.simkl.zip b/script.simkl.zip index 81eb01842239d3f79244e86cc50f817f23140226..7f30939df89adf1ba6b23026afaaa615a137e6a3 100644 GIT binary patch delta 18314 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 Gl>L7|E5{oE delta 12202 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 diff --git a/service.py b/service.py index f3e0320..bba7b08 100644 --- a/service.py +++ b/service.py @@ -8,17 +8,18 @@ import sys, os import xbmcaddon import xbmc -import resources +#import resources from resources.lib import interface, engine from resources.lib import simklapi as API -from resources.lib.utils import * +from resources.lib.utils import getstr, getSetting __addon__ = xbmcaddon.Addon() interface.__addon__ = __addon__ autoscrobble = __addon__.getSetting("autoscrobble") try: - compdatefile = os.path.join(__addon__.getAddonInfo("path").decode("utf-8"), "resources", "data", "compdate.txt") + compdatefile = os.path.join(__addon__.getAddonInfo("path").decode("utf-8"), \ + "resources", "data", "compdate.txt") with open(xbmc.translatePath(compdatefile), "r") as f: __compdate__ = f.read() except IOError: @@ -26,8 +27,8 @@ class Monitor(xbmc.Monitor): """ http://mirrors.kodi.tv/docs/python-docs/16.x-jarvis/xbmc.html#Monitor """ - def __init__(self, engine): - self.engine = engine + def __init__(self, engin): + self.engine = engin def onScanFinished(self, arg): """ When library scan finishes """ @@ -41,9 +42,9 @@ def onScanFinished(self, arg): xbmc.log("Simkl | "+ str(sys.argv), level=xbmc.LOGDEBUG) xbmc.log("Simkl | compdate: {0}".format(__compdate__)) - player = engine.Player() + player = engine.Player() player.addon = __addon__ - eng = engine.Engine(API.api, player) + eng = engine.Engine(API.api, player) monitor = Monitor(eng) if API.api.internet == False: @@ -52,7 +53,7 @@ def onScanFinished(self, arg): API.api.login() #Add "remind me tomorrow button" #interface.notify(getstr(32026)) else: - interface.notify(getstr(32025).format(API.api.USERSETTINGS["user"]["name"])) + interface.notify(getstr(32025).format(API.api.usersettings["user"]["name"])) #__addon__.openSettings() while not monitor.abortRequested(): From 5a2d06b144619ca4f72a7368a9c7fc63b4edec32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Sat, 13 May 2017 21:31:08 +0200 Subject: [PATCH 22/23] /fetchlibrary: Full sync movies --- .gitignore | 2 + addon.xml | 2 +- pylintrc | 411 ++++++++++++++++++++++++++++++++++++ resources/data/compdate.txt | 2 +- resources/lib/engine.py | 69 +++--- resources/lib/simklapi.py | 22 +- resources/lib/utils.py | 2 +- resources/settings.xml | 12 +- script.simkl.zip | Bin 390334 -> 391493 bytes tozip.sh | 2 +- 10 files changed, 478 insertions(+), 46 deletions(-) create mode 100644 pylintrc diff --git a/.gitignore b/.gitignore index 0ee6228..a5276e1 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,5 @@ ENV/ .ropeprojectKodi.rar .bak +*.sublime-project +*.sublime-workspace diff --git a/addon.xml b/addon.xml index 5269347..e7cf6e6 100644 --- a/addon.xml +++ b/addon.xml @@ -1,7 +1,7 @@ diff --git a/pylintrc b/pylintrc new file mode 100644 index 0000000..69d0ff1 --- /dev/null +++ b/pylintrc @@ -0,0 +1,411 @@ +[MASTER] + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist= + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. +jobs=2 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Specify a configuration file. +#rcfile= + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once).You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use"--disable=all --enable=classes +# --disable=W" +#disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call +disable=C,R,W,no-name-in-module + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=C0303,C0111,W0612,C0304 + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio).You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_,_cb + +# A regular expression matching the name of dummy variables (i.e. expectedly +# not used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.* + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,future.builtins + + +[BASIC] + +# Naming hint for argument names +argument-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Regular expression matching correct argument names +argument-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Naming hint for attribute names +attr-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Regular expression matching correct attribute names +attr-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo,bar,baz,toto,tutu,tata + +# Naming hint for class attribute names +class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ + +# Regular expression matching correct class attribute names +class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ + +# Naming hint for class names +class-name-hint=[A-Z_][a-zA-Z0-9]+$ + +# Regular expression matching correct class names +class-rgx=[A-Z_][a-zA-Z0-9]+$ + +# Naming hint for constant names +const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ + +# Regular expression matching correct constant names +const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming hint for function names +function-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Regular expression matching correct function names +function-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Good variable names which should always be accepted, separated by a comma +good-names=i,j,k,ex,Run,f,r,r1,r2,_ + +# Include a hint for the correct naming format with invalid-name +include-naming-hint=no + +# Naming hint for inline iteration names +inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ + +# Regular expression matching correct inline iteration names +inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ + +# Naming hint for method names +method-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Regular expression matching correct method names +method-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Naming hint for module names +module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Regular expression matching correct module names +module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +property-classes=abc.abstractproperty + +# Naming hint for variable names +variable-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + +# Regular expression matching correct variable names +variable-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ + + +[SPELLING] + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module +max-module-lines=1000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma,dict-separator + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format +logging-modules=xbmc.log + + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members=utils.*,.*\.usersettings + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME,XXX,TODO + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__,__new__,setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict,_fields,_replace,_source,_make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in a if statement +max-bool-expr=5 + +# Maximum number of branch for function / method body +max-branches=12 + +# Maximum number of locals for function / method body +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of statements in function / method body +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[IMPORTS] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=optparse,tkinter.tix + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant,xbmc + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index 14a70ae..c81e3ba 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1 @@ -2017-04-12 21:45:10+02:00 +2017-05-13 21:35:59+02:00 diff --git a/resources/lib/engine.py b/resources/lib/engine.py index a3900f5..c9e5bb2 100644 --- a/resources/lib/engine.py +++ b/resources/lib/engine.py @@ -11,6 +11,7 @@ __addon__ = interface.__addon__ class Engine: + """ Like an offline api class """ def __init__(self, api, player): self.api = api self.player = player @@ -20,10 +21,13 @@ def __init__(self, api, player): #Note 4 myself: Maybe you should handle movies and series completly different #I mean: Two different functions, two different "databases", etc. def synclibrary(self, mode="full"): + """ Syncs simkl with kodi """ simkl_old_f = utils.get_old_file("simkl") kodi_old_f = utils.get_old_file("kodi") kodi_current = { - "movies": self.get_movies(), "episodes": self.get_episodes(), + "movies": self.get_movies("1+"), + "movies_0": self.get_movies("0"), + #"episodes": self.get_episodes(), "lastcheck": datetime.today().strftime(utils.SIMKL_TIME_FORMAT)} simkl_current = self.api.get_all_items() # with open("/home/davo/.kodi/userdata/addon_data/script.simkl/current_simkl.json", "r") as f: @@ -37,7 +41,9 @@ def open_file(filename, current): #if True: with open(filename, "w") as f: f.write(json.dumps(current, indent=2)) - return current + old = current.copy() + old["movies_0"] = {} + return old else: with open(filename, "r") as f: old = json.loads(f.read()) @@ -49,53 +55,50 @@ def open_file(filename, current): simkl_old = open_file(simkl_old_f, simkl_current) simkl_lastcheck = utils.simkl_time_to_kodi(self.api.get_last_activity()["movies"]["all"]) - self.syncmovies(simkl_old["movies"], simkl_current["movies"], kodi_old["movies"], \ - kodi_current["movies"], kodi_old["lastcheck"], simkl_lastcheck) + if utils.getSetting("synclib"): + if utils.getSetting("movie-sync"): + self.syncmovies(simkl_old["movies"], simkl_current["movies"], kodi_old["movies"], \ + kodi_current["movies"], kodi_current["movies_0"], kodi_old["movies_0"], kodi_old["lastcheck"], simkl_lastcheck) lstchk_anime = self.api.get_last_activity()["anime"]["all"] lstchk_tv_shows = self.api.get_last_activity()["tv_shows"]["all"] simkl_lastcheck = max(lstchk_anime, lstchk_tv_shows) def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, \ - kodi_lastcheck, simkl_lastcheck): + kodi_current_0, kodi_old_0, kodi_lastcheck, simkl_lastcheck): """ Syncs movies with simkl """ simkl_lastcheck = utils.simkl_time_to_kodi(self.api.get_last_activity()["movies"]["completed"]) xbmc.log("Simkl: Lastcheck movies %s" % simkl_lastcheck) simkl_added = self.diff(utils.simkl2kodi(simkl_old), utils.simkl2kodi(simkl_current)) simkl_removed = self.diff(utils.simkl2kodi(simkl_current), utils.simkl2kodi(simkl_old)) - kodi_added = self.diff(kodi_old, kodi_current) - kodi_removed = self.diff(kodi_current, kodi_old) - # U iterate through this, not through the WHOLE library - #in_both = self.intersect(kodi_current, utils.simkl2kodi(simkl_current)) - - for movie in simkl_added[0]: - if movie["imdbnumber"] not in kodi_removed[1]: - pass - for movie in simkl_removed[0]: - if movie["imdbnumber"] not in kodi_added[1]: - pass - - xbmc.log("Kodi_removed %s, %s" % kodi_removed) + kodi_watched = self.diff(kodi_old, kodi_current) + kodi_unwatched = self.diff(kodi_current, kodi_old) + kodi_added = self.diff(kodi_old_0, kodi_current_0) + #We can ignore items removed from library + + xbmc.log("kodi_unwatched %s, %s" % kodi_unwatched) + xbmc.log("kodi_added %s, %s" % kodi_added) movies_to_simkl = [] - for movie in self.get_movies(0): + + for movie in self.get_movies("0+"): #xbmc.log("Movie: %s" % movie) - if movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] not in kodi_removed[1]: + if movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] not in kodi_unwatched[1]: xbmc.log("Added %s" % movie) movie["playcount"] = 1 self.update_movie(movie) - elif movie["imdbnumber"] in simkl_removed[1] and movie["imdbnumber"] not in kodi_added[1]: + elif movie["imdbnumber"] in simkl_removed[1] and movie["imdbnumber"] not in kodi_watched[1]: xbmc.log("Removed %s" % movie) movie["playcount"] = 0 self.update_movie(movie) - elif movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] not in simkl_removed[1]: + elif movie["imdbnumber"] in kodi_watched[1] and movie["imdbnumber"] not in simkl_removed[1]: movie["playcount"] = 1 movies_to_simkl.append(movie) - elif movie["imdbnumber"] in kodi_removed[1] and movie["imdbnumber"] not in simkl_added[1]: + elif movie["imdbnumber"] in kodi_unwatched[1] and movie["imdbnumber"] not in simkl_added[1]: movie["playcount"] = 0 movies_to_simkl.append(movie) - elif movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] in kodi_removed[1]: + elif movie["imdbnumber"] in simkl_added[1] and movie["imdbnumber"] in kodi_unwatched[1]: xbmc.log("Conflicting %s" % movie) if simkl_lastcheck >= kodi_lastcheck: movie["playcount"] = 1 @@ -103,7 +106,7 @@ def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, \ movie["playcount"] = 0 movies_to_simkl.append(movie) self.update_movie(movie) - elif movie["imdbnumber"] in kodi_added[1] and movie["imdbnumber"] in simkl_removed[1]: + elif movie["imdbnumber"] in kodi_watched[1] and movie["imdbnumber"] in simkl_removed[1]: xbmc.log("Conflicting %s" % movie) if simkl_lastcheck >= kodi_lastcheck: movie["playcount"] = 0 @@ -111,8 +114,18 @@ def syncmovies(self, simkl_old, simkl_current, kodi_old, kodi_current, \ movie["playcount"] = 1 movies_to_simkl.append(movie) self.update_movie(movie) + elif movie["imdbnumber"] in kodi_added[1]: + self.watch_if_kodi(movie) + + if len(movies_to_simkl) > 0: self.api.update_movies(movies_to_simkl) - self.api.update_movies(movies_to_simkl) + def watch_if_kodi(self, movie): + """ Marks a movie as watched if is watched in kodi """ + c = self.api.check_if_watched(movie) + xbmc.log("Movie, c: %s, %s" % (movie, c)) + if c: + movie["playcount"] = 1 + self.update_movie(movie) @staticmethod def diff(A, B): @@ -153,7 +166,7 @@ def union(A, B): return [movie_B for movie_B in B if movie_B["imdbnumber"] in union], union @staticmethod - def get_movies(playcount=1): + def get_movies(playcount="1+"): movies_list = [] movies = json.loads(xbmc.executeJSONRPC(json.dumps({ "jsonrpc": "2.0", @@ -179,7 +192,7 @@ def get_movies(playcount=1): "id": "libMovies" })))["result"]["movies"] for movie in movies: - if movie["playcount"] >= playcount: + if str(movie["playcount"]) in playcount or (movie["playcount"]>playcount and "+" in playcount): movies_list.append(movie) return movies_list diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 2e73e14..1090070 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -13,9 +13,9 @@ import httplib from socket import gaierror import utils +from utils import getstr __addon__ = interface.__addon__ -def getstr(strid): return interface.getstr(strid) REDIRECT_URI = "https://simkl.com/apps/kodi/connected" USERFILE = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"), "simkl_key") @@ -43,6 +43,7 @@ def getstr(strid): return interface.getstr(strid) "simkl-api-key": APIKEY} class API: + """ Class for handling http://api.simkl.com """ def __init__(self): self.scrobbled_dict = {} #So it doesn't scrobble 5 times the same chapter #{"Label":expiration_time} @@ -60,6 +61,7 @@ def __init__(self): self.internet = False def get_usersettings(self): + """ Retrieves user settings """ self.con = httplib.HTTPSConnection("api.simkl.com") self.con.request("GET", "/users/settings", headers=headers) self.usersettings = json.loads(self.con.getresponse().read().decode("utf-8")) @@ -91,6 +93,7 @@ def login(self): del self.logindialog def set_atoken(self, token): + """ Sets the token for the api """ global ATOKEN with open(USERFILE, "w") as f: f.write(token) @@ -99,6 +102,7 @@ def set_atoken(self, token): self.token = token def check_login(self, ucode, log): #Log is the connection + """ Cecks how the login is going """ url = "/oauth/pin/" + ucode + "?client_id=" + APIKEY log.request("GET", url, headers=headers) r = json.loads(log.getresponse().read().decode("utf-8")) @@ -128,6 +132,7 @@ def is_user_logged(self): ### SCROBBLING OR CHECKIN def lock(self, fname, duration): + """ Locks a file """ xbmc.log("Duration: %s" %duration) exp = self.scrobbled_dict exp[fname] = int(time.time() + (105 - float(__addon__.getSetting("scr-pct"))) / 100 * duration) @@ -135,6 +140,7 @@ def lock(self, fname, duration): self.scrobbled_dict = {fname:exp[fname]} #So there is always only one entry on the dict def is_locked(self, fname): + """ Checks if the file is 'locked' """ exp = self.scrobbled_dict if not (fname in exp.keys()): return 0 xbmc.log("Time: {0}, exp: {1}, Dif: {2}".format(int(time.time()), @@ -218,6 +224,7 @@ def get_all_items(): @staticmethod def watched_from_list(lst): + """ Given a list, it marks them as watched """ con = httplib.HTTPSConnection("api.simkl.com") con.request("GET", "/sync/history", body=json.dumps(lst), headers=headers) r = con.getresponse().read() @@ -229,7 +236,7 @@ def check_if_watched(item, movie=True): con = httplib.HTTPSConnection("api.simkl.com") if movie: values = json.dumps([{ - "type": item["media"], + "type": "movie", "imdb": item["imdbnumber"] }]) con.request("GET", "/sync/watched", body=values, headers=headers) @@ -242,11 +249,12 @@ def check_if_watched(item, movie=True): return json.loads(con.getresponse().read()) def check_connection(self, cnt=0): + """ Checks if there is a connection to the internet """ if cnt < 3: try: self.get_usersettings() self.internet = True - except Exception: + except gaierror: time.sleep(5) self.check_connection(cnt=cnt+1) else: @@ -262,22 +270,24 @@ def get_last_activity(): @staticmethod def update_movies(movies): + """ http://docs.simkl.apiary.io/#reference/sync/get-all-items/add-items-to-specific-list """ con = httplib.HTTPSConnection("api.simkl.com") movies_values = [] for movie in movies: xbmc.log("Updating to simkl: %s" % movie) tmpdict = {} tmpdict["ids"] = {"imdb": movie["imdbnumber"]} - if movie["playcount"] == 0: tmpdict["status"] = "plantowatch" # NO METHOD YET. WAITING. + if movie["playcount"] == 0: + tmpdict["to"] = "plantowatch" else: - tmpdict["status"] = "completed" + tmpdict["to"] = "completed" tmpdict["watched_at"] = utils.kodi_time_to_simkl(movie["lastplayed"]) movies_values.append(tmpdict) values = json.dumps({"movies":movies_values}) xbmc.log("Values %s" % values) - con.request("GET", "/sync/history/", body=values, headers=headers) + con.request("GET", "/sync/add-to-list/", body=values, headers=headers) r = con.getresponse().read() xbmc.log("Respones: %s" % r) diff --git a/resources/lib/utils.py b/resources/lib/utils.py index a8957db..f3eaebb 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -27,7 +27,7 @@ def get_old_file(filename): """ Gets filename, returns full path """ fullpath = os.path.join(xbmc.translatePath(__addon__.getAddonInfo("profile")).decode("utf-8"),\ "old_{}.json".format(filename)) - xbmc.log("Simkl: {} -- {}".format(filename, fullpath)) + xbmc.log("Simkl: %s -- %s" % (filename, fullpath)) return fullpath def simkl_time_to_kodi(string): diff --git a/resources/settings.xml b/resources/settings.xml index 47c3184..9cb42a7 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -17,15 +17,11 @@ - + - - - - - - - + + + diff --git a/script.simkl.zip b/script.simkl.zip index 7f30939df89adf1ba6b23026afaaa615a137e6a3..d7aec627edc8d3bc5ab3a6aaf90e1e2e60be51ca 100644 GIT binary patch delta 16398 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 QDgfSd004dK=>-P(e@8#C`~Uy| delta 15259 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 E4*^$Ky#N3J diff --git a/tozip.sh b/tozip.sh index dc2b901..0300b2e 100755 --- a/tozip.sh +++ b/tozip.sh @@ -6,7 +6,7 @@ if [ "$1" == "zip" ]; then mkdir script.simkl rm script.simkl.zip - rsync -rv --progress ./ ./script.simkl --exclude-from .gitignore --exclude tozip.sh + rsync -rv ./ ./script.simkl --exclude-from .gitignore --exclude tozip.sh zip -rx@.gitignore script.simkl.zip script.simkl/* -x script.simkl/script.simkl/ rm -Rf script.simkl From cf04b52e9418d9861e597f42920de2afbd323cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Dav=C3=B3?= Date: Wed, 17 May 2017 07:02:46 +0200 Subject: [PATCH 23/23] Minor bug fixed --- resources/data/compdate.txt | 2 +- resources/lib/interface.py | 4 ++-- resources/lib/simklapi.py | 5 ++++- script.simkl.zip | Bin 391493 -> 391511 bytes 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/resources/data/compdate.txt b/resources/data/compdate.txt index c81e3ba..845b20b 100644 --- a/resources/data/compdate.txt +++ b/resources/data/compdate.txt @@ -1 +1 @@ -2017-05-13 21:35:59+02:00 +2017-05-17 07:02:21+02:00 diff --git a/resources/lib/interface.py b/resources/lib/interface.py index dd4f172..eacc9b6 100644 --- a/resources/lib/interface.py +++ b/resources/lib/interface.py @@ -51,8 +51,8 @@ def threaded(self): xbmc.log("Simkl: Still waiting... {0}".format(cnt)) if self.check_login(self.pin, self.log): - xbmc.log(str(self.api.USERSETTINGS)) - notify(getstr(32030).format(self.api.USERSETTINGS["user"]["name"])) + xbmc.log(str(self.api.usersettings)) + notify(getstr(32030).format(self.api.usersettings["user"]["name"])) self.waiting = False #Now check that the user has done what it has to be done diff --git a/resources/lib/simklapi.py b/resources/lib/simklapi.py index 1090070..8e18bde 100644 --- a/resources/lib/simklapi.py +++ b/resources/lib/simklapi.py @@ -22,7 +22,10 @@ #xbmc.translatePath("special://profile/simkl_key") if not os.path.exists(USERFILE): - os.mkdir(os.path.dirname(USERFILE)) + try: + os.mkdir(os.path.dirname(USERFILE)) + except OSError: + xbmc.log("Simkl: Folder alredy exists") with open(USERFILE, "w+") as f: f.write("") else: diff --git a/script.simkl.zip b/script.simkl.zip index d7aec627edc8d3bc5ab3a6aaf90e1e2e60be51ca..a42397244418a409192159d79096ff0aded107f4 100644 GIT binary patch delta 7070 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 delta 7042 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