Browse Source

Show cleanup

pull/3111/head
Ruud 11 years ago
parent
commit
8281fdc08b
  1. 152
      couchpotato/core/media/show/library/episode.py
  2. 90
      couchpotato/core/media/show/library/season.py
  3. 36
      couchpotato/core/media/show/library/show.py
  4. 4
      couchpotato/core/media/show/providers/info/thetvdb.py
  5. 2
      couchpotato/core/media/show/providers/torrent/bithdtv.py
  6. 2
      couchpotato/core/media/show/providers/torrent/bitsoup.py
  7. 3
      couchpotato/core/media/show/searcher.py

152
couchpotato/core/media/show/library/episode.py

@ -1,10 +1,9 @@
from string import ascii_letters
import time import time
import traceback import traceback
from couchpotato import get_session from couchpotato import get_db
from couchpotato.core.event import addEvent, fireEventAsync, fireEvent from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.encoding import toUnicode, simplifyString from couchpotato.core.helpers.encoding import toUnicode
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.media._base.library.base import LibraryBase from couchpotato.core.media._base.library.base import LibraryBase
from couchpotato.core.helpers.variable import tryInt from couchpotato.core.helpers.variable import tryInt
@ -22,9 +21,7 @@ class EpisodeLibraryPlugin(LibraryBase):
def __init__(self): def __init__(self):
addEvent('library.query', self.query) addEvent('library.query', self.query)
addEvent('library.identifier', self.identifier) addEvent('library.identifier', self.identifier)
addEvent('library.add.episode', self.add)
addEvent('library.update.episode', self.update) addEvent('library.update.episode', self.update)
addEvent('library.update.episode_release_date', self.updateReleaseDate)
def query(self, library, first = True, condense = True, include_identifier = True, **kwargs): def query(self, library, first = True, condense = True, include_identifier = True, **kwargs):
if library is list or library.get('type') != 'episode': if library is list or library.get('type') != 'episode':
@ -86,80 +83,29 @@ class EpisodeLibraryPlugin(LibraryBase):
return identifier return identifier
def add(self, attrs = {}, update_after = True): def update(self, media_id = None, identifier = None, default_title = '', force = False):
type = attrs.get('type', 'episode')
primary_provider = attrs.get('primary_provider', 'thetvdb')
db = get_session()
parent_identifier = attrs.get('parent_identifier', None)
parent = None
if parent_identifier:
parent = db.query(SeasonLibrary).filter_by(primary_provider = primary_provider, identifier = attrs.get('parent_identifier')).first()
l = db.query(EpisodeLibrary).filter_by(type = type, identifier = attrs.get('identifier')).first()
if not l:
status = fireEvent('status.get', 'needs_update', single = True)
l = EpisodeLibrary(
type = type,
primary_provider = primary_provider,
year = attrs.get('year'),
identifier = attrs.get('identifier'),
plot = toUnicode(attrs.get('plot')),
tagline = toUnicode(attrs.get('tagline')),
status_id = status.get('id'),
info = {},
parent = parent,
season_number = tryInt(attrs.get('seasonnumber', None)),
episode_number = tryInt(attrs.get('episodenumber', None)),
absolute_number = tryInt(attrs.get('absolute_number', None))
)
title = LibraryTitle(
title = toUnicode(attrs.get('title')),
simple_title = self.simplifyTitle(attrs.get('title')),
)
l.titles.append(title)
db.add(l)
db.commit()
# Update library info
if update_after is not False:
handle = fireEventAsync if update_after is 'async' else fireEvent
handle('library.update.episode', identifier = l.identifier, default_title = toUnicode(attrs.get('title', '')))
library_dict = l.to_dict(self.default_dict)
db.expire_all()
return library_dict
def update(self, identifier, default_title = '', force = False):
if self.shuttingDown(): if self.shuttingDown():
return return
db = get_session() db = get_db()
library = db.query(EpisodeLibrary).filter_by(identifier = identifier).first()
done_status = fireEvent('status.get', 'done', single = True)
if library: if media_id:
library_dict = library.to_dict(self.default_dict) media = db.get('id', media_id)
else:
media = db.get('media', identifier, with_doc = True)['doc']
do_update = True do_update = True
parent_identifier = None if media.get('status') == 'done' and not force:
if library.parent is not None:
parent_identifier = library.parent.identifier
if library.status_id == done_status.get('id') and not force:
do_update = False do_update = False
episode_params = {'season_identifier': parent_identifier, episode_params = {
'episode_identifier': identifier, 'season_identifier': media.get('parent'),
'episode': library.episode_number, 'episode_identifier': media.get('identifier'),
'absolute': library.absolute_number,} 'episode': media.get('episode_number'),
'absolute': media.get('episode_number'),
}
info = fireEvent('episode.info', merge = True, params = episode_params) info = fireEvent('episode.info', merge = True, params = episode_params)
# Don't need those here # Don't need those here
@ -174,23 +120,16 @@ class EpisodeLibraryPlugin(LibraryBase):
# Main info # Main info
if do_update: if do_update:
library.plot = toUnicode(info.get('plot', '')) episode = {
library.tagline = toUnicode(info.get('tagline', '')) 'plot': toUnicode(info.get('plot', '')),
library.year = info.get('year', 0) 'tagline': toUnicode(info.get('tagline', '')),
library.status_id = done_status.get('id') 'year': info.get('year', 0),
library.season_number = tryInt(info.get('seasonnumber', None)) 'status_id': 'done',
library.episode_number = tryInt(info.get('episodenumber', None)) 'season_number': tryInt(info.get('seasonnumber', None)),
library.absolute_number = tryInt(info.get('absolute_number', None)) 'episode_number': tryInt(info.get('episodenumber', None)),
try: 'absolute_number': tryInt(info.get('absolute_number', None)),
library.last_updated = int(info.get('lastupdated')) 'last_updated': tryInt(info.get('lastupdated', time.time())),
except: }
library.last_updated = int(time.time())
library.info.update(info)
db.commit()
# Titles
[db.delete(title) for title in library.titles]
db.commit()
titles = info.get('titles', []) titles = info.get('titles', [])
log.debug('Adding titles: %s', titles) log.debug('Adding titles: %s', titles)
@ -207,7 +146,8 @@ class EpisodeLibraryPlugin(LibraryBase):
library.titles.append(t) library.titles.append(t)
counter += 1 counter += 1
db.commit() media.update(episode)
db.update(media)
# Files # Files
images = info.get('images', []) images = info.get('images', [])
@ -231,39 +171,3 @@ class EpisodeLibraryPlugin(LibraryBase):
library_dict = library.to_dict(self.default_dict) library_dict = library.to_dict(self.default_dict)
db.expire_all() db.expire_all()
return library_dict return library_dict
def updateReleaseDate(self, identifier):
'''XXX: Not sure what this is for yet in relation to an episode'''
pass
#db = get_session()
#library = db.query(EpisodeLibrary).filter_by(identifier = identifier).first()
#if not library.info:
#library_dict = self.update(identifier, force = True)
#dates = library_dict.get('info', {}).get('release_date')
#else:
#dates = library.info.get('release_date')
#if dates and dates.get('expires', 0) < time.time() or not dates:
#dates = fireEvent('movie.release_date', identifier = identifier, merge = True)
#library.info.update({'release_date': dates })
#db.commit()
#db.expire_all()
#return dates
#TODO: Add to base class
def simplifyTitle(self, title):
title = toUnicode(title)
nr_prefix = '' if title[0] in ascii_letters else '#'
title = simplifyString(title)
for prefix in ['the ']:
if prefix == title[:len(prefix)]:
title = title[len(prefix):]
break
return nr_prefix + title

