mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2025-08-14 18:47:09 -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.download_info import get_download_info, update_download_info_status
|
||||
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.naming import clean_file_name, is_sample, sanitize_name
|
||||
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
|
||||
|
||||
|
||||
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):
|
||||
logger.info('FLATTEN: Flattening directory: {0}'.format(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))
|
||||
|
||||
|
||||
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):
|
||||
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