251 lines
12 KiB
Python
251 lines
12 KiB
Python
|
|
#################################################################################################
|
||
|
|
# Info Updater
|
||
|
|
#################################################################################################
|
||
|
|
|
||
|
|
import xbmc
|
||
|
|
import xbmcgui
|
||
|
|
import xbmcaddon
|
||
|
|
|
||
|
|
import json
|
||
|
|
import threading
|
||
|
|
from datetime import datetime
|
||
|
|
import urllib
|
||
|
|
from DownloadUtils import DownloadUtils
|
||
|
|
|
||
|
|
_MODE_BASICPLAY=12
|
||
|
|
|
||
|
|
#define our global download utils
|
||
|
|
downloadUtils = DownloadUtils()
|
||
|
|
|
||
|
|
class InfoUpdaterThread(threading.Thread):
|
||
|
|
|
||
|
|
logLevel = 0
|
||
|
|
|
||
|
|
def __init__(self, *args):
|
||
|
|
addonSettings = xbmcaddon.Addon(id='plugin.video.xbmb3c')
|
||
|
|
level = addonSettings.getSetting('logLevel')
|
||
|
|
self.logLevel = 0
|
||
|
|
if(level != None):
|
||
|
|
self.logLevel = int(level)
|
||
|
|
|
||
|
|
xbmc.log("XBMB3C InfoUpdaterThread -> Log Level:" + str(self.logLevel))
|
||
|
|
|
||
|
|
threading.Thread.__init__(self, *args)
|
||
|
|
|
||
|
|
def logMsg(self, msg, level = 1):
|
||
|
|
if(self.logLevel >= level):
|
||
|
|
xbmc.log("XBMB3C InfoUpdaterThread -> " + msg)
|
||
|
|
|
||
|
|
def run(self):
|
||
|
|
self.logMsg("Started")
|
||
|
|
|
||
|
|
self.updateInfo()
|
||
|
|
lastRun = datetime.today()
|
||
|
|
|
||
|
|
while (xbmc.abortRequested == False):
|
||
|
|
td = datetime.today() - lastRun
|
||
|
|
secTotal = td.seconds
|
||
|
|
|
||
|
|
if(secTotal > 300):
|
||
|
|
self.updateInfo()
|
||
|
|
lastRun = datetime.today()
|
||
|
|
|
||
|
|
xbmc.sleep(3000)
|
||
|
|
|
||
|
|
self.logMsg("Exited")
|
||
|
|
|
||
|
|
def updateInfo(self):
|
||
|
|
self.logMsg("updateInfo Called")
|
||
|
|
|
||
|
|
addonSettings = xbmcaddon.Addon(id='plugin.video.xbmb3c')
|
||
|
|
|
||
|
|
mb3Host = addonSettings.getSetting('ipaddress')
|
||
|
|
mb3Port = addonSettings.getSetting('port')
|
||
|
|
userName = addonSettings.getSetting('username')
|
||
|
|
|
||
|
|
userid = downloadUtils.getUserId()
|
||
|
|
self.logMsg("updateInfo UserID : " + userid)
|
||
|
|
|
||
|
|
self.logMsg("Updating info List")
|
||
|
|
|
||
|
|
infoUrl = "http://" + mb3Host + ":" + mb3Port + "/mediabrowser/Users/" + userid + "/Items?Fields=CollectionType&format=json"
|
||
|
|
|
||
|
|
jsonData = downloadUtils.downloadUrl(infoUrl, suppress=False, popup=1 )
|
||
|
|
result = json.loads(jsonData)
|
||
|
|
|
||
|
|
result = result.get("Items")
|
||
|
|
WINDOW = xbmcgui.Window( 10000 )
|
||
|
|
if(result == None):
|
||
|
|
result = []
|
||
|
|
|
||
|
|
item_count = 1
|
||
|
|
movie_count = 0
|
||
|
|
movie_unwatched_count = 0
|
||
|
|
tv_count = 0
|
||
|
|
episode_count = 0
|
||
|
|
episode_unwatched_count = 0
|
||
|
|
tv_unwatched_count = 0
|
||
|
|
music_count = 0
|
||
|
|
music_songs_count = 0
|
||
|
|
music_songs_unplayed_count = 0
|
||
|
|
musicvideos_count = 0
|
||
|
|
musicvideos_unwatched_count = 0
|
||
|
|
trailers_count = 0
|
||
|
|
trailers_unwatched_count = 0
|
||
|
|
photos_count = 0
|
||
|
|
channels_count = 0
|
||
|
|
for item in result:
|
||
|
|
collectionType = item.get("CollectionType")
|
||
|
|
if collectionType==None:
|
||
|
|
collectionType="unknown"
|
||
|
|
self.logMsg("collectionType " + collectionType)
|
||
|
|
userData = item.get("UserData")
|
||
|
|
if(collectionType == "movies"):
|
||
|
|
movie_count = movie_count + item.get("RecursiveItemCount")
|
||
|
|
movie_unwatched_count = movie_unwatched_count + userData.get("UnplayedItemCount")
|
||
|
|
|
||
|
|
if(collectionType == "musicvideos"):
|
||
|
|
musicvideos_count = musicvideos_count + item.get("RecursiveItemCount")
|
||
|
|
musicvideos_unwatched_count = musicvideos_unwatched_count + userData.get("UnplayedItemCount")
|
||
|
|
|
||
|
|
if(collectionType == "tvshows"):
|
||
|
|
tv_count = tv_count + item.get("ChildCount")
|
||
|
|
episode_count = episode_count + item.get("RecursiveItemCount")
|
||
|
|
episode_unwatched_count = episode_unwatched_count + userData.get("UnplayedItemCount")
|
||
|
|
|
||
|
|
if(collectionType == "music"):
|
||
|
|
music_count = music_count + item.get("ChildCount")
|
||
|
|
music_songs_count = music_songs_count + item.get("RecursiveItemCount")
|
||
|
|
music_songs_unplayed_count = music_songs_unplayed_count + userData.get("UnplayedItemCount")
|
||
|
|
|
||
|
|
if(collectionType == "photos"):
|
||
|
|
photos_count = photos_count + item.get("RecursiveItemCount")
|
||
|
|
|
||
|
|
if(item.get("Name") == "Trailers"):
|
||
|
|
trailers_count = trailers_count + item.get("RecursiveItemCount")
|
||
|
|
trailers_unwatched_count = trailers_unwatched_count + userData.get("UnplayedItemCount")
|
||
|
|
|
||
|
|
self.logMsg("MoviesCount " + str(movie_count), level=2)
|
||
|
|
self.logMsg("MoviesUnWatchedCount " + str(movie_unwatched_count), level=2)
|
||
|
|
self.logMsg("MusicVideosCount " + str(musicvideos_count), level=2)
|
||
|
|
self.logMsg("MusicVideosUnWatchedCount " + str(musicvideos_unwatched_count), level=2)
|
||
|
|
self.logMsg("TVCount " + str(tv_count), level=2)
|
||
|
|
self.logMsg("EpisodeCount " + str(episode_count), level=2)
|
||
|
|
self.logMsg("EpisodeUnWatchedCount " + str(episode_unwatched_count), level=2)
|
||
|
|
self.logMsg("MusicCount " + str(music_count), level=2)
|
||
|
|
self.logMsg("SongsCount " + str(music_songs_count), level=2)
|
||
|
|
self.logMsg("SongsUnPlayedCount " + str(music_songs_unplayed_count), level=2)
|
||
|
|
self.logMsg("TrailersCount" + str(trailers_count), level=2)
|
||
|
|
self.logMsg("TrailersUnWatchedCount" + str(trailers_unwatched_count), level=2)
|
||
|
|
self.logMsg("PhotosCount" + str(photos_count), level=2)
|
||
|
|
|
||
|
|
#item_count = item_count + 1
|
||
|
|
|
||
|
|
movie_watched_count = movie_count - movie_unwatched_count
|
||
|
|
musicvideos_watched_count = musicvideos_count - musicvideos_unwatched_count
|
||
|
|
episode_watched_count = episode_count - episode_unwatched_count
|
||
|
|
music_songs_played_count = music_songs_count - music_songs_unplayed_count
|
||
|
|
trailers_watched_count = trailers_count - trailers_unwatched_count
|
||
|
|
WINDOW.setProperty("MB3TotalMovies", str(movie_count))
|
||
|
|
WINDOW.setProperty("MB3TotalUnWatchedMovies", str(movie_unwatched_count))
|
||
|
|
WINDOW.setProperty("MB3TotalWatchedMovies", str(movie_watched_count))
|
||
|
|
WINDOW.setProperty("MB3TotalMusicVideos", str(musicvideos_count))
|
||
|
|
WINDOW.setProperty("MB3TotalUnWatchedMusicVideos", str(musicvideos_unwatched_count))
|
||
|
|
WINDOW.setProperty("MB3TotalWatchedMusicVideos", str(musicvideos_watched_count))
|
||
|
|
WINDOW.setProperty("MB3TotalTvShows", str(tv_count))
|
||
|
|
WINDOW.setProperty("MB3TotalEpisodes", str(episode_count))
|
||
|
|
WINDOW.setProperty("MB3TotalUnWatchedEpisodes", str(episode_unwatched_count))
|
||
|
|
WINDOW.setProperty("MB3TotalWatchedEpisodes", str(episode_watched_count))
|
||
|
|
WINDOW.setProperty("MB3TotalMusicAlbums", str(music_count))
|
||
|
|
WINDOW.setProperty("MB3TotalMusicSongs", str(music_songs_count))
|
||
|
|
WINDOW.setProperty("MB3TotalUnPlayedMusicSongs", str(music_songs_unplayed_count))
|
||
|
|
WINDOW.setProperty("MB3TotalPlayedMusicSongs", str(music_songs_played_count))
|
||
|
|
WINDOW.setProperty("MB3TotalTrailers", str(trailers_count))
|
||
|
|
WINDOW.setProperty("MB3TotalUnWatchedTrailers", str(trailers_unwatched_count))
|
||
|
|
WINDOW.setProperty("MB3TotalWatchedTrailers", str(trailers_watched_count))
|
||
|
|
WINDOW.setProperty("MB3TotalPhotos", str(photos_count))
|
||
|
|
|
||
|
|
userUrl = "http://" + mb3Host + ":" + mb3Port + "/mediabrowser/Users/" + userid + "?format=json"
|
||
|
|
jsonData = downloadUtils.downloadUrl(userUrl, suppress=False, popup=1 )
|
||
|
|
|
||
|
|
result = json.loads(jsonData)
|
||
|
|
userImage = downloadUtils.getUserArtwork(result, "Primary")
|
||
|
|
WINDOW.setProperty("MB3UserImage", userImage)
|
||
|
|
xbmc.log("XBMB3C MB3UserImage -> " + userImage)
|
||
|
|
self.logMsg("InfoTV start")
|
||
|
|
infoTVUrl = "http://" + mb3Host + ":" + mb3Port + "/mediabrowser/Users/" + userid + "/Items?&IncludeItemTypes=Series&Recursive=true&SeriesStatus=Continuing&format=json"
|
||
|
|
|
||
|
|
jsonData = downloadUtils.downloadUrl(infoTVUrl, suppress=False, popup=1 )
|
||
|
|
result = json.loads(jsonData)
|
||
|
|
self.logMsg("InfoTV Json Data : " + str(result), level=2)
|
||
|
|
|
||
|
|
totalRunning = result.get("TotalRecordCount")
|
||
|
|
self.logMsg("TotalRunningCount " + str(totalRunning))
|
||
|
|
WINDOW.setProperty("MB3TotalRunningTvShows", str(totalRunning))
|
||
|
|
|
||
|
|
self.logMsg("InfoNextAired start")
|
||
|
|
InfoNextAiredUrl = "http://" + mb3Host + ":" + mb3Port + "/mediabrowser/Users/" + userid + "/Items?IsUnaired=true&SortBy=PremiereDate%2CAirTime%2CSortName&SortOrder=Ascending&IncludeItemTypes=Episode&Limit=1&Recursive=true&Fields=SeriesInfo%2CUserData&format=json"
|
||
|
|
|
||
|
|
jsonData = downloadUtils.downloadUrl(InfoNextAiredUrl, suppress=False, popup=1 )
|
||
|
|
result = json.loads(jsonData)
|
||
|
|
self.logMsg("InfoNextAired Json Data : " + str(result), level=2)
|
||
|
|
|
||
|
|
result = result.get("Items")
|
||
|
|
if(result == None):
|
||
|
|
result = []
|
||
|
|
|
||
|
|
episode = ""
|
||
|
|
for item in result:
|
||
|
|
title = ""
|
||
|
|
seriesName = ""
|
||
|
|
if(item.get("SeriesName") != None):
|
||
|
|
seriesName = item.get("SeriesName").encode('utf-8')
|
||
|
|
|
||
|
|
if(item.get("Name") != None):
|
||
|
|
title = item.get("Name").encode('utf-8')
|
||
|
|
|
||
|
|
eppNumber = ""
|
||
|
|
tempEpisodeNumber = ""
|
||
|
|
if(item.get("IndexNumber") != None):
|
||
|
|
eppNumber = item.get("IndexNumber")
|
||
|
|
if eppNumber < 10:
|
||
|
|
tempEpisodeNumber = "0" + str(eppNumber)
|
||
|
|
else:
|
||
|
|
tempEpisodeNumber = str(eppNumber)
|
||
|
|
|
||
|
|
seasonNumber = item.get("ParentIndexNumber")
|
||
|
|
if seasonNumber < 10:
|
||
|
|
tempSeasonNumber = "0" + str(seasonNumber)
|
||
|
|
else:
|
||
|
|
tempSeasonNumber = str(seasonNumber)
|
||
|
|
|
||
|
|
episode = seriesName + " - " + title + " - S" + tempSeasonNumber + "E" + tempEpisodeNumber
|
||
|
|
|
||
|
|
self.logMsg("MB3NextAiredEpisode" + episode)
|
||
|
|
WINDOW.setProperty("MB3NextAiredEpisode", episode)
|
||
|
|
self.logMsg("InfoNextAired end")
|
||
|
|
|
||
|
|
today = datetime.today()
|
||
|
|
dateformat = today.strftime("%Y-%m-%d")
|
||
|
|
nextAiredUrl = "http://" + mb3Host + ":" + mb3Port + "/mediabrowser/Users/" + userid + "/Items?IsUnaired=true&SortBy=PremiereDate%2CAirTime%2CSortName&SortOrder=Ascending&IncludeItemTypes=Episode&Recursive=true&Fields=SeriesInfo%2CUserData&MinPremiereDate=" + str(dateformat) + "&MaxPremiereDate=" + str(dateformat) + "&format=json"
|
||
|
|
|
||
|
|
jsonData = downloadUtils.downloadUrl(nextAiredUrl, suppress=False, popup=1 )
|
||
|
|
result = json.loads(jsonData)
|
||
|
|
self.logMsg("InfoNextAired total url: " + nextAiredUrl)
|
||
|
|
self.logMsg("InfoNextAired total Json Data : " + str(result), level=2)
|
||
|
|
|
||
|
|
totalToday = result.get("TotalRecordCount")
|
||
|
|
self.logMsg("MB3NextAiredTotalToday " + str(totalToday))
|
||
|
|
WINDOW.setProperty("MB3NextAiredTotalToday", str(totalToday))
|
||
|
|
|
||
|
|
self.logMsg("Channels start")
|
||
|
|
channelsUrl = "http://" + mb3Host + ":" + mb3Port + "/mediabrowser/Channels/?format=json"
|
||
|
|
|
||
|
|
jsonData = downloadUtils.downloadUrl(channelsUrl, suppress=False, popup=1 )
|
||
|
|
result = json.loads(jsonData)
|
||
|
|
self.logMsg("Channels Json Data : " + str(result), level=2)
|
||
|
|
|
||
|
|
totalChannels = result.get("TotalRecordCount")
|
||
|
|
self.logMsg("TotalChannels " + str(totalRunning))
|
||
|
|
WINDOW.setProperty("MB3TotalChannels", str(totalChannels))
|