90
couchpotato/core/media/show/library/season.py

@ -1,9 +1,8 @@
from string import ascii_letters
import traceback import traceback
from couchpotato import get_session from couchpotato import get_session
from couchpotato.core.event import addEvent, fireEventAsync, fireEvent from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.encoding import toUnicode, simplifyString from couchpotato.core.helpers.encoding import toUnicode
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.media._base.library.base import LibraryBase from couchpotato.core.media._base.library.base import LibraryBase
from couchpotato.core.helpers.variable import tryInt from couchpotato.core.helpers.variable import tryInt
@ -16,14 +15,10 @@ autload = 'SeasonLibraryPlugin'
class SeasonLibraryPlugin(LibraryBase): class SeasonLibraryPlugin(LibraryBase):
default_dict = {'titles': {}, 'files':{}}
def __init__(self): def __init__(self):
addEvent('library.query', self.query) addEvent('library.query', self.query)
addEvent('library.identifier', self.identifier) addEvent('library.identifier', self.identifier)
addEvent('library.add.season', self.add)
addEvent('library.update.season', self.update) addEvent('library.update.season', self.update)
addEvent('library.update.season_release_date', self.updateReleaseDate)
def query(self, library, first = True, condense = True, include_identifier = True, **kwargs): def query(self, library, first = True, condense = True, include_identifier = True, **kwargs):
if library is list or library.get('type') != 'season': if library is list or library.get('type') != 'season':
@ -73,51 +68,6 @@ class SeasonLibraryPlugin(LibraryBase):
'season': tryInt(library['season_number'], None) 'season': tryInt(library['season_number'], None)
} }
def add(self, attrs = {}, update_after = True):
type = attrs.get('type', 'season')
primary_provider = attrs.get('primary_provider', 'thetvdb')
db = get_session()
parent_identifier = attrs.get('parent_identifier', None)
parent = None
if parent_identifier:
parent = db.query(ShowLibrary).filter_by(primary_provider = primary_provider, identifier = attrs.get('parent_identifier')).first()
l = db.query(SeasonLibrary).filter_by(type = type, identifier = attrs.get('identifier')).first()
if not l:
status = fireEvent('status.get', 'needs_update', single = True)
l = SeasonLibrary(
type = type,
primary_provider = primary_provider,
year = attrs.get('year'),
identifier = attrs.get('identifier'),
plot = toUnicode(attrs.get('plot')),
tagline = toUnicode(attrs.get('tagline')),
status_id = status.get('id'),
info = {},
parent = parent,
)
title = LibraryTitle(
title = toUnicode(attrs.get('title')),
simple_title = self.simplifyTitle(attrs.get('title')),
)
l.titles.append(title)
db.add(l)
db.commit()
# Update library info
if update_after is not False:
handle = fireEventAsync if update_after is 'async' else fireEvent
handle('library.update.season', identifier = l.identifier, default_title = toUnicode(attrs.get('title', '')))
library_dict = l.to_dict(self.default_dict)
db.expire_all()
return library_dict
def update(self, identifier, default_title = '', force = False): def update(self, identifier, default_title = '', force = False):
if self.shuttingDown(): if self.shuttingDown():
@ -206,39 +156,3 @@ class SeasonLibraryPlugin(LibraryBase):
library_dict = library.to_dict(self.default_dict) library_dict = library.to_dict(self.default_dict)
db.expire_all() db.expire_all()
return library_dict return library_dict
def updateReleaseDate(self, identifier):
'''XXX: Not sure what this is for yet in relation to a tvshow'''
pass
#db = get_session()
#library = db.query(SeasonLibrary).filter_by(identifier = identifier).first()
#if not library.info:
#library_dict = self.update(identifier, force = True)
#dates = library_dict.get('info', {}).get('release_date')
#else:
#dates = library.info.get('release_date')
#if dates and dates.get('expires', 0) < time.time() or not dates:
#dates = fireEvent('movie.release_date', identifier = identifier, merge = True)
#library.info.update({'release_date': dates })
#db.commit()
#db.expire_all()
#return dates
#TODO: Add to base class
def simplifyTitle(self, title):
title = toUnicode(title)
nr_prefix = '' if title[0] in ascii_letters else '#'
title = simplifyString(title)
for prefix in ['the ']:
if prefix == title[:len(prefix)]:
title = title[len(prefix):]
break
return nr_prefix + title

