diff --git a/couchpotato/core/plugins/file/main.py b/couchpotato/core/plugins/file/main.py index 3cbc3694..b3b9918f 100644 --- a/couchpotato/core/plugins/file/main.py +++ b/couchpotato/core/plugins/file/main.py @@ -42,17 +42,11 @@ class FileManager(Plugin): if not dest: # to Cache dest = os.path.join(Env.get('cache_dir'), '%s.%s' % (md5(url), getExt(url))) - if overwrite or not os.path.exists(dest): - log.debug('Writing file to: %s' % dest) - output = open(dest, 'wb') - output.write(file) - output.close() - else: - log.debug('File already exists: %s' % dest) + if overwrite or not os.path.isfile(dest): + self.createFile(dest, file) return dest - def add(self, path = '', part = 1, type = (), available = 1, properties = {}): db = get_session() diff --git a/couchpotato/core/plugins/library/main.py b/couchpotato/core/plugins/library/main.py index 5d2e24ce..986ba3de 100644 --- a/couchpotato/core/plugins/library/main.py +++ b/couchpotato/core/plugins/library/main.py @@ -2,14 +2,15 @@ from couchpotato import get_session from couchpotato.core.event import addEvent, fireEventAsync, fireEvent from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin -from couchpotato.core.settings.model import Library, LibraryTitle, File +from couchpotato.core.settings.model import Library, LibraryTitle, File, \ + LibraryGenre import traceback log = CPLog(__name__) class LibraryPlugin(Plugin): - default_dict = {'titles': {}, 'files':{}, 'info':{}} + default_dict = {'titles': {}, 'files':{}, 'info':{}, 'genres':{}} def __init__(self): addEvent('library.add', self.add) @@ -77,7 +78,6 @@ class LibraryPlugin(Plugin): db.commit() titles = info.get('titles', []) - log.debug('Adding titles: %s' % titles) for title in titles: t = LibraryTitle( @@ -88,6 +88,20 @@ class LibraryPlugin(Plugin): db.commit() + # Genres + [db.delete(genre) for genre in library.genres] + db.commit() + + genres = info.get('genres', []) + log.debug('Adding genres: %s' % genres) + for genre in genres: + g = LibraryGenre( + name = genre + ) + library.genres.append(g) + + db.commit() + # Files images = info.get('images', []) for type in images: diff --git a/couchpotato/core/plugins/metadata/main.py b/couchpotato/core/plugins/metadata/main.py index 1a6e6e57..232ef4e2 100644 --- a/couchpotato/core/plugins/metadata/main.py +++ b/couchpotato/core/plugins/metadata/main.py @@ -8,9 +8,7 @@ log = CPLog(__name__) class MetaData(Plugin): def __init__(self): - addEvent('renaming.after', self.add) - - addEvent('app.load', self.add) + addEvent('renamer.after', self.add) def add(self, data = {}): log.info('Getting meta data') diff --git a/couchpotato/core/plugins/renamer/__init__.py b/couchpotato/core/plugins/renamer/__init__.py index 290b1fce..c5e2bc23 100644 --- a/couchpotato/core/plugins/renamer/__init__.py +++ b/couchpotato/core/plugins/renamer/__init__.py @@ -77,11 +77,6 @@ config = [{ 'label': 'Trailer naming', 'default': '-trailer.', }, - { - 'name': 'backdrop_name', - 'label': 'Backdrop naming', - 'default': '-backdrop.', - } ], }, ], diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index 2715a853..10f1240c 100644 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -119,14 +119,13 @@ class Renamer(Plugin): final_folder_name = self.doReplace(folder_name, replacements) final_file_name = self.doReplace(file_name, replacements) replacements['filename'] = final_file_name[:-(len(getExt(final_file_name)) + 1)] + group['filename'] = replacements['filename'] # Meta naming if file_type is 'trailer': final_file_name = self.doReplace(trailer_name, replacements) elif file_type is 'nfo': final_file_name = self.doReplace(nfo_name, replacements) - elif file_type is 'backdrop': - final_file_name = self.doReplace(backdrop_name, replacements) # Seperator replace if separator: diff --git a/couchpotato/core/plugins/scanner/main.py b/couchpotato/core/plugins/scanner/main.py index d4b82450..fe9ce2b7 100644 --- a/couchpotato/core/plugins/scanner/main.py +++ b/couchpotato/core/plugins/scanner/main.py @@ -194,7 +194,7 @@ class Scanner(Plugin): 'subtitle_extra': self.getSubtitlesExtras(group['unsorted_files']), 'nfo': self.getNfo(group['unsorted_files']), 'trailer': self.getTrailers(group['unsorted_files']), - 'backdrop': images['backdrop'], + #'backdrop': images['backdrop'], 'leftover': set(group['unsorted_files']), } diff --git a/couchpotato/core/providers/metadata/base.py b/couchpotato/core/providers/metadata/base.py index 0403f630..92ce9470 100644 --- a/couchpotato/core/providers/metadata/base.py +++ b/couchpotato/core/providers/metadata/base.py @@ -1,4 +1,4 @@ -from couchpotato.core.event import addEvent +from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin @@ -17,7 +17,7 @@ class MetaDataBase(Plugin): log.info('Creating %s metadata.' % self.getName()) - root = self.getRootName() + root = self.getRootName(release) for type in ['nfo', 'thumbnail', 'fanart']: try: diff --git a/couchpotato/core/providers/metadata/xbmc/main.py b/couchpotato/core/providers/metadata/xbmc/main.py index 2a7e90b3..0f83e7b3 100644 --- a/couchpotato/core/providers/metadata/xbmc/main.py +++ b/couchpotato/core/providers/metadata/xbmc/main.py @@ -1,15 +1,14 @@ +from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.providers.metadata.base import MetaDataBase from xml.etree.ElementTree import Element, SubElement, tostring +import os import re import xml.dom.minidom class XBMC(MetaDataBase): def getRootName(self, data = {}): - - - - return '/Users/ruud/Downloads/Test/Transformers' + return os.path.join(data['destination_dir'], data['filename']) def getFanartName(self, root): return '%s-fanart.jpg' % root @@ -23,8 +22,30 @@ class XBMC(MetaDataBase): def getNfo(self, data): nfoxml = Element('movie') - types = ['title', 'rating', 'year', 'votes', 'rating', 'mpaa', 'originaltitle:original_title', 'outline:overview', 'premiered:released', 'id:imdb_id'] + types = ['rating', 'year', 'votes', 'rating', 'mpaa', 'originaltitle:original_title', 'outline:plot', 'premiered:released'] + # Title + try: + el = SubElement(nfoxml, 'title') + el.text = toUnicode(data['library']['titles'][0]['title']) + except: + pass + + # IMDB id + try: + el = SubElement(nfoxml, 'id') + el.text = toUnicode(data['library']['identifier']) + except: + pass + + # Runtime + try: + runtime = SubElement(nfoxml, 'runtime') + runtime.text = '%s min' % data['library']['runtime'] + except: + pass + + # Other values for type in types: if ':' in type: @@ -33,20 +54,17 @@ class XBMC(MetaDataBase): name = type try: - el = SubElement(nfoxml, name) - el.text = data.get(type, '') + if data['library'].get(type): + el = SubElement(nfoxml, name) + el.text = toUnicode(data['library'].get(type, '')) except: pass - #for genre in self.get('genres'): - # genres = SubElement(nfoxml, 'genre') - # genres.text = genre + # Genre + for genre in data['library'].get('genres', []): + genres = SubElement(nfoxml, 'genre') + genres.text = genre.get('name') - try: - runtime = SubElement(nfoxml, 'runtime') - runtime.text = data.get('runtime') + " min" - except: - pass # Clean up the xml and return it nfoxml = xml.dom.minidom.parseString(tostring(nfoxml)) @@ -55,130 +73,3 @@ class XBMC(MetaDataBase): xml_string = text_re.sub('>\g<1>= min_height: - images.append(image) - break - elif min_width and not min_height: - if image['width'] >= min_width: - images.append(image) - break - elif min_width and min_height: - if image['width'] >= min_width and image['height'] >= min_height: - images.append(image) - break - - #No image meets our resolution requirements, so disregard those requirements - if len(images) == 0 and min_height or min_width: - images.append(image_list[0]) - - return images[0] - -if __name__ == "__main__": - import sys - try: - id = sys.argv[1] - except: - id = 'tt0111161' - - x = MetaGen(id) - x.write_nfo("movie.nfo") - try: - x.write_fanart("fanart.jpg", ".", 0, 0) - except: pass - try: - x.write_poster("movie.tbn", ".", 0, 0) - except: pass -""" diff --git a/couchpotato/core/providers/movie/themoviedb/main.py b/couchpotato/core/providers/movie/themoviedb/main.py index 8bf098e3..a5823f8d 100644 --- a/couchpotato/core/providers/movie/themoviedb/main.py +++ b/couchpotato/core/providers/movie/themoviedb/main.py @@ -92,7 +92,7 @@ class TheMovieDb(MovieProvider): def getInfo(self, identifier = None): cache_key = 'tmdb.cache.%s' % identifier - result = self.getCache(cache_key) + result = None #self.getCache(cache_key) if not result: result = {} @@ -112,27 +112,33 @@ class TheMovieDb(MovieProvider): def parseMovie(self, movie): - year = str(movie.get('released', 'none'))[:4] - # Poster url poster = self.getImage(movie, type = 'poster') backdrop = self.getImage(movie, type = 'backdrop') + # Genres + genres = self.getCategory(movie, 'genre') + # 1900 is the same as None + year = str(movie.get('released', 'none'))[:4] if year == '1900' or year.lower() == 'none': year = None movie_data = { 'id': int(movie.get('id', 0)), 'titles': [toUnicode(movie.get('name'))], + 'original_title': movie.get('original_name'), 'images': { 'posters': [poster], 'backdrops': [backdrop], }, 'imdb': movie.get('imdb_id'), + 'runtime': movie.get('runtime'), + 'released': movie.get('released'), 'year': year, 'plot': movie.get('overview', ''), 'tagline': '', + 'genres': genres, } # Add alternative names @@ -153,6 +159,19 @@ class TheMovieDb(MovieProvider): return image + def getCategory(self, movie, type = 'genre'): + + cats = movie.get('categories', {}).get(type) + + categories = [] + for category in cats: + try: + categories.append(category) + except: + pass + + return categories + def isDisabled(self): if self.conf('api_key') == '': log.error('No API key provided.') diff --git a/couchpotato/core/settings/model.py b/couchpotato/core/settings/model.py index b2efd061..7c4510c4 100644 --- a/couchpotato/core/settings/model.py +++ b/couchpotato/core/settings/model.py @@ -44,12 +44,10 @@ class Library(Entity): status = ManyToOne('Status') movies = OneToMany('Movie') titles = OneToMany('LibraryTitle') + genres = ManyToMany('LibraryGenre') files = ManyToMany('File') info = OneToMany('LibraryInfo') - def title(self): - return self.titles[0]['title'] - class LibraryInfo(Entity): """""" @@ -71,6 +69,14 @@ class LibraryTitle(Entity): libraries = ManyToOne('Library') +class LibraryGenre(Entity): + """""" + + name = Field(Unicode) + + libraries = ManyToMany('Library') + + class Language(Entity): """""" diff --git a/libs/themoviedb/tmdb.py b/libs/themoviedb/tmdb.py index e67115db..7df6e70d 100644 --- a/libs/themoviedb/tmdb.py +++ b/libs/themoviedb/tmdb.py @@ -350,7 +350,7 @@ class MovieDb: etree = XmlHandler(url).getEt() lookup_results = SearchResults() for cur_lookup in etree.find("movies").findall("movie"): - cur_movie = self._parseSearchResults(cur_lookup) + cur_movie = self._parseMovie(cur_lookup) lookup_results.append(cur_movie) return lookup_results