java.lang.NullPointerException: Cannot get property 'id' on null object

Support for Windows users
Post Reply
ZeroByDivide
Posts: 170
Joined: 16 Dec 2014, 01:39

java.lang.NullPointerException: Cannot get property 'id' on null object

Post by ZeroByDivide »

You told me to make a new thread for this issue so here it is.. the full error that I am recieving is:

Code: Select all

Undefined Variable: java.lang.NullPointerException: Cannot get property 'id' on null object at __script_5d54a20a201c818526556962e6e476a6_506::run in net.filebot.GroovyEngine::eval in net.filebot.cli.ScriptShell::evaluate
java.lang.NullPointerException: Cannot get property 'id' on null object
	at __script_5d54a20a201c818526556962e6e476a6_506.run(__script_5d54a20a201c818526556962e6e476a6_506:13)
	at net.filebot.GroovyEngine.eval(Unknown Source)
	at net.filebot.cli.ScriptShell.evaluate(Unknown Source)
	at net.filebot.cli.ScriptShell.runScript(Unknown Source)
	at net.filebot.cli.ArgumentProcessor.runScript(Unknown Source)
	at net.filebot.cli.ArgumentProcessor.run(Unknown Source)
	at net.filebot.cli.ExecCommand.execute(Unknown Source)
	at net.filebot.cli.CmdlineOperations.applyPostProcess(Unknown Source)
	at net.filebot.cli.CmdlineOperations.renameAll(Unknown Source)
	at net.filebot.cli.CmdlineOperations.renameSeries(Unknown Source)
	at net.filebot.cli.CmdlineOperations.rename(Unknown Source)
	at net.filebot.cli.ScriptShellBaseClass.rename(Unknown Source)
	at __script_aabde465e3413fd214d849b6b09bd0bc_60b0$_run_closure67.doCall(__script_aabde465e3413fd214d849b6b09bd0bc_60b0:429)
	at __script_aabde465e3413fd214d849b6b09bd0bc_60b0.run(__script_aabde465e3413fd214d849b6b09bd0bc_60b0:416)
	at net.filebot.GroovyEngine.eval(Unknown Source)
	at net.filebot.cli.ScriptShell.evaluate(Unknown Source)
	at net.filebot.cli.ScriptShell.runScript(Unknown Source)
	at net.filebot.cli.ArgumentProcessor.runScript(Unknown Source)
	at net.filebot.cli.ArgumentProcessor.run(Unknown Source)
	at net.filebot.Main.main(Unknown Source)

Error (o_O)
I have narrowed it down to at least my call for my sonarr/radarr groovy script, the command that is being called is (replacing "path/to/Update_Sonarr_Radarr.groovy" with the actual path):

Code: Select all

filebot -script path/to/Update_Sonarr_Radarr.groovy --def type={type} id={id}
this is my sonarr/radarr script below:

Code: Select all

// TVDB/TMDB ID
def id = id as int

// Video Type
def type = type

// Sonarr API Configuration
if (type =~ /Episode/) {
    def url = new URL('http://IPADDRESS:PORT')
    def header = ['X-Api-Key': 'APIKEY']

    def sonarrSeriesId = new JsonSlurper()
        .parseText(new URL(url, '/api/v3/series')
            .get(header)
            .text)
        .find {
            it.tvdbId == id
        }.id

    println new URL(url, '/api/v3/command').post(
        JsonOutput.toJson(
            [name: 'rescanSeries', seriesId: sonarrSeriesId]
        ).getBytes('UTF-8'),
        'application/json',
        header
    ).text
}

// Radarr API Configuration
if (type =~ /Movie/) {
    def url = new URL('http://IPADDRESS:PORT')
    def header = ['X-Api-Key': 'APIKEY']

    def radarrMovieId = new JsonSlurper()
        .parseText(new URL(url, '/api/v3/movie')
            .get(header)
            .text)
        .find {
            it.tmdbId == id
        }.id

    println new URL(url, '/api/v3/command').post(
        JsonOutput.toJson(
            [name: 'rescanMovie', movieId: radarrMovieId]
        ).getBytes('UTF-8'),
        'application/json',
        header
    ).text
}
This all has been working just fine up until the recent update to the store version.

if you want the full log let me know even though I posted the full error message above, everything else works just fine minus the above bits now.
ZeroByDivide
Posts: 170
Joined: 16 Dec 2014, 01:39

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by ZeroByDivide »

This is my full command:

Code: Select all

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, re, os.path
import sys
import subprocess
import time

# required args
label, state, title, kind, file, directory = sys.argv[1:7]

# Open age-filter-regex.txt file and read the regex from it for age filter
age_filter = open(os.path.expanduser(os.sep.join(["~", "Dropbox/Public/Filebot/extras/age-filter-regex.txt"])), "r", encoding="utf-8").readline().strip("\n")
match = re.match(age_filter, title)

################################################
### Media file processing script for Filebot ###

# FileBot.
#
# This script is a front-end wrapper for FileBot and the Automated Media Center script.
#
# FileBot - http://www.filebot.net
# Forums - https://www.filebot.net/forums
# Format Expressions - http://www.filebot.net/naming.html
# Command Line Interface - http://www.filebot.net/cli.html
#
# Subtitles are provided by OpenSubtitles.org. An OpenSubtitles.org account is required for this feature to
# function. See http://www.opensubtitles.org/en/newuser to register for an account. Once registered, run "filebot
# -script fn:configure" from a command prompt and follow the instructions.
#
################################################
### OPTIONS (case sensitive)

### Required ###

# Log File.
# Path to log file.
LOGDIR = os.path.expanduser(os.sep.join(["~", "Dropbox/Public/Filebot/logs"]))

# Base destinations to move files, no trailing slash. The subfolder is defined in the format string.
if label == "radarr":
  DESTINATION = "V:/Media"
else:
  DESTINATION = "D:/Media"

# Rename action i.e: move | copy | keeplink | symlink | reflink | hardlink | test
ACTION = "Move"

# Conflict resolution i.e: override | skip | auto | index | fail
CONFLICT = "Override"

# custom formats (use / instead of \ as directory separator)
MOVIEFORMAT = "@/" + os.path.expanduser(os.sep.join(["~", "Dropbox/Public/Filebot/movieFormat.groovy"]))
SERIESFORMAT = "@/" + os.path.expanduser(os.sep.join(["~", "Dropbox/Public/Filebot/seriesFormat.groovy"]))
ANIMEFORMAT = "@/" + os.path.expanduser(os.sep.join(["~", "Dropbox/Public/Filebot/animeFormat.groovy"]))

### Optionals ###

# Minimum Video Length (in milliseconds)
MVLEnabled = "true"
MINLENGTHMS = "300000"

# Minimum File Size (in bytes).
MFSEnabled = "false"
MINFILESIZE = "50000000"

