import os
import re

# RENAME MUSIC FILES FOR CAR STEREO
# 2017 ALLAN MURRAY V1.0
#===========================================
#Options (1=yes, 0=no)
DO_TITLE_CASE=1
TRUNCATE_LONG_NAMES=0
ROOT_DIRECTORY="C:\\Users\\Allan\\Music\\ForSDCard"
#===========================================

MAX_NO_TRACKS=20
MAX_NAME_LEN=30

myArtists = {}
myAlbums = {}

def processAlbumName(ALBUM):
    #print(ALBUM)
    PARTS=ALBUM.split('-')
    if (len(PARTS)>1):
        ARTIST_PART=PARTS[0].strip()
        ALBUM_PART=PARTS[1].strip()
    else:
        ARTIST_PART=""
        ALBUM_PART=ALBUM
      
    ALBUM=ALBUM.replace(" -", "-")
    ALBUM=ALBUM.replace("- ", "-")
    ALBUM=ALBUM.replace("VA-", "Various-")
    ALBUM=ALBUM.replace("Various Artists-", "Various-")
     
    if len(ALBUM)>MAX_NAME_LEN:
        ALBUM=ALBUM.replace("The ", "")
        ALBUM=ALBUM.replace("the ", "")
    if len(ALBUM)>MAX_NAME_LEN:
        ALBUM=ALBUM[0:MAX_NAME_LEN]
        
    myAlbums[ALBUM_PART.lower()] = ALBUM
    
    if ARTIST_PART.lower()in myArtists:
        myArtists[ARTIST_PART.lower()] = myArtists[ARTIST_PART.lower()]+","+ALBUM    
    else:
        myArtists[ARTIST_PART.lower()] = ALBUM
    return ALBUM

def processTrackName(TRACK,NUM):
    TRACK=TRACK.replace("_", " ")
    TRACK=TRACK.replace(" - ", "-")
    TRACK=TRACK.replace("'", "")
    
    #replace/add track numbers
    if (TRACK[0:1]>="0") and (TRACK[0:1]<="9"):
        TRACK=TRACK[1:]
    if (TRACK[0:1]>="0") and (TRACK[0:1]<="9"):
        TRACK=TRACK[1:]
    if (TRACK[0:1]!=".") and (TRACK[0:1]!=" ") and (TRACK[0:1]!="-"):
        TRACK=" "+TRACK     
    TRACK="%02d" % (NUM)+TRACK

    if (DO_TITLE_CASE==1):
        TRACK=TRACK.title()
        TRACK=TRACK[0:4]+TRACK[4:].replace(" And ", " and ") 
        TRACK=TRACK[0:4]+TRACK[4:].replace(" To ", " to ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" On ", " on ")    
        TRACK=TRACK[0:4]+TRACK[4:].replace(" In ", " in ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" It ", " it ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" At ", " at ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" By ", " by ")     
        TRACK=TRACK[0:4]+TRACK[4:].replace(" A ", " a ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" An ", " an ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" As ", " as ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" But ", " but ") 
        TRACK=TRACK[0:4]+TRACK[4:].replace(" Of ", " of ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" Or ", " or ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" Nor ", " nor ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" The ", " the ") 
        TRACK=TRACK[0:4]+TRACK[4:].replace(" Is ", " is ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" For ", " for ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" Up ", " up ")    
        TRACK=TRACK[0:4]+TRACK[4:].replace(" Be ", " be ")
        TRACK=TRACK[0:4]+TRACK[4:].replace(" Was ", " was ")   
        TRACK=TRACK.replace(".Mp3", ".mp3")


    #remove any content in brackets
    regex = '\[.*?\]'
    TRACK=re.sub(regex,'',TRACK)

    
    regex = '\(.*?\)'
    TRACK=re.sub(regex,'',TRACK)

    regex = '\,.*?\.'
    TRACK=re.sub(regex,'',TRACK)

    TRACK=TRACK.replace("  ", " ")
    TRACK=TRACK.replace(" .", ".")
    TRACK=TRACK.replace(". ", ".")



    if len(TRACK)>MAX_NAME_LEN:
        TRACK=TRACK.replace("The ", "")
        TRACK=TRACK.replace("the ", "")

    # use this to mark files with names to long - for manual editing
    if (len(TRACK)>MAX_NAME_LEN) and (TRUNCATE_LONG_NAMES==0):
        TRACK=TRACK[:-4]+"].mp3"
        TRACK=TRACK.replace("]]", "]")
         
    # OR use this to truncate
    if (len(TRACK)>MAX_NAME_LEN) and (TRUNCATE_LONG_NAMES==1):
        TRACK=TRACK[:-4]
        TRACK=TRACK[0:MAX_NAME_LEN-4]+".mp3"
        TRACK=TRACK.replace(" .", ".")
        
    return TRACK

print("OK")
# CHANGE ALBUM NAMES
os.chdir(ROOT_DIRECTORY)
print(os.getcwd())
ALBUMS=os.listdir()

for ALBUM in ALBUMS:
    if not os.path.isfile(ALBUM):
        #print (ALBUM)
        NEWALBUM=processAlbumName(ALBUM)
        #print (NEWALBUM)
        if (NEWALBUM!=ALBUM):
            os.rename(ALBUM,NEWALBUM)
print(myArtists)        
print(myAlbums)

os.chdir(ROOT_DIRECTORY)
print(os.getcwd())
ALBUMS=os.listdir()

file = open("myArtists.txt","w") 
for key in myArtists: 
    file.write("\""+key+"\": ") 
    file.write("\""+myArtists[key]+"\",")
    file.write("\n") 
file.close() 

file = open("myAlbums.txt","w") 
for key in myAlbums: 
    file.write("\""+key+"\": ") 
    file.write("\""+myAlbums[key]+"\",")
    file.write("\n") 
file.close()


# CHANGE TRACK NAMES
for ALBUM in ALBUMS:
    os.chdir(ROOT_DIRECTORY)
    if not os.path.isfile(ALBUM):
        print(" ")
        print(ALBUM)
        os.chdir(ROOT_DIRECTORY+"\\"+ALBUM)
        #print(os.getcwd())
        TRACKS=sorted(os.listdir())
        #print(TRACKS)
        count=0
        toolong=False
        for TRACK in TRACKS:
            #print(TRACK)
            NEWTRACK=TRACK
            if TRACK.lower().endswith('.mp3'):
                count=count+1
                NEWTRACK=processTrackName(TRACK,count)
                if len(NEWTRACK)>MAX_NAME_LEN:
                    print(">**contains long filenames")
            if (not os.path.isdir(TRACK)) and (not TRACK.lower().endswith('.jpg')) and (not TRACK.lower().endswith('.mp3')):
                os.remove(TRACK)
            if (TRACK.lower().endswith('.jpg')) and (len(TRACK)>MAX_NAME_LEN):
                os.remove(TRACK)
            else:    
                if TRACK.lower().endswith('.jpg') and not os.path.isfile(ALBUM+".jpg"):
                    NEWTRACK=ALBUM+".jpg"
            #print (NEWTRACK)
            if (NEWTRACK!=TRACK):
                os.rename(TRACK,NEWTRACK)
 



     
