예제 #1
0
def unRAR(path, rarFiles):

    global process_result, returnStr

    unpacked_files = []

    if sickbeard.UNPACK and rarFiles:

        returnStr += logHelper(u"Packed Releases detected: " + str(rarFiles), logger.DEBUG)

        for archive in rarFiles:

            returnStr += logHelper(u"Unpacking archive: " + archive, logger.DEBUG)

            try:
                rar_handle = RarFile(os.path.join(path, archive))
                rar_handle.extract(path = path, withSubpath = False, overwrite = False)
                unpacked_files += [os.path.basename(x.filename) for x in rar_handle.infolist() if not x.isdir]
                del rar_handle
            except Exception, e:
                 returnStr += logHelper(u"Failed Unrar archive " + archive + ': ' + ex(e), logger.ERROR)
                 process_result = False
                 continue

        returnStr += logHelper(u"UnRar content: " + str(unpacked_files), logger.DEBUG)
예제 #2
0
def unRAR(path, rarFiles):

    global process_result, returnStr

    unpacked_files = []

    if sickbeard.UNPACK and rarFiles:

        returnStr += logHelper(u"Packed Releases detected: " + str(rarFiles),
                               logger.DEBUG)

        for archive in rarFiles:

            returnStr += logHelper(u"Unpacking archive: " + archive,
                                   logger.DEBUG)

            try:
                rar_handle = RarFile(os.path.join(path, archive))
                rar_handle.extract(path=path,
                                   withSubpath=False,
                                   overwrite=False)
                unpacked_files += [
                    os.path.basename(x.filename)
                    for x in rar_handle.infolist() if not x.isdir
                ]
                del rar_handle
            except Exception, e:
                returnStr += logHelper(
                    u"Failed Unrar archive " + archive + ': ' + ex(e),
                    logger.ERROR)
                process_result = False
                continue

        returnStr += logHelper(u"UnRar content: " + str(unpacked_files),
                               logger.DEBUG)
예제 #3
0
def unRAR(path, rarFiles, force, result):

    unpacked_files = []

    if sickbeard.UNPACK and rarFiles:

        result.output += logHelper(u"Packed Releases detected: " + str(rarFiles), logger.DEBUG)

        for archive in rarFiles:

            result.output += logHelper(u"Unpacking archive: " + archive, logger.DEBUG)

            try:
                rar_handle = RarFile(os.path.join(path, archive))

                # Skip extraction if any file in archive has previously been extracted
                skip_file = False
                for file_in_archive in [os.path.basename(x.filename) for x in rar_handle.infolist() if not x.isdir]:
                    if already_postprocessed(path, file_in_archive, force, result):
                        result.output += logHelper(
                            u"Archive file already post-processed, extraction skipped: " + file_in_archive,
                            logger.DEBUG)
                        skip_file = True
                        break

                if skip_file:
                    continue

                rar_handle.extract(path=path, withSubpath=False, overwrite=False)
                for x in rar_handle.infolist():
                    if not x.isdir:
                        basename = os.path.basename(x.filename)
                        if basename not in unpacked_files:
                            unpacked_files.append(basename)
                del rar_handle
            except Exception, e:
                result.output += logHelper(u"Failed Unrar archive " + archive + ': ' + ex(e), logger.ERROR)
                result.result = False
                continue

        result.output += logHelper(u"UnRar content: " + str(unpacked_files), logger.DEBUG)
