Esempio n. 1
0
    def get_tv_show_file_from_torrent(self, torrent, filter_):
        """
        :param torrent:
        :type torrent: TorrentObject
        :param filter_:
        :type filter_: FileFilter
        :rtype FileItem:
        """
        files = self.torrent_manager.get_torrent_files(torrent.hash)
        rar_filter = FileFilter(".*", ["rar"])
        valid_files = []
        for file_ in files:
            file_item = FileItem.from_filename(file_.name, "")
            if filter_.test(file_item):
                valid_files.append(file_)
            elif rar_filter.test(file_item):
                extracted_file = self.extract_from_rar(
                    filter_,
                    self.torrent_manager.get_torrent_file_path(
                        torrent.name, file_.name))
                if extracted_file is not None:
                    valid_files.append(extracted_file)

        if len(valid_files) == 0:
            # TODO: Make filter parameter "extensions" not hardcoded
            media_filter = FileFilter(".*", ["mkv", "mp4", "avi"])
            for file_ in files:
                if media_filter.test(FileItem.from_filename(file_.name, "")):
                    valid_files.append(file_)
        if len(valid_files) == 0:
            self.logger.info("No valid files found")
            return None
        id_ = 0
        i = 1
        while i < len(valid_files):
            if valid_files[i].size > valid_files[id_].size:
                id_ = i
            i += 1
        self.logger.debug("validFile id_=%d, name=%s", id_,
                          valid_files[id_].name)
        try:
            complete_path = self.torrent_manager.get_torrent_file_path(
                torrent.name, valid_files[id_].name)
        except IOError as e:
            raise
        file_ = FileItem.from_complete_path(complete_path)
        return file_
Esempio n. 2
0
    def get_tv_show_file_from_torrent(self, torrent, filter_):
        """
        :param torrent:
        :type torrent: TorrentObject
        :param filter_:
        :type filter_: FileFilter
        :rtype FileItem:
        """
        files = self.torrent_manager.get_torrent_files(torrent.hash)
        rar_filter = FileFilter(".*", ["rar"])
        valid_files = []
        for file_ in files:
            file_item = FileItem.from_filename(file_.name, "")
            if filter_.test(file_item):
                valid_files.append(file_)
            elif rar_filter.test(file_item):
                extracted_file = self.extract_from_rar(
                    filter_,
                    self.torrent_manager.get_torrent_file_path(torrent.name, file_.name)
                )
                if extracted_file is not None:
                    valid_files.append(extracted_file)

        if len(valid_files) == 0:
            # TODO: Make filter parameter "extensions" not hardcoded
            media_filter = FileFilter(".*", ["mkv", "mp4", "avi"])
            for file_ in files:
                if media_filter.test(FileItem.from_filename(file_.name, "")):
                    valid_files.append(file_)
        if len(valid_files) == 0:
            self.logger.info("No valid files found")
            return None
        id_ = 0
        i = 1
        while i < len(valid_files):
            if valid_files[i].size > valid_files[id_].size:
                id_ = i
            i += 1
        self.logger.debug("validFile id_=%d, name=%s", id_, valid_files[id_].name)
        try:
            complete_path = self.torrent_manager.get_torrent_file_path(torrent.name, valid_files[id_].name)
        except IOError as e:
            raise
        file_ = FileItem.from_complete_path(complete_path)
        return file_