Exemple #1
0
    def should_process(self, path):
        """
        Determine if a directory should be processed.

        :param path: Path we want to verify
        :return: True if the directory is valid for processing, otherwise False
        :rtype: Boolean
        """
        if not self._is_valid_folder(path):
            return False

        folder = os.path.basename(path)
        if helpers.is_hidden_folder(path) or any(f == folder for f in self.IGNORED_FOLDERS):
            self.log_and_output('Ignoring folder: {folder}', level=logging.DEBUG, **{'folder': folder})
            self.missed_files.append('{0}: Hidden or ignored folder'.format(path))
            return False

        for root, dirs, files in os.walk(path):
            for subfolder in dirs:
                if not self._is_valid_folder(os.path.join(root, subfolder)):
                    return False
            for each_file in files:
                if helpers.is_media_file(each_file) or helpers.is_rar_file(each_file):
                    return True
            # Stop at first subdirectories if post-processing path
            if self.directory == path and not self.resource_name:
                break

        self.log_and_output('No processable items found in folder: {path}', level=logging.DEBUG, **{'path': path})
        return False
Exemple #2
0
    def unpack_rar_files(dirpath):
        """Unpack any existing rar files present in the specified dirpath.

        :param dirpath: the directory path to be used
        :type dirpath: str
        """
        from medusa import process_tv
        for root, _, files in os.walk(dirpath, topdown=False):
            # Skip folders that are being used for unpacking
            if u'_UNPACK' in root.upper():
                continue
            rar_files = [
                rar_file for rar_file in files if is_rar_file(rar_file)
            ]
            if rar_files and app.UNPACK:
                video_files = [
                    video_file for video_file in files
                    if is_media_file(video_file)
                ]
                if not video_files or root == app.TV_DOWNLOAD_DIR:
                    logger.debug(u'Found rar files in post-process folder: %s',
                                 rar_files)
                    process_tv.ProcessResult(app.TV_DOWNLOAD_DIR).unrar(
                        root, rar_files, False)
            elif rar_files and not app.UNPACK:
                logger.warning(u'Unpack is disabled. Skipping: %s', rar_files)
Exemple #3
0
    def should_process(self, path, failed=False):
        """
        Determine if a directory should be processed.

        :param path: Path we want to verify
        :param failed: (optional) Mark the directory as failed
        :return: True if the directory is valid for processing, otherwise False
        :rtype: Boolean
        """
        if not self._is_valid_folder(path, failed):
            return False

        folder = os.path.basename(path)
        if helpers.is_hidden_folder(path) or any(f == folder for f in self.IGNORED_FOLDERS):
            self.log('Ignoring folder: {0}'.format(folder), logger.DEBUG)
            self.missedfiles.append('{0}: Hidden or ignored folder'.format(path))
            return False

        for root, dirs, files in os.walk(path):
            for subfolder in dirs:
                if not self._is_valid_folder(os.path.join(root, subfolder), failed):
                    return False
            for each_file in files:
                if helpers.is_media_file(each_file) or helpers.is_rar_file(each_file):
                    return True
            # Stop at first subdirectories if post-processing path
            if self.directory == path:
                break

        self.log('No processable items found in folder: {0}'.format(path), logger.DEBUG)
        return False
Exemple #4
0
    def should_process(self, path, failed=False):
        """
        Determine if a directory should be processed.

        :param path: Path we want to verify
        :param failed: (optional) Mark the directory as failed
        :return: True if the directory is valid for processing, otherwise False
        :rtype: Boolean
        """
        if not self._is_valid_folder(path, failed):
            return False

        folder = os.path.basename(path)
        if helpers.is_hidden_folder(path) or any(f == folder for f in self.IGNORED_FOLDERS):
            self.log('Ignoring folder: {0}'.format(folder), logger.DEBUG)
            self.missedfiles.append('{0}: Hidden or ignored folder'.format(path))
            return False

        for root, dirs, files in os.walk(path):
            for subfolder in dirs:
                if not self._is_valid_folder(os.path.join(root, subfolder), failed):
                    return False
            for each_file in files:
                if helpers.is_media_file(each_file) or helpers.is_rar_file(each_file):
                    return True
            # Stop at first subdirectories if post-processing path
            if self.directory == path:
                break

        self.log('No processable items found in folder: {0}'.format(path), logger.DEBUG)
        return False
