diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py index 4014b8144db2c3432538c278e686f0a318807635..4ba5ceb762fa195d01e1d7e50e9cc534e902c810 100644 --- a/sickbeard/metadata/kodi_12plus.py +++ b/sickbeard/metadata/kodi_12plus.py @@ -17,7 +17,9 @@ # 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 +from babelfish import Country import sickbeard from sickbeard.metadata import generic @@ -91,6 +93,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().title() 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 +175,19 @@ 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 'country_codes' in show_obj.imdb_info: + for country in self._split_info(show_obj.imdb_info['country_codes']): + try: + cur_country_name = Country(country.upper()).name.title() + except Exception: + continue + + cur_country = etree.SubElement(tv_node, "country") + cur_country.text = cur_country_name if getattr(myShow, 'firstaired', None): premiered = etree.SubElement(tv_node, "premiered") @@ -180,6 +197,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 +337,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