diff --git a/couchpotato/core/media/show/__init__.py b/couchpotato/core/media/show/__init__.py index 89bfef6..d07dde4 100644 --- a/couchpotato/core/media/show/__init__.py +++ b/couchpotato/core/media/show/__init__.py @@ -1,5 +1,23 @@ +from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.media import MediaBase +autoload = 'ShowToggler' + + +class ShowToggler(MediaBase): + """ + TV Show support is EXPERIMENTAL and disabled by default. The "Shows" item + must only be visible if the user enabled it. This class notifies the + frontend if the shows.enabled configuration item changed. + + FIXME: remove after TV Show support is considered stable. + """ + def __init__(self): + addEvent('setting.save.shows.enabled.after', self.toggleTab) + + def toggleTab(self): + fireEvent('notify.frontend', type = 'shows.enabled', data = self.conf('enabled', section='shows')) + class ShowTypeBase(MediaBase): _type = 'show' @@ -9,3 +27,29 @@ class ShowTypeBase(MediaBase): return '%s.%s' % (self._type, self.type) return self._type + +config = [{ + 'name': 'shows', + 'groups': [ + { + 'tab': 'general', + 'name': 'Shows', + 'label': 'Shows', + 'description': 'Enable EXPERIMENTAL TV Show support', + 'options': [ + { + 'name': 'enabled', + 'default': False, + 'type': 'enabler', + }, + { + 'name': 'prefer_episode_releases', + 'default': False, + 'type': 'bool', + 'label': 'Episode releases', + 'description': 'Prefer episode releases over season packs', + }, + ], + }, + ], +}] \ No newline at end of file diff --git a/couchpotato/core/media/show/_base/static/1_wanted.js b/couchpotato/core/media/show/_base/static/1_wanted.js index 2400071..f6af814 100755 --- a/couchpotato/core/media/show/_base/static/1_wanted.js +++ b/couchpotato/core/media/show/_base/static/1_wanted.js @@ -3,8 +3,39 @@ Page.Shows = new Class({ Extends: PageBase, name: 'shows', - title: 'Gimmy gimmy gimmy!', + title: 'List of TV Shows subscribed to', folder_browser: null, + has_tab: false, + + toggleShows: function(arg) { + var self = this; + var nav = App.getBlock('navigation'); + + if ((typeof arg === 'object' && arg.data === true) || arg === true) { + self.tab = nav.addTab(self.name, { + 'href': App.createUrl(self.name), + 'title': self.title, + 'text': self.name.capitalize() + }); + self.has_tab = true; + } else { + self.has_tab = false; + self.tab = null; + nav.removeTab('shows'); + } + }, + + load: function() { + var self = this; + + Api.request('settings', { + 'onComplete': function(json){ + self.toggleShows(json.values.shows.enabled); + } + }); + + App.on('shows.enabled', self.toggleShows.bind(self)); + }, indexAction: function(){ var self = this; diff --git a/couchpotato/core/media/show/providers/info/trakt.py b/couchpotato/core/media/show/providers/info/trakt.py index b516d98..922c83a 100755 --- a/couchpotato/core/media/show/providers/info/trakt.py +++ b/couchpotato/core/media/show/providers/info/trakt.py @@ -15,7 +15,8 @@ class Trakt(ShowProvider, TraktBase): addEvent('show.search', self.search, priority = 1) def search(self, q, limit = 12): - if self.isDisabled(): + if self.isDisabled() or not self.conf('enabled', section='shows'): + log.debug('Not searching for show: %s', q) return False # Search diff --git a/couchpotato/static/scripts/block/navigation.js b/couchpotato/static/scripts/block/navigation.js index f5642df..3622187 100644 --- a/couchpotato/static/scripts/block/navigation.js +++ b/couchpotato/static/scripts/block/navigation.js @@ -57,6 +57,15 @@ Block.Navigation = new Class({ }, + removeTab: function(name) { + var self = this; + + var element = self.nav.getElement('li.tab_'+name); + if (element) { + element.dispose() + } + }, + toggleMenu: function(){ var self = this, body = $(document.body), @@ -89,4 +98,4 @@ Block.Navigation = new Class({ } -}); \ No newline at end of file +});