Exemple #5
0
    def prepare_files(self, path, files, force=False):
        """
        Prepare files for post-processing.

        Separate the Rar and Video files. -> self.video_files
            Extract the rar files. -> self.rar_content
            Collect new video files. -> self.video_in_rar
            List unwanted files -> self.unwanted_files
        :param path: Path to start looking for rar/video files.
        :param files: Array of files.
        """
        video_files = []
        rar_files = []
        for each_file in files:
            if helpers.is_media_file(each_file):
                video_files.append(each_file)
            elif helpers.is_rar_file(each_file):
                rar_files.append(each_file)

        rar_content = []
        video_in_rar = []
        if rar_files:
            rar_content = self.unrar(path, rar_files, force)
            files.extend(rar_content)
            video_in_rar = [
                each_file for each_file in rar_content
                if helpers.is_media_file(each_file)
            ]
            video_files.extend(video_in_rar)

        self.log_and_output('Post-processing files: {files}',
                            level=logging.DEBUG,
                            **{'files': files})
        self.log_and_output('Post-processing video files: {video_files}',
                            level=logging.DEBUG,
                            **{'video_files': video_files})

        if rar_content:
            self.log_and_output('Post-processing rar content: {rar_content}',
                                level=logging.DEBUG,
                                **{'rar_content': rar_content})
            self.log_and_output('Post-processing video in rar: {video_in_rar}',
                                level=logging.DEBUG,
                                **{'video_in_rar': video_in_rar})

        unwanted_files = [
            filename for filename in files if filename not in video_files
            and helpers.get_extension(filename) not in self.allowed_extensions
        ]
        if unwanted_files:
            self.log_and_output('Found unwanted files: {unwanted_files}',
                                level=logging.DEBUG,
                                **{'unwanted_files': unwanted_files})

        self.video_files = video_files
        self.rar_content = rar_content
        self.video_in_rar = video_in_rar
        self.unwanted_files = unwanted_files
Exemple #6
0
    def should_process(self, path, failed=False):
        """
        Determine if a directory should be processed.

        :param path: Path we want to verify
        :param failed: (optional) Mark the directory as failed
        :return: True if the directory is valid for processing, otherwise False
        :rtype: Boolean
        """
        folder = os.path.basename(path)
        if folder in self.IGNORED_FOLDERS:
            return False

        if folder.startswith('_FAILED_'):
            self._log('The directory name indicates it failed to extract.',
                      logger.DEBUG)
            failed = True
        elif folder.startswith('_UNDERSIZED_'):
            self._log(
                'The directory name indicates that it was previously rejected for being undersized.',
                logger.DEBUG)
            failed = True
        elif folder.upper().startswith('_UNPACK'):
            self._log(
                'The directory name indicates that this release is in the process of being unpacked.',
                logger.DEBUG)
            self.missedfiles.append('{0}: Being unpacked'.format(folder))
            return False

        if failed:
            self.process_failed(path)
            self.missedfiles.append('{0}: Failed download'.format(folder))
            return False

        if helpers.is_hidden_folder(path):
            self._log('Ignoring hidden folder: {0}'.format(folder),
                      logger.DEBUG)
            self.missedfiles.append('{0}: Hidden folder'.format(folder))
            return False

        for root, dirs, files in os.walk(path):
            for each_file in files:
                if helpers.is_media_file(each_file) or helpers.is_rar_file(
                        each_file):
                    return True
            del root  # unused variable
            del dirs  # unused variable

        self._log('No processable items found in folder: {0}'.format(path),
                  logger.DEBUG)
        return False