# Age Filter
if match:
  AGE = "age < 5"
elif label == "sonarr":
  AGE = "any{ age < 35 }{ airdate ? true : false }"
else:
  AGE = "any{ age < 80000 }{ airdate ? true : false }"

# Process Music Files
MUSIC = "false"

# Download subtitles for the given languages i.e: en, de, fr, es, ja, zh, ...
SUBEnabled = "false"
SUBTITLES = "en"

# Fetch Artwork/NFO
ARTWORK = "true"

# Generate *.url files and fetch all available backdrops
EXTRAS = "false"

# Tell the given Kodi/XBMN instance to rescan it's library
KODIEnabled = "false"
KODI = "host[:port]"

# Tell the given Plex instance to rescan it's library. Plex Home instances require an authentication token
PLEXEnabled = "true"
PLEX = "localhost:KEY"

# Tell the given Emby/jellyfin instance to rescan it's library
EMBYEnabled = "false"
EMBY = "localhost:"

# Save reports to local filesystem
STOREREPORT = "false"

# Skip extracting file
SKIPEXTRACT = "false"

# Automatically remove empty folders and clutter files that may be left behind after moving the video files, or temporary extracted files after copying
CLEAN = "true"

# Delete archives after extraction
DELETEAFTEREXTRACT = "true"

# Send Rescan Call to Sonarr/radarr (Requires Update_Sonarr_Radarr.groovy script)
# Must go in to groovy script and place API Keys In for both sonarr and radarr
SREnabled = "true"
SonarrRadarr = os.path.expanduser(os.sep.join(["~", "Dropbox/Public/Filebot/Update_Sonarr_Radarr.groovy"]))

### Media file processing script for Filebot ###
################################################

command = [
  "filebot", "-script", "fn:amc",
  "--output", DESTINATION,
  "--action", ACTION,
  "--conflict", CONFLICT,
  "-non-strict",
  "--filter", AGE,
  "--log-file", LOGDIR + "/filebot-amc.log",
  "--def",
  "excludeList=" + LOGDIR + "/filebot-history.log",
  "movieFormat=" + MOVIEFORMAT,
  "seriesFormat=" + SERIESFORMAT,
  "animeFormat=" + ANIMEFORMAT,
  "ut_label=" + label,
  "ut_state=" + state,
  "ut_title=" + title,
  "ut_kind=" + kind,
  "ut_file=" + file,
  "ut_dir=" + directory
]

### Do Not Edit Beyond This Point ###

if MVLEnabled == "true":
  command += ["minLengthMS=" + MINLENGTHMS]
if MFSEnabled == "true":
  command += ["minFileSize=" + MINFILESIZE]
if MUSIC == "true":
  command += ["music=" + MUSIC]
if SUBEnabled == "true":
  command += ["subtitles=" + SUBTITLES]
if ARTWORK == "true":
  command += ["artwork=" + ARTWORK]
if EXTRAS == "true":
  command += ["extras=" + EXTRAS]
if KODIEnabled == "true":
  command += ["kodi=" + KODI]
if PLEXEnabled == "true":
  command += ["plex=" + PLEX]
if EMBYEnabled == "true":
  command += ["emby=" + EMBY]
if STOREREPORT == "true":
  command += ["storeReport=" + STOREREPORT]
if SKIPEXTRACT == "true":
  command += ["skipExtract=" + SKIPEXTRACT]
if CLEAN == "true":
  command += ["clean=" + CLEAN]
if DELETEAFTEREXTRACT == "true":
  command += ["deleteAfterExtract=" + DELETEAFTEREXTRACT]
if label == "anime":
  command += ["animeDB=TheMovieDB::TV"]

# Keep this at the end of the command no matter what
if SREnabled == "true":
  command += ["-exec", "filebot", "-script", SonarrRadarr, "--def", "type={type}", "id={id}"]

# execute command (and hide cmd window)
if label == "other":
  exit()
else:
  time.sleep(60)
  subprocess.run(command, creationflags=0x08000000)
ZeroByDivide
Posts: 170
Joined: 16 Dec 2014, 01:39

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by ZeroByDivide »

Okay so I think I see the problem and a solution now and it's to pertain to what is going on here viewtopic.php?t=13406 specifically you setting the seriesDB default to be seriesDB=TheMovieDB::TV. Though it is strange because it took up until very recent that it finally broke while it shows in thread I linked that you changed the defaults on the 28th of April.. Looks like I'll have to change that back myself to be seriesDB=TheTVDB to get things working correctly again.
User avatar
rednoah
The Source
Posts: 22999
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by rednoah »

Yes, the find() may return null if the ID isn't found and crash, which is good since silently not working would be much worse:

Code: Select all

def sonarrSeriesId = new JsonSlurper()
        .parseText(new URL(url, '/api/v3/series')
            .get(header)
            .text)
        .find {
            it.tvdbId == id
        }.id

:!: The {id} in your -exec expression would indeed be the TheMovieDB/TV ID with the new default configuration.
:idea: Please read the FAQ and How to Request Help.
User avatar
rednoah
The Source
Posts: 22999
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by rednoah »

FileBot r9808 improves upon the Custom Post-Processing Scripts feature with this kind of use case in mind.
:idea: Please read the FAQ and How to Request Help.
ZeroByDivide
Posts: 170
Joined: 16 Dec 2014, 01:39

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by ZeroByDivide »

Sorry I forgot to come back and update on this, things werent really crashing per se when it couldn't find an ID, it still continued on like everything was normal other than just throwing the error in the log and never sending the alert to sonarr to refresh the series becasue of the missing ID, the file still got processed and moved and everything else as expected. I believe the issue that this was/is steming from is that sonarr does not have TMDB ID's in it's json so when the default database ended up getting changed in filebot and the update finally hit me it started throwing the error, due to the fact that it could not match a TMDB ID to anything in sonarr. Easiest solution at this time was to just go in and add "seriesDB=TheTVDB" to my command so that any series would continue to use TVDB instead and I have yet to have a single issue since doing so.

It's nice to see that the next update is going to add better support for custom post-processing scripts, but wouldn't the script for at least sonarr still run into the same issue that I ran into since processing the episode would just spit out a TMDB ID instead of a TVDB due to the default database change (making people have to include the "seriesDB=TheTVDB" to their commands)?

Also going to assume that it'll be as simple as just making a <randomnamehere>.groovy file with the following:

Code: Select all

def radarrHost = '127.0.0.1'
def radarrPort = 8310
def radarrAuth = 'YOUR_API_KEY'

def sonarrHost = '127.0.0.1'
def sonarrPort = 8989
def sonarrAuth = 'YOUR_API_KEY'
 