예제 #4
0
    def _unrar(self, path, rar_files, force):

        unpacked_files = []

        if sickbeard.UNPACK and rar_files:

            self._log_helper(u'Packed releases detected: ' + str(rar_files))

            for archive in rar_files:

                self._log_helper(u'Unpacking archive: ' + archive)

                try:
                    rar_handle = RarFile(os.path.join(path, archive))

                    # Skip extraction if any file in archive has previously been extracted
                    skip_file = False
                    for file_in_archive in [os.path.basename(x.filename) for x in rar_handle.infolist() if not x.isdir]:
                        if self._already_postprocessed(path, file_in_archive, force):
                            self._log_helper(
                                u'Archive file already processed, extraction skipped: ' + file_in_archive)
                            skip_file = True
                            break

                    if skip_file:
                        continue

                    rar_handle.extract(path=path, withSubpath=False, overwrite=False)
                    unpacked_files += [os.path.basename(x.filename) for x in rar_handle.infolist() if not x.isdir]
                    del rar_handle
                except Exception as e:
                    self._log_helper(u'Failed to unpack archive %s: %s' % (archive, ex(e)), logger.ERROR)
                    self._set_process_success(False)
                    continue

            self._log_helper(u'Unpacked content: ' + str(unpacked_files))

        return unpacked_files
예제 #5
0
def unRAR(path, rarFiles, force, result):

    unpacked_files = []

    if sickbeard.UNPACK and rarFiles:

        result.output += logHelper(
            u"Packed Releases detected: " + str(rarFiles), logger.DEBUG)

        for archive in rarFiles:

            result.output += logHelper(u"Unpacking archive: " + archive,
                                       logger.DEBUG)

            try:
                rar_handle = RarFile(os.path.join(path, archive))

                # Skip extraction if any file in archive has previously been extracted
                skip_file = False
                for file_in_archive in [
                        os.path.basename(x.filename)
                        for x in rar_handle.infolist() if not x.isdir
                ]:
                    if already_postprocessed(path, file_in_archive, force,
                                             result):
                        result.output += logHelper(
                            u"Archive file already post-processed, extraction skipped: "
                            + file_in_archive, logger.DEBUG)
                        skip_file = True
                        break

                if skip_file:
                    continue

                rar_handle.extract(path=path,
                                   withSubpath=False,
                                   overwrite=False)
                for x in rar_handle.infolist():
                    if not x.isdir:
                        basename = os.path.basename(x.filename)
                        if basename not in unpacked_files:
                            unpacked_files.append(basename)
                del rar_handle
            except Exception, e:
                result.output += logHelper(
                    u"Failed Unrar archive " + archive + ': ' + ex(e),
                    logger.ERROR)
                result.result = False
                continue

        result.output += logHelper(u"UnRar content: " + str(unpacked_files),
                                   logger.DEBUG)
예제 #6
0
    def _unrar(self, path, rar_files, force):

        unpacked_files = []

        if sickbeard.UNPACK and rar_files:

            self._log_helper(u'Packed releases detected: ' + str(rar_files))

            for archive in rar_files:

                self._log_helper(u'Unpacking archive: ' + archive)

                try:
                    rar_handle = RarFile(os.path.join(path, archive))

                    # Skip extraction if any file in archive has previously been extracted
                    skip_file = False
                    for file_in_archive in [
                            os.path.basename(x.filename)
                            for x in rar_handle.infolist() if not x.isdir
                    ]:
                        if self._already_postprocessed(path, file_in_archive,
                                                       force):
                            self._log_helper(
                                u'Archive file already processed, extraction skipped: '
                                + file_in_archive)
                            skip_file = True
                            break

                    if skip_file:
                        continue

                    rar_handle.extract(path=path,
                                       withSubpath=False,
                                       overwrite=False)
                    unpacked_files += [
                        os.path.basename(x.filename)
                        for x in rar_handle.infolist() if not x.isdir
                    ]
                    del rar_handle
                except Exception as e:
                    self._log_helper(
                        u'Failed to unpack archive %s: %s' % (archive, ex(e)),
                        logger.ERROR)
                    self._set_process_success(False)
                    continue

            self._log_helper(u'Unpacked content: ' + str(unpacked_files))

        return unpacked_files
