mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2025-08-19 21:03:14 -07:00
Refactor file type detection to utils.files
This commit is contained in:
parent
a074e56629
commit
0cccecb435
2 changed files with 103 additions and 94 deletions
|
@ -18,6 +18,7 @@ from core import extractor, logger
|
||||||
from core.utils import shutil_custom
|
from core.utils import shutil_custom
|
||||||
from core.utils.download_info import get_download_info, update_download_info_status
|
from core.utils.download_info import get_download_info, update_download_info_status
|
||||||
from core.utils.encoding import char_replace, convert_to_ascii
|
from core.utils.encoding import char_replace, convert_to_ascii
|
||||||
|
from core.utils.files import is_archive_file, is_media_file, is_min_size, list_media_files
|
||||||
from core.utils.links import copy_link, replace_links
|
from core.utils.links import copy_link, replace_links
|
||||||
from core.utils.naming import clean_file_name, is_sample, sanitize_name
|
from core.utils.naming import clean_file_name, is_sample, sanitize_name
|
||||||
from core.utils.network import find_download, test_connection, wake_on_lan, wake_up
|
from core.utils.network import find_download, test_connection, wake_on_lan, wake_up
|
||||||
|
@ -148,23 +149,6 @@ def category_search(input_directory, input_name, input_category, root, categorie
|
||||||
return input_directory, input_name, input_category, root
|
return input_directory, input_name, input_category, root
|
||||||
|
|
||||||
|
|
||||||
def is_min_size(input_name, min_size):
|
|
||||||
file_name, file_ext = os.path.splitext(os.path.basename(input_name))
|
|
||||||
|
|
||||||
# audio files we need to check directory size not file size
|
|
||||||
input_size = os.path.getsize(input_name)
|
|
||||||
if file_ext in core.AUDIOCONTAINER:
|
|
||||||
try:
|
|
||||||
input_size = get_dir_size(os.path.dirname(input_name))
|
|
||||||
except Exception:
|
|
||||||
logger.error('Failed to get file size for {0}'.format(input_name), 'MINSIZE')
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Ignore files under a certain size
|
|
||||||
if input_size > min_size * 1048576:
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def flatten(output_destination):
|
def flatten(output_destination):
|
||||||
logger.info('FLATTEN: Flattening directory: {0}'.format(output_destination))
|
logger.info('FLATTEN: Flattening directory: {0}'.format(output_destination))
|
||||||
for outputFile in list_media_files(output_destination):
|
for outputFile in list_media_files(output_destination):
|
||||||
|
@ -345,83 +329,6 @@ def clean_dir(path, section, subsection):
|
||||||
logger.error('Unable to delete directory {0}'.format(path))
|
logger.error('Unable to delete directory {0}'.format(path))
|
||||||
|
|
||||||
|
|
||||||
def is_archive_file(filename):
|
|
||||||
"""Check if the filename is allowed for the Archive"""
|
|
||||||
for regext in core.COMPRESSEDCONTAINER:
|
|
||||||
if regext.search(filename):
|
|
||||||
return regext.split(filename)[0]
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def is_media_file(mediafile, media=True, audio=True, meta=True, archives=True, other=False, otherext=None):
|
|
||||||
if otherext is None:
|
|
||||||
otherext = []
|
|
||||||
|
|
||||||
file_name, file_ext = os.path.splitext(mediafile)
|
|
||||||
|
|
||||||
try:
|
|
||||||
# ignore MAC OS's 'resource fork' files
|
|
||||||
if file_name.startswith('._'):
|
|
||||||
return False
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
if (media and file_ext.lower() in core.MEDIACONTAINER) \
|
|
||||||
or (audio and file_ext.lower() in core.AUDIOCONTAINER) \
|
|
||||||
or (meta and file_ext.lower() in core.METACONTAINER) \
|
|
||||||
or (archives and is_archive_file(mediafile)) \
|
|
||||||
or (other and (file_ext.lower() in otherext or 'all' in otherext)):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def list_media_files(path, min_size=0, delete_ignored=0, media=True, audio=True, meta=True, archives=True, other=False, otherext=None):
|
|
||||||
if otherext is None:
|
|
||||||
otherext = []
|
|
||||||
|
|
||||||
files = []
|
|
||||||
if not os.path.isdir(path):
|
|
||||||
if os.path.isfile(path): # Single file downloads.
|
|
||||||
cur_file = os.path.split(path)[1]
|
|
||||||
if is_media_file(cur_file, media, audio, meta, archives, other, otherext):
|
|
||||||
# Optionally ignore sample files
|
|
||||||
if is_sample(path) or not is_min_size(path, min_size):
|
|
||||||
if delete_ignored == 1:
|
|
||||||
try:
|
|
||||||
os.unlink(path)
|
|
||||||
logger.debug('Ignored file {0} has been removed ...'.format
|
|
||||||
(cur_file))
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
files.append(path)
|
|
||||||
|
|
||||||
return files
|
|
||||||
|
|
||||||
for cur_file in os.listdir(text_type(path)):
|
|
||||||
full_cur_file = os.path.join(path, cur_file)
|
|
||||||
|
|
||||||
# if it's a folder do it recursively
|
|
||||||
if os.path.isdir(full_cur_file) and not cur_file.startswith('.'):
|
|
||||||
files += list_media_files(full_cur_file, min_size, delete_ignored, media, audio, meta, archives, other, otherext)
|
|
||||||
|
|
||||||
elif is_media_file(cur_file, media, audio, meta, archives, other, otherext):
|
|
||||||
# Optionally ignore sample files
|
|
||||||
if is_sample(full_cur_file) or not is_min_size(full_cur_file, min_size):
|
|
||||||
if delete_ignored == 1:
|
|
||||||
try:
|
|
||||||
os.unlink(full_cur_file)
|
|
||||||
logger.debug('Ignored file {0} has been removed ...'.format
|
|
||||||
(cur_file))
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
continue
|
|
||||||
|
|
||||||
files.append(full_cur_file)
|
|
||||||
|
|
||||||
return sorted(files, key=len)
|
|
||||||
|
|
||||||
|
|
||||||
def find_imdbid(dir_name, input_name, omdb_api_key):
|
def find_imdbid(dir_name, input_name, omdb_api_key):
|
||||||
imdbid = None
|
imdbid = None
|
||||||
|
|
||||||
|
|
102
core/utils/files.py
Normal file
102
core/utils/files.py
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
from six import text_type
|
||||||
|
|
||||||
|
import core
|
||||||
|
from core import logger
|
||||||
|
from core.utils.naming import is_sample
|
||||||
|
from core.utils.paths import get_dir_size
|
||||||
|
|
||||||
|
|
||||||
|
def is_min_size(input_name, min_size):
|
||||||
|
file_name, file_ext = os.path.splitext(os.path.basename(input_name))
|
||||||
|
|
||||||
|
# audio files we need to check directory size not file size
|
||||||
|
input_size = os.path.getsize(input_name)
|
||||||
|
if file_ext in core.AUDIOCONTAINER:
|
||||||
|
try:
|
||||||
|
input_size = get_dir_size(os.path.dirname(input_name))
|
||||||
|
except Exception:
|
||||||
|
logger.error('Failed to get file size for {0}'.format(input_name), 'MINSIZE')
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Ignore files under a certain size
|
||||||
|
if input_size > min_size * 1048576:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def is_archive_file(filename):
|
||||||
|
"""Check if the filename is allowed for the Archive"""
|
||||||
|
for regext in core.COMPRESSEDCONTAINER:
|
||||||
|
if regext.search(filename):
|
||||||
|
return regext.split(filename)[0]
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def is_media_file(mediafile, media=True, audio=True, meta=True, archives=True, other=False, otherext=None):
|
||||||
|
if otherext is None:
|
||||||
|
otherext = []
|
||||||
|
|
||||||
|
file_name, file_ext = os.path.splitext(mediafile)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# ignore MAC OS's 'resource fork' files
|
||||||
|
if file_name.startswith('._'):
|
||||||
|
return False
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
if (media and file_ext.lower() in core.MEDIACONTAINER) \
|
||||||
|
or (audio and file_ext.lower() in core.AUDIOCONTAINER) \
|
||||||
|
or (meta and file_ext.lower() in core.METACONTAINER) \
|
||||||
|
or (archives and is_archive_file(mediafile)) \
|
||||||
|
or (other and (file_ext.lower() in otherext or 'all' in otherext)):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def list_media_files(path, min_size=0, delete_ignored=0, media=True, audio=True, meta=True, archives=True, other=False, otherext=None):
|
||||||
|
if otherext is None:
|
||||||
|
otherext = []
|
||||||
|
|
||||||
|
files = []
|
||||||
|
if not os.path.isdir(path):
|
||||||
|
if os.path.isfile(path): # Single file downloads.
|
||||||
|
cur_file = os.path.split(path)[1]
|
||||||
|
if is_media_file(cur_file, media, audio, meta, archives, other, otherext):
|
||||||
|
# Optionally ignore sample files
|
||||||
|
if is_sample(path) or not is_min_size(path, min_size):
|
||||||
|
if delete_ignored == 1:
|
||||||
|
try:
|
||||||
|
os.unlink(path)
|
||||||
|
logger.debug('Ignored file {0} has been removed ...'.format
|
||||||
|
(cur_file))
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
files.append(path)
|
||||||
|
|
||||||
|
return files
|
||||||
|
|
||||||
|
for cur_file in os.listdir(text_type(path)):
|
||||||
|
full_cur_file = os.path.join(path, cur_file)
|
||||||
|
|
||||||
|
# if it's a folder do it recursively
|
||||||
|
if os.path.isdir(full_cur_file) and not cur_file.startswith('.'):
|
||||||
|
files += list_media_files(full_cur_file, min_size, delete_ignored, media, audio, meta, archives, other, otherext)
|
||||||
|
|
||||||
|
elif is_media_file(cur_file, media, audio, meta, archives, other, otherext):
|
||||||
|
# Optionally ignore sample files
|
||||||
|
if is_sample(full_cur_file) or not is_min_size(full_cur_file, min_size):
|
||||||
|
if delete_ignored == 1:
|
||||||
|
try:
|
||||||
|
os.unlink(full_cur_file)
|
||||||
|
logger.debug('Ignored file {0} has been removed ...'.format
|
||||||
|
(cur_file))
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
continue
|
||||||
|
|
||||||
|
files.append(full_cur_file)
|
||||||
|
|
||||||
|
return sorted(files, key=len)
|
Loading…
Add table
Add a link
Reference in a new issue