From 471229216a4f5eec4d9553251b78388339506f28 Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 11 Mar 2014 18:45:50 +0100 Subject: [PATCH] Provider restructure --- couchpotato/core/loader.py | 5 +- .../_base/providers/automation/__init__.py | 21 ---- .../media/_base/providers/automation/base.py | 94 +-------------- .../core/media/_base/providers/base.py | 17 ++- .../core/media/_base/providers/info/base.py | 6 +- .../media/_base/providers/metadata/base.py | 104 +---------------- .../_base/providers/metadata/wmc/main.py | 8 -- .../core/media/_base/providers/nzb/base.py | 2 +- .../_base/providers/nzb/binsearch/__init__.py | 5 - .../_base/providers/nzb/binsearch/main.py | 25 +--- .../_base/providers/nzb/newznab/__init__.py | 5 - .../media/_base/providers/nzb/newznab/main.py | 31 +++-- .../_base/providers/nzb/nzbclub/__init__.py | 5 - .../media/_base/providers/nzb/nzbclub/main.py | 26 +---- .../_base/providers/nzb/nzbindex/__init__.py | 5 - .../_base/providers/nzb/nzbindex/main.py | 57 +++++---- .../providers/nzb/omgwtfnzbs/__init__.py | 5 - .../_base/providers/nzb/omgwtfnzbs/main.py | 4 +- .../providers/torrent/awesomehd/__init__.py | 5 - .../_base/providers/torrent/awesomehd/main.py | 4 +- .../media/_base/providers/torrent/base.py | 19 ++- .../providers/torrent/bithdtv/__init__.py | 5 - .../_base/providers/torrent/bithdtv/main.py | 17 +-- .../providers/torrent/bitsoup/__init__.py | 5 - .../_base/providers/torrent/bitsoup/main.py | 6 +- .../providers/torrent/hdbits/__init__.py | 5 - .../_base/providers/torrent/hdbits/main.py | 4 +- .../torrent/ilovetorrents/__init__.py | 5 - .../providers/torrent/ilovetorrents/main.py | 4 +- .../providers/torrent/iptorrents/__init__.py | 5 - .../providers/torrent/iptorrents/main.py | 68 +++++------ .../torrent/kickasstorrents/__init__.py | 5 - .../providers/torrent/kickasstorrents/main.py | 8 +- .../torrent/passthepopcorn/__init__.py | 5 - .../providers/torrent/passthepopcorn/main.py | 50 ++------ .../providers/torrent/publichd/__init__.py | 5 - .../_base/providers/torrent/publichd/main.py | 15 ++- .../providers/torrent/sceneaccess/__init__.py | 5 - .../providers/torrent/sceneaccess/main.py | 49 +++----- .../torrent/thepiratebay/__init__.py | 5 - .../providers/torrent/thepiratebay/main.py | 32 +++-- .../torrent/torrentbytes/__init__.py | 5 - .../providers/torrent/torrentbytes/main.py | 4 +- .../providers/torrent/torrentday/__init__.py | 5 - .../providers/torrent/torrentday/main.py | 19 +-- .../torrent/torrentleech/__init__.py | 5 - .../providers/torrent/torrentleech/main.py | 24 ++-- .../torrent/torrentpotato/__init__.py | 5 - .../providers/torrent/torrentpotato/main.py | 26 ++--- .../torrent/torrentshack/__init__.py | 5 - .../providers/torrent/torrentshack/main.py | 22 ++-- .../_base/providers/torrent/yify/__init__.py | 5 - .../_base/providers/torrent/yify/main.py | 4 +- .../providers/userscript/moviesio/main.py | 6 - .../trailer => movie/providers}/__init__.py | 0 .../movie/providers/automation/__init__.py | 21 ++++ .../media/movie/providers/automation/base.py | 96 +++++++++++++++ .../providers/automation/bluray/__init__.py | 0 .../providers/automation/bluray/main.py | 2 +- .../providers/automation/flixster/__init__.py | 0 .../providers/automation/flixster/main.py | 2 +- .../automation/goodfilms/__init__.py | 0 .../providers/automation/goodfilms/main.py | 2 +- .../providers/automation/imdb/__init__.py | 0 .../providers/automation/imdb/main.py | 5 +- .../providers/automation/itunes/__init__.py | 0 .../providers/automation/itunes/main.py | 2 +- .../automation/kinepolis/__init__.py | 0 .../providers/automation/kinepolis/main.py | 2 +- .../automation/letterboxd/__init__.py | 0 .../providers/automation/letterboxd/main.py | 2 +- .../automation/moviemeter/__init__.py | 0 .../providers/automation/moviemeter/main.py | 2 +- .../automation/movies_io/__init__.py | 0 .../providers/automation/movies_io/main.py | 2 +- .../automation/rottentomatoes/__init__.py | 0 .../automation/rottentomatoes/main.py | 2 +- .../providers/automation/trakt/__init__.py | 0 .../providers/automation/trakt/main.py | 2 +- .../core/media/movie/providers/base.py | 5 + .../media/movie/providers/info/__init__.py | 0 .../providers/info/_modifier/__init__.py | 2 +- .../providers/info/_modifier/main.py | 0 .../providers/info/couchpotatoapi/__init__.py | 0 .../providers/info/couchpotatoapi/main.py | 8 +- .../providers/info/omdbapi/__init__.py | 0 .../providers/info/omdbapi/main.py | 10 +- .../providers/info/themoviedb/__init__.py | 0 .../providers/info/themoviedb/main.py | 6 +- .../movie/providers/metadata/__init__.py | 0 .../media/movie/providers/metadata/base.py | 109 ++++++++++++++++++ .../providers/metadata/wmc/__init__.py | 0 .../movie/providers/metadata/wmc/main.py | 8 ++ .../providers/metadata/xbmc/__init__.py | 0 .../providers/metadata/xbmc/main.py | 4 +- .../media/movie/providers/nzb/__init__.py | 14 +++ .../core/media/movie/providers/nzb/base.py | 0 .../movie/providers/nzb/binsearch/__init__.py | 7 ++ .../movie/providers/nzb/binsearch/main.py | 24 ++++ .../movie/providers/nzb/newznab/__init__.py | 7 ++ .../media/movie/providers/nzb/newznab/main.py | 18 +++ .../movie/providers/nzb/nzbclub/__init__.py | 7 ++ .../media/movie/providers/nzb/nzbclub/main.py | 25 ++++ .../movie/providers/nzb/nzbindex/__init__.py | 7 ++ .../movie/providers/nzb/nzbindex/main.py | 28 +++++ .../providers/nzb/omgwtfnzbs/__init__.py | 7 ++ .../movie/providers/nzb/omgwtfnzbs/main.py | 9 ++ .../media/movie/providers/torrent/__init__.py | 14 +++ .../providers/torrent/awesomehd/__init__.py | 8 ++ .../movie/providers/torrent/awesomehd/main.py | 9 ++ .../providers/torrent/bithdtv/__init__.py | 7 ++ .../movie/providers/torrent/bithdtv/main.py | 17 +++ .../providers/torrent/bitsoup/__init__.py | 7 ++ .../movie/providers/torrent/bitsoup/main.py | 26 +++++ .../providers/torrent/hdbits/__init__.py | 7 ++ .../movie/providers/torrent/hdbits/main.py | 9 ++ .../torrent/ilovetorrents/__init__.py | 7 ++ .../providers/torrent/ilovetorrents/main.py | 9 ++ .../providers/torrent/iptorrents/__init__.py | 7 ++ .../providers/torrent/iptorrents/main.py | 20 ++++ .../torrent/kickasstorrents/__init__.py | 7 ++ .../providers/torrent/kickasstorrents/main.py | 9 ++ .../torrent/passthepopcorn/__init__.py | 7 ++ .../providers/torrent/passthepopcorn/main.py | 36 ++++++ .../providers/torrent/publichd/__init__.py | 7 ++ .../movie/providers/torrent/publichd/main.py | 12 ++ .../providers/torrent/sceneaccess/__init__.py | 7 ++ .../providers/torrent/sceneaccess/main.py | 30 +++++ .../torrent/thepiratebay/__init__.py | 7 ++ .../providers/torrent/thepiratebay/main.py | 24 ++++ .../torrent/torrentbytes/__init__.py | 7 ++ .../providers/torrent/torrentbytes/main.py | 9 ++ .../providers/torrent/torrentday/__init__.py | 7 ++ .../providers/torrent/torrentday/main.py | 18 +++ .../torrent/torrentleech/__init__.py | 7 ++ .../providers/torrent/torrentleech/main.py | 25 ++++ .../torrent/torrentpotato/__init__.py | 7 ++ .../providers/torrent/torrentpotato/main.py | 17 +++ .../torrent/torrentshack/__init__.py | 7 ++ .../providers/torrent/torrentshack/main.py | 34 ++++++ .../movie/providers/torrent/yify/__init__.py | 7 ++ .../movie/providers/torrent/yify/main.py | 9 ++ .../media/movie/providers/trailer/__init__.py | 0 .../providers/trailer/base.py | 2 +- .../providers/trailer/hdtrailers/__init__.py | 0 .../providers/trailer/hdtrailers/main.py | 2 +- .../movie/providers/userscript/__init__.py | 0 .../providers/userscript/allocine/__init__.py | 2 - .../providers/userscript/allocine/main.py | 2 +- .../userscript/appletrailers/__init__.py | 2 - .../userscript/appletrailers/main.py | 2 +- .../userscript/criticker/__init__.py | 2 - .../providers/userscript/criticker/main.py | 2 +- .../providers/userscript/filmweb/__init__.py | 2 - .../providers/userscript/filmweb/main.py | 2 +- .../userscript/flickchart/__init__.py | 2 - .../providers/userscript/flickchart/main.py | 2 +- .../providers/userscript/imdb/__init__.py | 2 - .../providers/userscript/imdb/main.py | 2 +- .../userscript/letterboxd/__init__.py | 2 - .../providers/userscript/letterboxd/main.py | 2 +- .../userscript/moviemeter/__init__.py | 2 - .../providers/userscript/moviemeter/main.py | 2 +- .../providers/userscript/moviesio/__init__.py | 2 - .../providers/userscript/moviesio/main.py | 6 + .../providers/userscript/reddit/__init__.py | 2 - .../providers/userscript/reddit/main.py | 2 +- .../userscript/rottentomatoes/__init__.py | 2 - .../userscript/rottentomatoes/main.py | 2 +- .../providers/userscript/sharethe/__init__.py | 2 - .../providers/userscript/sharethe/main.py | 2 +- .../providers/userscript/tmdb/__init__.py | 2 - .../providers/userscript/tmdb/main.py | 2 +- .../providers/userscript/trakt/__init__.py | 2 - .../providers/userscript/trakt/main.py | 2 +- .../providers/userscript/whiwa/__init__.py | 2 - .../providers/userscript/whiwa/main.py | 2 +- .../userscript/youteather/__init__.py | 2 - .../providers/userscript/youteather/main.py | 2 +- couchpotato/core/notifications/base.py | 2 +- libs/importlib/__init__.py | 38 ------ 181 files changed, 1118 insertions(+), 779 deletions(-) delete mode 100644 couchpotato/core/media/_base/providers/metadata/wmc/main.py delete mode 100644 couchpotato/core/media/_base/providers/userscript/moviesio/main.py rename couchpotato/core/media/{_base/providers/trailer => movie/providers}/__init__.py (100%) create mode 100644 couchpotato/core/media/movie/providers/automation/__init__.py create mode 100644 couchpotato/core/media/movie/providers/automation/base.py rename couchpotato/core/media/{_base => movie}/providers/automation/bluray/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/bluray/main.py (97%) rename couchpotato/core/media/{_base => movie}/providers/automation/flixster/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/flixster/main.py (94%) rename couchpotato/core/media/{_base => movie}/providers/automation/goodfilms/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/goodfilms/main.py (94%) rename couchpotato/core/media/{_base => movie}/providers/automation/imdb/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/imdb/main.py (96%) rename couchpotato/core/media/{_base => movie}/providers/automation/itunes/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/itunes/main.py (96%) rename couchpotato/core/media/{_base => movie}/providers/automation/kinepolis/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/kinepolis/main.py (89%) rename couchpotato/core/media/{_base => movie}/providers/automation/letterboxd/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/letterboxd/main.py (94%) rename couchpotato/core/media/{_base => movie}/providers/automation/moviemeter/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/moviemeter/main.py (90%) rename couchpotato/core/media/{_base => movie}/providers/automation/movies_io/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/movies_io/main.py (92%) rename couchpotato/core/media/{_base => movie}/providers/automation/rottentomatoes/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/rottentomatoes/main.py (95%) rename couchpotato/core/media/{_base => movie}/providers/automation/trakt/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/automation/trakt/main.py (94%) create mode 100644 couchpotato/core/media/movie/providers/base.py create mode 100644 couchpotato/core/media/movie/providers/info/__init__.py rename couchpotato/core/media/{_base => movie}/providers/info/_modifier/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/info/_modifier/main.py (100%) rename couchpotato/core/media/{_base => movie}/providers/info/couchpotatoapi/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/info/couchpotatoapi/main.py (98%) rename couchpotato/core/media/{_base => movie}/providers/info/omdbapi/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/info/omdbapi/main.py (98%) rename couchpotato/core/media/{_base => movie}/providers/info/themoviedb/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/info/themoviedb/main.py (98%) create mode 100644 couchpotato/core/media/movie/providers/metadata/__init__.py create mode 100644 couchpotato/core/media/movie/providers/metadata/base.py rename couchpotato/core/media/{_base => movie}/providers/metadata/wmc/__init__.py (100%) create mode 100644 couchpotato/core/media/movie/providers/metadata/wmc/main.py rename couchpotato/core/media/{_base => movie}/providers/metadata/xbmc/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/metadata/xbmc/main.py (98%) create mode 100644 couchpotato/core/media/movie/providers/nzb/__init__.py create mode 100644 couchpotato/core/media/movie/providers/nzb/base.py create mode 100644 couchpotato/core/media/movie/providers/nzb/binsearch/__init__.py create mode 100644 couchpotato/core/media/movie/providers/nzb/binsearch/main.py create mode 100644 couchpotato/core/media/movie/providers/nzb/newznab/__init__.py create mode 100644 couchpotato/core/media/movie/providers/nzb/newznab/main.py create mode 100644 couchpotato/core/media/movie/providers/nzb/nzbclub/__init__.py create mode 100644 couchpotato/core/media/movie/providers/nzb/nzbclub/main.py create mode 100644 couchpotato/core/media/movie/providers/nzb/nzbindex/__init__.py create mode 100644 couchpotato/core/media/movie/providers/nzb/nzbindex/main.py create mode 100644 couchpotato/core/media/movie/providers/nzb/omgwtfnzbs/__init__.py create mode 100644 couchpotato/core/media/movie/providers/nzb/omgwtfnzbs/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/awesomehd/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/awesomehd/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/bithdtv/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/bithdtv/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/bitsoup/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/bitsoup/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/hdbits/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/hdbits/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/ilovetorrents/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/ilovetorrents/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/iptorrents/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/iptorrents/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/kickasstorrents/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/kickasstorrents/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/passthepopcorn/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/passthepopcorn/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/publichd/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/publichd/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/sceneaccess/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/sceneaccess/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/thepiratebay/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/thepiratebay/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentbytes/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentbytes/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentday/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentday/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentleech/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentleech/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentpotato/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentpotato/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentshack/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/torrentshack/main.py create mode 100644 couchpotato/core/media/movie/providers/torrent/yify/__init__.py create mode 100644 couchpotato/core/media/movie/providers/torrent/yify/main.py create mode 100644 couchpotato/core/media/movie/providers/trailer/__init__.py rename couchpotato/core/media/{_base => movie}/providers/trailer/base.py (78%) rename couchpotato/core/media/{_base => movie}/providers/trailer/hdtrailers/__init__.py (100%) rename couchpotato/core/media/{_base => movie}/providers/trailer/hdtrailers/main.py (98%) create mode 100644 couchpotato/core/media/movie/providers/userscript/__init__.py rename couchpotato/core/media/{_base => movie}/providers/userscript/allocine/__init__.py (83%) rename couchpotato/core/media/{_base => movie}/providers/userscript/allocine/main.py (90%) rename couchpotato/core/media/{_base => movie}/providers/userscript/appletrailers/__init__.py (85%) rename couchpotato/core/media/{_base => movie}/providers/userscript/appletrailers/main.py (85%) rename couchpotato/core/media/{_base => movie}/providers/userscript/criticker/__init__.py (83%) rename couchpotato/core/media/{_base => movie}/providers/userscript/criticker/main.py (51%) rename couchpotato/core/media/{_base => movie}/providers/userscript/filmweb/__init__.py (82%) rename couchpotato/core/media/{_base => movie}/providers/userscript/filmweb/main.py (89%) rename couchpotato/core/media/{_base => movie}/providers/userscript/flickchart/__init__.py (83%) rename couchpotato/core/media/{_base => movie}/providers/userscript/flickchart/main.py (90%) rename couchpotato/core/media/{_base => movie}/providers/userscript/imdb/__init__.py (81%) rename couchpotato/core/media/{_base => movie}/providers/userscript/imdb/main.py (76%) rename couchpotato/core/media/{_base => movie}/providers/userscript/letterboxd/__init__.py (83%) rename couchpotato/core/media/{_base => movie}/providers/userscript/letterboxd/main.py (50%) rename couchpotato/core/media/{_base => movie}/providers/userscript/moviemeter/__init__.py (83%) rename couchpotato/core/media/{_base => movie}/providers/userscript/moviemeter/main.py (58%) rename couchpotato/core/media/{_base => movie}/providers/userscript/moviesio/__init__.py (83%) create mode 100644 couchpotato/core/media/movie/providers/userscript/moviesio/main.py rename couchpotato/core/media/{_base => movie}/providers/userscript/reddit/__init__.py (82%) rename couchpotato/core/media/{_base => movie}/providers/userscript/reddit/main.py (85%) rename couchpotato/core/media/{_base => movie}/providers/userscript/rottentomatoes/__init__.py (85%) rename couchpotato/core/media/{_base => movie}/providers/userscript/rottentomatoes/main.py (92%) rename couchpotato/core/media/{_base => movie}/providers/userscript/sharethe/__init__.py (83%) rename couchpotato/core/media/{_base => movie}/providers/userscript/sharethe/main.py (58%) rename couchpotato/core/media/{_base => movie}/providers/userscript/tmdb/__init__.py (81%) rename couchpotato/core/media/{_base => movie}/providers/userscript/tmdb/main.py (83%) rename couchpotato/core/media/{_base => movie}/providers/userscript/trakt/__init__.py (81%) rename couchpotato/core/media/{_base => movie}/providers/userscript/trakt/main.py (68%) rename couchpotato/core/media/{_base => movie}/providers/userscript/whiwa/__init__.py (81%) rename couchpotato/core/media/{_base => movie}/providers/userscript/whiwa/main.py (50%) rename couchpotato/core/media/{_base => movie}/providers/userscript/youteather/__init__.py (83%) rename couchpotato/core/media/{_base => movie}/providers/userscript/youteather/main.py (85%) delete mode 100644 libs/importlib/__init__.py diff --git a/couchpotato/core/loader.py b/couchpotato/core/loader.py index 6c3a719d..5a528b13 100644 --- a/couchpotato/core/loader.py +++ b/couchpotato/core/loader.py @@ -24,9 +24,6 @@ class Loader(object): 'downloaders': (20, 'couchpotato.core.downloaders', os.path.join(core, 'downloaders')), } - # Add providers to loader - self.addPath(root, ['couchpotato', 'core', 'providers'], 25, recursive = False) - # Add media to loader self.addPath(root, ['couchpotato', 'core', 'media'], 25, recursive = True) @@ -103,7 +100,7 @@ class Loader(object): def loadSettings(self, module, name, save = True): if not hasattr(module, 'config'): - log.debug('Skip loading settings for plugin %s as it has no config section' % module.__file__) + #log.debug('Skip loading settings for plugin %s as it has no config section' % module.__file__) return False try: diff --git a/couchpotato/core/media/_base/providers/automation/__init__.py b/couchpotato/core/media/_base/providers/automation/__init__.py index 93f6c10a..e69de29b 100644 --- a/couchpotato/core/media/_base/providers/automation/__init__.py +++ b/couchpotato/core/media/_base/providers/automation/__init__.py @@ -1,21 +0,0 @@ -config = [{ - 'name': 'automation_providers', - 'groups': [ - { - 'label': 'Watchlists', - 'description': 'Check watchlists for new movies', - 'type': 'list', - 'name': 'watchlist_providers', - 'tab': 'automation', - 'options': [], - }, - { - 'label': 'Automated', - 'description': 'Uses minimal requirements', - 'type': 'list', - 'name': 'automation_providers', - 'tab': 'automation', - 'options': [], - }, - ], -}] diff --git a/couchpotato/core/media/_base/providers/automation/base.py b/couchpotato/core/media/_base/providers/automation/base.py index e57f5c63..20ce2e16 100644 --- a/couchpotato/core/media/_base/providers/automation/base.py +++ b/couchpotato/core/media/_base/providers/automation/base.py @@ -1,96 +1,8 @@ -from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.logger import CPLog -from couchpotato.core.providers.base import Provider -from couchpotato.environment import Env -from couchpotato.core.helpers.variable import splitString -import time +from couchpotato.core.media._base.providers.base import Provider log = CPLog(__name__) -class Automation(Provider): - - enabled_option = 'automation_enabled' - http_time_between_calls = 2 - - interval = 1800 - last_checked = 0 - - def __init__(self): - addEvent('automation.get_movies', self._getMovies) - - def _getMovies(self): - - if self.isDisabled(): - return - - if not self.canCheck(): - log.debug('Just checked, skipping %s', self.getName()) - return [] - - self.last_checked = time.time() - - return self.getIMDBids() - - def search(self, name, year = None, imdb_only = False): - - prop_name = 'automation.cached.%s.%s' % (name, year) - cached_imdb = Env.prop(prop_name, default = False) - if cached_imdb and imdb_only: - return cached_imdb - - result = fireEvent('movie.search', q = '%s %s' % (name, year if year else ''), limit = 1, merge = True) - - if len(result) > 0: - if imdb_only and result[0].get('imdb'): - Env.prop(prop_name, result[0].get('imdb')) - - return result[0].get('imdb') if imdb_only else result[0] - else: - return None - - def isMinimalMovie(self, movie): - if not movie.get('rating'): - log.info('ignoring %s as no rating is available for.', (movie['original_title'])) - return False - - if movie['rating'] and movie['rating'].get('imdb'): - movie['votes'] = movie['rating']['imdb'][1] - movie['rating'] = movie['rating']['imdb'][0] - - for minimal_type in ['year', 'rating', 'votes']: - type_value = movie.get(minimal_type, 0) - type_min = self.getMinimal(minimal_type) - if type_value < type_min: - log.info('%s too low for %s, need %s has %s', (minimal_type, movie['original_title'], type_min, type_value)) - return False - - movie_genres = [genre.lower() for genre in movie['genres']] - required_genres = splitString(self.getMinimal('required_genres').lower()) - ignored_genres = splitString(self.getMinimal('ignored_genres').lower()) - - req_match = 0 - for req_set in required_genres: - req = splitString(req_set, '&') - req_match += len(list(set(movie_genres) & set(req))) == len(req) - - if self.getMinimal('required_genres') and req_match == 0: - log.info2('Required genre(s) missing for %s', movie['original_title']) - return False - - for ign_set in ignored_genres: - ign = splitString(ign_set, '&') - if len(list(set(movie_genres) & set(ign))) == len(ign): - log.info2('%s has blacklisted genre(s): %s', (movie['original_title'], ign)) - return False - - return True - - def getMinimal(self, min_type): - return Env.setting(min_type, 'automation') - - def getIMDBids(self): - return [] - - def canCheck(self): - return time.time() > self.last_checked + self.interval +class BaseAutomation(Provider): + pass diff --git a/couchpotato/core/media/_base/providers/base.py b/couchpotato/core/media/_base/providers/base.py index c772be47..761aedca 100644 --- a/couchpotato/core/media/_base/providers/base.py +++ b/couchpotato/core/media/_base/providers/base.py @@ -14,7 +14,6 @@ import xml.etree.ElementTree as XMLTree log = CPLog(__name__) - class MultiProvider(Plugin): def __init__(self): @@ -102,7 +101,6 @@ class Provider(Plugin): class YarrProvider(Provider): protocol = None # nzb, torrent, torrent_magnet - type = 'movie' cat_ids = {} cat_backup_id = None @@ -180,7 +178,7 @@ class YarrProvider(Provider): return 'try_next' - def search(self, movie, quality): + def search(self, media, quality): if self.isDisabled(): return [] @@ -192,15 +190,17 @@ class YarrProvider(Provider): # Create result container imdb_results = hasattr(self, '_search') - results = ResultList(self, movie, quality, imdb_results = imdb_results) + results = ResultList(self, media, quality, imdb_results = imdb_results) # Do search based on imdb id if imdb_results: - self._search(movie, quality, results) + self._search(media, quality, results) # Search possible titles else: - for title in possibleTitles(getTitle(movie)): - self._searchOnTitle(title, movie, quality, results) + media_title = fireEvent('library.query', media['library'], single = True) + + for title in possibleTitles(media_title): + self._searchOnTitle(title, media, quality, results) return results @@ -243,8 +243,7 @@ class YarrProvider(Provider): def getCatId(self, identifier): - for cats in self.cat_ids: - ids, qualities = cats + for ids, qualities in self.cat_ids: if identifier in qualities: return ids diff --git a/couchpotato/core/media/_base/providers/info/base.py b/couchpotato/core/media/_base/providers/info/base.py index 1b43ab8a..90a9153c 100644 --- a/couchpotato/core/media/_base/providers/info/base.py +++ b/couchpotato/core/media/_base/providers/info/base.py @@ -1,5 +1,5 @@ -from couchpotato.core.providers.base import Provider +from couchpotato.core.media._base.providers.base import Provider -class MovieProvider(Provider): - type = 'movie' +class BaseInfoProvider(Provider): + type = 'unknown' diff --git a/couchpotato/core/media/_base/providers/metadata/base.py b/couchpotato/core/media/_base/providers/metadata/base.py index 31e610cb..2a8c5cfe 100644 --- a/couchpotato/core/media/_base/providers/metadata/base.py +++ b/couchpotato/core/media/_base/providers/metadata/base.py @@ -1,110 +1,8 @@ -from couchpotato.core.event import addEvent, fireEvent -from couchpotato.core.helpers.encoding import sp -from couchpotato.core.helpers.variable import mergeDicts from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin -from couchpotato.environment import Env -import os -import shutil -import traceback log = CPLog(__name__) class MetaDataBase(Plugin): - - enabled_option = 'meta_enabled' - - def __init__(self): - addEvent('renamer.after', self.create) - - def create(self, message = None, group = None): - if self.isDisabled(): return - if not group: group = {} - - log.info('Creating %s metadata.', self.getName()) - - # Update library to get latest info - try: - group['media'] = fireEvent('movie.update_info', group['media'].get('_id'), identifier = group['media']['identifier'], extended = True, single = True) - except: - log.error('Failed to update movie, before creating metadata: %s', traceback.format_exc()) - - root_name = self.getRootName(group) - meta_name = os.path.basename(root_name) - root = os.path.dirname(root_name) - - movie_info = group['media'].get('info') - - for file_type in ['nfo', 'thumbnail', 'fanart']: - try: - # Get file path - name = getattr(self, 'get' + file_type.capitalize() + 'Name')(meta_name, root) - - if name and (self.conf('meta_' + file_type) or self.conf('meta_' + file_type) is None): - - # Get file content - content = getattr(self, 'get' + file_type.capitalize())(movie_info = movie_info, data = group) - if content: - log.debug('Creating %s file: %s', (file_type, name)) - if os.path.isfile(content): - content = sp(content) - name = sp(name) - - shutil.copy2(content, name) - shutil.copyfile(content, name) - - # Try and copy stats seperately - try: shutil.copystat(content, name) - except: pass - else: - self.createFile(name, content) - group['renamed_files'].append(name) - - try: - os.chmod(sp(name), Env.getPermission('file')) - except: - log.debug('Failed setting permissions for %s: %s', (name, traceback.format_exc())) - - except: - log.error('Unable to create %s file: %s', (file_type, traceback.format_exc())) - - def getRootName(self, data = None): - if not data: data = {} - return os.path.join(data['destination_dir'], data['filename']) - - def getFanartName(self, name, root): - return - - def getThumbnailName(self, name, root): - return - - def getNfoName(self, name, root): - return - - def getNfo(self, movie_info = None, data = None): - if not data: data = {} - if not movie_info: movie_info = {} - - def getThumbnail(self, movie_info = None, data = None, wanted_file_type = 'poster_original'): - if not data: data = {} - if not movie_info: movie_info = {} - - # See if it is in current files - files = data['media'].get('files') - if files.get('image_' + wanted_file_type): - if os.path.isfile(files['image_' + wanted_file_type][0]): - return files['image_' + wanted_file_type][0] - - # Download using existing info - try: - images = movie_info['images'][wanted_file_type] - file_path = fireEvent('file.download', url = images[0], single = True) - return file_path - except: - pass - - def getFanart(self, movie_info = None, data = None): - if not data: data = {} - if not movie_info: movie_info = {} - return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'backdrop_original') + pass diff --git a/couchpotato/core/media/_base/providers/metadata/wmc/main.py b/couchpotato/core/media/_base/providers/metadata/wmc/main.py deleted file mode 100644 index f84897b4..00000000 --- a/couchpotato/core/media/_base/providers/metadata/wmc/main.py +++ /dev/null @@ -1,8 +0,0 @@ -from couchpotato.core.providers.metadata.base import MetaDataBase -import os - - -class WindowsMediaCenter(MetaDataBase): - - def getThumbnailName(self, name, root): - return os.path.join(root, 'folder.jpg') diff --git a/couchpotato/core/media/_base/providers/nzb/base.py b/couchpotato/core/media/_base/providers/nzb/base.py index 53c73af0..31cbb477 100644 --- a/couchpotato/core/media/_base/providers/nzb/base.py +++ b/couchpotato/core/media/_base/providers/nzb/base.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.base import YarrProvider +from couchpotato.core.media._base.providers.base import YarrProvider import time diff --git a/couchpotato/core/media/_base/providers/nzb/binsearch/__init__.py b/couchpotato/core/media/_base/providers/nzb/binsearch/__init__.py index c80ee6d9..48e71cdb 100644 --- a/couchpotato/core/media/_base/providers/nzb/binsearch/__init__.py +++ b/couchpotato/core/media/_base/providers/nzb/binsearch/__init__.py @@ -1,8 +1,3 @@ -from .main import BinSearch - - -def start(): - return BinSearch() config = [{ 'name': 'binsearch', diff --git a/couchpotato/core/media/_base/providers/nzb/binsearch/main.py b/couchpotato/core/media/_base/providers/nzb/binsearch/main.py index 60007d5a..fb72a848 100644 --- a/couchpotato/core/media/_base/providers/nzb/binsearch/main.py +++ b/couchpotato/core/media/_base/providers/nzb/binsearch/main.py @@ -1,16 +1,14 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.nzb.base import NZBProvider -from couchpotato.environment import Env import re import traceback +from couchpotato.core.media._base.providers.nzb.base import NZBProvider log = CPLog(__name__) -class BinSearch(NZBProvider): +class Base(NZBProvider): urls = { 'download': 'https://www.binsearch.info/fcgi/nzb.fcgi?q=%s', @@ -18,23 +16,11 @@ class BinSearch(NZBProvider): 'search': 'https://www.binsearch.info/index.php?%s', } - http_time_between_calls = 4 # Seconds + http_time_between_calls = 4 # Seconds - def _search(self, movie, quality, results): + def _search(self, media, quality, results): - arguments = tryUrlencode({ - 'q': movie['identifier'], - 'm': 'n', - 'max': 400, - 'adv_age': Env.setting('retention', 'nzb'), - 'adv_sort': 'date', - 'adv_col': 'on', - 'adv_nfo': 'on', - 'minsize': quality.get('size_min'), - 'maxsize': quality.get('size_max'), - }) - - data = self.getHTMLData(self.urls['search'] % arguments) + data = self.getHTMLData(self.urls['search'] % self.buildUrl(media, quality)) if data: try: @@ -101,4 +87,3 @@ class BinSearch(NZBProvider): log.error('Failed getting nzb from %s: %s', (self.getName(), traceback.format_exc())) return 'try_next' - diff --git a/couchpotato/core/media/_base/providers/nzb/newznab/__init__.py b/couchpotato/core/media/_base/providers/nzb/newznab/__init__.py index 86a25a4f..8426e3ed 100644 --- a/couchpotato/core/media/_base/providers/nzb/newznab/__init__.py +++ b/couchpotato/core/media/_base/providers/nzb/newznab/__init__.py @@ -1,8 +1,3 @@ -from .main import Newznab - - -def start(): - return Newznab() config = [{ 'name': 'newznab', diff --git a/couchpotato/core/media/_base/providers/nzb/newznab/main.py b/couchpotato/core/media/_base/providers/nzb/newznab/main.py index c6830b79..acc4a7d3 100644 --- a/couchpotato/core/media/_base/providers/nzb/newznab/main.py +++ b/couchpotato/core/media/_base/providers/nzb/newznab/main.py @@ -2,8 +2,7 @@ from couchpotato.core.helpers.encoding import tryUrlencode, toUnicode from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import cleanHost, splitString, tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.base import ResultList -from couchpotato.core.providers.nzb.base import NZBProvider +from couchpotato.core.media._base.providers.nzb.base import NZBProvider from couchpotato.environment import Env from dateutil.parser import parse from urllib2 import HTTPError @@ -15,39 +14,35 @@ import urllib2 log = CPLog(__name__) -class Newznab(NZBProvider, RSS): +class Base(NZBProvider, RSS): urls = { - 'download': 'get&id=%s', 'detail': 'details&id=%s', - 'search': 'movie', + 'download': 't=get&id=%s' } limits_reached = {} http_time_between_calls = 1 # Seconds - def search(self, movie, quality): + def search(self, media, quality): hosts = self.getHosts() - results = ResultList(self, movie, quality, imdb_results = True) + results = ResultList(self, media, quality, imdb_results = True) for host in hosts: if self.isDisabled(host): continue - self._searchOnHost(host, movie, quality, results) + self._searchOnHost(host, media, quality, results) return results - def _searchOnHost(self, host, movie, quality, results): + def _searchOnHost(self, host, media, quality, results): - arguments = tryUrlencode({ - 'imdbid': movie['identifier'].replace('tt', ''), - 'apikey': host['api_key'], - 'extended': 1 - }) + ('&%s' % host['custom_tag'] if host.get('custom_tag') else '') - url = '%s&%s' % (self.getUrl(host['host'], self.urls['search']), arguments) + query = self.buildUrl(media, host['api_key']) + + url = '%s&%s' % (self.getUrl(host['host']), query) nzbs = self.getRSSData(url, cache_timeout = 1800, headers = {'User-Agent': Env.getIdentifier()}) @@ -136,11 +131,11 @@ class Newznab(NZBProvider, RSS): if result: return result - def getUrl(self, host, type): + def getUrl(self, host): if '?page=newznabapi' in host: - return cleanHost(host)[:-1] + '&t=' + type + return cleanHost(host)[:-1] + '&' - return cleanHost(host) + 'api?t=' + type + return cleanHost(host) + 'api?' def isDisabled(self, host = None): return not self.isEnabled(host) diff --git a/couchpotato/core/media/_base/providers/nzb/nzbclub/__init__.py b/couchpotato/core/media/_base/providers/nzb/nzbclub/__init__.py index 02a69404..60c9bc4e 100644 --- a/couchpotato/core/media/_base/providers/nzb/nzbclub/__init__.py +++ b/couchpotato/core/media/_base/providers/nzb/nzbclub/__init__.py @@ -1,8 +1,3 @@ -from .main import NZBClub - - -def start(): - return NZBClub() config = [{ 'name': 'nzbclub', diff --git a/couchpotato/core/media/_base/providers/nzb/nzbclub/main.py b/couchpotato/core/media/_base/providers/nzb/nzbclub/main.py index 44121a60..322f8198 100644 --- a/couchpotato/core/media/_base/providers/nzb/nzbclub/main.py +++ b/couchpotato/core/media/_base/providers/nzb/nzbclub/main.py @@ -1,40 +1,26 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode +from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.nzb.base import NZBProvider +from couchpotato.core.media._base.providers.nzb.base import NZBProvider from dateutil.parser import parse import time log = CPLog(__name__) -class NZBClub(NZBProvider, RSS): +class Base(NZBProvider, RSS): urls = { 'search': 'https://www.nzbclub.com/nzbfeeds.aspx?%s', } - http_time_between_calls = 4 #seconds + http_time_between_calls = 4 #seconds - def _searchOnTitle(self, title, movie, quality, results): + def _search(self, media, quality, results): - q = '"%s %s"' % (title, movie['info']['year']) - - q_param = tryUrlencode({ - 'q': q, - }) - - params = tryUrlencode({ - 'ig': 1, - 'rpp': 200, - 'st': 5, - 'sp': 1, - 'ns': 1, - }) - - nzbs = self.getRSSData(self.urls['search'] % ('%s&%s' % (q_param, params))) + nzbs = self.getRSSData(self.urls['search'] % self.buildUrl(media)) for nzb in nzbs: diff --git a/couchpotato/core/media/_base/providers/nzb/nzbindex/__init__.py b/couchpotato/core/media/_base/providers/nzb/nzbindex/__init__.py index acb53e19..4ce51050 100644 --- a/couchpotato/core/media/_base/providers/nzb/nzbindex/__init__.py +++ b/couchpotato/core/media/_base/providers/nzb/nzbindex/__init__.py @@ -1,8 +1,3 @@ -from .main import NzbIndex - - -def start(): - return NzbIndex() config = [{ 'name': 'nzbindex', diff --git a/couchpotato/core/media/_base/providers/nzb/nzbindex/main.py b/couchpotato/core/media/_base/providers/nzb/nzbindex/main.py index d29d94ff..d21dc0b2 100644 --- a/couchpotato/core/media/_base/providers/nzb/nzbindex/main.py +++ b/couchpotato/core/media/_base/providers/nzb/nzbindex/main.py @@ -1,10 +1,10 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode +from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.nzb.base import NZBProvider -from couchpotato.environment import Env +from couchpotato.core.event import fireEvent +from couchpotato.core.media._base.providers.nzb.base import NZBProvider from dateutil.parser import parse import re import time @@ -12,7 +12,7 @@ import time log = CPLog(__name__) -class NzbIndex(NZBProvider, RSS): +class Base(NZBProvider, RSS): urls = { 'download': 'https://www.nzbindex.com/download/', @@ -21,28 +21,44 @@ class NzbIndex(NZBProvider, RSS): http_time_between_calls = 1 # Seconds - def _searchOnTitle(self, title, movie, quality, results): + def _search(self, media, quality, results): - q = '"%s %s" | "%s (%s)"' % (title, movie['info']['year'], title, movie['info']['year']) - arguments = tryUrlencode({ - 'q': q, - 'age': Env.setting('retention', 'nzb'), - 'sort': 'agedesc', - 'minsize': quality.get('size_min'), - 'maxsize': quality.get('size_max'), - 'rating': 1, - 'max': 250, - 'more': 1, - 'complete': 1, - }) - - nzbs = self.getRSSData(self.urls['search'] % arguments) + nzbs = self.getRSSData(self.urls['search'] % self.buildUrl(media, quality)) for nzb in nzbs: enclosure = self.getElement(nzb, 'enclosure').attrib nzbindex_id = int(self.getTextElement(nzb, "link").split('/')[4]) + title = self.getTextElement(nzb, "title") + + match = fireEvent('matcher.parse', title, parser='usenet', single = True) + if not match.chains: + log.info('Unable to parse release with title "%s"', title) + continue + + # TODO should we consider other lower-weight chains here? + info = fireEvent('matcher.flatten_info', match.chains[0].info, single = True) + + release_name = fireEvent('matcher.construct_from_raw', info.get('release_name'), single = True) + + file_name = info.get('detail', {}).get('file_name') + file_name = file_name[0] if file_name else None + + title = release_name or file_name + + # Strip extension from parsed title (if one exists) + ext_pos = title.rfind('.') + + # Assume extension if smaller than 4 characters + # TODO this should probably be done a better way + if len(title[ext_pos + 1:]) <= 4: + title = title[:ext_pos] + + if not title: + log.info('Unable to find release name from match') + continue + try: description = self.getTextElement(nzb, "description") except: @@ -57,7 +73,7 @@ class NzbIndex(NZBProvider, RSS): results.append({ 'id': nzbindex_id, - 'name': self.getTextElement(nzb, "title"), + 'name': title, 'age': self.calculateAge(int(time.mktime(parse(self.getTextElement(nzb, "pubDate")).timetuple()))), 'size': tryInt(enclosure['length']) / 1024 / 1024, 'url': enclosure['url'], @@ -76,4 +92,3 @@ class NzbIndex(NZBProvider, RSS): item['description'] = toUnicode(html.find('pre', attrs = {'id':'nfo0'}).text) except: pass - diff --git a/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs/__init__.py b/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs/__init__.py index 2f3990de..841c04e7 100644 --- a/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs/__init__.py +++ b/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs/__init__.py @@ -1,8 +1,3 @@ -from .main import OMGWTFNZBs - - -def start(): - return OMGWTFNZBs() config = [{ 'name': 'omgwtfnzbs', diff --git a/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs/main.py b/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs/main.py index 73254632..6ecefe37 100644 --- a/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs/main.py +++ b/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs/main.py @@ -3,7 +3,7 @@ from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.nzb.base import NZBProvider +from couchpotato.core.media._base.providers.nzb.base import NZBProvider from dateutil.parser import parse from urlparse import urlparse, parse_qs import time @@ -11,7 +11,7 @@ import time log = CPLog(__name__) -class OMGWTFNZBs(NZBProvider, RSS): +class Base(NZBProvider, RSS): urls = { 'search': 'https://rss.omgwtfnzbs.org/rss-search.php?%s', diff --git a/couchpotato/core/media/_base/providers/torrent/awesomehd/__init__.py b/couchpotato/core/media/_base/providers/torrent/awesomehd/__init__.py index 6f076703..1ab625d8 100644 --- a/couchpotato/core/media/_base/providers/torrent/awesomehd/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/awesomehd/__init__.py @@ -1,8 +1,3 @@ -from .main import AwesomeHD - - -def start(): - return AwesomeHD() config = [{ 'name': 'awesomehd', diff --git a/couchpotato/core/media/_base/providers/torrent/awesomehd/main.py b/couchpotato/core/media/_base/providers/torrent/awesomehd/main.py index cc26030c..3a370435 100644 --- a/couchpotato/core/media/_base/providers/torrent/awesomehd/main.py +++ b/couchpotato/core/media/_base/providers/torrent/awesomehd/main.py @@ -1,14 +1,14 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import re import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class AwesomeHD(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'https://awesome-hd.net/', diff --git a/couchpotato/core/media/_base/providers/torrent/base.py b/couchpotato/core/media/_base/providers/torrent/base.py index e134c8f3..ea582e49 100644 --- a/couchpotato/core/media/_base/providers/torrent/base.py +++ b/couchpotato/core/media/_base/providers/torrent/base.py @@ -1,7 +1,6 @@ -import traceback from couchpotato.core.helpers.variable import getImdb, md5, cleanHost from couchpotato.core.logger import CPLog -from couchpotato.core.providers.base import YarrProvider +from couchpotato.core.media._base.providers.base import YarrProvider from couchpotato.environment import Env import time @@ -15,6 +14,22 @@ class TorrentProvider(YarrProvider): proxy_domain = None proxy_list = [] + def imdbMatch(self, url, imdbId): + if getImdb(url) == imdbId: + return True + + if url[:4] == 'http': + try: + cache_key = md5(url) + data = self.getCache(cache_key, url) + except IOError: + log.error('Failed to open %s.', url) + return False + + return getImdb(data) == imdbId + + return False + def getDomain(self, url = ''): forced_domain = self.conf('domain') diff --git a/couchpotato/core/media/_base/providers/torrent/bithdtv/__init__.py b/couchpotato/core/media/_base/providers/torrent/bithdtv/__init__.py index ffc5363f..d2b73913 100644 --- a/couchpotato/core/media/_base/providers/torrent/bithdtv/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/bithdtv/__init__.py @@ -1,8 +1,3 @@ -from .main import BiTHDTV - - -def start(): - return BiTHDTV() config = [{ 'name': 'bithdtv', diff --git a/couchpotato/core/media/_base/providers/torrent/bithdtv/main.py b/couchpotato/core/media/_base/providers/torrent/bithdtv/main.py index 259de6bc..ce2ea71a 100644 --- a/couchpotato/core/media/_base/providers/torrent/bithdtv/main.py +++ b/couchpotato/core/media/_base/providers/torrent/bithdtv/main.py @@ -1,14 +1,14 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import tryUrlencode, toUnicode +from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class BiTHDTV(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'http://www.bit-hdtv.com/', @@ -19,18 +19,13 @@ class BiTHDTV(TorrentProvider): } # Searches for movies only - BiT-HDTV's subcategory and resolution search filters appear to be broken - cat_id_movies = 7 - http_time_between_calls = 1 #seconds - def _searchOnTitle(self, title, movie, quality, results): + def _search(self, media, quality, results): - arguments = tryUrlencode({ - 'search': '%s %s' % (title.replace(':', ''), movie['info']['year']), - 'cat': self.cat_id_movies - }) + query = self.buildUrl(media) - url = "%s&%s" % (self.urls['search'], arguments) + url = "%s&%s" % (self.urls['search'], query) data = self.getHTMLData(url) diff --git a/couchpotato/core/media/_base/providers/torrent/bitsoup/__init__.py b/couchpotato/core/media/_base/providers/torrent/bitsoup/__init__.py index da07cc3b..efa34a77 100644 --- a/couchpotato/core/media/_base/providers/torrent/bitsoup/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/bitsoup/__init__.py @@ -1,8 +1,3 @@ -from .main import Bitsoup - - -def start(): - return Bitsoup() config = [{ 'name': 'bitsoup', diff --git a/couchpotato/core/media/_base/providers/torrent/bitsoup/main.py b/couchpotato/core/media/_base/providers/torrent/bitsoup/main.py index c4035635..9a8c143f 100644 --- a/couchpotato/core/media/_base/providers/torrent/bitsoup/main.py +++ b/couchpotato/core/media/_base/providers/torrent/bitsoup/main.py @@ -2,13 +2,13 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.encoding import simplifyString, tryUrlencode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class Bitsoup(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'https://www.bitsoup.me/', @@ -28,6 +28,7 @@ class Bitsoup(TorrentProvider): }) url = "%s&%s" % (self.urls['search'], arguments) + url = self.urls['search'] % self.buildUrl(media, quality) data = self.getHTMLData(url) if data: @@ -84,4 +85,3 @@ class Bitsoup(TorrentProvider): return 'logout.php' in output.lower() loginCheckSuccess = loginSuccess - diff --git a/couchpotato/core/media/_base/providers/torrent/hdbits/__init__.py b/couchpotato/core/media/_base/providers/torrent/hdbits/__init__.py index b54adb0b..c9e75fe5 100644 --- a/couchpotato/core/media/_base/providers/torrent/hdbits/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/hdbits/__init__.py @@ -1,8 +1,3 @@ -from .main import HDBits - - -def start(): - return HDBits() config = [{ 'name': 'hdbits', diff --git a/couchpotato/core/media/_base/providers/torrent/hdbits/main.py b/couchpotato/core/media/_base/providers/torrent/hdbits/main.py index 461745b9..a1ceb573 100644 --- a/couchpotato/core/media/_base/providers/torrent/hdbits/main.py +++ b/couchpotato/core/media/_base/providers/torrent/hdbits/main.py @@ -1,15 +1,15 @@ from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import re import json import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class HDBits(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'https://hdbits.org/', diff --git a/couchpotato/core/media/_base/providers/torrent/ilovetorrents/__init__.py b/couchpotato/core/media/_base/providers/torrent/ilovetorrents/__init__.py index f3f7b479..2a9f403d 100644 --- a/couchpotato/core/media/_base/providers/torrent/ilovetorrents/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/ilovetorrents/__init__.py @@ -1,8 +1,3 @@ -from .main import ILoveTorrents - - -def start(): - return ILoveTorrents() config = [{ 'name': 'ilovetorrents', diff --git a/couchpotato/core/media/_base/providers/torrent/ilovetorrents/main.py b/couchpotato/core/media/_base/providers/torrent/ilovetorrents/main.py index d15be35b..516cf07e 100644 --- a/couchpotato/core/media/_base/providers/torrent/ilovetorrents/main.py +++ b/couchpotato/core/media/_base/providers/torrent/ilovetorrents/main.py @@ -2,14 +2,14 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import re import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class ILoveTorrents(TorrentProvider): +class Base(TorrentProvider): urls = { 'download': 'https://www.ilovetorrents.me/%s', diff --git a/couchpotato/core/media/_base/providers/torrent/iptorrents/__init__.py b/couchpotato/core/media/_base/providers/torrent/iptorrents/__init__.py index 579d7974..48f8219b 100644 --- a/couchpotato/core/media/_base/providers/torrent/iptorrents/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/iptorrents/__init__.py @@ -1,8 +1,3 @@ -from .main import IPTorrents - - -def start(): - return IPTorrents() config = [{ 'name': 'iptorrents', diff --git a/couchpotato/core/media/_base/providers/torrent/iptorrents/main.py b/couchpotato/core/media/_base/providers/torrent/iptorrents/main.py index 7ff3cb91..cfd568e2 100644 --- a/couchpotato/core/media/_base/providers/torrent/iptorrents/main.py +++ b/couchpotato/core/media/_base/providers/torrent/iptorrents/main.py @@ -1,14 +1,15 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import tryUrlencode, toSafeString +from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider +import six log = CPLog(__name__) -class IPTorrents(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'https://www.iptorrents.com/', @@ -18,26 +19,33 @@ class IPTorrents(TorrentProvider): 'search': 'https://www.iptorrents.com/torrents/?l%d=1%s&q=%s&qf=ti&p=%d', } - cat_ids = [ - ([48], ['720p', '1080p', 'bd50']), - ([72], ['cam', 'ts', 'tc', 'r5', 'scr']), - ([7], ['dvdrip', 'brrip']), - ([6], ['dvdr']), - ] - http_time_between_calls = 1 #seconds cat_backup_id = None - def _searchOnTitle(self, title, movie, quality, results): + def buildUrl(self, title, media, quality): + return self._buildUrl(title.replace(':', ''), quality['identifier']) + + def _buildUrl(self, query, quality_identifier): + + cat_ids = self.getCatId(quality_identifier) + + if not cat_ids: + log.warning('Unable to find category ids for identifier "%s"', quality_identifier) + return None + + return self.urls['search'] % ("&".join(("l%d=" % x) for x in cat_ids), tryUrlencode(query).replace('%', '%%')) + + def _searchOnTitle(self, title, media, quality, results): freeleech = '' if not self.conf('freeleech') else '&free=on' + base_url = self.buildUrl(title, media, quality) + if not base_url: return + pages = 1 current_page = 1 while current_page <= pages and not self.shuttingDown(): - - url = self.urls['search'] % (self.getCatId(quality['identifier'])[0], freeleech, tryUrlencode('%s %s' % (title.replace(':', ''), movie['info']['year'])), current_page) - data = self.getHTMLData(url) + data = self.getHTMLData(base_url % (freeleech, current_page)) if data: html = BeautifulSoup(data) @@ -57,27 +65,21 @@ class IPTorrents(TorrentProvider): entries = result_table.find_all('tr') - columns = self.getColumns(entries) - - if 'seeders' not in columns or 'leechers' not in columns: - log.warning('Unrecognized table format returned') - return - for result in entries[1:]: - cells = result.find_all('td') - if len(cells) <= 1: + torrent = result.find_all('td') + if len(torrent) <= 1: break - torrent = cells[1].find('a') + torrent = torrent[1].find('a') torrent_id = torrent['href'].replace('/details.php?id=', '') - torrent_name = unicode(torrent.string) + torrent_name = six.text_type(torrent.string) torrent_download_url = self.urls['base_url'] + (result.find_all('td')[3].find('a'))['href'].replace(' ', '.') torrent_details_url = self.urls['base_url'] + torrent['href'] torrent_size = self.parseSize(result.find_all('td')[5].string) - torrent_seeders = tryInt(cells[columns['seeders']].string) - torrent_leechers = tryInt(cells[columns['leechers']].string) + torrent_seeders = tryInt(result.find('td', attrs = {'class' : 'ac t_seeders'}).string) + torrent_leechers = tryInt(result.find('td', attrs = {'class' : 'ac t_leechers'}).string) results.append({ 'id': torrent_id, @@ -95,20 +97,6 @@ class IPTorrents(TorrentProvider): current_page += 1 - def getColumns(self, entries): - result = {} - - for x, col in enumerate(entries[0].find_all('th')): - name = col.text or col.find('img')['title'] - key = toSafeString(name).strip().lower() - - if not key: - continue - - result[key] = x - - return result - def getLoginParams(self): return { 'username': self.conf('username'), diff --git a/couchpotato/core/media/_base/providers/torrent/kickasstorrents/__init__.py b/couchpotato/core/media/_base/providers/torrent/kickasstorrents/__init__.py index ffe1040b..92dcc0fc 100644 --- a/couchpotato/core/media/_base/providers/torrent/kickasstorrents/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/kickasstorrents/__init__.py @@ -1,8 +1,3 @@ -from .main import KickAssTorrents - - -def start(): - return KickAssTorrents() config = [{ 'name': 'kickasstorrents', diff --git a/couchpotato/core/media/_base/providers/torrent/kickasstorrents/main.py b/couchpotato/core/media/_base/providers/torrent/kickasstorrents/main.py index 8752348e..8b624652 100644 --- a/couchpotato/core/media/_base/providers/torrent/kickasstorrents/main.py +++ b/couchpotato/core/media/_base/providers/torrent/kickasstorrents/main.py @@ -1,14 +1,14 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentMagnetProvider import re import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentMagnetProvider log = CPLog(__name__) -class KickAssTorrents(TorrentMagnetProvider): +class Base(TorrentMagnetProvider): urls = { 'detail': '%s/%s', @@ -34,9 +34,9 @@ class KickAssTorrents(TorrentMagnetProvider): 'http://www.kickassproxy.info', ] - def _search(self, movie, quality, results): + def _search(self, media, quality, results): - data = self.getHTMLData(self.urls['search'] % (self.getDomain(), 'm', movie['identifier'].replace('tt', ''))) + data = self.getHTMLData(self.urls['search'] % (self.getDomain(), 'm', media['identifier'].replace('tt', ''))) if data: diff --git a/couchpotato/core/media/_base/providers/torrent/passthepopcorn/__init__.py b/couchpotato/core/media/_base/providers/torrent/passthepopcorn/__init__.py index a3e57c79..119c4255 100644 --- a/couchpotato/core/media/_base/providers/torrent/passthepopcorn/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/passthepopcorn/__init__.py @@ -1,8 +1,3 @@ -from .main import PassThePopcorn - - -def start(): - return PassThePopcorn() config = [{ 'name': 'passthepopcorn', diff --git a/couchpotato/core/media/_base/providers/torrent/passthepopcorn/main.py b/couchpotato/core/media/_base/providers/torrent/passthepopcorn/main.py index bc6136fc..a7975e29 100644 --- a/couchpotato/core/media/_base/providers/torrent/passthepopcorn/main.py +++ b/couchpotato/core/media/_base/providers/torrent/passthepopcorn/main.py @@ -1,7 +1,7 @@ from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import getTitle, tryInt, mergeDicts from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider from dateutil.parser import parse import htmlentitydefs import json @@ -13,56 +13,28 @@ import six log = CPLog(__name__) -class PassThePopcorn(TorrentProvider): +class Base(TorrentProvider): urls = { - 'domain': 'https://tls.passthepopcorn.me', - 'detail': 'https://tls.passthepopcorn.me/torrents.php?torrentid=%s', - 'torrent': 'https://tls.passthepopcorn.me/torrents.php', - 'login': 'https://tls.passthepopcorn.me/ajax.php?action=login', - 'login_check': 'https://tls.passthepopcorn.me/ajax.php?action=login', - 'search': 'https://tls.passthepopcorn.me/search/%s/0/7/%d' + 'domain': 'https://tls.passthepopcorn.me', + 'detail': 'https://tls.passthepopcorn.me/torrents.php?torrentid=%s', + 'torrent': 'https://tls.passthepopcorn.me/torrents.php', + 'login': 'https://tls.passthepopcorn.me/ajax.php?action=login', + 'login_check': 'https://tls.passthepopcorn.me/ajax.php?action=login', + 'search': 'https://tls.passthepopcorn.me/search/%s/0/7/%d' } http_time_between_calls = 2 - quality_search_params = { - 'bd50': {'media': 'Blu-ray', 'format': 'BD50'}, - '1080p': {'resolution': '1080p'}, - '720p': {'resolution': '720p'}, - 'brrip': {'media': 'Blu-ray'}, - 'dvdr': {'resolution': 'anysd'}, - 'dvdrip': {'media': 'DVD'}, - 'scr': {'media': 'DVD-Screener'}, - 'r5': {'media': 'R5'}, - 'tc': {'media': 'TC'}, - 'ts': {'media': 'TS'}, - 'cam': {'media': 'CAM'} - } + def _search(self, media, quality, results): - post_search_filters = { - 'bd50': {'Codec': ['BD50']}, - '1080p': {'Resolution': ['1080p']}, - '720p': {'Resolution': ['720p']}, - 'brrip': {'Source': ['Blu-ray'], 'Quality': ['High Definition'], 'Container': ['!ISO']}, - 'dvdr': {'Codec': ['DVD5', 'DVD9']}, - 'dvdrip': {'Source': ['DVD'], 'Codec': ['!DVD5', '!DVD9']}, - 'scr': {'Source': ['DVD-Screener']}, - 'r5': {'Source': ['R5']}, - 'tc': {'Source': ['TC']}, - 'ts': {'Source': ['TS']}, - 'cam': {'Source': ['CAM']} - } - - def _search(self, movie, quality, results): - - movie_title = getTitle(movie) + movie_title = getTitle(media) quality_id = quality['identifier'] params = mergeDicts(self.quality_search_params[quality_id].copy(), { 'order_by': 'relevance', 'order_way': 'descending', - 'searchstr': movie['identifier'] + 'searchstr': media['identifier'] }) url = '%s?json=noredirect&%s' % (self.urls['torrent'], tryUrlencode(params)) diff --git a/couchpotato/core/media/_base/providers/torrent/publichd/__init__.py b/couchpotato/core/media/_base/providers/torrent/publichd/__init__.py index 3c20c51f..d24cc68e 100644 --- a/couchpotato/core/media/_base/providers/torrent/publichd/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/publichd/__init__.py @@ -1,8 +1,3 @@ -from .main import PublicHD - - -def start(): - return PublicHD() config = [{ 'name': 'publichd', diff --git a/couchpotato/core/media/_base/providers/torrent/publichd/main.py b/couchpotato/core/media/_base/providers/torrent/publichd/main.py index 8749b582..ad2035ed 100644 --- a/couchpotato/core/media/_base/providers/torrent/publichd/main.py +++ b/couchpotato/core/media/_base/providers/torrent/publichd/main.py @@ -2,15 +2,16 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.encoding import tryUrlencode, toUnicode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentMagnetProvider from urlparse import parse_qs import re import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentMagnetProvider +import six log = CPLog(__name__) -class PublicHD(TorrentMagnetProvider): +class Base(TorrentMagnetProvider): urls = { 'test': 'https://publichd.se', @@ -24,13 +25,15 @@ class PublicHD(TorrentMagnetProvider): if not quality.get('hd', False): return [] - return super(PublicHD, self).search(movie, quality) + return super(Base, self).search(movie, quality) - def _searchOnTitle(self, title, movie, quality, results): + def _search(self, media, quality, results): + + query = self.buildUrl(media) params = tryUrlencode({ 'page':'torrents', - 'search': '%s %s' % (title, movie['info']['year']), + 'search': query, 'active': 1, }) @@ -54,7 +57,7 @@ class PublicHD(TorrentMagnetProvider): results.append({ 'id': url['id'][0], - 'name': unicode(info_url.string), + 'name': six.text_type(info_url.string), 'url': download['href'], 'detail_url': self.urls['detail'] % url['id'][0], 'size': self.parseSize(result.find_all('td')[7].string), diff --git a/couchpotato/core/media/_base/providers/torrent/sceneaccess/__init__.py b/couchpotato/core/media/_base/providers/torrent/sceneaccess/__init__.py index 3fa5d97f..68592a37 100644 --- a/couchpotato/core/media/_base/providers/torrent/sceneaccess/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/sceneaccess/__init__.py @@ -1,8 +1,3 @@ -from .main import SceneAccess - - -def start(): - return SceneAccess() config = [{ 'name': 'sceneaccess', diff --git a/couchpotato/core/media/_base/providers/torrent/sceneaccess/main.py b/couchpotato/core/media/_base/providers/torrent/sceneaccess/main.py index fd8a2bed..29abbb6d 100644 --- a/couchpotato/core/media/_base/providers/torrent/sceneaccess/main.py +++ b/couchpotato/core/media/_base/providers/torrent/sceneaccess/main.py @@ -1,14 +1,14 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import tryUrlencode, toUnicode +from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class SceneAccess(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'https://www.sceneaccess.eu/', @@ -16,35 +16,15 @@ class SceneAccess(TorrentProvider): 'login_check': 'https://www.sceneaccess.eu/inbox', 'detail': 'https://www.sceneaccess.eu/details?id=%s', 'search': 'https://www.sceneaccess.eu/browse?c%d=%d', + 'archive': 'https://www.sceneaccess.eu/archive?&c%d=%d', 'download': 'https://www.sceneaccess.eu/%s', } - cat_ids = [ - ([22], ['720p', '1080p']), - ([7], ['cam', 'ts', 'dvdrip', 'tc', 'r5', 'scr', 'brrip']), - ([8], ['dvdr']), - ] - - http_time_between_calls = 1 #seconds - - def _search(self, movie, quality, results): - - cat = self.getCatId(quality['identifier']) - if not cat: - return - - url = self.urls['search'] % ( - cat[0], - cat[0] - ) - - arguments = tryUrlencode({ - 'search': movie['identifier'], - 'method': 3, - }) - url = "%s&%s" % (url, arguments) + http_time_between_calls = 1 #seconds + def _search(self, media, quality, results): + url = self.buildUrl(media, quality) data = self.getHTMLData(url) if data: @@ -77,13 +57,6 @@ class SceneAccess(TorrentProvider): except: log.error('Failed getting results from %s: %s', (self.getName(), traceback.format_exc())) - def getLoginParams(self): - return { - 'username': self.conf('username'), - 'password': self.conf('password'), - 'submit': 'come on in', - } - def getMoreInfo(self, item): full_description = self.getCache('sceneaccess.%s' % item['id'], item['detail_url'], cache_timeout = 25920000) html = BeautifulSoup(full_description) @@ -93,6 +66,14 @@ class SceneAccess(TorrentProvider): item['description'] = description return item + # Login + def getLoginParams(self): + return { + 'username': self.conf('username'), + 'password': self.conf('password'), + 'submit': 'come on in', + } + def loginSuccess(self, output): return '/inbox' in output.lower() diff --git a/couchpotato/core/media/_base/providers/torrent/thepiratebay/__init__.py b/couchpotato/core/media/_base/providers/torrent/thepiratebay/__init__.py index 8b3921cd..047562a5 100644 --- a/couchpotato/core/media/_base/providers/torrent/thepiratebay/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/thepiratebay/__init__.py @@ -1,8 +1,3 @@ -from .main import ThePirateBay - - -def start(): - return ThePirateBay() config = [{ 'name': 'thepiratebay', diff --git a/couchpotato/core/media/_base/providers/torrent/thepiratebay/main.py b/couchpotato/core/media/_base/providers/torrent/thepiratebay/main.py index 3bf53f75..64995628 100644 --- a/couchpotato/core/media/_base/providers/torrent/thepiratebay/main.py +++ b/couchpotato/core/media/_base/providers/torrent/thepiratebay/main.py @@ -1,29 +1,22 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode +from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentMagnetProvider import re import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentMagnetProvider import six log = CPLog(__name__) -class ThePirateBay(TorrentMagnetProvider): +class Base(TorrentMagnetProvider): urls = { - 'detail': '%s/torrent/%s', - 'search': '%s/search/%s/%s/7/%s' + 'detail': '%s/torrent/%s', + 'search': '%s/search/%%s/%%s/7/%%s' } - cat_ids = [ - ([207], ['720p', '1080p']), - ([201], ['cam', 'ts', 'dvdrip', 'tc', 'r5', 'scr']), - ([201, 207], ['brrip']), - ([202], ['dvdr']) - ] - cat_backup_id = 200 disable_provider = False http_time_between_calls = 0 @@ -37,18 +30,21 @@ class ThePirateBay(TorrentMagnetProvider): 'http://nl.tpb.li', 'http://proxybay.eu', 'https://www.getpirate.com', - 'http://piratebay.io', + 'http://piratebay.io', ] - def _searchOnTitle(self, title, movie, quality, results): + def _search(self, media, quality, results): page = 0 total_pages = 1 cats = self.getCatId(quality['identifier']) + search_url = self.urls['search'] % self.getDomain() + while page < total_pages: - search_url = self.urls['search'] % (self.getDomain(), tryUrlencode('"%s" %s' % (title, movie['info']['year'])), page, ','.join(str(x) for x in cats)) + search_url = search_url % self.buildUrl(media, page, cats) + page += 1 data = self.getHTMLData(search_url) @@ -88,7 +84,7 @@ class ThePirateBay(TorrentMagnetProvider): results.append({ 'id': re.search('/(?P\d+)/', link['href']).group('id'), - 'name': unicode(link.string), + 'name': six.text_type(link.string), 'url': download['href'], 'detail_url': self.getDomain(link['href']), 'size': self.parseSize(size), @@ -102,7 +98,7 @@ class ThePirateBay(TorrentMagnetProvider): log.error('Failed getting results from %s: %s', (self.getName(), traceback.format_exc())) def isEnabled(self): - return super(ThePirateBay, self).isEnabled() and self.getDomain() + return super(Base, self).isEnabled() and self.getDomain() def correctProxy(self, data): return 'title="Pirate Search"' in data @@ -110,7 +106,7 @@ class ThePirateBay(TorrentMagnetProvider): def getMoreInfo(self, item): full_description = self.getCache('tpb.%s' % item['id'], item['detail_url'], cache_timeout = 25920000) html = BeautifulSoup(full_description) - nfo_pre = html.find('div', attrs = {'class': 'nfo'}) + nfo_pre = html.find('div', attrs = {'class':'nfo'}) description = toUnicode(nfo_pre.text) if nfo_pre else '' item['description'] = description diff --git a/couchpotato/core/media/_base/providers/torrent/torrentbytes/__init__.py b/couchpotato/core/media/_base/providers/torrent/torrentbytes/__init__.py index 79dec932..46eb52eb 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentbytes/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentbytes/__init__.py @@ -1,8 +1,3 @@ -from .main import TorrentBytes - - -def start(): - return TorrentBytes() config = [{ 'name': 'torrentbytes', diff --git a/couchpotato/core/media/_base/providers/torrent/torrentbytes/main.py b/couchpotato/core/media/_base/providers/torrent/torrentbytes/main.py index b12b1e06..4b89db1e 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentbytes/main.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentbytes/main.py @@ -2,13 +2,13 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class TorrentBytes(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'https://www.torrentbytes.net/', diff --git a/couchpotato/core/media/_base/providers/torrent/torrentday/__init__.py b/couchpotato/core/media/_base/providers/torrent/torrentday/__init__.py index 133ec914..5067590d 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentday/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentday/__init__.py @@ -1,8 +1,3 @@ -from .main import TorrentDay - - -def start(): - return TorrentDay() config = [{ 'name': 'torrentday', diff --git a/couchpotato/core/media/_base/providers/torrent/torrentday/main.py b/couchpotato/core/media/_base/providers/torrent/torrentday/main.py index 83177a22..eebfaed2 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentday/main.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentday/main.py @@ -1,11 +1,11 @@ from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class TorrentDay(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'http://www.td.af/', @@ -16,25 +16,18 @@ class TorrentDay(TorrentProvider): 'download': 'http://www.td.af/download.php/%s/%s', } - cat_ids = [ - ([11], ['720p', '1080p']), - ([1, 21, 25], ['cam', 'ts', 'dvdrip', 'tc', 'r5', 'scr', 'brrip']), - ([3], ['dvdr']), - ([5], ['bd50']), - ] + http_time_between_calls = 1 #seconds - http_time_between_calls = 1 #seconds + def _search(self, media, quality, results): - def _searchOnTitle(self, title, movie, quality, results): - - q = '"%s %s"' % (title, movie['info']['year']) + query = self.buildUrl(media) data = { '/browse.php?': None, 'cata': 'yes', 'jxt': 8, 'jxw': 'b', - 'search': q, + 'search': query, } data = self.getJsonData(self.urls['search'], data = data) diff --git a/couchpotato/core/media/_base/providers/torrent/torrentleech/__init__.py b/couchpotato/core/media/_base/providers/torrent/torrentleech/__init__.py index e64d4baa..2cdbd57b 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentleech/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentleech/__init__.py @@ -1,8 +1,3 @@ -from .main import TorrentLeech - - -def start(): - return TorrentLeech() config = [{ 'name': 'torrentleech', diff --git a/couchpotato/core/media/_base/providers/torrent/torrentleech/main.py b/couchpotato/core/media/_base/providers/torrent/torrentleech/main.py index cb7cc043..1c907f4e 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentleech/main.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentleech/main.py @@ -1,15 +1,14 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import traceback - +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider +import six log = CPLog(__name__) -class TorrentLeech(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'http://www.torrentleech.org/', @@ -20,22 +19,13 @@ class TorrentLeech(TorrentProvider): 'download': 'http://www.torrentleech.org%s', } - cat_ids = [ - ([13], ['720p', '1080p']), - ([8], ['cam']), - ([9], ['ts', 'tc']), - ([10], ['r5', 'scr']), - ([11], ['dvdrip']), - ([14], ['brrip']), - ([12], ['dvdr']), - ] - http_time_between_calls = 1 #seconds cat_backup_id = None - def _searchOnTitle(self, title, movie, quality, results): + def _search(self, media, quality, results): + + url = self.urls['search'] % self.buildUrl(media, quality) - url = self.urls['search'] % (tryUrlencode('%s %s' % (title.replace(':', ''), movie['info']['year'])), self.getCatId(quality['identifier'])[0]) data = self.getHTMLData(url) if data: @@ -56,7 +46,7 @@ class TorrentLeech(TorrentProvider): results.append({ 'id': link['href'].replace('/torrent/', ''), - 'name': unicode(link.string), + 'name': six.text_type(link.string), 'url': self.urls['download'] % url['href'], 'detail_url': self.urls['download'] % details['href'], 'size': self.parseSize(result.find_all('td')[4].string), diff --git a/couchpotato/core/media/_base/providers/torrent/torrentpotato/__init__.py b/couchpotato/core/media/_base/providers/torrent/torrentpotato/__init__.py index 03795ffb..50e76029 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentpotato/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentpotato/__init__.py @@ -1,8 +1,3 @@ -from .main import TorrentPotato - - -def start(): - return TorrentPotato() config = [{ 'name': 'torrentpotato', diff --git a/couchpotato/core/media/_base/providers/torrent/torrentpotato/main.py b/couchpotato/core/media/_base/providers/torrent/torrentpotato/main.py index cfd0339c..b86ca6be 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentpotato/main.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentpotato/main.py @@ -1,45 +1,37 @@ -from couchpotato.core.helpers.encoding import tryUrlencode, toUnicode +from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.variable import splitString, tryInt, tryFloat from couchpotato.core.logger import CPLog -from couchpotato.core.providers.base import ResultList -from couchpotato.core.providers.torrent.base import TorrentProvider from urlparse import urlparse import re import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class TorrentPotato(TorrentProvider): +class Base(TorrentProvider): urls = {} limits_reached = {} http_time_between_calls = 1 # Seconds - def search(self, movie, quality): + def search(self, media, quality): hosts = self.getHosts() - results = ResultList(self, movie, quality, imdb_results = True) + results = ResultList(self, media, quality, imdb_results = True) for host in hosts: if self.isDisabled(host): continue - self._searchOnHost(host, movie, quality, results) + self._searchOnHost(host, media, quality, results) return results - def _searchOnHost(self, host, movie, quality, results): + def _searchOnHost(self, host, media, quality, results): - arguments = tryUrlencode({ - 'user': host['name'], - 'passkey': host['pass_key'], - 'imdbid': movie['identifier'] - }) - url = '%s?%s' % (host['host'], arguments) - - torrents = self.getJsonData(url, cache_timeout = 1800) + torrents = self.getJsonData(self.buildUrl(media, host), cache_timeout = 1800) if torrents: try: @@ -110,7 +102,7 @@ class TorrentPotato(TorrentProvider): hosts = self.getHosts() for host in hosts: - result = super(TorrentPotato, self).belongsTo(url, host = host['host'], provider = provider) + result = super(Base, self).belongsTo(url, host = host['host'], provider = provider) if result: return result diff --git a/couchpotato/core/media/_base/providers/torrent/torrentshack/__init__.py b/couchpotato/core/media/_base/providers/torrent/torrentshack/__init__.py index 058236e4..50edbf55 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentshack/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentshack/__init__.py @@ -1,8 +1,3 @@ -from .main import TorrentShack - - -def start(): - return TorrentShack() config = [{ 'name': 'torrentshack', diff --git a/couchpotato/core/media/_base/providers/torrent/torrentshack/main.py b/couchpotato/core/media/_base/providers/torrent/torrentshack/main.py index 6c6dc3b8..21776a27 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentshack/main.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentshack/main.py @@ -1,15 +1,14 @@ from bs4 import BeautifulSoup -from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentProvider import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider import six log = CPLog(__name__) -class TorrentShack(TorrentProvider): +class Base(TorrentProvider): urls = { 'test': 'https://torrentshack.net/', @@ -20,21 +19,11 @@ class TorrentShack(TorrentProvider): 'download': 'https://torrentshack.net/%s', } - cat_ids = [ - ([970], ['bd50']), - ([300], ['720p', '1080p']), - ([350], ['dvdr']), - ([400], ['brrip', 'dvdrip']), - ] - http_time_between_calls = 1 #seconds - cat_backup_id = 400 - def _searchOnTitle(self, title, movie, quality, results): + def _search(self, media, quality, results): - scene_only = '1' if self.conf('scene_only') else '' - - url = self.urls['search'] % (tryUrlencode('%s %s' % (title.replace(':', ''), movie['info']['year'])), scene_only, self.getCatId(quality['identifier'])[0]) + url = self.urls['search'] % self.buildUrl(media, quality) data = self.getHTMLData(url) if data: @@ -77,3 +66,6 @@ class TorrentShack(TorrentProvider): return 'logout.php' in output.lower() loginCheckSuccess = loginSuccess + + def getSceneOnly(self): + return '1' if self.conf('scene_only') else '' diff --git a/couchpotato/core/media/_base/providers/torrent/yify/__init__.py b/couchpotato/core/media/_base/providers/torrent/yify/__init__.py index 3a359608..9623eb5d 100644 --- a/couchpotato/core/media/_base/providers/torrent/yify/__init__.py +++ b/couchpotato/core/media/_base/providers/torrent/yify/__init__.py @@ -1,8 +1,3 @@ -from .main import Yify - - -def start(): - return Yify() config = [{ 'name': 'yify', diff --git a/couchpotato/core/media/_base/providers/torrent/yify/main.py b/couchpotato/core/media/_base/providers/torrent/yify/main.py index 080e6e36..028554d0 100644 --- a/couchpotato/core/media/_base/providers/torrent/yify/main.py +++ b/couchpotato/core/media/_base/providers/torrent/yify/main.py @@ -1,12 +1,12 @@ from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.torrent.base import TorrentMagnetProvider import traceback +from couchpotato.core.media._base.providers.torrent.base import TorrentProvider log = CPLog(__name__) -class Yify(TorrentMagnetProvider): +class Base(TorrentProvider): urls = { 'test': '%s/api', diff --git a/couchpotato/core/media/_base/providers/userscript/moviesio/main.py b/couchpotato/core/media/_base/providers/userscript/moviesio/main.py deleted file mode 100644 index 5dab6183..00000000 --- a/couchpotato/core/media/_base/providers/userscript/moviesio/main.py +++ /dev/null @@ -1,6 +0,0 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase - - -class MoviesIO(UserscriptBase): - - includes = ['*://movies.io/m/*'] diff --git a/couchpotato/core/media/_base/providers/trailer/__init__.py b/couchpotato/core/media/movie/providers/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/trailer/__init__.py rename to couchpotato/core/media/movie/providers/__init__.py diff --git a/couchpotato/core/media/movie/providers/automation/__init__.py b/couchpotato/core/media/movie/providers/automation/__init__.py new file mode 100644 index 00000000..93f6c10a --- /dev/null +++ b/couchpotato/core/media/movie/providers/automation/__init__.py @@ -0,0 +1,21 @@ +config = [{ + 'name': 'automation_providers', + 'groups': [ + { + 'label': 'Watchlists', + 'description': 'Check watchlists for new movies', + 'type': 'list', + 'name': 'watchlist_providers', + 'tab': 'automation', + 'options': [], + }, + { + 'label': 'Automated', + 'description': 'Uses minimal requirements', + 'type': 'list', + 'name': 'automation_providers', + 'tab': 'automation', + 'options': [], + }, + ], +}] diff --git a/couchpotato/core/media/movie/providers/automation/base.py b/couchpotato/core/media/movie/providers/automation/base.py new file mode 100644 index 00000000..8c98c10c --- /dev/null +++ b/couchpotato/core/media/movie/providers/automation/base.py @@ -0,0 +1,96 @@ +from couchpotato.core.event import addEvent, fireEvent +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.automation.base import BaseAutomation +from couchpotato.environment import Env +from couchpotato.core.helpers.variable import splitString +import time + +log = CPLog(__name__) + + +class Automation(BaseAutomation): + + enabled_option = 'automation_enabled' + http_time_between_calls = 2 + + interval = 1800 + last_checked = 0 + + def __init__(self): + addEvent('automation.get_movies', self._getMovies) + + def _getMovies(self): + + if self.isDisabled(): + return + + if not self.canCheck(): + log.debug('Just checked, skipping %s', self.getName()) + return [] + + self.last_checked = time.time() + + return self.getIMDBids() + + def search(self, name, year = None, imdb_only = False): + + prop_name = 'automation.cached.%s.%s' % (name, year) + cached_imdb = Env.prop(prop_name, default = False) + if cached_imdb and imdb_only: + return cached_imdb + + result = fireEvent('movie.search', q = '%s %s' % (name, year if year else ''), limit = 1, merge = True) + + if len(result) > 0: + if imdb_only and result[0].get('imdb'): + Env.prop(prop_name, result[0].get('imdb')) + + return result[0].get('imdb') if imdb_only else result[0] + else: + return None + + def isMinimalMovie(self, movie): + if not movie.get('rating'): + log.info('ignoring %s as no rating is available for.', (movie['original_title'])) + return False + + if movie['rating'] and movie['rating'].get('imdb'): + movie['votes'] = movie['rating']['imdb'][1] + movie['rating'] = movie['rating']['imdb'][0] + + for minimal_type in ['year', 'rating', 'votes']: + type_value = movie.get(minimal_type, 0) + type_min = self.getMinimal(minimal_type) + if type_value < type_min: + log.info('%s too low for %s, need %s has %s', (minimal_type, movie['original_title'], type_min, type_value)) + return False + + movie_genres = [genre.lower() for genre in movie['genres']] + required_genres = splitString(self.getMinimal('required_genres').lower()) + ignored_genres = splitString(self.getMinimal('ignored_genres').lower()) + + req_match = 0 + for req_set in required_genres: + req = splitString(req_set, '&') + req_match += len(list(set(movie_genres) & set(req))) == len(req) + + if self.getMinimal('required_genres') and req_match == 0: + log.info2('Required genre(s) missing for %s', movie['original_title']) + return False + + for ign_set in ignored_genres: + ign = splitString(ign_set, '&') + if len(list(set(movie_genres) & set(ign))) == len(ign): + log.info2('%s has blacklisted genre(s): %s', (movie['original_title'], ign)) + return False + + return True + + def getMinimal(self, min_type): + return Env.setting(min_type, 'automation') + + def getIMDBids(self): + return [] + + def canCheck(self): + return time.time() > self.last_checked + self.interval diff --git a/couchpotato/core/media/_base/providers/automation/bluray/__init__.py b/couchpotato/core/media/movie/providers/automation/bluray/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/bluray/__init__.py rename to couchpotato/core/media/movie/providers/automation/bluray/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/bluray/main.py b/couchpotato/core/media/movie/providers/automation/bluray/main.py similarity index 97% rename from couchpotato/core/media/_base/providers/automation/bluray/main.py rename to couchpotato/core/media/movie/providers/automation/bluray/main.py index ddd7b8ab..2e8ebff7 100644 --- a/couchpotato/core/media/_base/providers/automation/bluray/main.py +++ b/couchpotato/core/media/movie/providers/automation/bluray/main.py @@ -2,7 +2,7 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/automation/flixster/__init__.py b/couchpotato/core/media/movie/providers/automation/flixster/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/flixster/__init__.py rename to couchpotato/core/media/movie/providers/automation/flixster/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/flixster/main.py b/couchpotato/core/media/movie/providers/automation/flixster/main.py similarity index 94% rename from couchpotato/core/media/_base/providers/automation/flixster/main.py rename to couchpotato/core/media/movie/providers/automation/flixster/main.py index f07ecd6b..cebe89dc 100644 --- a/couchpotato/core/media/_base/providers/automation/flixster/main.py +++ b/couchpotato/core/media/movie/providers/automation/flixster/main.py @@ -1,6 +1,6 @@ from couchpotato.core.helpers.variable import tryInt, splitString from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/automation/goodfilms/__init__.py b/couchpotato/core/media/movie/providers/automation/goodfilms/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/goodfilms/__init__.py rename to couchpotato/core/media/movie/providers/automation/goodfilms/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/goodfilms/main.py b/couchpotato/core/media/movie/providers/automation/goodfilms/main.py similarity index 94% rename from couchpotato/core/media/_base/providers/automation/goodfilms/main.py rename to couchpotato/core/media/movie/providers/automation/goodfilms/main.py index e668a4fb..3ab51e04 100644 --- a/couchpotato/core/media/_base/providers/automation/goodfilms/main.py +++ b/couchpotato/core/media/movie/providers/automation/goodfilms/main.py @@ -1,6 +1,6 @@ from bs4 import BeautifulSoup from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/automation/imdb/__init__.py b/couchpotato/core/media/movie/providers/automation/imdb/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/imdb/__init__.py rename to couchpotato/core/media/movie/providers/automation/imdb/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/imdb/main.py b/couchpotato/core/media/movie/providers/automation/imdb/main.py similarity index 96% rename from couchpotato/core/media/_base/providers/automation/imdb/main.py rename to couchpotato/core/media/movie/providers/automation/imdb/main.py index 6ca81b70..9b25e180 100644 --- a/couchpotato/core/media/_base/providers/automation/imdb/main.py +++ b/couchpotato/core/media/movie/providers/automation/imdb/main.py @@ -7,9 +7,8 @@ from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import getImdb, splitString, tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation - -from couchpotato.core.providers.base import MultiProvider +from couchpotato.core.media._base.providers.base import MultiProvider +from couchpotato.core.media.movie.providers.automation.base import Automation log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/automation/itunes/__init__.py b/couchpotato/core/media/movie/providers/automation/itunes/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/itunes/__init__.py rename to couchpotato/core/media/movie/providers/automation/itunes/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/itunes/main.py b/couchpotato/core/media/movie/providers/automation/itunes/main.py similarity index 96% rename from couchpotato/core/media/_base/providers/automation/itunes/main.py rename to couchpotato/core/media/movie/providers/automation/itunes/main.py index 086c981d..3257a668 100644 --- a/couchpotato/core/media/_base/providers/automation/itunes/main.py +++ b/couchpotato/core/media/movie/providers/automation/itunes/main.py @@ -1,7 +1,7 @@ from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import md5, splitString, tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation from xml.etree.ElementTree import QName import datetime import traceback diff --git a/couchpotato/core/media/_base/providers/automation/kinepolis/__init__.py b/couchpotato/core/media/movie/providers/automation/kinepolis/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/kinepolis/__init__.py rename to couchpotato/core/media/movie/providers/automation/kinepolis/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/kinepolis/main.py b/couchpotato/core/media/movie/providers/automation/kinepolis/main.py similarity index 89% rename from couchpotato/core/media/_base/providers/automation/kinepolis/main.py rename to couchpotato/core/media/movie/providers/automation/kinepolis/main.py index 4158d488..a1e099e2 100644 --- a/couchpotato/core/media/_base/providers/automation/kinepolis/main.py +++ b/couchpotato/core/media/movie/providers/automation/kinepolis/main.py @@ -1,6 +1,6 @@ from couchpotato.core.helpers.rss import RSS from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation import datetime log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/automation/letterboxd/__init__.py b/couchpotato/core/media/movie/providers/automation/letterboxd/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/letterboxd/__init__.py rename to couchpotato/core/media/movie/providers/automation/letterboxd/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/letterboxd/main.py b/couchpotato/core/media/movie/providers/automation/letterboxd/main.py similarity index 94% rename from couchpotato/core/media/_base/providers/automation/letterboxd/main.py rename to couchpotato/core/media/movie/providers/automation/letterboxd/main.py index dbbf53b1..70e574f1 100644 --- a/couchpotato/core/media/_base/providers/automation/letterboxd/main.py +++ b/couchpotato/core/media/movie/providers/automation/letterboxd/main.py @@ -1,7 +1,7 @@ from bs4 import BeautifulSoup from couchpotato.core.helpers.variable import tryInt, splitString, removeEmpty from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation import re log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/automation/moviemeter/__init__.py b/couchpotato/core/media/movie/providers/automation/moviemeter/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/moviemeter/__init__.py rename to couchpotato/core/media/movie/providers/automation/moviemeter/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/moviemeter/main.py b/couchpotato/core/media/movie/providers/automation/moviemeter/main.py similarity index 90% rename from couchpotato/core/media/_base/providers/automation/moviemeter/main.py rename to couchpotato/core/media/movie/providers/automation/moviemeter/main.py index dae764bf..890c8bc0 100644 --- a/couchpotato/core/media/_base/providers/automation/moviemeter/main.py +++ b/couchpotato/core/media/movie/providers/automation/moviemeter/main.py @@ -1,7 +1,7 @@ from couchpotato.core.event import fireEvent from couchpotato.core.helpers.rss import RSS from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/automation/movies_io/__init__.py b/couchpotato/core/media/movie/providers/automation/movies_io/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/movies_io/__init__.py rename to couchpotato/core/media/movie/providers/automation/movies_io/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/movies_io/main.py b/couchpotato/core/media/movie/providers/automation/movies_io/main.py similarity index 92% rename from couchpotato/core/media/_base/providers/automation/movies_io/main.py rename to couchpotato/core/media/movie/providers/automation/movies_io/main.py index 0737e2e6..890cbde0 100644 --- a/couchpotato/core/media/_base/providers/automation/movies_io/main.py +++ b/couchpotato/core/media/movie/providers/automation/movies_io/main.py @@ -2,7 +2,7 @@ from couchpotato.core.event import fireEvent from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import tryInt, splitString from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/automation/rottentomatoes/__init__.py b/couchpotato/core/media/movie/providers/automation/rottentomatoes/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/rottentomatoes/__init__.py rename to couchpotato/core/media/movie/providers/automation/rottentomatoes/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/rottentomatoes/main.py b/couchpotato/core/media/movie/providers/automation/rottentomatoes/main.py similarity index 95% rename from couchpotato/core/media/_base/providers/automation/rottentomatoes/main.py rename to couchpotato/core/media/movie/providers/automation/rottentomatoes/main.py index c873a8e1..56e0e7c5 100644 --- a/couchpotato/core/media/_base/providers/automation/rottentomatoes/main.py +++ b/couchpotato/core/media/movie/providers/automation/rottentomatoes/main.py @@ -1,7 +1,7 @@ from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import tryInt, splitString from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation from xml.etree.ElementTree import QName import datetime import re diff --git a/couchpotato/core/media/_base/providers/automation/trakt/__init__.py b/couchpotato/core/media/movie/providers/automation/trakt/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/automation/trakt/__init__.py rename to couchpotato/core/media/movie/providers/automation/trakt/__init__.py diff --git a/couchpotato/core/media/_base/providers/automation/trakt/main.py b/couchpotato/core/media/movie/providers/automation/trakt/main.py similarity index 94% rename from couchpotato/core/media/_base/providers/automation/trakt/main.py rename to couchpotato/core/media/movie/providers/automation/trakt/main.py index 0109daf3..881b14a1 100644 --- a/couchpotato/core/media/_base/providers/automation/trakt/main.py +++ b/couchpotato/core/media/movie/providers/automation/trakt/main.py @@ -1,7 +1,7 @@ from couchpotato.core.event import addEvent from couchpotato.core.helpers.variable import sha1 from couchpotato.core.logger import CPLog -from couchpotato.core.providers.automation.base import Automation +from couchpotato.core.media.movie.providers.automation.base import Automation import base64 log = CPLog(__name__) diff --git a/couchpotato/core/media/movie/providers/base.py b/couchpotato/core/media/movie/providers/base.py new file mode 100644 index 00000000..4e80d5d3 --- /dev/null +++ b/couchpotato/core/media/movie/providers/base.py @@ -0,0 +1,5 @@ +from couchpotato.core.media._base.providers.info.base import BaseInfoProvider + + +class MovieProvider(BaseInfoProvider): + type = 'movie' diff --git a/couchpotato/core/media/movie/providers/info/__init__.py b/couchpotato/core/media/movie/providers/info/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/couchpotato/core/media/_base/providers/info/_modifier/__init__.py b/couchpotato/core/media/movie/providers/info/_modifier/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/info/_modifier/__init__.py rename to couchpotato/core/media/movie/providers/info/_modifier/__init__.py index 9dfab703..3bdf5e0d 100644 --- a/couchpotato/core/media/_base/providers/info/_modifier/__init__.py +++ b/couchpotato/core/media/movie/providers/info/_modifier/__init__.py @@ -1,7 +1,7 @@ from .main import MovieResultModifier - def start(): + return MovieResultModifier() config = [] diff --git a/couchpotato/core/media/_base/providers/info/_modifier/main.py b/couchpotato/core/media/movie/providers/info/_modifier/main.py similarity index 100% rename from couchpotato/core/media/_base/providers/info/_modifier/main.py rename to couchpotato/core/media/movie/providers/info/_modifier/main.py diff --git a/couchpotato/core/media/_base/providers/info/couchpotatoapi/__init__.py b/couchpotato/core/media/movie/providers/info/couchpotatoapi/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/info/couchpotatoapi/__init__.py rename to couchpotato/core/media/movie/providers/info/couchpotatoapi/__init__.py diff --git a/couchpotato/core/media/_base/providers/info/couchpotatoapi/main.py b/couchpotato/core/media/movie/providers/info/couchpotatoapi/main.py similarity index 98% rename from couchpotato/core/media/_base/providers/info/couchpotatoapi/main.py rename to couchpotato/core/media/movie/providers/info/couchpotatoapi/main.py index a07eb135..469866cd 100644 --- a/couchpotato/core/media/_base/providers/info/couchpotatoapi/main.py +++ b/couchpotato/core/media/movie/providers/info/couchpotatoapi/main.py @@ -1,10 +1,12 @@ +import base64 +import time + from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.logger import CPLog -from couchpotato.core.providers.info.base import MovieProvider +from couchpotato.core.media.movie.providers.base import MovieProvider from couchpotato.environment import Env -import base64 -import time + log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/info/omdbapi/__init__.py b/couchpotato/core/media/movie/providers/info/omdbapi/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/info/omdbapi/__init__.py rename to couchpotato/core/media/movie/providers/info/omdbapi/__init__.py diff --git a/couchpotato/core/media/_base/providers/info/omdbapi/main.py b/couchpotato/core/media/movie/providers/info/omdbapi/main.py similarity index 98% rename from couchpotato/core/media/_base/providers/info/omdbapi/main.py rename to couchpotato/core/media/movie/providers/info/omdbapi/main.py index 8f04d3b6..34e7d569 100644 --- a/couchpotato/core/media/_base/providers/info/omdbapi/main.py +++ b/couchpotato/core/media/movie/providers/info/omdbapi/main.py @@ -1,11 +1,13 @@ +import json +import re +import traceback + from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import tryInt, tryFloat, splitString from couchpotato.core.logger import CPLog -from couchpotato.core.providers.info.base import MovieProvider -import json -import re -import traceback +from couchpotato.core.media.movie.providers.base import MovieProvider + log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/info/themoviedb/__init__.py b/couchpotato/core/media/movie/providers/info/themoviedb/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/info/themoviedb/__init__.py rename to couchpotato/core/media/movie/providers/info/themoviedb/__init__.py diff --git a/couchpotato/core/media/_base/providers/info/themoviedb/main.py b/couchpotato/core/media/movie/providers/info/themoviedb/main.py similarity index 98% rename from couchpotato/core/media/_base/providers/info/themoviedb/main.py rename to couchpotato/core/media/movie/providers/info/themoviedb/main.py index 1b706b52..36f3a489 100644 --- a/couchpotato/core/media/_base/providers/info/themoviedb/main.py +++ b/couchpotato/core/media/movie/providers/info/themoviedb/main.py @@ -1,10 +1,12 @@ +import traceback + from couchpotato.core.event import addEvent from couchpotato.core.helpers.encoding import simplifyString, toUnicode, ss from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog -from couchpotato.core.providers.info.base import MovieProvider +from couchpotato.core.media.movie.providers.base import MovieProvider import tmdb3 -import traceback + log = CPLog(__name__) diff --git a/couchpotato/core/media/movie/providers/metadata/__init__.py b/couchpotato/core/media/movie/providers/metadata/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/couchpotato/core/media/movie/providers/metadata/base.py b/couchpotato/core/media/movie/providers/metadata/base.py new file mode 100644 index 00000000..7dacf554 --- /dev/null +++ b/couchpotato/core/media/movie/providers/metadata/base.py @@ -0,0 +1,109 @@ +from couchpotato.core.event import addEvent, fireEvent +from couchpotato.core.helpers.encoding import sp +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.metadata.base import MetaDataBase +from couchpotato.environment import Env +import os +import shutil +import traceback + +log = CPLog(__name__) + + +class MovieMetaData(MetaDataBase): + + enabled_option = 'meta_enabled' + + def __init__(self): + addEvent('renamer.after', self.create) + + def create(self, message = None, group = None): + if self.isDisabled(): return + if not group: group = {} + + log.info('Creating %s metadata.', self.getName()) + + # Update library to get latest info + try: + group['media'] = fireEvent('movie.update_info', group['media'].get('_id'), identifier = group['media']['identifier'], extended = True, single = True) + except: + log.error('Failed to update movie, before creating metadata: %s', traceback.format_exc()) + + root_name = self.getRootName(group) + meta_name = os.path.basename(root_name) + root = os.path.dirname(root_name) + + movie_info = group['media'].get('info') + + for file_type in ['nfo', 'thumbnail', 'fanart']: + try: + # Get file path + name = getattr(self, 'get' + file_type.capitalize() + 'Name')(meta_name, root) + + if name and (self.conf('meta_' + file_type) or self.conf('meta_' + file_type) is None): + + # Get file content + content = getattr(self, 'get' + file_type.capitalize())(movie_info = movie_info, data = group) + if content: + log.debug('Creating %s file: %s', (file_type, name)) + if os.path.isfile(content): + content = sp(content) + name = sp(name) + + shutil.copy2(content, name) + shutil.copyfile(content, name) + + # Try and copy stats seperately + try: shutil.copystat(content, name) + except: pass + else: + self.createFile(name, content) + group['renamed_files'].append(name) + + try: + os.chmod(sp(name), Env.getPermission('file')) + except: + log.debug('Failed setting permissions for %s: %s', (name, traceback.format_exc())) + + except: + log.error('Unable to create %s file: %s', (file_type, traceback.format_exc())) + + def getRootName(self, data = None): + if not data: data = {} + return os.path.join(data['destination_dir'], data['filename']) + + def getFanartName(self, name, root): + return + + def getThumbnailName(self, name, root): + return + + def getNfoName(self, name, root): + return + + def getNfo(self, movie_info = None, data = None): + if not data: data = {} + if not movie_info: movie_info = {} + + def getThumbnail(self, movie_info = None, data = None, wanted_file_type = 'poster_original'): + if not data: data = {} + if not movie_info: movie_info = {} + + # See if it is in current files + files = data['media'].get('files') + if files.get('image_' + wanted_file_type): + if os.path.isfile(files['image_' + wanted_file_type][0]): + return files['image_' + wanted_file_type][0] + + # Download using existing info + try: + images = movie_info['images'][wanted_file_type] + file_path = fireEvent('file.download', url = images[0], single = True) + return file_path + except: + pass + + def getFanart(self, movie_info = None, data = None): + if not data: data = {} + if not movie_info: movie_info = {} + return self.getThumbnail(movie_info = movie_info, data = data, wanted_file_type = 'backdrop_original') diff --git a/couchpotato/core/media/_base/providers/metadata/wmc/__init__.py b/couchpotato/core/media/movie/providers/metadata/wmc/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/metadata/wmc/__init__.py rename to couchpotato/core/media/movie/providers/metadata/wmc/__init__.py diff --git a/couchpotato/core/media/movie/providers/metadata/wmc/main.py b/couchpotato/core/media/movie/providers/metadata/wmc/main.py new file mode 100644 index 00000000..bdb96a44 --- /dev/null +++ b/couchpotato/core/media/movie/providers/metadata/wmc/main.py @@ -0,0 +1,8 @@ +from couchpotato.core.media.movie.providers.metadata.base import MovieMetaData +import os + + +class WindowsMediaCenter(MovieMetaData): + + def getThumbnailName(self, name, root): + return os.path.join(root, 'folder.jpg') diff --git a/couchpotato/core/media/_base/providers/metadata/xbmc/__init__.py b/couchpotato/core/media/movie/providers/metadata/xbmc/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/metadata/xbmc/__init__.py rename to couchpotato/core/media/movie/providers/metadata/xbmc/__init__.py diff --git a/couchpotato/core/media/_base/providers/metadata/xbmc/main.py b/couchpotato/core/media/movie/providers/metadata/xbmc/main.py similarity index 98% rename from couchpotato/core/media/_base/providers/metadata/xbmc/main.py rename to couchpotato/core/media/movie/providers/metadata/xbmc/main.py index 90cab8f3..61f36473 100644 --- a/couchpotato/core/media/_base/providers/metadata/xbmc/main.py +++ b/couchpotato/core/media/movie/providers/metadata/xbmc/main.py @@ -1,7 +1,7 @@ +from couchpotato.core.media.movie.providers.metadata.base import MovieMetaData from couchpotato.core.helpers.encoding import toUnicode from couchpotato.core.helpers.variable import getTitle from couchpotato.core.logger import CPLog -from couchpotato.core.providers.metadata.base import MetaDataBase from xml.etree.ElementTree import Element, SubElement, tostring import os import re @@ -10,7 +10,7 @@ import xml.dom.minidom log = CPLog(__name__) -class XBMC(MetaDataBase): +class XBMC(MovieMetaData): def getFanartName(self, name, root): return self.createMetaName(self.conf('meta_fanart_name'), name, root) diff --git a/couchpotato/core/media/movie/providers/nzb/__init__.py b/couchpotato/core/media/movie/providers/nzb/__init__.py new file mode 100644 index 00000000..88d9865d --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/__init__.py @@ -0,0 +1,14 @@ +config = [{ + 'name': 'nzb_providers', + 'groups': [ + { + 'label': 'Usenet Providers', + 'description': 'Providers searching usenet for new releases', + 'wizard': True, + 'type': 'list', + 'name': 'nzb_providers', + 'tab': 'searcher', + 'options': [], + }, + ], +}] diff --git a/couchpotato/core/media/movie/providers/nzb/base.py b/couchpotato/core/media/movie/providers/nzb/base.py new file mode 100644 index 00000000..e69de29b diff --git a/couchpotato/core/media/movie/providers/nzb/binsearch/__init__.py b/couchpotato/core/media/movie/providers/nzb/binsearch/__init__.py new file mode 100644 index 00000000..13a4bfb9 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/binsearch/__init__.py @@ -0,0 +1,7 @@ +from .main import BinSearch + + +def start(): + return BinSearch() + +config = [] diff --git a/couchpotato/core/media/movie/providers/nzb/binsearch/main.py b/couchpotato/core/media/movie/providers/nzb/binsearch/main.py new file mode 100644 index 00000000..9b4cf042 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/binsearch/main.py @@ -0,0 +1,24 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.nzb.binsearch.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider +from couchpotato.environment import Env + +log = CPLog(__name__) + + +class BinSearch(MovieProvider, Base): + + def buildUrl(self, media, quality): + query = tryUrlencode({ + 'q': media['identifier'], + 'm': 'n', + 'max': 400, + 'adv_age': Env.setting('retention', 'nzb'), + 'adv_sort': 'date', + 'adv_col': 'on', + 'adv_nfo': 'on', + 'minsize': quality.get('size_min'), + 'maxsize': quality.get('size_max'), + }) + return query diff --git a/couchpotato/core/media/movie/providers/nzb/newznab/__init__.py b/couchpotato/core/media/movie/providers/nzb/newznab/__init__.py new file mode 100644 index 00000000..2b25ce28 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/newznab/__init__.py @@ -0,0 +1,7 @@ +from .main import Newznab + + +def start(): + return Newznab() + +config = [] diff --git a/couchpotato/core/media/movie/providers/nzb/newznab/main.py b/couchpotato/core/media/movie/providers/nzb/newznab/main.py new file mode 100644 index 00000000..b67e4a66 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/newznab/main.py @@ -0,0 +1,18 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.nzb.newznab.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class Newznab(MovieProvider, Base): + + def buildUrl(self, media, api_key): + query = tryUrlencode({ + 't': 'movie', + 'imdbid': media['identifier'].replace('tt', ''), + 'apikey': api_key, + 'extended': 1 + }) + return query diff --git a/couchpotato/core/media/movie/providers/nzb/nzbclub/__init__.py b/couchpotato/core/media/movie/providers/nzb/nzbclub/__init__.py new file mode 100644 index 00000000..31df9653 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/nzbclub/__init__.py @@ -0,0 +1,7 @@ +from .main import NZBClub + + +def start(): + return NZBClub() + +config = [] diff --git a/couchpotato/core/media/movie/providers/nzb/nzbclub/main.py b/couchpotato/core/media/movie/providers/nzb/nzbclub/main.py new file mode 100644 index 00000000..d90f7457 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/nzbclub/main.py @@ -0,0 +1,25 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.event import fireEvent +from couchpotato.core.media._base.providers.nzb.nzbclub.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class NZBClub(MovieProvider, Base): + + def buildUrl(self, media): + + q = tryUrlencode({ + 'q': '"%s"' % fireEvent('library.query', media, single = True), + }) + + query = tryUrlencode({ + 'ig': 1, + 'rpp': 200, + 'st': 5, + 'sp': 1, + 'ns': 1, + }) + return '%s&%s' % (q, query) diff --git a/couchpotato/core/media/movie/providers/nzb/nzbindex/__init__.py b/couchpotato/core/media/movie/providers/nzb/nzbindex/__init__.py new file mode 100644 index 00000000..acf9e915 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/nzbindex/__init__.py @@ -0,0 +1,7 @@ +from .main import NzbIndex + + +def start(): + return NzbIndex() + +config = [] diff --git a/couchpotato/core/media/movie/providers/nzb/nzbindex/main.py b/couchpotato/core/media/movie/providers/nzb/nzbindex/main.py new file mode 100644 index 00000000..5f98d58d --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/nzbindex/main.py @@ -0,0 +1,28 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.event import fireEvent +from couchpotato.core.media._base.providers.nzb.nzbindex.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider +from couchpotato.environment import Env + +log = CPLog(__name__) + + +class NzbIndex(MovieProvider, Base): + + def buildUrl(self, media, quality): + title = fireEvent('library.query', media, include_year = False, single = True) + year = media['year'] + + query = tryUrlencode({ + 'q': '"%s %s" | "%s (%s)"' % (title, year, title, year), + 'age': Env.setting('retention', 'nzb'), + 'sort': 'agedesc', + 'minsize': quality.get('size_min'), + 'maxsize': quality.get('size_max'), + 'rating': 1, + 'max': 250, + 'more': 1, + 'complete': 1, + }) + return query diff --git a/couchpotato/core/media/movie/providers/nzb/omgwtfnzbs/__init__.py b/couchpotato/core/media/movie/providers/nzb/omgwtfnzbs/__init__.py new file mode 100644 index 00000000..086db2c7 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/omgwtfnzbs/__init__.py @@ -0,0 +1,7 @@ +from .main import OMGWTFNZBs + + +def start(): + return OMGWTFNZBs() + +config = [] diff --git a/couchpotato/core/media/movie/providers/nzb/omgwtfnzbs/main.py b/couchpotato/core/media/movie/providers/nzb/omgwtfnzbs/main.py new file mode 100644 index 00000000..f0f96907 --- /dev/null +++ b/couchpotato/core/media/movie/providers/nzb/omgwtfnzbs/main.py @@ -0,0 +1,9 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.nzb.omgwtfnzbs.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class OMGWTFNZBs(MovieProvider, Base): + pass diff --git a/couchpotato/core/media/movie/providers/torrent/__init__.py b/couchpotato/core/media/movie/providers/torrent/__init__.py new file mode 100644 index 00000000..12dda708 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/__init__.py @@ -0,0 +1,14 @@ +config = [{ + 'name': 'torrent_providers', + 'groups': [ + { + 'label': 'Torrent Providers', + 'description': 'Providers searching torrent sites for new releases', + 'wizard': True, + 'type': 'list', + 'name': 'torrent_providers', + 'tab': 'searcher', + 'options': [], + }, + ], +}] diff --git a/couchpotato/core/media/movie/providers/torrent/awesomehd/__init__.py b/couchpotato/core/media/movie/providers/torrent/awesomehd/__init__.py new file mode 100644 index 00000000..7cc37a20 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/awesomehd/__init__.py @@ -0,0 +1,8 @@ +from .main import AwesomeHD + + +def start(): + return AwesomeHD() + +config = [] + diff --git a/couchpotato/core/media/movie/providers/torrent/awesomehd/main.py b/couchpotato/core/media/movie/providers/torrent/awesomehd/main.py new file mode 100644 index 00000000..55f23d94 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/awesomehd/main.py @@ -0,0 +1,9 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.awesomehd.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class AwesomeHD(MovieProvider, Base): + pass diff --git a/couchpotato/core/media/movie/providers/torrent/bithdtv/__init__.py b/couchpotato/core/media/movie/providers/torrent/bithdtv/__init__.py new file mode 100644 index 00000000..0145dcde --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/bithdtv/__init__.py @@ -0,0 +1,7 @@ +from .main import BiTHDTV + + +def start(): + return BiTHDTV() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/bithdtv/main.py b/couchpotato/core/media/movie/providers/torrent/bithdtv/main.py new file mode 100644 index 00000000..03be850b --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/bithdtv/main.py @@ -0,0 +1,17 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.event import fireEvent +from couchpotato.core.media._base.providers.torrent.bithdtv.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class BiTHDTV(MovieProvider, Base): + + def buildUrl(self, media): + query = tryUrlencode({ + 'search': fireEvent('library.query', media, single = True), + 'cat': 7 # Movie cat + }) + return query diff --git a/couchpotato/core/media/movie/providers/torrent/bitsoup/__init__.py b/couchpotato/core/media/movie/providers/torrent/bitsoup/__init__.py new file mode 100644 index 00000000..8be80c8f --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/bitsoup/__init__.py @@ -0,0 +1,7 @@ +from .main import Bitsoup + + +def start(): + return Bitsoup() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/bitsoup/main.py b/couchpotato/core/media/movie/providers/torrent/bitsoup/main.py new file mode 100644 index 00000000..b67ae229 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/bitsoup/main.py @@ -0,0 +1,26 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.event import fireEvent +from couchpotato.core.media._base.providers.torrent.bitsoup.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class Bitsoup(MovieProvider, Base): + cat_ids = [ + ([41], ['720p', '1080p']), + ([20], ['dvdr']), + ([19], ['brrip', 'dvdrip']), + ] + cat_backup_id = 0 + + def buildUrl(self, media, quality): + query = tryUrlencode({ + 'search': '"%s" %s' % ( + fireEvent('library.query', media, include_year = False, single = True), + media['year'] + ), + 'cat': self.getCatId(quality['identifier'])[0], + }) + return query diff --git a/couchpotato/core/media/movie/providers/torrent/hdbits/__init__.py b/couchpotato/core/media/movie/providers/torrent/hdbits/__init__.py new file mode 100644 index 00000000..1c7b4357 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/hdbits/__init__.py @@ -0,0 +1,7 @@ +from .main import HDBits + + +def start(): + return HDBits() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/hdbits/main.py b/couchpotato/core/media/movie/providers/torrent/hdbits/main.py new file mode 100644 index 00000000..2a1e23f6 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/hdbits/main.py @@ -0,0 +1,9 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.hdbits.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class HDBits(MovieProvider, Base): + pass diff --git a/couchpotato/core/media/movie/providers/torrent/ilovetorrents/__init__.py b/couchpotato/core/media/movie/providers/torrent/ilovetorrents/__init__.py new file mode 100644 index 00000000..f20367de --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/ilovetorrents/__init__.py @@ -0,0 +1,7 @@ +from .main import ILoveTorrents + + +def start(): + return ILoveTorrents() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/ilovetorrents/main.py b/couchpotato/core/media/movie/providers/torrent/ilovetorrents/main.py new file mode 100644 index 00000000..5e90e73d --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/ilovetorrents/main.py @@ -0,0 +1,9 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.ilovetorrents.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class ILoveTorrents(MovieProvider, Base): + pass diff --git a/couchpotato/core/media/movie/providers/torrent/iptorrents/__init__.py b/couchpotato/core/media/movie/providers/torrent/iptorrents/__init__.py new file mode 100644 index 00000000..8741a132 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/iptorrents/__init__.py @@ -0,0 +1,7 @@ +from .main import IPTorrents + + +def start(): + return IPTorrents() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/iptorrents/main.py b/couchpotato/core/media/movie/providers/torrent/iptorrents/main.py new file mode 100644 index 00000000..21a66422 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/iptorrents/main.py @@ -0,0 +1,20 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.iptorrents.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class IPTorrents(MovieProvider, Base): + + cat_ids = [ + ([48], ['720p', '1080p', 'bd50']), + ([72], ['cam', 'ts', 'tc', 'r5', 'scr']), + ([7], ['dvdrip', 'brrip']), + ([6], ['dvdr']), + ] + + def buildUrl(self, title, media, quality): + query = '%s %s' % (title.replace(':', ''), media['year']) + + return self._buildUrl(query, quality['identifier']) diff --git a/couchpotato/core/media/movie/providers/torrent/kickasstorrents/__init__.py b/couchpotato/core/media/movie/providers/torrent/kickasstorrents/__init__.py new file mode 100644 index 00000000..cb293876 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/kickasstorrents/__init__.py @@ -0,0 +1,7 @@ +from .main import KickAssTorrents + + +def start(): + return KickAssTorrents() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/kickasstorrents/main.py b/couchpotato/core/media/movie/providers/torrent/kickasstorrents/main.py new file mode 100644 index 00000000..d9adeccd --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/kickasstorrents/main.py @@ -0,0 +1,9 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.kickasstorrents.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class KickAssTorrents(MovieProvider, Base): + pass diff --git a/couchpotato/core/media/movie/providers/torrent/passthepopcorn/__init__.py b/couchpotato/core/media/movie/providers/torrent/passthepopcorn/__init__.py new file mode 100644 index 00000000..c437737c --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/passthepopcorn/__init__.py @@ -0,0 +1,7 @@ +from .main import PassThePopcorn + + +def start(): + return PassThePopcorn() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/passthepopcorn/main.py b/couchpotato/core/media/movie/providers/torrent/passthepopcorn/main.py new file mode 100644 index 00000000..6c90c14d --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/passthepopcorn/main.py @@ -0,0 +1,36 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.passthepopcorn.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class PassThePopcorn(MovieProvider, Base): + + quality_search_params = { + 'bd50': {'media': 'Blu-ray', 'format': 'BD50'}, + '1080p': {'resolution': '1080p'}, + '720p': {'resolution': '720p'}, + 'brrip': {'media': 'Blu-ray'}, + 'dvdr': {'resolution': 'anysd'}, + 'dvdrip': {'media': 'DVD'}, + 'scr': {'media': 'DVD-Screener'}, + 'r5': {'media': 'R5'}, + 'tc': {'media': 'TC'}, + 'ts': {'media': 'TS'}, + 'cam': {'media': 'CAM'} + } + + post_search_filters = { + 'bd50': {'Codec': ['BD50']}, + '1080p': {'Resolution': ['1080p']}, + '720p': {'Resolution': ['720p']}, + 'brrip': {'Source': ['Blu-ray'], 'Quality': ['High Definition'], 'Container': ['!ISO']}, + 'dvdr': {'Codec': ['DVD5', 'DVD9']}, + 'dvdrip': {'Source': ['DVD'], 'Codec': ['!DVD5', '!DVD9']}, + 'scr': {'Source': ['DVD-Screener']}, + 'r5': {'Source': ['R5']}, + 'tc': {'Source': ['TC']}, + 'ts': {'Source': ['TS']}, + 'cam': {'Source': ['CAM']} + } diff --git a/couchpotato/core/media/movie/providers/torrent/publichd/__init__.py b/couchpotato/core/media/movie/providers/torrent/publichd/__init__.py new file mode 100644 index 00000000..c58d2b53 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/publichd/__init__.py @@ -0,0 +1,7 @@ +from .main import PublicHD + + +def start(): + return PublicHD() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/publichd/main.py b/couchpotato/core/media/movie/providers/torrent/publichd/main.py new file mode 100644 index 00000000..5c3cd946 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/publichd/main.py @@ -0,0 +1,12 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.event import fireEvent +from couchpotato.core.media._base.providers.torrent.publichd.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class PublicHD(MovieProvider, Base): + + def buildUrl(self, media): + return fireEvent('library.query', media, single = True) diff --git a/couchpotato/core/media/movie/providers/torrent/sceneaccess/__init__.py b/couchpotato/core/media/movie/providers/torrent/sceneaccess/__init__.py new file mode 100644 index 00000000..14932221 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/sceneaccess/__init__.py @@ -0,0 +1,7 @@ +from .main import SceneAccess + + +def start(): + return SceneAccess() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/sceneaccess/main.py b/couchpotato/core/media/movie/providers/torrent/sceneaccess/main.py new file mode 100644 index 00000000..7ed756e2 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/sceneaccess/main.py @@ -0,0 +1,30 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.event import fireEvent +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.sceneaccess.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class SceneAccess(MovieProvider, Base): + + cat_ids = [ + ([22], ['720p', '1080p']), + ([7], ['cam', 'ts', 'dvdrip', 'tc', 'r5', 'scr', 'brrip']), + ([8], ['dvdr']), + ] + + def buildUrl(self, media, quality): + url = self.urls['search'] % ( + self.getCatId(quality['identifier'])[0], + self.getCatId(quality['identifier'])[0] + ) + + arguments = tryUrlencode({ + 'search': fireEvent('library.query', media, single = True), + 'method': 3, + }) + query = "%s&%s" % (url, arguments) + + return query diff --git a/couchpotato/core/media/movie/providers/torrent/thepiratebay/__init__.py b/couchpotato/core/media/movie/providers/torrent/thepiratebay/__init__.py new file mode 100644 index 00000000..3bd44a4e --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/thepiratebay/__init__.py @@ -0,0 +1,7 @@ +from .main import ThePirateBay + + +def start(): + return ThePirateBay() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/thepiratebay/main.py b/couchpotato/core/media/movie/providers/torrent/thepiratebay/main.py new file mode 100644 index 00000000..138f311d --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/thepiratebay/main.py @@ -0,0 +1,24 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.event import fireEvent +from couchpotato.core.media._base.providers.torrent.thepiratebay.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class ThePirateBay(MovieProvider, Base): + + cat_ids = [ + ([207], ['720p', '1080p']), + ([201], ['cam', 'ts', 'dvdrip', 'tc', 'r5', 'scr']), + ([201, 207], ['brrip']), + ([202], ['dvdr']) + ] + + def buildUrl(self, media, page, cats): + return ( + tryUrlencode('"%s"' % fireEvent('library.query', media, single = True)), + page, + ','.join(str(x) for x in cats) + ) diff --git a/couchpotato/core/media/movie/providers/torrent/torrentbytes/__init__.py b/couchpotato/core/media/movie/providers/torrent/torrentbytes/__init__.py new file mode 100644 index 00000000..39bef365 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentbytes/__init__.py @@ -0,0 +1,7 @@ +from .main import TorrentBytes + + +def start(): + return TorrentBytes() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/torrentbytes/main.py b/couchpotato/core/media/movie/providers/torrent/torrentbytes/main.py new file mode 100644 index 00000000..d0131875 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentbytes/main.py @@ -0,0 +1,9 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.torrentbytes.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class TorrentBytes(MovieProvider, Base): + pass diff --git a/couchpotato/core/media/movie/providers/torrent/torrentday/__init__.py b/couchpotato/core/media/movie/providers/torrent/torrentday/__init__.py new file mode 100644 index 00000000..0ebf09e0 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentday/__init__.py @@ -0,0 +1,7 @@ +from .main import TorrentDay + + +def start(): + return TorrentDay() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/torrentday/main.py b/couchpotato/core/media/movie/providers/torrent/torrentday/main.py new file mode 100644 index 00000000..566b0380 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentday/main.py @@ -0,0 +1,18 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.event import fireEvent +from couchpotato.core.media._base.providers.torrent.torrentday.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class TorrentDay(MovieProvider, Base): + + cat_ids = [ + ([11], ['720p', '1080p']), + ([1, 21, 25], ['cam', 'ts', 'dvdrip', 'tc', 'r5', 'scr', 'brrip']), + ([3], ['dvdr']), + ([5], ['bd50']), + ] + def buildUrl(self, media): + return fireEvent('library.query', media, single = True) diff --git a/couchpotato/core/media/movie/providers/torrent/torrentleech/__init__.py b/couchpotato/core/media/movie/providers/torrent/torrentleech/__init__.py new file mode 100644 index 00000000..afb8f1e6 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentleech/__init__.py @@ -0,0 +1,7 @@ +from .main import TorrentLeech + + +def start(): + return TorrentLeech() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/torrentleech/main.py b/couchpotato/core/media/movie/providers/torrent/torrentleech/main.py new file mode 100644 index 00000000..3b6b858d --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentleech/main.py @@ -0,0 +1,25 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.torrentleech.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class TorrentLeech(MovieProvider, Base): + + cat_ids = [ + ([13], ['720p', '1080p']), + ([8], ['cam']), + ([9], ['ts', 'tc']), + ([10], ['r5', 'scr']), + ([11], ['dvdrip']), + ([14], ['brrip']), + ([12], ['dvdr']), + ] + + def buildUrl(self, media, quality): + return ( + tryUrlencode(fireEvent('library.query', media, single = True)), + self.getCatId(quality['identifier'])[0] + ) diff --git a/couchpotato/core/media/movie/providers/torrent/torrentpotato/__init__.py b/couchpotato/core/media/movie/providers/torrent/torrentpotato/__init__.py new file mode 100644 index 00000000..58b9d7b2 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentpotato/__init__.py @@ -0,0 +1,7 @@ +from .main import TorrentPotato + + +def start(): + return TorrentPotato() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/torrentpotato/main.py b/couchpotato/core/media/movie/providers/torrent/torrentpotato/main.py new file mode 100644 index 00000000..a2ddae88 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentpotato/main.py @@ -0,0 +1,17 @@ +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.torrentpotato.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class TorrentPotato(MovieProvider, Base): + + def buildUrl(self, media, host): + arguments = tryUrlencode({ + 'user': host['name'], + 'passkey': host['pass_key'], + 'imdbid': media['identifier'] + }) + return '%s?%s' % (host['host'], arguments) diff --git a/couchpotato/core/media/movie/providers/torrent/torrentshack/__init__.py b/couchpotato/core/media/movie/providers/torrent/torrentshack/__init__.py new file mode 100644 index 00000000..7448a47c --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentshack/__init__.py @@ -0,0 +1,7 @@ +from .main import TorrentShack + + +def start(): + return TorrentShack() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/torrentshack/main.py b/couchpotato/core/media/movie/providers/torrent/torrentshack/main.py new file mode 100644 index 00000000..9e01475b --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/torrentshack/main.py @@ -0,0 +1,34 @@ +from couchpotato.core.event import fireEvent +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.torrentshack.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class TorrentShack(MovieProvider, Base): + + # TorrentShack movie search categories + # Movies/x264 - 300 + # Movies/DVD-R - 350 + # Movies/XviD - 400 + # Full Blu-ray - 970 + # + # REMUX - 320 (not included) + # Movies-HD Pack - 982 (not included) + # Movies-SD Pack - 983 (not included) + + cat_ids = [ + ([970], ['bd50']), + ([300], ['720p', '1080p']), + ([350], ['dvdr']), + ([400], ['brrip', 'dvdrip']), + ] + cat_backup_id = 400 + + def buildUrl(self, media, quality): + query = (tryUrlencode(fireEvent('library.query', media, single = True)), + self.getCatId(quality['identifier'])[0], + self.getSceneOnly()) + return query diff --git a/couchpotato/core/media/movie/providers/torrent/yify/__init__.py b/couchpotato/core/media/movie/providers/torrent/yify/__init__.py new file mode 100644 index 00000000..ac9baa2d --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/yify/__init__.py @@ -0,0 +1,7 @@ +from .main import Yify + + +def start(): + return Yify() + +config = [] diff --git a/couchpotato/core/media/movie/providers/torrent/yify/main.py b/couchpotato/core/media/movie/providers/torrent/yify/main.py new file mode 100644 index 00000000..24ee8ea7 --- /dev/null +++ b/couchpotato/core/media/movie/providers/torrent/yify/main.py @@ -0,0 +1,9 @@ +from couchpotato.core.logger import CPLog +from couchpotato.core.media._base.providers.torrent.yify.main import Base +from couchpotato.core.media.movie.providers.base import MovieProvider + +log = CPLog(__name__) + + +class Yify(MovieProvider, Base): + pass diff --git a/couchpotato/core/media/movie/providers/trailer/__init__.py b/couchpotato/core/media/movie/providers/trailer/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/couchpotato/core/media/_base/providers/trailer/base.py b/couchpotato/core/media/movie/providers/trailer/base.py similarity index 78% rename from couchpotato/core/media/_base/providers/trailer/base.py rename to couchpotato/core/media/movie/providers/trailer/base.py index 338ca9b3..c1a6f71d 100644 --- a/couchpotato/core/media/_base/providers/trailer/base.py +++ b/couchpotato/core/media/movie/providers/trailer/base.py @@ -1,6 +1,6 @@ from couchpotato.core.event import addEvent from couchpotato.core.logger import CPLog -from couchpotato.core.providers.base import Provider +from couchpotato.core.media._base.providers.base import Provider log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/trailer/hdtrailers/__init__.py b/couchpotato/core/media/movie/providers/trailer/hdtrailers/__init__.py similarity index 100% rename from couchpotato/core/media/_base/providers/trailer/hdtrailers/__init__.py rename to couchpotato/core/media/movie/providers/trailer/hdtrailers/__init__.py diff --git a/couchpotato/core/media/_base/providers/trailer/hdtrailers/main.py b/couchpotato/core/media/movie/providers/trailer/hdtrailers/main.py similarity index 98% rename from couchpotato/core/media/_base/providers/trailer/hdtrailers/main.py rename to couchpotato/core/media/movie/providers/trailer/hdtrailers/main.py index 6af83ac7..ea2fe95d 100644 --- a/couchpotato/core/media/_base/providers/trailer/hdtrailers/main.py +++ b/couchpotato/core/media/movie/providers/trailer/hdtrailers/main.py @@ -2,10 +2,10 @@ from bs4 import SoupStrainer, BeautifulSoup from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.variable import mergeDicts, getTitle from couchpotato.core.logger import CPLog -from couchpotato.core.providers.trailer.base import TrailerProvider from string import digits, ascii_letters from urllib2 import HTTPError import re +from couchpotato.core.media.movie.providers.trailer.base import TrailerProvider log = CPLog(__name__) diff --git a/couchpotato/core/media/movie/providers/userscript/__init__.py b/couchpotato/core/media/movie/providers/userscript/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/couchpotato/core/media/_base/providers/userscript/allocine/__init__.py b/couchpotato/core/media/movie/providers/userscript/allocine/__init__.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/allocine/__init__.py rename to couchpotato/core/media/movie/providers/userscript/allocine/__init__.py index cb2ba992..d272a7f9 100644 --- a/couchpotato/core/media/_base/providers/userscript/allocine/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/allocine/__init__.py @@ -3,5 +3,3 @@ from .main import AlloCine def start(): return AlloCine() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/allocine/main.py b/couchpotato/core/media/movie/providers/userscript/allocine/main.py similarity index 90% rename from couchpotato/core/media/_base/providers/userscript/allocine/main.py rename to couchpotato/core/media/movie/providers/userscript/allocine/main.py index f8ca630d..c3400ee4 100644 --- a/couchpotato/core/media/_base/providers/userscript/allocine/main.py +++ b/couchpotato/core/media/movie/providers/userscript/allocine/main.py @@ -1,6 +1,6 @@ from couchpotato.core.logger import CPLog -from couchpotato.core.providers.userscript.base import UserscriptBase import traceback +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/userscript/appletrailers/__init__.py b/couchpotato/core/media/movie/providers/userscript/appletrailers/__init__.py similarity index 85% rename from couchpotato/core/media/_base/providers/userscript/appletrailers/__init__.py rename to couchpotato/core/media/movie/providers/userscript/appletrailers/__init__.py index 075217a8..28eedbbd 100644 --- a/couchpotato/core/media/_base/providers/userscript/appletrailers/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/appletrailers/__init__.py @@ -3,5 +3,3 @@ from .main import AppleTrailers def start(): return AppleTrailers() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/appletrailers/main.py b/couchpotato/core/media/movie/providers/userscript/appletrailers/main.py similarity index 85% rename from couchpotato/core/media/_base/providers/userscript/appletrailers/main.py rename to couchpotato/core/media/movie/providers/userscript/appletrailers/main.py index 693065d1..41b72c4d 100644 --- a/couchpotato/core/media/_base/providers/userscript/appletrailers/main.py +++ b/couchpotato/core/media/movie/providers/userscript/appletrailers/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase import re diff --git a/couchpotato/core/media/_base/providers/userscript/criticker/__init__.py b/couchpotato/core/media/movie/providers/userscript/criticker/__init__.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/criticker/__init__.py rename to couchpotato/core/media/movie/providers/userscript/criticker/__init__.py index ae24aa1e..550855ea 100644 --- a/couchpotato/core/media/_base/providers/userscript/criticker/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/criticker/__init__.py @@ -3,5 +3,3 @@ from .main import Criticker def start(): return Criticker() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/criticker/main.py b/couchpotato/core/media/movie/providers/userscript/criticker/main.py similarity index 51% rename from couchpotato/core/media/_base/providers/userscript/criticker/main.py rename to couchpotato/core/media/movie/providers/userscript/criticker/main.py index 680d9a36..7ab63c98 100644 --- a/couchpotato/core/media/_base/providers/userscript/criticker/main.py +++ b/couchpotato/core/media/movie/providers/userscript/criticker/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase class Criticker(UserscriptBase): diff --git a/couchpotato/core/media/_base/providers/userscript/filmweb/__init__.py b/couchpotato/core/media/movie/providers/userscript/filmweb/__init__.py similarity index 82% rename from couchpotato/core/media/_base/providers/userscript/filmweb/__init__.py rename to couchpotato/core/media/movie/providers/userscript/filmweb/__init__.py index 3098610c..38354b45 100644 --- a/couchpotato/core/media/_base/providers/userscript/filmweb/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/filmweb/__init__.py @@ -3,5 +3,3 @@ from .main import Filmweb def start(): return Filmweb() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/filmweb/main.py b/couchpotato/core/media/movie/providers/userscript/filmweb/main.py similarity index 89% rename from couchpotato/core/media/_base/providers/userscript/filmweb/main.py rename to couchpotato/core/media/movie/providers/userscript/filmweb/main.py index 66c5fcdb..18e5d303 100644 --- a/couchpotato/core/media/_base/providers/userscript/filmweb/main.py +++ b/couchpotato/core/media/movie/providers/userscript/filmweb/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase import re diff --git a/couchpotato/core/media/_base/providers/userscript/flickchart/__init__.py b/couchpotato/core/media/movie/providers/userscript/flickchart/__init__.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/flickchart/__init__.py rename to couchpotato/core/media/movie/providers/userscript/flickchart/__init__.py index 18a88ffe..5ff48e54 100644 --- a/couchpotato/core/media/_base/providers/userscript/flickchart/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/flickchart/__init__.py @@ -3,5 +3,3 @@ from .main import Flickchart def start(): return Flickchart() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/flickchart/main.py b/couchpotato/core/media/movie/providers/userscript/flickchart/main.py similarity index 90% rename from couchpotato/core/media/_base/providers/userscript/flickchart/main.py rename to couchpotato/core/media/movie/providers/userscript/flickchart/main.py index a66bd38f..6c2837bf 100644 --- a/couchpotato/core/media/_base/providers/userscript/flickchart/main.py +++ b/couchpotato/core/media/movie/providers/userscript/flickchart/main.py @@ -1,6 +1,6 @@ from couchpotato.core.event import fireEvent from couchpotato.core.logger import CPLog -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase import traceback log = CPLog(__name__) diff --git a/couchpotato/core/media/_base/providers/userscript/imdb/__init__.py b/couchpotato/core/media/movie/providers/userscript/imdb/__init__.py similarity index 81% rename from couchpotato/core/media/_base/providers/userscript/imdb/__init__.py rename to couchpotato/core/media/movie/providers/userscript/imdb/__init__.py index c25319b7..e310cc31 100644 --- a/couchpotato/core/media/_base/providers/userscript/imdb/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/imdb/__init__.py @@ -3,5 +3,3 @@ from .main import IMDB def start(): return IMDB() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/imdb/main.py b/couchpotato/core/media/movie/providers/userscript/imdb/main.py similarity index 76% rename from couchpotato/core/media/_base/providers/userscript/imdb/main.py rename to couchpotato/core/media/movie/providers/userscript/imdb/main.py index 2a6efd6b..14363933 100644 --- a/couchpotato/core/media/_base/providers/userscript/imdb/main.py +++ b/couchpotato/core/media/movie/providers/userscript/imdb/main.py @@ -1,6 +1,6 @@ from couchpotato.core.event import fireEvent from couchpotato.core.helpers.variable import getImdb -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase class IMDB(UserscriptBase): diff --git a/couchpotato/core/media/_base/providers/userscript/letterboxd/__init__.py b/couchpotato/core/media/movie/providers/userscript/letterboxd/__init__.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/letterboxd/__init__.py rename to couchpotato/core/media/movie/providers/userscript/letterboxd/__init__.py index 2fd89000..78ef77b4 100644 --- a/couchpotato/core/media/_base/providers/userscript/letterboxd/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/letterboxd/__init__.py @@ -3,5 +3,3 @@ from .main import Letterboxd def start(): return Letterboxd() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/letterboxd/main.py b/couchpotato/core/media/movie/providers/userscript/letterboxd/main.py similarity index 50% rename from couchpotato/core/media/_base/providers/userscript/letterboxd/main.py rename to couchpotato/core/media/movie/providers/userscript/letterboxd/main.py index c0d91d79..852c1b79 100644 --- a/couchpotato/core/media/_base/providers/userscript/letterboxd/main.py +++ b/couchpotato/core/media/movie/providers/userscript/letterboxd/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase class Letterboxd(UserscriptBase): diff --git a/couchpotato/core/media/_base/providers/userscript/moviemeter/__init__.py b/couchpotato/core/media/movie/providers/userscript/moviemeter/__init__.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/moviemeter/__init__.py rename to couchpotato/core/media/movie/providers/userscript/moviemeter/__init__.py index 7a05a75a..aae8ca71 100644 --- a/couchpotato/core/media/_base/providers/userscript/moviemeter/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/moviemeter/__init__.py @@ -3,5 +3,3 @@ from .main import MovieMeter def start(): return MovieMeter() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/moviemeter/main.py b/couchpotato/core/media/movie/providers/userscript/moviemeter/main.py similarity index 58% rename from couchpotato/core/media/_base/providers/userscript/moviemeter/main.py rename to couchpotato/core/media/movie/providers/userscript/moviemeter/main.py index 3593d432..f1b254fc 100644 --- a/couchpotato/core/media/_base/providers/userscript/moviemeter/main.py +++ b/couchpotato/core/media/movie/providers/userscript/moviemeter/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase class MovieMeter(UserscriptBase): diff --git a/couchpotato/core/media/_base/providers/userscript/moviesio/__init__.py b/couchpotato/core/media/movie/providers/userscript/moviesio/__init__.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/moviesio/__init__.py rename to couchpotato/core/media/movie/providers/userscript/moviesio/__init__.py index e29e8d08..3f0497fc 100644 --- a/couchpotato/core/media/_base/providers/userscript/moviesio/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/moviesio/__init__.py @@ -3,5 +3,3 @@ from .main import MoviesIO def start(): return MoviesIO() - -config = [] diff --git a/couchpotato/core/media/movie/providers/userscript/moviesio/main.py b/couchpotato/core/media/movie/providers/userscript/moviesio/main.py new file mode 100644 index 00000000..a466baf9 --- /dev/null +++ b/couchpotato/core/media/movie/providers/userscript/moviesio/main.py @@ -0,0 +1,6 @@ +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase + + +class MoviesIO(UserscriptBase): + + includes = ['*://movies.io/m/*'] diff --git a/couchpotato/core/media/_base/providers/userscript/reddit/__init__.py b/couchpotato/core/media/movie/providers/userscript/reddit/__init__.py similarity index 82% rename from couchpotato/core/media/_base/providers/userscript/reddit/__init__.py rename to couchpotato/core/media/movie/providers/userscript/reddit/__init__.py index a74bbf0d..d803bb54 100644 --- a/couchpotato/core/media/_base/providers/userscript/reddit/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/reddit/__init__.py @@ -3,5 +3,3 @@ from .main import Reddit def start(): return Reddit() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/reddit/main.py b/couchpotato/core/media/movie/providers/userscript/reddit/main.py similarity index 85% rename from couchpotato/core/media/_base/providers/userscript/reddit/main.py rename to couchpotato/core/media/movie/providers/userscript/reddit/main.py index 9790f6e2..ec59e69a 100644 --- a/couchpotato/core/media/_base/providers/userscript/reddit/main.py +++ b/couchpotato/core/media/movie/providers/userscript/reddit/main.py @@ -1,6 +1,6 @@ from couchpotato import fireEvent from couchpotato.core.helpers.variable import splitString -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase class Reddit(UserscriptBase): diff --git a/couchpotato/core/media/_base/providers/userscript/rottentomatoes/__init__.py b/couchpotato/core/media/movie/providers/userscript/rottentomatoes/__init__.py similarity index 85% rename from couchpotato/core/media/_base/providers/userscript/rottentomatoes/__init__.py rename to couchpotato/core/media/movie/providers/userscript/rottentomatoes/__init__.py index 363f103e..b041d5a1 100644 --- a/couchpotato/core/media/_base/providers/userscript/rottentomatoes/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/rottentomatoes/__init__.py @@ -3,5 +3,3 @@ from .main import RottenTomatoes def start(): return RottenTomatoes() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/rottentomatoes/main.py b/couchpotato/core/media/movie/providers/userscript/rottentomatoes/main.py similarity index 92% rename from couchpotato/core/media/_base/providers/userscript/rottentomatoes/main.py rename to couchpotato/core/media/movie/providers/userscript/rottentomatoes/main.py index 0b16a441..0b3145e0 100644 --- a/couchpotato/core/media/_base/providers/userscript/rottentomatoes/main.py +++ b/couchpotato/core/media/movie/providers/userscript/rottentomatoes/main.py @@ -1,5 +1,5 @@ from couchpotato.core.logger import CPLog -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase import re import traceback diff --git a/couchpotato/core/media/_base/providers/userscript/sharethe/__init__.py b/couchpotato/core/media/movie/providers/userscript/sharethe/__init__.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/sharethe/__init__.py rename to couchpotato/core/media/movie/providers/userscript/sharethe/__init__.py index 3cf393af..cf553da7 100644 --- a/couchpotato/core/media/_base/providers/userscript/sharethe/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/sharethe/__init__.py @@ -3,5 +3,3 @@ from .main import ShareThe def start(): return ShareThe() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/sharethe/main.py b/couchpotato/core/media/movie/providers/userscript/sharethe/main.py similarity index 58% rename from couchpotato/core/media/_base/providers/userscript/sharethe/main.py rename to couchpotato/core/media/movie/providers/userscript/sharethe/main.py index d22b67eb..ce11229a 100644 --- a/couchpotato/core/media/_base/providers/userscript/sharethe/main.py +++ b/couchpotato/core/media/movie/providers/userscript/sharethe/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase class ShareThe(UserscriptBase): diff --git a/couchpotato/core/media/_base/providers/userscript/tmdb/__init__.py b/couchpotato/core/media/movie/providers/userscript/tmdb/__init__.py similarity index 81% rename from couchpotato/core/media/_base/providers/userscript/tmdb/__init__.py rename to couchpotato/core/media/movie/providers/userscript/tmdb/__init__.py index c77330c3..609f364f 100644 --- a/couchpotato/core/media/_base/providers/userscript/tmdb/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/tmdb/__init__.py @@ -3,5 +3,3 @@ from .main import TMDB def start(): return TMDB() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/tmdb/main.py b/couchpotato/core/media/movie/providers/userscript/tmdb/main.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/tmdb/main.py rename to couchpotato/core/media/movie/providers/userscript/tmdb/main.py index b718fc3b..9638bea4 100644 --- a/couchpotato/core/media/_base/providers/userscript/tmdb/main.py +++ b/couchpotato/core/media/movie/providers/userscript/tmdb/main.py @@ -1,5 +1,5 @@ from couchpotato.core.event import fireEvent -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase import re diff --git a/couchpotato/core/media/_base/providers/userscript/trakt/__init__.py b/couchpotato/core/media/movie/providers/userscript/trakt/__init__.py similarity index 81% rename from couchpotato/core/media/_base/providers/userscript/trakt/__init__.py rename to couchpotato/core/media/movie/providers/userscript/trakt/__init__.py index 39c17c32..ddba4408 100644 --- a/couchpotato/core/media/_base/providers/userscript/trakt/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/trakt/__init__.py @@ -3,5 +3,3 @@ from .main import Trakt def start(): return Trakt() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/trakt/main.py b/couchpotato/core/media/movie/providers/userscript/trakt/main.py similarity index 68% rename from couchpotato/core/media/_base/providers/userscript/trakt/main.py rename to couchpotato/core/media/movie/providers/userscript/trakt/main.py index 43e06dee..17cfdddc 100644 --- a/couchpotato/core/media/_base/providers/userscript/trakt/main.py +++ b/couchpotato/core/media/movie/providers/userscript/trakt/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase class Trakt(UserscriptBase): diff --git a/couchpotato/core/media/_base/providers/userscript/whiwa/__init__.py b/couchpotato/core/media/movie/providers/userscript/whiwa/__init__.py similarity index 81% rename from couchpotato/core/media/_base/providers/userscript/whiwa/__init__.py rename to couchpotato/core/media/movie/providers/userscript/whiwa/__init__.py index c8fd3c9d..3b14f477 100644 --- a/couchpotato/core/media/_base/providers/userscript/whiwa/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/whiwa/__init__.py @@ -3,5 +3,3 @@ from .main import WHiWA def start(): return WHiWA() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/whiwa/main.py b/couchpotato/core/media/movie/providers/userscript/whiwa/main.py similarity index 50% rename from couchpotato/core/media/_base/providers/userscript/whiwa/main.py rename to couchpotato/core/media/movie/providers/userscript/whiwa/main.py index 40ffa2a9..e0a01200 100644 --- a/couchpotato/core/media/_base/providers/userscript/whiwa/main.py +++ b/couchpotato/core/media/movie/providers/userscript/whiwa/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase class WHiWA(UserscriptBase): diff --git a/couchpotato/core/media/_base/providers/userscript/youteather/__init__.py b/couchpotato/core/media/movie/providers/userscript/youteather/__init__.py similarity index 83% rename from couchpotato/core/media/_base/providers/userscript/youteather/__init__.py rename to couchpotato/core/media/movie/providers/userscript/youteather/__init__.py index f31e911e..8eb44c79 100644 --- a/couchpotato/core/media/_base/providers/userscript/youteather/__init__.py +++ b/couchpotato/core/media/movie/providers/userscript/youteather/__init__.py @@ -3,5 +3,3 @@ from .main import YouTheater def start(): return YouTheater() - -config = [] diff --git a/couchpotato/core/media/_base/providers/userscript/youteather/main.py b/couchpotato/core/media/movie/providers/userscript/youteather/main.py similarity index 85% rename from couchpotato/core/media/_base/providers/userscript/youteather/main.py rename to couchpotato/core/media/movie/providers/userscript/youteather/main.py index 3efd3686..34c97688 100644 --- a/couchpotato/core/media/_base/providers/userscript/youteather/main.py +++ b/couchpotato/core/media/movie/providers/userscript/youteather/main.py @@ -1,4 +1,4 @@ -from couchpotato.core.providers.userscript.base import UserscriptBase +from couchpotato.core.media._base.providers.userscript.base import UserscriptBase import re class YouTheater(UserscriptBase): diff --git a/couchpotato/core/notifications/base.py b/couchpotato/core/notifications/base.py index 63d2075e..0bfb337c 100644 --- a/couchpotato/core/notifications/base.py +++ b/couchpotato/core/notifications/base.py @@ -1,7 +1,7 @@ from couchpotato.api import addApiView from couchpotato.core.event import addEvent from couchpotato.core.logger import CPLog -from couchpotato.core.providers.base import Provider +from couchpotato.core.media._base.providers.base import Provider from couchpotato.environment import Env log = CPLog(__name__) diff --git a/libs/importlib/__init__.py b/libs/importlib/__init__.py deleted file mode 100644 index ad31a1ac..00000000 --- a/libs/importlib/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Backport of importlib.import_module from 3.x.""" -# While not critical (and in no way guaranteed!), it would be nice to keep this -# code compatible with Python 2.3. -import sys - -def _resolve_name(name, package, level): - """Return the absolute name of the module to be imported.""" - if not hasattr(package, 'rindex'): - raise ValueError("'package' not set to a string") - dot = len(package) - for x in xrange(level, 1, -1): - try: - dot = package.rindex('.', 0, dot) - except ValueError: - raise ValueError("attempted relative import beyond top-level " - "package") - return "%s.%s" % (package[:dot], name) - - -def import_module(name, package=None): - """Import a module. - - The 'package' argument is required when performing a relative import. It - specifies the package to use as the anchor point from which to resolve the - relative import to an absolute import. - - """ - if name.startswith('.'): - if not package: - raise TypeError("relative imports require the 'package' argument") - level = 0 - for character in name: - if character != '.': - break - level += 1 - name = _resolve_name(name[level:], package, level) - __import__(name) - return sys.modules[name]