From f643acafca36c6fc9fb287609b54d12e8f702229 Mon Sep 17 00:00:00 2001 From: Dustyn Gibson <miigotu@gmail.com> Date: Fri, 27 Nov 2015 20:42:39 -0800 Subject: [PATCH] Fixes for KODI 12+ nfo file generation Split directors, credits (writers), and genres into unique subelements for show and episode nfo Add credits (writers) and directors to the show nfo Fixes https://github.com/SickRage/sickrage-issues/issues/73 --- sickbeard/metadata/kodi_12plus.py | 41 ++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py index 4014b8144..87fe23f1f 100644 --- a/sickbeard/metadata/kodi_12plus.py +++ b/sickbeard/metadata/kodi_12plus.py @@ -17,6 +17,7 @@ # You should have received a copy of the GNU General Public License # along with SickRage. If not, see <http://www.gnu.org/licenses/>. +import re import datetime import sickbeard @@ -91,6 +92,10 @@ class KODI_12PlusMetadata(generic.GenericMetadata): self.eg_season_all_poster = "season-all-poster.jpg" self.eg_season_all_banner = "season-all-banner.jpg" + @staticmethod + def _split_info(info_string): + return {x.strip() for x in re.sub(r'[,/]*', '|', info_string).split('|') if x.strip()} + def _show_data(self, show_obj): """ Creates an elementTree XML structure for an KODI-style tvshow.nfo and @@ -169,8 +174,9 @@ class KODI_12PlusMetadata(generic.GenericMetadata): indexerid.text = str(myShow["id"]) if getattr(myShow, 'genre', None) and isinstance(myShow["genre"], basestring): - genre = etree.SubElement(tv_node, "genre") - genre.text = " / ".join(x.strip() for x in myShow["genre"].split('|') if x.strip()) + for genre in self._split_info(myShow["genre"]): + cur_genre = etree.SubElement(tv_node, "genre") + cur_genre.text = genre if getattr(myShow, 'firstaired', None): premiered = etree.SubElement(tv_node, "premiered") @@ -180,6 +186,16 @@ class KODI_12PlusMetadata(generic.GenericMetadata): studio = etree.SubElement(tv_node, "studio") studio.text = myShow["network"].strip() + if getattr(myShow, 'writer', None) and isinstance(myShow['writer'], basestring): + for writer in self._split_info(myShow['writer']): + cur_writer = etree.SubElement(tv_node, "credits") + cur_writer.text = writer + + if getattr(myShow, 'director', None) and isinstance(myShow['director'], basestring): + for director in self._split_info(myShow['director']): + cur_director = etree.SubElement(tv_node, "director") + cur_director.text = director + if getattr(myShow, '_actors', None): for actor in myShow['_actors']: cur_actor = etree.SubElement(tv_node, "actor") @@ -310,20 +326,23 @@ class KODI_12PlusMetadata(generic.GenericMetadata): # watched = etree.SubElement(episode, "watched") # watched.text = 'false' - if getattr(myEp, 'writer', None): - ep_credits = etree.SubElement(episode, "credits") - ep_credits.text = myEp['writer'].strip() - - if getattr(myEp, 'director', None): - director = etree.SubElement(episode, "director") - director.text = myEp['director'].strip() - if getattr(myEp, 'rating', None): rating = etree.SubElement(episode, "rating") rating.text = myEp['rating'] + + if getattr(myEp, 'writer', None) and isinstance(myEp['writer'], basestring): + for writer in self._split_info(myEp['writer']): + cur_writer = etree.SubElement(episode, "credits") + cur_writer.text = writer + + if getattr(myEp, 'director', None) and isinstance(myEp['director'], basestring): + for director in self._split_info(myEp['director']): + cur_director = etree.SubElement(episode, "director") + cur_director.text = director + if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring): - for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()): + for actor in self._split_info(myEp['gueststars']): cur_actor = etree.SubElement(episode, "actor") cur_actor_name = etree.SubElement(cur_actor, "name") cur_actor_name.text = actor -- GitLab