Exemple #7
0
    def prepare_files(self, path, files, force=False):
        """Prepare files for post-processing."""
        video_files = []
        rar_files = []
        for each_file in files:
            if helpers.is_media_file(each_file):
                video_files.append(each_file)
            elif helpers.is_rar_file(each_file):
                rar_files.append(each_file)

        rar_content = []
        video_in_rar = []
        if rar_files:
            rar_content = self.unrar(path, rar_files, force)
            files.extend(rar_content)
            video_in_rar = [
                each_file for each_file in rar_content
                if helpers.is_media_file(each_file)
            ]
            video_files.extend(video_in_rar)

        self._log('Post-processing files: {0}'.format(files), logger.DEBUG)
        self._log('Post-processing video files: {0}'.format(video_files),
                  logger.DEBUG)

        if rar_content:
            self._log('Post-processing rar content: {0}'.format(rar_content),
                      logger.DEBUG)
            self._log('Post-processing video in rar: {0}'.format(video_in_rar),
                      logger.DEBUG)

        unwanted_files = [
            filename for filename in files if filename not in video_files
            and helpers.get_extension(filename) not in self.allowed_extensions
        ]
        if unwanted_files:
            self._log('Found unwanted files: {0}'.format(unwanted_files),
                      logger.DEBUG)

        self.video_files = video_files
        self.rar_content = rar_content
        self.video_in_rar = video_in_rar
        self.unwanted_files = unwanted_files
Exemple #8
0
    def unpack_rar_files(dirpath):
        """Unpack any existing rar files present in the specified dirpath.

        :param dirpath: the directory path to be used
        :type dirpath: str
        """
        from medusa import process_tv
        for root, _, files in os.walk(dirpath, topdown=False):
            # Skip folders that are being used for unpacking
            if u'_UNPACK' in root.upper():
                continue
            rar_files = [rar_file for rar_file in files if is_rar_file(rar_file)]
            if rar_files and app.UNPACK:
                video_files = [video_file for video_file in files if is_media_file(video_file)]
                if not video_files or root == app.TV_DOWNLOAD_DIR:
                    logger.debug(u'Found rar files in post-process folder: %s', rar_files)
                    process_tv.ProcessResult(app.TV_DOWNLOAD_DIR).unrar(root, rar_files, False)
            elif rar_files and not app.UNPACK:
                logger.warning(u'Unpack is disabled. Skipping: %s', rar_files)
Exemple #9
0
    def prepare_files(self, path, files, force=False):
        """Prepare files for post-processing."""
        video_files = []
        rar_files = []
        for each_file in files:
            if helpers.is_media_file(each_file):
                video_files.append(each_file)
            elif helpers.is_rar_file(each_file):
                rar_files.append(each_file)

        rar_content = []
        video_in_rar = []
        if rar_files:
            rar_content = self.unrar(path, rar_files, force)
            files.extend(rar_content)
            video_in_rar = [each_file for each_file in rar_content if helpers.is_media_file(each_file)]
            video_files.extend(video_in_rar)

        self.log('Post-processing files: {0}'.format(files), logger.DEBUG)
        self.log('Post-processing video files: {0}'.format(video_files), logger.DEBUG)

        if rar_content:
            self.log('Post-processing rar content: {0}'.format(rar_content), logger.DEBUG)
            self.log('Post-processing video in rar: {0}'.format(video_in_rar), logger.DEBUG)

        unwanted_files = [filename
                          for filename in files
                          if filename not in video_files and
                          helpers.get_extension(filename) not in
                          self.allowed_extensions]
        if unwanted_files:
            self.log('Found unwanted files: {0}'.format(unwanted_files), logger.DEBUG)

        self.video_files = video_files
        self.rar_content = rar_content
        self.video_in_rar = video_in_rar
        self.unwanted_files = unwanted_files