def radarrids = model.findAll{ it.type =~ /Movie/ }.findResults{ it.tmdbId } as Set
def sonarrids = model.findAll{ it.type =~ /Episode/ }.findResults{ it.tvdbId } as Set

radarrids.each{ id ->
	def r = curl "http://${radarrHost}:${radarrPort}/api/v3/movie?tmdbId=${id}", 'X-Api-Key': radarrAuth
	r.each{ m ->
		curl "http://${radarrHost}:${radarrPort}/api/v3/command", [name: 'rescanMovie', movieId: m.id], 'X-Api-Key': radarrAuth
	}
}

sonarrids.each{ id ->
	def r = curl "http://${sonarrHost}:${sonarrPort}/api/v3/series?tvdbId=${id}", 'X-Api-Key': sonarrAuth
	r.each{ s ->
		curl "http://${sonarrHost}:${sonarrPort}/api/v3/command", [name: 'rescanSeries', seriesId: s.id], 'X-Api-Key': sonarrAuth
	}
}
(obviously without any optimizations to the code being done yet) and then change the following in my python script:

Code: Select all

if SREnabled:
    command += ["-exec", "filebot", "-script", /path/to/<randomnamehere>.groovy, "--def", "type={type}", "id={id}"]
to instead just be

Code: Select all

if SREnabled:
    command += ["--apply", /path/to/<randomnamehere>.groovy]
User avatar
rednoah
The Source
Posts: 22999
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by rednoah »

ZeroByDivide wrote: 21 Jun 2023, 23:57 It's nice to see that the next update is going to add better support for custom post-processing scripts, but wouldn't the script for at least sonarr still run into the same issue that I ran into since processing the episode would just spit out a TMDB ID instead of a TVDB due to the default database change (making people have to include the "seriesDB=TheTVDB" to their commands)?
The newly added {tvdbId} binding will always give you the TheTVDB ID. If {id} is the TheMovieDB/TV ID, then FileBot may implicitly do additional API requests to find the corresponding TheTVDB ID. Kinda like how {tmdbId} will always give you the TheMovieDB/TV ID even if you're working with TheTVDB as primary database except in reverse.


You can indeed use the --apply option to add one or more scripts:

Shell: Select all

--apply "/path/to/apply-script.groovy"

Shell: Select all

--apply "/path/to/sonarr.groovy" "/path/to/radarr.groovy"
:idea: Please read the FAQ and How to Request Help.
ZeroByDivide
Posts: 170
Joined: 16 Dec 2014, 01:39

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by ZeroByDivide »

Hmm I think I understand fully, when do you think these updates will possibly be hitting the windows store version by chance? as that is where my version of filebot comes from and would love to get my hands onto those changes to test things out.
User avatar
rednoah
The Source
Posts: 22999
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by rednoah »

You can use the latest revision for testing:
viewtopic.php?t=1609

Please PM me with your email address if you need a license key for testing.
:idea: Please read the FAQ and How to Request Help.
ZeroByDivide
Posts: 170
Joined: 16 Dec 2014, 01:39

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by ZeroByDivide »

So I updated to the beta version and removed all traces of the windows store version and everything, even checked to make sure that the filebot command was running on the beta version and it is going by:

Code: Select all

FileBot 5.0.3 (r9827)
JNA Native: 6.1.4
MediaInfo: 22.12
7-Zip-JBinding: 16.02
Tools: fpcalc/1.5.0
Extended Attributes: OK
Unicode Filesystem: OK
Script Bundle: 2023-05-23 (r904)
Groovy: 4.0.11
JRE: OpenJDK Runtime Environment 17.0.7
JVM: OpenJDK 64-Bit Server VM
FILEBOT_OPTS: -Dnet.filebot.web.WebRequest.v1=true
CPU/MEM: 16 Core / 8 GB Max Memory / 114 MB Used Memory
OS: Windows 11 (amd64)
HW: MSYS_NT-10.0-22621 BunniPC 3.3.6-bec3d608-341.x86_64 2023-02-22 08:29 UTC x86_64 Msys
STORAGE: NTFS [Alpha] @ 1.7 TB | NTFS [Beta] @ 2.6 TB | NTFS [Gamma] @ 2.0 TB | NTFS [Delta] @ 661 GB | NTFS [Epsilon] @ 239 GB | NTFS [(TBD)] @ 999 GB | FAT32 [BACKUP] @ 8 GB | NTFS [DRIVE] @ 648 GB | NTFS [HOME] @ 86 GB | NTFS [ROOT] @ 86 GB | NTFS [MEDIA] @ 1.2 TB | NTFS [USB] @ 15 GB | NTFS [HOME] @ 17 GB | NTFS [ROOT] @ 17 GB | NTFS [USB] @ 3.7 GB
DATA: C:\Users\JourneyOver\scoop\apps\filebot-beta\current\data
Package: ZIP
License: FileBot License T1407 (Valid-Until: 2024-06-29)
Done ?(?????)?
anyways I messed around with the post-processing script thing and for some reason I can't get the sonarr refresh to work at all. whenever my script runs and gets to the sonarr refresh script it throws an error:

Code: Select all

[SCRIPT] Run Script (C:\Users\JourneyOver\Dropbox\Public\Filebot\modules\scripts\refresh-sonarr.groovy)
[SCRIPT] GET http://localhost:8989/api/v3/series?tvdbId=262754 (C:\Users\JourneyOver\Dropbox\Public\Filebot\modules\scripts\refresh-sonarr.groovy)
[SCRIPT] javax.script.ScriptException: java.lang.NullPointerException: Cannot invoke "String.toLowerCase(java.util.Locale)" because "<parameter2>" is null (C:\Users\JourneyOver\Dropbox\Public\Filebot\modules\scripts\refresh-sonarr.groovy)
not sure where this error is coming from exactly or what is causing it as it's copy/pasted exactly like the above code you provided except changed host to "localhost" and obviously added in my API key.

Code: Select all

def host = 'localhost'
def port = 8989
def auth = 'PLACEDMYSONARRAPIKEYHERE'

def ids = model.findAll{ it.type =~ /Episode/ }.findResults{ it.tvdbId } as Set

ids.each{ id ->
  def r = curl "http://${host}:${port}/api/v3/series?tvdbId=${id}", 'X-Api-Key': auth
  r.each{ s ->
    curl "http://${host}:${port}/api/v3/command", [name: 'rescanSeries', seriesId: s.id], 'X-Api-Key': auth
  }
}
am I just missing something or what is happening exactly? as it would be great to get this working also afraid that this error is going to happen for the radarr script as well :s

here is the full log if you want it:

Code: Select all

Run script [fn:amc] at [Thu Jun 22 19:14:09 CDT 2023]

[PSA] Important Discussion of Proposed Changes:
https://www.filebot.net/forums/viewtopic.php?t=13406

