Support Emby tags

This commit is contained in:
angelblue05 2015-10-01 22:30:11 -05:00
parent a4fa9a325b
commit fe5ae9386a

View file

@ -216,14 +216,19 @@ class WriteKodiVideoDB():
query = "INSERT INTO movie(idMovie, idFile, c00, c01, c02, c03, c04, c05, c06, c07, c09, c10, c11, c12, c14, c15, c16, c18, c19, c21) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" query = "INSERT INTO movie(idMovie, idFile, c00, c01, c02, c03, c04, c05, c06, c07, c09, c10, c11, c12, c14, c15, c16, c18, c19, c21) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
cursor.execute(query, (movieid, fileid, title, plot, shortplot, tagline, votecount, rating, writer, year, imdb, sorttitle, runtime, mpaa, genre, director, title, studio, trailerUrl, country)) cursor.execute(query, (movieid, fileid, title, plot, shortplot, tagline, votecount, rating, writer, year, imdb, sorttitle, runtime, mpaa, genre, director, title, studio, trailerUrl, country))
# Add the viewtag
self.AddTagToMedia(movieid, viewTag, "movie", cursor)
# Create the reference in emby table # Create the reference in emby table
query = "INSERT INTO emby(emby_id, kodi_id, kodi_file_id, media_type, checksum) values(?, ?, ?, ?, ?)" query = "INSERT INTO emby(emby_id, kodi_id, kodi_file_id, media_type, checksum) values(?, ?, ?, ?, ?)"
cursor.execute(query, (embyId, movieid, fileid, "movie", checksum)) cursor.execute(query, (embyId, movieid, fileid, "movie", checksum))
# Add tags to item, view tag and emby tags
tags = [viewTag]
tags.extend(MBitem['Tags'])
if userData['Favorite']:
tags.append("Favorite movies")
self.AddTagsToMedia(movieid, tags, "movie", cursor)
# Update or insert actors # Update or insert actors
self.AddPeopleToMedia(movieid, MBitem.get('People'), "movie", connection, cursor) self.AddPeopleToMedia(movieid, MBitem.get('People'), "movie", connection, cursor)
@ -249,12 +254,6 @@ class WriteKodiVideoDB():
# Add streamdetails # Add streamdetails
self.AddStreamDetailsToMedia(API().getMediaStreams(MBitem), runtime ,fileid, cursor) self.AddStreamDetailsToMedia(API().getMediaStreams(MBitem), runtime ,fileid, cursor)
# Add to or remove from favorites tag
if userData.get('Favorite'):
self.AddTagToMedia(movieid, "Favorite movies", "movie", cursor)
else:
self.AddTagToMedia(movieid, "Favorite movies", "movie", cursor, True)
# Set resume point and round to 6th decimal # Set resume point and round to 6th decimal
resume = round(float(timeInfo.get('ResumeTime')), 6) resume = round(float(timeInfo.get('ResumeTime')), 6)
total = round(float(timeInfo.get('TotalTime')), 6) total = round(float(timeInfo.get('TotalTime')), 6)
@ -533,10 +532,15 @@ class WriteKodiVideoDB():
query = "INSERT INTO tvshowlinkpath(idShow, idPath) values(?, ?)" query = "INSERT INTO tvshowlinkpath(idShow, idPath) values(?, ?)"
cursor.execute(query, (showid, pathid)) cursor.execute(query, (showid, pathid))
# Add the viewtag
self.AddTagToMedia(showid, viewTag, "tvshow", cursor)
# Add tags to item, view tag, emby tags and favourite
tags = [viewTag]
tags.extend(MBitem['Tags'])
if userData['Favorite']:
tags.append("Favorite tvshows")
self.AddTagsToMedia(showid, tags, "tvshow", cursor)
# Update or insert people # Update or insert people
self.AddPeopleToMedia(showid, MBitem.get('People'),"tvshow", connection, cursor) self.AddPeopleToMedia(showid, MBitem.get('People'),"tvshow", connection, cursor)
@ -545,12 +549,6 @@ class WriteKodiVideoDB():
# Update studios # Update studios
self.AddStudiosToMedia(showid, studios, "tvshow", cursor) self.AddStudiosToMedia(showid, studios, "tvshow", cursor)
# Add to or remove from favorites tag
if userData.get('Favorite'):
self.AddTagToMedia(showid, "Favorite tvshows", "tvshow", cursor)
else:
self.AddTagToMedia(showid, "Favorite tvshows", "tvshow", cursor, True)
# Update artwork # Update artwork
self.addOrUpdateArt(API().getArtwork(MBitem, "Primary", mediaType = "tvshow"), showid, "tvshow", "thumb", cursor) self.addOrUpdateArt(API().getArtwork(MBitem, "Primary", mediaType = "tvshow"), showid, "tvshow", "thumb", cursor)
@ -1112,56 +1110,72 @@ class WriteKodiVideoDB():
elif "episode" in mediatype: elif "episode" in mediatype:
query = "INSERT OR REPLACE INTO studiolinkepisode(idstudio, idEpisode) values(?, ?)" query = "INSERT OR REPLACE INTO studiolinkepisode(idstudio, idEpisode) values(?, ?)"
cursor.execute(query, (idstudio, id)) cursor.execute(query, (idstudio, id))
def AddTagsToMedia(self, id, tags, mediatype, cursor):
# First, delete any existing tags associated to the id
if self.kodiversion in {15, 16}:
# Kodi Isengard, Jarvis
query = "DELETE FROM tag_link WHERE media_id = ? AND media_type = ?"
cursor.execute(query, (id, mediatype))
else: # Kodi Helix
query = "DELETE FROM taglinks WHERE idMedia = ? AND media_type = ?"
cursor.execute(query, (id, mediatype))
# Add tags
self.logMsg("Adding Tags: %s" % tags, 1)
for tag in tags:
self.AddTagToMedia(id, tag, mediatype, cursor)
def AddTagToMedia(self, id, tag, mediatype, cursor, doRemove=False): def AddTagToMedia(self, id, tag, mediatype, cursor, doRemove=False):
kodiVersion = self.kodiversion if self.kodiversion in {15, 16}:
# Kodi Isengard, Jarvis
cursor.execute("SELECT tag_id FROM tag WHERE name = ? COLLATE NOCASE", (tag,))
try:
tag_id = cursor.fetchone()[0]
except:
# Create the tag, because it does not exist
cursor.execute("select coalesce(max(tag_id),0) as tag_id from tag")
tag_id = cursor.fetchone()[0] + 1
if tag: query = "INSERT INTO tag(tag_id, name) values(?, ?)"
cursor.execute(query, (tag_id, tag))
self.logMsg("Add Tag to media, adding tag: %s" % tag, 2)
finally:
# Assign tag to item
if not doRemove:
query = "INSERT OR REPLACE INTO tag_link(tag_id, media_id, media_type) values(?, ?, ?)"
cursor.execute(query, (tag_id, id, mediatype))
else:
query = "DELETE FROM tag_link WHERE media_id = ? AND media_type = ? AND tag_id = ?"
cursor.execute(query, (id, mediatype, tag_id))
if kodiVersion == 15 or kodiVersion == 16: else:
# Kodi Isengard # Kodi Helix
cursor.execute("SELECT tag_id as tag_id FROM tag WHERE name = ? COLLATE NOCASE", (tag,)) cursor.execute("SELECT idTag FROM tag WHERE strTag = ? COLLATE NOCASE", (tag,))
try: try:
tag_id = cursor.fetchone()[0] idTag = cursor.fetchone()[0]
except: except:
# Create the tag # Create the tag
cursor.execute("select coalesce(max(tag_id),0) as tag_id from tag") cursor.execute("select coalesce(max(idTag),0) as idTag from tag")
tag_id = cursor.fetchone()[0] + 1 idTag = cursor.fetchone()[0] + 1
query = "INSERT INTO tag(tag_id, name) values(?, ?)"
cursor.execute(query, (tag_id, tag))
self.logMsg("Add Tag to media, adding tag: %s" % tag, 1)
finally:
# Assign tag to item
if not doRemove:
query = "INSERT OR REPLACE INTO tag_link(tag_id, media_id, media_type) values(?, ?, ?)"
cursor.execute(query, (tag_id, id, mediatype))
else:
query = "DELETE FROM tag_link WHERE media_id = ? AND media_type = ? AND tag_id = ?"
cursor.execute(query, (id, mediatype, tag_id))
else:
# Kodi Gotham or Helix
cursor.execute("SELECT idTag as idTag FROM tag WHERE strTag = ? COLLATE NOCASE", (tag,))
try:
idTag = cursor.fetchone()[0]
except:
# Create the tag
cursor.execute("select coalesce(max(idTag),0) as idTag from tag")
idTag = cursor.fetchone()[0] + 1
query = "INSERT INTO tag(idTag, strTag) values(?, ?)" query = "INSERT INTO tag(idTag, strTag) values(?, ?)"
cursor.execute(query, (idTag, tag)) cursor.execute(query, (idTag, tag))
self.logMsg("Add Tag to media, adding tag: %s" % tag, 1) self.logMsg("Add Tag to media, adding tag: %s" % tag, 2)
finally: finally:
# Assign tag to item # Assign tag to item
if not doRemove: if not doRemove:
query = "INSERT OR REPLACE INTO taglinks(idTag, idMedia, media_type) values(?, ?, ?)" query = "INSERT OR REPLACE INTO taglinks(idTag, idMedia, media_type) values(?, ?, ?)"
cursor.execute(query, (idTag, id, mediatype)) cursor.execute(query, (idTag, id, mediatype))
else: else:
query = "DELETE FROM taglinks WHERE idMedia = ? AND media_type = ? AND idTag = ?" query = "DELETE FROM taglinks WHERE idMedia = ? AND media_type = ? AND idTag = ?"
cursor.execute(query, (id, mediatype, idTag)) cursor.execute(query, (id, mediatype, idTag))
def AddStreamDetailsToMedia(self, streamdetails, runtime , fileid, cursor): def AddStreamDetailsToMedia(self, streamdetails, runtime , fileid, cursor):
# First remove any existing entries # First remove any existing entries