예제 #7
0
def unRAR(path, rarFiles, force, result):

    unpacked_files = []

    if sickbeard.UNPACK and rarFiles:

        result.output += logHelper(u"Packed Releases detected: " + str(rarFiles), logger.DEBUG)

        for archive in rarFiles:

            result.output += logHelper(u"Unpacking archive: " + archive, logger.DEBUG)

            try:
                rar_handle = RarFile(os.path.join(path, archive))

                # Skip extraction if any file in archive has previously been extracted
                skip_file = False
                for file_in_archive in [os.path.basename(x.filename) for x in rar_handle.infolist() if not x.isdir]:
                    if already_postprocessed(path, file_in_archive, force, result):
                        result.output += logHelper(
                            u"Archive file already post-processed, extraction skipped: " + file_in_archive,
                            logger.DEBUG)
                        skip_file = True
                        break

                if skip_file:
                    continue

                rar_handle.extract(path=path, withSubpath=False, overwrite=False)
                for x in rar_handle.infolist():
                    if not x.isdir:
                        basename = os.path.basename(x.filename)
                        if basename not in unpacked_files:
                            unpacked_files.append(basename)
                del rar_handle

            except FatalRARError:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: Fatal Error".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Fatal error unpacking archive")
                continue
            except CRCRARError:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: Archive CRC Error".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : CRC error unpacking archive")
                continue
            except IncorrectRARPassword:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: Invalid Password".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Password protected RAR")
                continue
            except NoFileToExtract:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: No file extracted, check the parent folder and destination file permissions.".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Nothing was unpacked (file permissions?)")
                continue
            except GenericRARError:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: Generic Error".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Unpacking Failed with a Generic Error")
                continue
            except Exception, e:
                result.output += logHelper(u"Failed Unrar archive " + archive + ': ' + ex(e), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Unpacking failed for an unknown reason")
                continue

        result.output += logHelper(u"UnRar content: " + str(unpacked_files), logger.DEBUG)
예제 #8
0
def unRAR(path, rarFiles, force, result):

    unpacked_files = []

    if sickbeard.UNPACK and rarFiles:

        result.output += logHelper(u"Packed Releases detected: " + str(rarFiles), logger.DEBUG)

        for archive in rarFiles:

            result.output += logHelper(u"Unpacking archive: " + archive, logger.DEBUG)

            try:
                rar_handle = RarFile(os.path.join(path, archive))

                # Skip extraction if any file in archive has previously been extracted
                skip_file = False
                for file_in_archive in [os.path.basename(x.filename) for x in rar_handle.infolist() if not x.isdir]:
                    if already_postprocessed(path, file_in_archive, force, result):
                        result.output += logHelper(
                            u"Archive file already post-processed, extraction skipped: " + file_in_archive,
                            logger.DEBUG)
                        skip_file = True
                        break

                if skip_file:
                    continue

                rar_handle.extract(path=path, withSubpath=False, overwrite=False)
                for x in rar_handle.infolist():
                    if not x.isdir:
                        basename = os.path.basename(x.filename)
                        if basename not in unpacked_files:
                            unpacked_files.append(basename)
                del rar_handle

            except FatalRARError:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: Fatal Error".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Fatal error unpacking archive")
                continue
            except CRCRARError:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: Archive CRC Error".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : CRC error unpacking archive")
                continue
            except IncorrectRARPassword:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: Invalid Password".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Password protected RAR")
                continue
            except NoFileToExtract:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: No file extracted, check the parent folder and destination file permissions.".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Nothing was unpacked (file permissions?)")
                continue
            except GenericRARError:
                result.output += logHelper(u"Failed Unrar archive {0}: Unrar: Generic Error".format(archive), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Unpacking Failed with a Generic Error")
                continue
            except Exception, e:
                result.output += logHelper(u"Failed Unrar archive " + archive + ': ' + ex(e), logger.ERROR)
                result.result = False
                result.missedfiles.append(archive + " : Unpacking failed for an unknown reason")
                continue

        result.output += logHelper(u"UnRar content: " + str(unpacked_files), logger.DEBUG)