Parameter: excludeList = C:\Users\JourneyOver\Dropbox\Public\Filebot\logs\filebot-history.log
Parameter: movieFormat = {
  def normMovie = {
    it.replaceTrailingBrackets()
      // .upperInitial().lowerTrail()
      .replaceAll(/[`´‘’ʻ""“”“„‟]/, "'")
      .replaceAll(/[:|]/, ' - ')
      // .replaceAll(/[:]/, "\u2236") // "∶" Ratio symbol
      // .replaceAll(/[:]/, "\uFF1A") // ":" Fullwidth Colon
      // .replaceAll(/[:]/, "\uFE55") // "﹕" Small Colon
      // .replaceAll("/", "\u29F8") // "⧸" Big Solidus
      // .replaceAll("/", "\u2215") // "∕" Division Slash
      // .replaceAll("/", "\u2044") // "⁄" Fraction Slash
      // .replaceAll(/[?]/, "\uFF1F") // "?" Fullwidth Question Mark
      // .replaceAll(/[?]/, "\uFE56") // "﹖" Small Question Mark
      // .replaceAll(/[\*]/, "\u204E") // "⁎" low asterisk
      .replaceAll(/[?]/, '!')
      .replaceAll(/[*\p{Zs}]+/, ' ')
      .replaceAll(/\b[IiVvXx]+\b/, { it.upper() })
      .replaceAll(/\b[0-9](?i:th|nd|rd)\b/, { it.lower() })
  }

  // Surrounds a string with specified characters, uses "(" and ")" by default.
  String.metaClass.surround { l = "(", r = ")" ->
    l + delegate + r
  }

  allOf
  // Movies directory
  { 'Movies' }
  // Folder name
  { normMovie(n).colon(' - ') + " ($y)" }
  { allOf
    // File name
    { normMovie(primaryTitle) ? normMovie(primaryTitle.colon(' - ')) : normMovie(primaryTitle.colon(' - ')) }
    { " ($y)" }
    // tags
    { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/extraTags.groovy' }
    { " PT $pi" }
    { allOf
      { // Video
        // net.filebot.media.VideoFormat.DEFAULT_GROUPS.guessFormat(dim[0], dim[1])
        allOf
          { vf }
          { vc }
          { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/hdrPart.groovy' }
        .join(' ')
      }
      { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/audioPart.groovy' }
      { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/extraSource.groovy' }
      .join(' - ').surround(' [', ']') }
    { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/repackPart.groovy' }
    { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/groupPart.groovy' }
    { subt }
    .join('') }
  .join('/')
}

Parameter: seriesFormat = {
  def normTV = {
    it.replaceAll(/[`´‘’ʻ""“”“„‟]/, "'")
       .replaceAll(/[:|]/, ' - ')
      // .replaceAll(/[:]/, "\u2236") // "∶" Ratio symbol
      // .replaceAll(/[:]/, "\uFF1A") // ":" Fullwidth Colon
      // .replaceAll(/[:]/, "\uFE55") // "﹕" Small Colon
      // .replaceAll("/", "\u29F8") // "⧸" Big Solidus
      // .replaceAll("/", "\u2215") // "∕" Division Slash
      // .replaceAll("/", "\u2044") // "⁄" Fraction Slash
      // .replaceAll(/[?]/, "\uFF1F") // "?" Fullwidth Question Mark
      // .replaceAll(/[?]/, "\uFE56") // "﹖" Small Question Mark
      // .replaceAll(/[\*]/, "\u204E") // "⁎" low asterisk
      .replaceAll(/[?]/, '!')
      .replaceAll(/[*\p{Zs}]+/, ' ')
      .replaceAll(/\b[IiVvXx]+\b/, { it.upper() })
      .replaceAll(/\b[0-9](?i:th|nd|rd)\b/, { it.lower() })
  }

  // Surrounds a string with specified characters, uses "(" and ")" by default.
  String.metaClass.surround { l = "(", r = ")" ->
    l + delegate + r
  }

  allOf
  // TV Shows directory
  { 'TV Shows' }
  { allOf
      // Folder name
      { normTV(n).replaceAll(/(S.H.I.E.L.D.)/, ' S.H.I.E.L.D ') }
      { '' }
    .join(' ') }
  // Season Folder name
  { episode.special ? 'Specials' : 'Season ' + s.pad(2) }
  { allOf
    // File name
    { normTV(n).replaceTrailingBrackets() }
    { episode.special ? 'S00E' + special.pad(2) : S00E00 }
    { allOf
      { normTV(t).replacePart(' - Part $1') }
      { allOf
        { allOf
          { // Video
            // net.filebot.media.VideoFormat.DEFAULT_GROUPS.guessFormat(dim[0], dim[1])
            allOf
              { vf }
              { vc }
              { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/hdrPart.groovy' }
            .join(' ')
          }
          { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/audioPart.groovy' }
          { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/extraSource.groovy' }
          .join(' - ').surround(' [', ']') }
        { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/repackPart.groovy' }
        { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/groupPart.groovy' }
        { subt }
        .join('') }
      .join(' ') }
    .join(' - ') }
  .join('/')
}

Parameter: animeFormat = {
  def normTV = {
    it.replaceAll(/[`´‘’ʻ""“”“„‟]/, "'")
       .replaceAll(/[:|]/, ' - ')
      // .replaceAll(/[:]/, "\u2236") // "∶" Ratio symbol
      // .replaceAll(/[:]/, "\uFF1A") // ":" Fullwidth Colon
      // .replaceAll(/[:]/, "\uFE55") // "﹕" Small Colon
      // .replaceAll("/", "\u29F8") // "⧸" Big Solidus
      // .replaceAll("/", "\u2215") // "∕" Division Slash
      // .replaceAll("/", "\u2044") // "⁄" Fraction Slash
      // .replaceAll(/[?]/, "\uFF1F") // "?" Fullwidth Question Mark
      // .replaceAll(/[?]/, "\uFE56") // "﹖" Small Question Mark
      // .replaceAll(/[\*]/, "\u204E") // "⁎" low asterisk
      .replaceAll(/[?]/, '!')
      .replaceAll(/[*\p{Zs}]+/, ' ')
      .replaceAll(/\b[IiVvXx]+\b/, { it.upper() })
      .replaceAll(/\b[0-9](?i:th|nd|rd)\b/, { it.lower() })
  }

  // Surrounds a string with specified characters, uses "(" and ")" by default.
  String.metaClass.surround { l = "(", r = ")" ->
    l + delegate + r
  }

  allOf
  // Anime directory
  { 'Anime' }
  { allOf
      // Folder name
      { normTV(n) }
      { '' }
    .join(' ') }
  // Season Folder name
  { episode.special ? 'Specials' : 'Season ' + s.pad(2) }
  { allOf
    // File name
    { normTV(n).replaceTrailingBrackets() }
    { episode.special ? 'S00E' + special.pad(2) : S00E00 }
    { allOf
      { normTV(t).replacePart(' - Part $1') }
      { allOf
        { allOf
          { // Video
            // net.filebot.media.VideoFormat.DEFAULT_GROUPS.guessFormat(dim[0], dim[1])
            allOf
              { vf }
              { vc }
              { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/hdrPart.groovy' }
            .join(' ')
          }
          { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/audioPart.groovy' }
          { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/extraSource.groovy' }
          .join(' - ').surround(' [', ']') }
        { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/repackPart.groovy' }
        { include 'C:/Users/JourneyOver/Dropbox/Public/Filebot/partials/groupPart.groovy' }
        { subt }
        .join('') }
      .join(' ') }
    .join(' - ') }
  .join('/')
}

Parameter: ut_label = 
Parameter: ut_state = 
Parameter: ut_title = Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH
Parameter: ut_kind = multi
Parameter: ut_file = 
Parameter: ut_dir = C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH
Parameter: minLengthMS = 300000
Parameter: artwork = True
Parameter: plex = *****
Parameter: clean = True
Parameter: deleteAfterExtract = True
Parameter: seriesDB = TheTVDB
Use excludes: C:\Users\JourneyOver\Dropbox\Public\Filebot\logs\filebot-history.log
Read archive [catfish.the.tv.show.s08e81.1080p.web.h264-edith.rar] and extract to [C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH]
Select [Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH.mkv]
Extracting files [Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH.mkv]
Input: C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH.mkv
Group: {Series=Catfish: The TV Show} => [Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH.mkv]
Rename episodes using [TheTVDB] with [Airdate Order]
Lookup via [Catfish: The TV Show] [Catfish The TV Show]
Fetching episode data for [Catfish: The TV Show]
* Catfish: The TV Show [262754] | 268 episodes | 0x01x02x03x04x05x06x07x08x09x10x11x12x13x14x15x16x17x18x19x20x21x22x23x24x25x26x27x28x29x30x31x32x33x34x35x36x37x38x39x40x41x42x43x44x45x46x47x48x49x50x52x53 .. 1x01-11 .. 2x01-15 .. 3x01-10 .. 4x01-19 .. 5x01-20 .. 6x01-20 .. 7x01-40 .. 8x01-81
Apply filter [any{ age < 80000 }{ airdate ? true : false }] on [268] options
Include [Catfish: The TV Show - 1x01 - Sunny & Jamison]
Include [Catfish: The TV Show - 1x02 - Trina & Scorpio]
Include [Catfish: The TV Show - 1x03 - Kim & Matt]
Include [Catfish: The TV Show - 1x04 - Jasmine & Mike]
Include [Catfish: The TV Show - 1x05 - Jarrod & Abby]
Include [Catfish: The TV Show - 1x06 - Kya & Alyx]
Include [Catfish: The TV Show - 1x07 - Joe & Kari Ann]
Include [Catfish: The TV Show - 1x08 - Tyler & Amanda]
Include [Catfish: The TV Show - 1x09 - Rod & Ebony]
Include [Catfish: The TV Show - 1x10 - Rico & Ja'Mari]
Include [Catfish: The TV Show - 1x11 - Mike & Felicia]
Include [Catfish: The TV Show - 2x01 - Cassie & Steve]
Include [Catfish: The TV Show - 2x02 - Anthony & Marq]
Include [Catfish: The TV Show - 2x03 - Ramon & Paola]
Include [Catfish: The TV Show - 2x04 - Lauren & Derek]
Include [Catfish: The TV Show - 2x05 - Dorion & Jeszica]
Include [Catfish: The TV Show - 2x06 - Jen & Skylar]
Include [Catfish: The TV Show - 2x07 - Mike & Kristen]
Include [Catfish: The TV Show - 2x08 - Jesse & Brian]
Include [Catfish: The TV Show - 2x09 - Artis & Jess]
Include [Catfish: The TV Show - 2x10 - Ashley & Mike]
Include [Catfish: The TV Show - 2x11 - Aaliyah & Alicia]
Include [Catfish: The TV Show - 2x12 - Nick & Melissa]
Include [Catfish: The TV Show - 2x13 - Derek & Kristen]
Include [Catfish: The TV Show - 2x14 - Keyonnah & Bow Wow]
Include [Catfish: The TV Show - 2x15 - Mike & Caroline]
Include [Catfish: The TV Show - 3x01 - Craig & Zoe]
Include [Catfish: The TV Show - 3x02 - Antwane & Tony]
Include [Catfish: The TV Show - 3x03 - Antoinette & Albert]
Include [Catfish: The TV Show - 3x04 - Lucille & Kidd Cole]
Include [Catfish: The TV Show - 3x05 - Tracie & Sammie]
Include [Catfish: The TV Show - 3x06 - John & Kelsey]
Include [Catfish: The TV Show - 3x07 - Solana & Elijah]
Include [Catfish: The TV Show - 3x08 - Miranda & Cameryn]
Include [Catfish: The TV Show - 3x09 - Jeff & Megan]
Include [Catfish: The TV Show - 3x10 - Bianca & Brogan]
Include [Catfish: The TV Show - 4x01 - Miracle & Javonni]
Include [Catfish: The TV Show - 4x02 - Courtney & Isaak]
Include [Catfish: The TV Show - 4x03 - Harold & Armani]
Include [Catfish: The TV Show - 4x04 - Daisy & Marcus]
Include [Catfish: The TV Show - 4x05 - Chitara & Priscilla]
Include [Catfish: The TV Show - 4x06 - Felipe & Jasmine]
Include [Catfish: The TV Show - 4x07 - Whitney & Bre]
Include [Catfish: The TV Show - 4x08 - Jamey & Ari]
Include [Catfish: The TV Show - 4x09 - Blaire & Markie]
Include [Catfish: The TV Show - 4x10 - Steven & Samm]
Include [Catfish: The TV Show - 4x11 - Tiana & James]
Include [Catfish: The TV Show - 4x12 - Falesha & Jacqueline]
Include [Catfish: The TV Show - 4x13 - Prophet & Trinity]
Include [Catfish: The TV Show - 4x14 - Thad & Sara]
Include [Catfish: The TV Show - 4x15 - Andria & David]
Include [Catfish: The TV Show - 4x16 - Ayissha & Sydney]
Include [Catfish: The TV Show - 4x17 - Hundra & Emily]
Include [Catfish: The TV Show - 4x18 - Devan & Rylan]
Include [Catfish: The TV Show - 4x19 - Brittany & Bryon]
Include [Catfish: The TV Show - 5x01 - Dejay, Malik & Josiah]
Include [Catfish: The TV Show - 5x02 - Jeanette & Derick]
Include [Catfish: The TV Show - 5x03 - Leuh & Justin]
Include [Catfish: The TV Show - 5x04 - Brandon & McKenna]
Include [Catfish: The TV Show - 5x05 - Jaylin & Ja'la]
Include [Catfish: The TV Show - 5x06 - Michael & Chanelle]
Include [Catfish: The TV Show - 5x07 - Ray & Lexi]
Include [Catfish: The TV Show - 5x08 - Joanna & Bo]
Include [Catfish: The TV Show - 5x09 - Tyreme & Tomorrow]
Include [Catfish: The TV Show - 5x10 - Kayla & Courtney]
Include [Catfish: The TV Show - 5x11 - Paris & Tara]
Include [Catfish: The TV Show - 5x12 - Vince & Alyssa]
Include [Catfish: The TV Show - 5x13 - Lucas & Many]
Include [Catfish: The TV Show - 5x14 - Larissa & Anthony]
Include [Catfish: The TV Show - 5x15 - Spencer & Katy]
Include [Catfish: The TV Show - 5x16 - Candic & Titus]
Include [Catfish: The TV Show - 5x17 - Andrea, Alex & Andrea]
Include [Catfish: The TV Show - 5x18 - Catherine & Graham]
Include [Catfish: The TV Show - 5x19 - Luis & Sydney]
Include [Catfish: The TV Show - 5x20 - Andrew & Zac]
Include [Catfish: The TV Show - 6x01 - Shawny & Jack]
Include [Catfish: The TV Show - 6x02 - Alante & Nevaeh]
Include [Catfish: The TV Show - 6x03 - Danny & Rosa]
Include [Catfish: The TV Show - 6x04 - Telizza & Shai]
Include [Catfish: The TV Show - 6x05 - Marvin & Austin]
Include [Catfish: The TV Show - 6x06 - Mecca & Tanner]
Include [Catfish: The TV Show - 6x07 - Yasmine & Lewis]
Include [Catfish: The TV Show - 6x08 - Kailani & Sam]
Include [Catfish: The TV Show - 6x09 - Ari & Lanum]
Include [Catfish: The TV Show - 6x10 - Dylan & Ally]
Include [Catfish: The TV Show - 6x11 - Colleen & Tony]
Include [Catfish: The TV Show - 6x12 - Open Investigation]
Include [Catfish: The TV Show - 6x13 - Johnny & Connor]
Include [Catfish: The TV Show - 6x14 - Kelsie & Brandon]
Include [Catfish: The TV Show - 6x15 - April & Dean]
Include [Catfish: The TV Show - 6x16 - Robert & Ashleigh]
Include [Catfish: The TV Show - 6x17 - Robin & Wayne]
Include [Catfish: The TV Show - 6x18 - Nicole & Nicole]
Include [Catfish: The TV Show - 6x19 - Jose & Jay]
Include [Catfish: The TV Show - 6x20 - Caitlyn & Kenton]
Include [Catfish: The TV Show - 7x01 - Sheklia & Talli]
Include [Catfish: The TV Show - 7x02 - Alyssa & Tyler]
Include [Catfish: The TV Show - 7x03 - Kim & Matt]
Include [Catfish: The TV Show - 7x04 - Lawrence & Cierra]
Include [Catfish: The TV Show - 7x05 - Mary & Adam]
Include [Catfish: The TV Show - 7x06 - Zak & Garrett]
Include [Catfish: The TV Show - 7x07 - Traves & Candy]
Include [Catfish: The TV Show - 7x08 - Mandy & Jose]
Include [Catfish: The TV Show - 7x09 - Infiniti & Dave]
Include [Catfish: The TV Show - 7x10 - Dylan & Savenia]
Include [Catfish: The TV Show - 7x11 - Kiaira & Cortney]
Include [Catfish: The TV Show - 7x12 - Nina & Jon]
Include [Catfish: The TV Show - 7x13 - Angel & Jordan]
Include [Catfish: The TV Show - 7x14 - Breana & Josh]
Include [Catfish: The TV Show - 7x15 - Chelsea & Charles]
Include [Catfish: The TV Show - 7x16 - Nae & Brandon]
Include [Catfish: The TV Show - 7x17 - Derek & Annabelle]
Include [Catfish: The TV Show - 7x18 - Nick & Jasmine]
Include [Catfish: The TV Show - 7x19 - Mike & Joey]
Include [Catfish: The TV Show - 7x20 - Rachael & Vance]
Include [Catfish: The TV Show - 7x21 - Sheila & Rich Dollaz]
Include [Catfish: The TV Show - 7x22 - Chelsea & Lennie]
Include [Catfish: The TV Show - 7x23 - Truth & Ray'Quan]
Include [Catfish: The TV Show - 7x24 - Shakinah & Chris]
Include [Catfish: The TV Show - 7x25 - Dallas & Safari]
Include [Catfish: The TV Show - 7x26 - Aubri & Brian]
Include [Catfish: The TV Show - 7x27 - Nique & Alice]
Include [Catfish: The TV Show - 7x28 - Deven & James]
Include [Catfish: The TV Show - 7x29 - Mathan & Leah]
Include [Catfish: The TV Show - 7x30 - Kristina & Faith]
Include [Catfish: The TV Show - 7x31 - Oceanna & Nelly]
Include [Catfish: The TV Show - 7x32 - Angel & Remy]
Include [Catfish: The TV Show - 7x33 - Kaden & Adriana]
Include [Catfish: The TV Show - 7x34 - Taylor & Christian]
Include [Catfish: The TV Show - 7x35 - Matthew & Chance]
Include [Catfish: The TV Show - 7x36 - Shirlene & James]
Include [Catfish: The TV Show - 7x37 - CJ & Shana]
Include [Catfish: The TV Show - 7x38 - Tristyn & Lara]
Include [Catfish: The TV Show - 7x39 - Cherie & Avion]
Include [Catfish: The TV Show - 7x40 - Angel & Antonio]
Include [Catfish: The TV Show - 8x01 - Red & Jalissa]
Include [Catfish: The TV Show - 8x02 - Alfred & Adonis]
Include [Catfish: The TV Show - 8x03 - Sparkayla & Maritha]
Include [Catfish: The TV Show - 8x04 - Jesus & Alexis]
Include [Catfish: The TV Show - 8x05 - Joseph & Sabrina]
Include [Catfish: The TV Show - 8x06 - William & Jamie]
Include [Catfish: The TV Show - 8x07 - Danielle & BJ]
Include [Catfish: The TV Show - 8x08 - DeJohn & Cashay]
Include [Catfish: The TV Show - 8x09 - Aaliyah & Jaquan]
Include [Catfish: The TV Show - 8x10 - Gemini & Myranda]
Include [Catfish: The TV Show - 8x11 - Jason & Keith]
Include [Catfish: The TV Show - 8x12 - Kristen & Sarah]
Include [Catfish: The TV Show - 8x13 - Dre & Casey]
Include [Catfish: The TV Show - 8x14 - Dustin & Keegan]
Include [Catfish: The TV Show - 8x15 - Kirsten & Alex]
Include [Catfish: The TV Show - 8x16 - Stephanie & Danny]
Include [Catfish: The TV Show - 8x17 - Zay & Jayda]
Include [Catfish: The TV Show - 8x18 - Ryan & Micah]
Include [Catfish: The TV Show - 8x19 - Dianela & Jose]
Include [Catfish: The TV Show - 8x20 - Brooklyn & Jason]
Include [Catfish: The TV Show - 8x21 - Jay & Anna]
Include [Catfish: The TV Show - 8x22 - Jeanette, Kiara & Patrick]
Include [Catfish: The TV Show - 8x23 - Jake & Taylor]
Include [Catfish: The TV Show - 8x24 - Tony & Tiana]
Include [Catfish: The TV Show - 8x25 - Eric & Lianna]
Include [Catfish: The TV Show - 8x26 - Scooba & Renae]
Include [Catfish: The TV Show - 8x27 - DeJuan & Tynea]
Include [Catfish: The TV Show - 8x28 - Michael & Julia]
Include [Catfish: The TV Show - 8x29 - Jason & Mar]
Include [Catfish: The TV Show - 8x30 - Will & Cherry]
Include [Catfish: The TV Show - 8x31 - Tam & Jamena]
Include [Catfish: The TV Show - 8x32 - Paul & Caitea]
Include [Catfish: The TV Show - 8x33 - Tyler & Stefany]
Include [Catfish: The TV Show - 8x34 - Courtney & Chris]
Include [Catfish: The TV Show - 8x35 - Imari & ?]
Include [Catfish: The TV Show - 8x36 - Bryn & Stephanie]
Include [Catfish: The TV Show - 8x37 - Apryl & Daryl]
Include [Catfish: The TV Show - 8x38 - Michael & Dustin]
Include [Catfish: The TV Show - 8x39 - Jeremiah & Linda]
Include [Catfish: The TV Show - 8x40 - Aaliyah & Paula]
Include [Catfish: The TV Show - 8x41 - Nyhjee & Cianna]
Include [Catfish: The TV Show - 8x42 - Aaron & Treyvon]
Include [Catfish: The TV Show - 8x43 - Alexis & Jaymes]
Include [Catfish: The TV Show - 8x44 - Deonn & Lanise]
Include [Catfish: The TV Show - 8x45 - Zark & Roger]
Include [Catfish: The TV Show - 8x46 - Brittany & Mark]
Include [Catfish: The TV Show - 8x47 - Dey & Cody]
Include [Catfish: The TV Show - 8x48 - Kailan & Jordan]
Include [Catfish: The TV Show - 8x49 - Diamond & Steve]
Include [Catfish: The TV Show - 8x50 - Vonni & Andrew]
Include [Catfish: The TV Show - 8x51 - Myldred, India & KJ]
Include [Catfish: The TV Show - 8x52 - Tracii & Ace]
Include [Catfish: The TV Show - 8x53 - Romeo & Michael]
Include [Catfish: The TV Show - 8x54 - Adam & Mercy]
Include [Catfish: The TV Show - 8x55 - Emma & EJ]
Include [Catfish: The TV Show - 8x56 - Gabby & Kendrick]
Include [Catfish: The TV Show - 8x57 - William & Breezy]
Include [Catfish: The TV Show - 8x58 - Hayley & Britani]
Include [Catfish: The TV Show - 8x59 - Pamela & Fernando]
Include [Catfish: The TV Show - 8x60 - Onyx & Lola]
Include [Catfish: The TV Show - 8x61 - Victoria & Anthony]
Include [Catfish: The TV Show - 8x62 - Nick & England]
Include [Catfish: The TV Show - 8x63 - Ivy & Dante]
Include [Catfish: The TV Show - 8x64 - Keontae & Tyler]
Include [Catfish: The TV Show - 8x65 - Kaycee & Mike]
Include [Catfish: The TV Show - 8x66 - Reese & Jesica]
Include [Catfish: The TV Show - 8x67 - Kimberly & Flavour]
Include [Catfish: The TV Show - 8x68 - Charles & Nikki]
Include [Catfish: The TV Show - 8x69 - Rudy & Tyrell]
Include [Catfish: The TV Show - 8x70 - John & Megan ]
Include [Catfish: The TV Show - 8x71 - Mark & Taylor]
Include [Catfish: The TV Show - 8x72 - Angel & Sharon]
Include [Catfish: The TV Show - 8x73 - Malcolm & Missy]
Include [Catfish: The TV Show - 8x74 - Motherwolff & David]
Include [Catfish: The TV Show - 8x75 - Shay & Ceejay]
Include [Catfish: The TV Show - 8x76 - Angela & Justin]
Include [Catfish: The TV Show - 8x77 - Sham & Phillip]
Include [Catfish: The TV Show - 8x78 - Jaquan & Shantel]
Include [Catfish: The TV Show - 8x79 - Erika & Jermaine]
Include [Catfish: The TV Show - 8x80 - Jacob & Stephanie]
Include [Catfish: The TV Show - 8x81 - William & Carmella]
Include [Catfish: The TV Show - Special 1 - Season 1 Reunion Special]
Include [Catfish: The TV Show - Special 2 - Hooked On Catfish: The Road To Season 2]
Include [Catfish: The TV Show - Special 3 - Lauren & Derek: Live After Show]
Include [Catfish: The TV Show - Special 4 - Dorion & Jeszica: Live After Show]
Include [Catfish: The TV Show - Special 5 - Mid-Season Reunion]
Include [Catfish: The TV Show - Special 6 - Catfish Season 2: Last Hooks]
Include [Catfish: The TV Show - Special 7 - Season 2 Reunion Special]
Include [Catfish: The TV Show - Special 8 - The Untold Stories Part 1]
Include [Catfish: The TV Show - Special 9 - Chatfish Live After Show - Season 3 Premiere]
Include [Catfish: The TV Show - Special 10 - The Untold Stories Part 2]
Include [Catfish: The TV Show - Special 11 - Blake & Kiersten]
Include [Catfish: The TV Show - Special 12 - The Movie]
Include [Catfish: The TV Show - Special 13 - Chatfish Live After Show - Season 4 Premiere]
Include [Catfish: The TV Show - Special 14 - Nev and Max's 15 Craziest Catfish Moments Countdown]
Include [Catfish: The TV Show - Special 15 - Chatfish Live After Show - Season 3 Finale]
Include [Catfish: The TV Show - Special 16 - Felipe & Jasmine: Live After Show]
Include [Catfish: The TV Show - Special 17 - Stephanie & David]
Include [Catfish: The TV Show - Special 18 - The Untold Stories Part 3]
Include [Catfish: The TV Show - Special 19 - Chatfish Live After Show - Steven & Samm]
Include [Catfish: The TV Show - Special 20 - Where Are They Now?]
Include [Catfish: The TV Show - Special 21 - Fresh Catch Special]
Include [Catfish: The TV Show - Special 22 - The Anatomy of Catfish]
Include [Catfish: The TV Show - Special 23 - The Untold Stories Part 4]
Include [Catfish: The TV Show - Special 24 - The Untold Stories Part 5]
Include [Catfish: The TV Show - Special 25 - The Untold Stories Part 6]
Include [Catfish: The TV Show - Special 26 - Best Moments Ever]
Include [Catfish: The TV Show - Special 27 - The Ones That Got Away]
Include [Catfish: The TV Show - Special 28 - The Untold Stories Part 7]
Include [Catfish: The TV Show - Special 29 - The Untold Stories Part 8]
Include [Catfish: The TV Show - Special 30 - Top Ten Holy S*@#! Catfish Moments]
Include [Catfish: The TV Show - Special 31 - Hooked on Love]
Include [Catfish: The TV Show - Special 32 - Still Hooked!]
Include [Catfish: The TV Show - Special 33 - The Untold Stories Part 9]
Include [Catfish: The TV Show - Special 34 - The Untold Stories Part 10]
Include [Catfish: The TV Show - Special 35 - It's a Cat Cat Cat Catfish World]
Include [Catfish: The TV Show - Special 36 - Liar Liar Catfish on Fire]
Include [Catfish: The TV Show - Special 37 - When Catfish Broke the Internet]
Include [Catfish: The TV Show - Special 38 - What Kind of Catfish Are You?]
Include [Catfish: The TV Show - Special 39 - To Catch a Catfish]
Include [Catfish: The TV Show - Special 40 - Catfish Keeps It 100: Dear Nev & Max]
Include [Catfish: The TV Show - Special 41 - Catfish Keeps It 100: The Young and the Catfished]
Include [Catfish: The TV Show - Special 42 - Catfish Keeps It 100: Catfish Breaks the Internet Again]
Include [Catfish: The TV Show - Special 43 - Catfish Keeps It 100: The Aftershock]
Include [Catfish: The TV Show - Special 44 - Catfish Keeps It 100: Top 10 Most Wanted]
Include [Catfish: The TV Show - Special 45 - Catfish Keeps It 100: Creepy Catfish Countdown]
Include [Catfish: The TV Show - Special 46 - Catfish Keeps It 100: Where Are They Now?]
Include [Catfish: The TV Show - Special 47 - Catfish Keeps it 100: Charlamagne's Favorite F**king Catfish Moments]
Include [Catfish: The TV Show - Special 48 - Catfish Trolls: Miss Mia Rose & Maldiva]
Include [Catfish: The TV Show - Special 49 - Catfish Trolls: Camyonce & Rollin’ Ray]
Include [Catfish: The TV Show - Special 50 - Catfish Trolls: Ciera & Eskimo Jay]
Include [Catfish: The TV Show - Special 52 - Making Waves: Ten Years Of Catfish]
Include [Catfish: The TV Show - Special 53 - Catfish: Sweet And Sour]
[268] options remaining
[MOVE] from [C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH.mkv] to [D:\Media\TV Shows\Catfish - The TV Show\Season 08\Catfish - The TV Show - S08E81 - William & Carmella [1080p AVC - 2.0 HE-AAC Eng - WEB-DL]-EDITH.mkv]
[SCRIPT] Run Script (C:\Users\JourneyOver\Dropbox\Public\Filebot\modules\scripts\refresh-sonarr.groovy)
[SCRIPT] GET http://localhost:8989/api/v3/series?tvdbId=262754 (C:\Users\JourneyOver\Dropbox\Public\Filebot\modules\scripts\refresh-sonarr.groovy)
[SCRIPT] javax.script.ScriptException: java.lang.NullPointerException: Cannot invoke "String.toLowerCase(java.util.Locale)" because "<parameter2>" is null (C:\Users\JourneyOver\Dropbox\Public\Filebot\modules\scripts\refresh-sonarr.groovy)
Processed 1 file
Fetching series artwork for [TheTVDB::262754 / Season 8] to [D:\Media\TV Shows\Catfish - The TV Show\Season 08]
Generate Series NFO: Catfish: The TV Show [TheTVDB::262754]
Notify Plex [localhost]
GET: http://localhost:32400/library/sections/4/refresh?path=D%3A%5CMedia%5CTV+Shows%2FCatfish+-+The+TV+Show%2FSeason+08&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx
Delete archive C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.rar
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r00
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r01
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r02
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r03
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r04
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r05
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r06
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r07
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r08
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r09
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r10
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r11
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r12
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r13
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r14
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r15
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r16
Delete archive volume C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.r17
Clean clutter files and empty folders
Delete C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.nfo
Delete C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith.sfv
Delete C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH
Delete C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH\catfish.the.tv.show.s08e81.1080p.web.h264-edith
Delete C:\Users\JourneyOver\Desktop\QBT\Catfish.The.TV.Show.S08E81.1080p.WEB.h264-EDITH
Done ヾ(@⌒ー⌒@)ノ
User avatar
rednoah
The Source
Posts: 22999
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by rednoah »

Can you do a curl call so we can see the HTTP response that Sonarr sends back?

Code: Select all

curl -v "http://localhost:8989/api/v3/series?tvdbId=262754" -H "X-Api-Key: PLACEDMYSONARRAPIKEYHERE"


EDIT:

Nevermind. I can reproduce the issue with net.filebot.web.WebRequest.v1=true which you have probably set via Environment Variables. FileBot r9828 fixes the issue.
:idea: Please read the FAQ and How to Request Help.
ZeroByDivide
Posts: 170
Joined: 16 Dec 2014, 01:39

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by ZeroByDivide »

I can reproduce the issue with net.filebot.web.WebRequest.v1=true which you have probably set via Environment Variables
Yea sadly I ended up having to set up the "net.filebot.web.WebRequest.v1=true" thing due to running into the error mentioned here viewtopic.php?t=13753 and I guess I forgot to clear it out when switching to see if it was still going to be an issue on the non-store version, but oh well. I can at least confirm that things look to be working correctly now on r9828.
User avatar
rednoah
The Source
Posts: 22999
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

Re: java.lang.NullPointerException: Cannot get property 'id' on null object

Post by rednoah »

No worries. Good thing you were still using net.filebot.web.WebRequest.v1=true otherwise we might not have caught this issue right away.
:idea: Please read the FAQ and How to Request Help.
Post Reply