Beispiel #1
0
def on_nzb_added():
    # Clean up any previous runs.
    clean_up()

    # Lock the script from running again.
    nzb.lock_create(SCRIPT_NAME)
    nzbid = nzb.get_nzb_id()

    # Move the last RAR file to the top.
    reorder_queued_items(nzbid)
Beispiel #2
0
def process_download(directory, filename):
    if not os.path.isdir(directory):
        nzb.log_warning('Directory %s does not appear valid.' % directory)

    filepath = os.path.join(directory, filename)
    cache_filepath = get_cache_filepath('%s-contents' % nzb.get_nzb_id())
    contentlist = nzb.get_rar_filelist(filepath)
    filelist = nzb.get_new_files(contentlist, cache_filepath)

    with open(cache_filepath, 'a') as cachefile:
        for file in filelist:
            inspect_rar_content(directory, file)
            cachefile.write(file + '\n')
        cachefile.close()
def clean_up():
    """
    Perform any script cleanup that is required here.
    """
    nzbid = nzb.get_nzb_id()

    # Remove the state file.
    update_filepath = get_update_filepath(nzbid)
    if os.path.isfile(update_filepath):
        os.remove(update_filepath)

    if SCRIPT_STATE == "Debug":
        # Check if the script path has no other files and delete it.
        # NOTE: We can't blindly remove the directory because there might be
        #       other instances waiting for their retries and need the state.
        tempdir = nzb.get_script_tempfolder(SCRIPT_NAME)
        if len(os.path.listdir(tempdir)) == 0:
            os.rmdirs(tempdir)
def on_post_processing():
    # Create a lock so that the scheduler also doesn't try to run.
    nzb.lock_reset(SCRIPT_NAME)

    status = nzb.get_nzb_status()

    if status != "FAILURE/HEALTH":
        nzb.log_detail("Nothing to do, status was %s." % status)
        nzb.exit(nzb.PROCESS_SUCCESS)

    try:
        nzbid = nzb.get_nzb_id()
        nzbname = nzb.get_nzb_name()

        nzb.log_detail("Performing health check on %s (%s)." % (nzbname, status))

        check_limit_age(nzbid, nzbname)
        check_limit_retries(nzbid, nzbname)

        # Stop all other post-processing because we need to requeue the file.
        nzb.log_warning("Pausing %s due to status of %s." % (nzbname, status))
        proxy = nzb.proxy()

        # Pause the file group.
        if not proxy.editqueue("GroupPause", 0, "", [nzbid]):
            reason = "Failed to pause %s (%s)." % (nzbname, nzbid)
            nzb.exit(nzb.PROCESS_FAIL_PROXY, reason)

        # Send the file back to the queue.
        if not proxy.editqueue("HistoryReturn", 0, "", [nzbid]):
            reason = "Failed to requeue %s (%s)." % (nzbname, nzbid)
            nzb.exit(nzb.PROCESS_FAIL_PROXY, reason)
    except Exception as e:
        traceback.print_exc()
        nzb.exit(nzb.PROCESS_ERROR, e)
    finally:
        nzb.lock_release(SCRIPT_NAME)
        clean_up()
Beispiel #5
0
def reject(reason):
    nzbid = nzb.get_nzb_id()
    nzbname = nzb.get_nzb_name()
    nzb.log_error('Rejecting %s. %s.' % (nzbname, reason))

    response = None

    if REJECT_ACTION == 'Pause':
        nzb.log_error('File %s was rejected, pausing download.' % nzbname)
        response = nzb.proxy().editqueue('GroupPause', 0, '', [nzbid])
    elif REJECT_ACTION == 'Bad':
        nzb.log_error('File %s was rejected, marking as bad.' % nzbname)
        nzb.set_nzb_bad()
        response = True
    elif REJECT_ACTION == 'Fail':
        nzb.log_error('File %s was rejected, marking as failed.' % nzbname)
        response = nzb.set_nzb_fail(nzbid)

    if not response:
        nzb.log_error('Failed to apply the reject action.')
        nzb.exit(nzb.PROCESS_ERROR)

    nzb.exit(nzb.PROCESS_ERROR)
Beispiel #6
0
def on_file_downloaded():
    nzbid = nzb.get_nzb_id()

    # Update the file caches and run the inspection methods.
    update_filelist(nzbid)