Files
jellycon/resources/lib/InfoUpdater.py
2014-09-28 10:30:07 +10:00

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))