file_action cleanup
tag ignored/failed/renamed with custom file
This commit is contained in:
@@ -118,7 +118,7 @@ config = [{
|
||||
'default': 'move',
|
||||
'type': 'dropdown',
|
||||
'values': [('Move', 'move'), ('Copy', 'copy'), ('Hard link', 'hardlink'), ('Sym link', 'symlink')],
|
||||
'description': 'Define which kind of file operation you want to use. Before you start using <a href="http://en.wikipedia.org/wiki/Hard_link">hard links</a> or <a href="http://en.wikipedia.org/wiki/Sym_link">sym links</a>, read about thire possible drawbacks.',
|
||||
'description': 'Define which kind of file operation you want to use. Before you start using <a href="http://en.wikipedia.org/wiki/Hard_link">hard links</a> or <a href="http://en.wikipedia.org/wiki/Sym_link">sym links</a>, PLEASE read about their possible drawbacks.',
|
||||
'advanced': True,
|
||||
},
|
||||
{
|
||||
|
||||
@@ -10,8 +10,8 @@ from couchpotato.core.plugins.base import Plugin
|
||||
from couchpotato.core.settings.model import Library, File, Profile, Release, \
|
||||
ReleaseInfo
|
||||
from couchpotato.environment import Env
|
||||
import linktastic.linktastic as linktastic
|
||||
import errno
|
||||
import linktastic.linktastic as linktastic
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
@@ -140,7 +140,8 @@ class Renamer(Plugin):
|
||||
else:
|
||||
log.error('Download ID %s from downloader %s not found in releases', (download_id, downloader))
|
||||
|
||||
groups = fireEvent('scanner.scan', folder = folder if folder else self.conf('from'), files = movie_files, download_info = download_info, single = True)
|
||||
groups = fireEvent('scanner.scan', folder = folder if folder else self.conf('from'),
|
||||
files = movie_files, download_info = download_info, return_ignored = False, single = True)
|
||||
|
||||
destination = self.conf('to')
|
||||
folder_name = self.conf('folder_name')
|
||||
@@ -450,6 +451,9 @@ class Renamer(Plugin):
|
||||
log.error('Failed moving the file "%s" : %s', (os.path.basename(src), traceback.format_exc()))
|
||||
self.tagDir(group, 'failed_rename')
|
||||
|
||||
if self.conf('file_action') != 'move':
|
||||
self.tagDir(group, 'renamed already')
|
||||
|
||||
# Remove matching releases
|
||||
for release in remove_releases:
|
||||
log.debug('Removing release %s', release.identifier)
|
||||
@@ -495,31 +499,23 @@ class Renamer(Plugin):
|
||||
|
||||
return rename_files
|
||||
|
||||
# This adds a file to ignore / tag a release so it is ignored later
|
||||
def tagDir(self, group, tag):
|
||||
|
||||
rename_files = {}
|
||||
ignore_file = None
|
||||
for movie_file in sorted(list(group['files']['movie'])):
|
||||
ignore_file = '%s.ignore' % os.path.splitext(movie_file)[0]
|
||||
break
|
||||
|
||||
if group['dirname']:
|
||||
rename_files[group['parentdir']] = group['parentdir'].replace(group['dirname'], '_%s_%s' % (tag.upper(), group['dirname']))
|
||||
else: # Add it to filename
|
||||
for file_type in group['files']:
|
||||
for rename_me in group['files'][file_type]:
|
||||
filename = os.path.basename(rename_me)
|
||||
rename_files[rename_me] = rename_me.replace(filename, '_%s_%s' % (tag.upper(), filename))
|
||||
text = """This file is from CouchPotato
|
||||
It has marked this release as "%s"
|
||||
This file hides the release from the renamer
|
||||
Remove it if you want it to be renamed (again, or at least let it try again)
|
||||
""" % tag
|
||||
|
||||
for src in rename_files:
|
||||
if rename_files[src]:
|
||||
dst = rename_files[src]
|
||||
log.info('Renaming "%s" to "%s"', (src, dst))
|
||||
if ignore_file:
|
||||
self.createFile(ignore_file, text)
|
||||
|
||||
# Create dir
|
||||
self.makeDir(os.path.dirname(dst))
|
||||
|
||||
try:
|
||||
self.moveFile(src, dst)
|
||||
except:
|
||||
log.error('Failed moving the file "%s" : %s', (os.path.basename(src), traceback.format_exc()))
|
||||
raise
|
||||
|
||||
def moveFile(self, old, dest):
|
||||
dest = ss(dest)
|
||||
|
||||
@@ -101,7 +101,7 @@ class Scanner(Plugin):
|
||||
addEvent('scanner.name_year', self.getReleaseNameYear)
|
||||
addEvent('scanner.partnumber', self.getPartNumber)
|
||||
|
||||
def scan(self, folder = None, files = None, download_info = None, simple = False, newer_than = 0, on_found = None):
|
||||
def scan(self, folder = None, files = None, download_info = None, simple = False, newer_than = 0, return_ignored = True, on_found = None):
|
||||
|
||||
folder = ss(os.path.normpath(folder))
|
||||
|
||||
@@ -177,17 +177,25 @@ class Scanner(Plugin):
|
||||
|
||||
|
||||
# Group files minus extension
|
||||
ignored_identifiers = []
|
||||
for identifier, group in movie_files.iteritems():
|
||||
if identifier not in group['identifiers'] and len(identifier) > 0: group['identifiers'].append(identifier)
|
||||
|
||||
log.debug('Grouping files: %s', identifier)
|
||||
|
||||
has_ignored = 0
|
||||
for file_path in group['unsorted_files']:
|
||||
wo_ext = file_path[:-(len(getExt(file_path)) + 1)]
|
||||
ext = getExt(file_path)
|
||||
wo_ext = file_path[:-(len(ext) + 1)]
|
||||
found_files = set([i for i in leftovers if wo_ext in i])
|
||||
group['unsorted_files'].extend(found_files)
|
||||
leftovers = leftovers - found_files
|
||||
|
||||
has_ignored += 1 if ext == 'ignore' else 0
|
||||
|
||||
if has_ignored > 0:
|
||||
ignored_identifiers.append(identifier)
|
||||
|
||||
# Break if CP wants to shut down
|
||||
if self.shuttingDown():
|
||||
break
|
||||
@@ -327,15 +335,17 @@ class Scanner(Plugin):
|
||||
except:
|
||||
break
|
||||
|
||||
if return_ignored is False and identifier in ignored_identifiers:
|
||||
log.debug('Ignore file found, ignoring release: %s' % identifier)
|
||||
continue
|
||||
|
||||
# Group extra (and easy) files first
|
||||
# images = self.getImages(group['unsorted_files'])
|
||||
group['files'] = {
|
||||
'movie_extra': self.getMovieExtras(group['unsorted_files']),
|
||||
'subtitle': self.getSubtitles(group['unsorted_files']),
|
||||
'subtitle_extra': self.getSubtitlesExtras(group['unsorted_files']),
|
||||
'nfo': self.getNfo(group['unsorted_files']),
|
||||
'trailer': self.getTrailers(group['unsorted_files']),
|
||||
#'backdrop': images['backdrop'],
|
||||
'leftover': set(group['unsorted_files']),
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user