36
couchpotato/core/media/show/library/show.py

@ -194,39 +194,3 @@ class ShowLibraryPlugin(LibraryBase):
db.expire_all() db.expire_all()
return library_dict return library_dict
def updateReleaseDate(self, identifier):
'''XXX: Not sure what this is for yet in relation to a show'''
pass
#db = get_session()
#library = db.query(ShowLibrary).filter_by(identifier = identifier).first()
#if not library.info:
#library_dict = self.update(identifier, force = True)
#dates = library_dict.get('info', {}).get('release_date')
#else:
#dates = library.info.get('release_date')
#if dates and dates.get('expires', 0) < time.time() or not dates:
#dates = fireEvent('movie.release_date', identifier = identifier, merge = True)
#library.info.update({'release_date': dates })
#db.commit()
#db.expire_all()
#return dates
#TODO: Add to base class
def simplifyTitle(self, title):
title = toUnicode(title)
nr_prefix = '' if title[0] in ascii_letters else '#'
title = simplifyString(title)
for prefix in ['the ']:
if prefix == title[:len(prefix)]:
title = title[len(prefix):]
break
return nr_prefix + title

4
couchpotato/core/media/show/providers/info/thetvdb.py

@ -8,7 +8,7 @@ from couchpotato.core.logger import CPLog
from couchpotato.core.media.show.providers.base import ShowProvider from couchpotato.core.media.show.providers.base import ShowProvider
from couchpotato.environment import Env from couchpotato.environment import Env
from tvdb_api import tvdb_exceptions from tvdb_api import tvdb_exceptions
import tvdb_api from tvdb_api.tvdb_api import Tvdb
log = CPLog(__name__) log = CPLog(__name__)
@ -39,7 +39,7 @@ class TheTVDb(ShowProvider):
self._setup() self._setup()
def _setup(self): def _setup(self):
self.tvdb = tvdb_api.Tvdb(**self.tvdb_api_parms) self.tvdb = Tvdb(**self.tvdb_api_parms)
self.valid_languages = self.tvdb.config['valid_languages'] self.valid_languages = self.tvdb.config['valid_languages']
def search(self, q, limit = 12, language = 'en'): def search(self, q, limit = 12, language = 'en'):

2
couchpotato/core/media/show/providers/torrent/bithdtv.py

@ -7,7 +7,7 @@ from couchpotato.core.media._base.providers.torrent.bithdtv import Base
log = CPLog(__name__) log = CPLog(__name__)
autoload = 'BitHDTV' autoload = 'BiTHDTV'
class BiTHDTV(MultiProvider): class BiTHDTV(MultiProvider):

2
couchpotato/core/media/show/providers/torrent/bitsoup.py

@ -13,7 +13,7 @@ autoload = 'Bitsoup'
class Bitsoup(MultiProvider): class Bitsoup(MultiProvider):
def getTypes(self): def getTypes(self):
return [Movie, Season, Episode] return [Season, Episode]
class Season(SeasonProvider, Base): class Season(SeasonProvider, Base):

3
couchpotato/core/media/show/searcher.py

@ -188,3 +188,6 @@ class ShowSearcher(SearcherBase, ShowTypeBase):
episode = episode[0] if len(episode) else None episode = episode[0] if len(episode) else None
return show, season, episode return show, season, episode
def searchAll(self):
pass

Loading…
Cancel
Save