3
from flexget.plugin import register_plugin, priority, PluginError, get_plugin_by_name
4
from flexget.feed import Entry
6
log = logging.getLogger('exists_movie')
9
class FilterExistsMovie(object):
12
Reject existing movies.
16
exists_movie: /storage/movies/
19
skip = ['cd1', 'cd2', 'subs', 'sample']
22
from flexget import validator
23
root = validator.factory()
25
bundle = root.accept('list')
29
def get_config(self, feed):
30
config = feed.config.get('exists_movie', [])
31
# if only a single path is passed turn it into a 1 element list
32
if isinstance(config, basestring):
37
def on_feed_filter(self, feed):
39
log.debug('nothing accepted, aborting')
42
config = self.get_config(feed)
43
imdb_lookup = get_plugin_by_name('imdb_lookup').instance.lookup
46
incompatible_entries = 0
50
# list of imdb urls gathered from paths
54
# with unicode it crashes on some paths ..
55
path = str(os.path.expanduser(path))
56
if not os.path.exists(path):
57
log.critical('Path %s does not exist' % path)
60
feed.verbose_progress('Scanning path %s ...' % path, log)
63
for root, dirs, files in os.walk(path):
64
# convert filelists into utf-8 to avoid unicode problems
65
dirs = [x.decode('utf-8', 'ignore') for x in dirs]
66
# files = [x.decode('utf-8', 'ignore') for x in files]
68
# TODO: add also video files?
71
if item.lower() in self.skip:
75
fake_entry['title'] = item
76
fake_entry['url'] = 'file://%s/%s' % (path, item)
78
imdb_lookup(feed, fake_entry)
79
imdb_url = fake_entry['imdb_url']
80
if imdb_url in imdb_urls:
81
log.debugall('duplicate %s' % fake_entry['title'])
83
imdb_urls.append(imdb_url)
84
except PluginError, e:
85
log.debugall('%s lookup failed (%s)' % (fake_entry['title'], e.value))
86
incompatible_dirs += 1
88
log.debug('-- Start filtering entries ----------------------------------')
91
for entry in feed.accepted:
93
if not 'imdb_url' in entry:
95
imdb_lookup(feed, entry)
96
except PluginError, e:
97
log.debugall('entry %s imdb failed (%s)' % (entry['title'], e.value))
98
incompatible_entries += 1
100
if entry['imdb_url'] in imdb_urls:
101
feed.reject(entry, 'movie exists')
103
if incompatible_dirs or incompatible_entries:
104
feed.verbose_progress('There were some incompatible items. %s of %s entries and %s of %s directories could not be verified.' % \
105
(incompatible_entries, count_entries, incompatible_dirs, count_dirs), log)
107
register_plugin(FilterExistsMovie, 'exists_movie', groups=['exists'])