mylar/sabnzbd/ComicRN.py

249 lines
8.8 KiB
Python
Executable File

#!/usr/bin/python
# ComicBook Renamer v1.02.b (the 'b' means 'beta-alpha')
# This is an add-on script for SABnzbd
# Used in conjunction with several other scripts
# it will allow for almost complete automization for downloading
# comics and sorting/moving them into the correct location.
# ---------
#-----BLURB
# In order to use this as it was intended, Mylar is required.
# Until integration is fully completed, change the settings below
# as required. Save the file into your scripts (usually sabnzbd/scripts)
# directory of your SABnzbd install.
# In SABnzbd:
# Create a category - call it whatever you want (ie.Comics).
# Point the default dir to wherever you want - but make sure it is identical
# to the Mylar - "Comic Location" as indicated in the comdir CONFIG option
# below. Not doing this will mean that downloads that this script processed
# probably won't get marked as being present in Mylar.
# In Mylar:
# Sabnzbd tab (in the Configuration):
# Set category to same thing set in SABnzbd
#
# Quality & Post Processing tab (in the Configuration):
# Check off the option to 'Rename Files'
#
#--------END BLURB
#----CONFIG SECTION
# Path to root of Comics directory (include trailing /)
# For Windows - if you're getting errors about the path, reverse the slashes:
# ie.instead of 'C:\Comics\' make it 'C://Comics//'
comdir = '/fill/this/in/'
#----SETTINGS SECTION
# Integrate with Mylar (yes/no)
# If this is set to "yes", will integrate into Mylar for finding series information, etc.
# setting this to "no" will enable stand-alone SABnzbd integration
mylaron = "yes"
# Replace spaces?
repblank = "no"
# If 'yes', what character do you want me to replace with.
# - Be careful, weird characters will bugger things up and there's no
# also be sure to put the character inbetween single quotations.
repwith = " "
# Remove crap from filename (ie. c2c, noads, rlsgroup, pxcount, etc)
# If this is set to "no", filename will not be renamed at all.
remcrap = "yes"
# Append Series / Comic year to respective title directory and filename.
# it will appear as : someComic (2012) / someComic 001 (2009).cbz
# THIS WILL ONLY WORK WHEN USED WITH MYLAR.
comicyearopt = "yes"
# how do you want issues (0 digit, 1 digit, 2 digits) to handle zero suppression
# if set to leave, will not expand zeros...
# .... if set to 0 digit: #1 will be #1, #10 will be #10, #100 will be #100
# .... if set to 1 digit: #1 will be #01, #10 will be #010, #100 will be #100
# .... if set to 2 digit: #1 will be #001, #10 will be #010, #100 will be #100
zerosup = "2"
# ----------
# ---Code---
import os
import shutil
import sys
import getopt
import fnmatch
import re
if mylaron == "yes":
fullp = sys.argv[1]
filen = sys.argv[3]
else:
fullp = sys.argv[1]
filen = sys.argv[3]
filen = filen.replace('_',' ')
lengthfile = len(filen) - 4
#if filen[:-4] == ".cbr" or filen[:-4] == ".cbz": filen[:lengthfile]
print ("Mylar - ComicRenamer Script - v1.02.b")
print ("settings confirmation")
print ("---------------------")
print ("Mylar enabled: " + str(mylaron))
if str(mylaron) == "yes":
print ("Append SeriesYear/ComicYear to folder/filename : " + str(comicyearopt))
print ("Comic Directory : " + str(comdir))
print ("Zero supression set to : " + str(zerosup) + " digits")
print ("Replace Spaces enabled : " + str(repblank))
if repblank == "yes":
print ("Character to replace spaces with : " + str(repwith))
print ("Remove extra stuff : " + str(remcrap))
print ("-------------------------")
print ("passed name from SAB: " + str(filen) )
#print ("extension of file: " + str(fullp) )
#let's narrow search down - take out year (2010), (2011), etc
#let's check for first occurance of '(' as generally indicates
#that the 'title' has ended
comlen = filen.find(' (')
comsub = filen[:comlen]
#print("first bracket occurs at position: " + str(comlen))
print("actual name with issue: " + str(comsub))
yrstart = int(comlen + 2)
#print ("series year starts at position: " + str(yrstart))
lenyear = len(filen)
issyr = filen.find(') (')
comyear = filen[yrstart:issyr]
comyear = comyear.replace(")", "")
print ("actual year of series (passed from SAB): " + str(comyear))
issst = int(issyr + 2)
#print ("issue year starts at position: " + str(issst))
issyear = filen[issst:]
print ("year of publication of this issue (passed from SAB): " + str(issyear))
#we need to now determine the last position BEFORE the issue number
#take length of findcomic (add 1 for space) and subtract comlen
#will result in issue
comspos = comsub.rfind(" ")
#print ("last space @ position: " + str(comspos) )
#print ("COMLEN: " + str(comlen) )
comiss = comsub[comspos:comlen]
# -- we need to change if there is no space after issue #
# -- and bracket ie...star trek tng 1(c2c)(2012) etc
if (comspos-comlen) > 3:
print ("invalid length detected..attempting to adjust")
# --
print ("the comic issue is actually: #" + str(comiss))
splitit = []
splitcomp = []
comyx = comsub[:comspos]
print ("comyx: " + str(comyx))
if str(comyx[:3]).lower() == "the":
print ("THE word detected...attempting to adjust pattern matching")
splitMOD = comyx[4:]
splitit = splitMOD.split(None)
# issue zero-suppression here
if zerosup == "0": zeroadd = ""
elif zerosup == "1": zeroadd = "0"
elif zerosup == "2": zeroadd = "00"
if str(len(comiss)) > 1:
if int(comiss) < 10:
print ("issue detected less than 10")
prettycomiss = str(zeroadd) + str(int(comiss))
print ( str(prettycomiss) + "...zeroadd level set to:" + str(zeroadd))
elif int(comiss) >= 10 and int(comiss) < 100:
print ("issue detected greater than 10, but less than 100")
if zerosup == "0": zeroadd = ""
elif zerosup == "1": zeroadd = ""
elif zerosup == "2": zeroadd = "0"
prettycomiss = str(zeroadd) + str(int(comiss))
print ( str(prettycomiss) + "..zeroadd level set to:" + str(zeroadd))
else:
print ("issue detected greater than 100")
prettycomiss = str(comiss)
else:
print ("issue length error - cannot proceed at the moment.")
# replace section
if remcrap == "no": compath = str(comdir) + sys.argv[3]
if remcrap == "yes":
compath = str(comdir) + str(comyx)
if comicyearopt == "yes":
if comyear == "":
comyear = "2012"
comyear = "(" + str(comyear) + ")"
compath = str(compath) + " " + str(comyear)
comicname = str(comyx) + " " + str(prettycomiss) + " " + str(issyear)
if comicyearopt == "no":
comicname = str(comyx) + " " + str(prettycomiss)
if repblank == "yes":
comyx = comyx.replace(' ', str(repwith) )
filen = filen.replace(' ', str(repwith) )
comicname = comicname.replace(' ', str(repwith) )
compath = str(comdir) + str(comyx)
if comicyearopt == "yes":
compath = str(compath) + str(repwith) + str(comyear)
print ("The directory should be: " + str(compath))
print ("filename should be: " + str(comicname) )
if os.path.isdir(str(compath)):
print("Directory exists!")
else:
print ("Directory doesn't exist!")
try:
os.makedirs(str(compath))
print ("Directory successfully created at: " + str(compath))
except OSError.e:
if e.errno != errno.EEXIST:
raise
#let's change to downloaded path
maindir = str(fullp)
#set up comic book .extensions
extensions = ('.cbr', '.cbz')
countit=0
matches = []
for root, dirnames, filenames in os.walk(maindir):
for filename in filenames:
if filename.lower().endswith(extensions):
confile = filename
#if repblank == "yes":
# confile = filename.replace(' ','_')
#else: confile = filename.replace('_', ' ')
#errors are cause when the confile doesn't have special characters..let's account.
confile = re.sub(r'[\s\-\:\!\@\%\&\$\_\.\']', '', confile)
comyx = re.sub(r'[\s\-\:\!\@\%\&\$\_\.\']', '', comyx)
if str(comyx).lower() in str(confile).lower():
print ("Found: " + str(filename))
ext = os.path.splitext(filename)[1]
newf = str(comicname) + str(ext).lower()
print ("--New filename: " + str(newf) )
src_file = os.path.join(maindir, filename)
dst_file = os.path.join(compath, newf)
shutil.move(src_file, dst_file)
if maindir is not "/" or maindir is not comdir:
shutil.rmtree(maindir)
print ("Removed useless directory: " + maindir)
print ("Result: Completed")
else:
print ("incorrect directory passed to Removal: " + maindir)
print ("Result: FAIL - incorrect directory.")
else:
print ("Could not find a match for : " + str(comyx) )
print ("I compared it to : " + str(confile) )
print ("Result: FAIL - could not locate comic")
countit+=1