Example #1
0
    def downloadKWorbSpotifyYouTubeArtists(self, update=False):
        url = "https://kworb.net/youtube/archive.html"
        savename = "kworb_youtubeartists.p"
        if update is True:
            self.dutils.downloadArtistURL(url=url,
                                          savename=savename,
                                          force=True)

        bsdata = getHTML(savename)
        data = []
        artistDir = self.disc.getArtistsDir()
        saveDir = setDir(artistDir, "youtube")
        print(artistDir)
        for table in bsdata.findAll("table"):
            ths = [th.text for th in table.findAll("th")]
            for tr in table.findAll("tr")[1:]:
                item = dict(zip(ths, tr.findAll("td")))
                data.append(item)

        print(data)

        if False:
            bsdata = getHTML(savename)
            artistDir = self.disc.getArtistsDir()
            saveDir = setDir(artistDir, "youtube")
            for div in bsdata.findAll("div", {"class": "subcontainer"}):
                if div.find("span", {"class": "pagetitle"}) is None:
                    continue
                for ref in div.findAll("a"):
                    href = ref.attrs['href']
                    url = "{0}/{1}".format(self.youtubeURL, href)
                    savename = "{0}/{1}".format(saveDir,
                                                href.replace(".html", ".p"))
                    if isFile(savename):
                        print("Y\t", savename, '\t', url)
                    else:
                        print("-\t", savename, '\t', url)
                        #dbArtistsKWorb().dutils.downloadArtistURL(url=fullURL, savename=savename, force=True)

            for ifile in findExt(saveDir, ".p"):
                bsdata = getHTML(ifile)
                for table in bsdata.findAll("table"):
                    trs = table.findAll("tr")
                    for tr in trs[1:]:
                        ref = tr.find("a")
                        href = ref.attrs['href']
                        name = ref.text
                        url = "{0}/{1}".format(self.youtubeURL, href)
                        savename = "{0}/{1}".format(
                            setDir(saveDir, "artist"),
                            href.replace(".html", ".p"))
                        print(url, savename)

                        if isFile(savename) is False:
                            data, code = downloadURL(url)
                            from ioUtils import getFile, saveFile
                            saveFile(idata=data, ifile=savename)
                            sleep(3)
                            break
Example #2
0
    def findMyMusic(self, primeDir=None, artistName=None):
        artistAlbums = {}
        if primeDir is None and artistName is None:
            ts = timestat("Find PrimeDir Artist Paths")
            pdPaths = {
                pd: pdpath
                for pd, pdpath in
                {pd: setDir(self.musicDir, pd)
                 for pd in self.pdDirs}.items() if dirUtil(pdpath).isDir()
            }
            pdArtistPaths = {
                pd: findDirs(pdpath)
                for pd, pdpath in pdPaths.items()
            }
            artistPaths = {
                fsap.name: fsap.path
                for fsap in
                [dirUtil(ap) for ap in getFlatList(pdArtistPaths.values())]
            }
            artistAlbums = {
                artistName: self.getArtistPathData(artistName, artistPath)
                for artistName, artistPath in artistPaths.items()
            }
            print("  Found {0} Artists From {1} Prime Directories".format(
                len(artistAlbums), len(pdArtistPaths)))
            ts.stop()
        elif primeDir is not None:
            ts = timestat(
                "Finding All Artist Albums From [{0}] Prime Directory".format(
                    primeDir))
            pdPaths = {
                pd: pdpath
                for pd, pdpath in
                {pd: setDir(self.musicDir, pd)
                 for pd in [primeDir]}.items() if dirUtil(pdpath).isDir()
            }
            pdArtistPaths = {
                pd: findDirs(pdpath)
                for pd, pdpath in pdPaths.items()
            }
            artistPaths = {
                fsap.name: fsap.path
                for fsap in
                [dirUtil(ap) for ap in getFlatList(pdArtistPaths.values())]
            }
            artistAlbums = {
                artistName: self.getArtistPathData(artistName, artistPath)
                for artistName, artistPath in artistPaths.items()
            }
            print("  Found {0} Artists From [{1}] Prime Directory".format(
                len(artistAlbums), primeDir))
            ts.stop()
        elif artistName is not None:
            ts = timestat("Finding [{0}] Artist Albums".format(artistName))
            artistAlbums = self.getArtistPathData(artistName)
            ts.stop()

        self.artistAlbums = artistAlbums
        return artistAlbums
Example #3
0
def getArtistNameDirvalsMap(artistName):
    primeDir   = getPrimeDirectory(artistName)
    dirvals    = []
    for matchedDir in getMatchedDirs():
        primeDirVal = setDir(matchedDir, primeDir)
        possibleDir = setDir(primeDirVal, normalize('NFC', artistName), forceExist=False)
        if isDir(possibleDir):
            dirvals.append(possibleDir)
    return dirvals
Example #4
0
 def getArtistMusicDir(self, artistName):
     primeDirs = [setDir(musicDir, self.getPrimeDirectory(artistName)) for musicDir in self.musicDirs]
     artistMusicDirs = [setDir(primeDir, artistName) for primeDir in primeDirs]
     artistMusicDirs = [x for x in artistMusicDirs if isDir(x)]
     if len(artistMusicDirs) > 1:
         raise ValueError("Found more than one artist music directories...")
     elif len(artistMusicDirs) == 1:
         return artistMusicDirs[0]
     else:
         return None
Example #5
0
    def moveMyMatchedMusicAlbums(self, show=False):
        rename = True
        albumsToMove = getFile(ifile=self.moveFilename)
        print("Found {0} music <-> discogs albums maps".format(
            len(albumsToMove)))

        for db, dbValues in albumsToMove.items():
            if dbValues is None:
                continue
            for artistName, artistAlbums in dbValues.items():
                print("==>", artistName)
                for myAlbumName, albumVals in artistAlbums.items():
                    dirval = albumVals["Dir"]
                    albumVal = albumVals["Album"]
                    ratio = albumVals["Ratio"]

                    dbAlbumName = albumVal["Name"]
                    dbAlbumCode = albumVal["Code"]
                    mediaType = albumVal["MediaType"]

                    matchedDir = setDir(dirval, "Match")
                    mkDir(matchedDir)

                    srcName = myAlbumName
                    srcDir = setDir(dirval, srcName)
                    if not isDir(srcDir):
                        print("{0} does not exist".format(srcDir))
                        continue

                    mediaDir = setDir(matchedDir, self.discConv(mediaType))
                    mkDir(mediaDir)

                    if rename is True:
                        dstName = self.getMatchedDirName(
                            self.discConv(dbAlbumName), dbAlbumCode, db)
                    else:
                        dstName = self.getMatchedDirName(
                            myAlbumName, dbAlbumCode, db)

                    if show is True:
                        print('\t{0}'.format(mediaDir))
                        print("\t\t[{0}]".format(srcName))
                        print("\t\t[{0}]".format(dstName))
                        continue

                    dstDir = setDir(mediaDir, dstName)
                    if isDir(dstDir):
                        print("{0} already exists".format(dstDir))
                        continue

                    print("\tMoving {0}  --->  {1}".format(srcDir, dstDir))
                    moveDir(srcDir, dstDir, debug=True)
Example #6
0
def main(args):
    cwd = getcwd()

    albumSegments = {}
    discSegments = {}

    for ifile in findPattern("./", pattern="."):
        mid = mp3ID(ifile)

        try:
            mid = mp3ID(ifile)
        except:
            print("Error reading file {0}".format(ifile))
            continue
        album = mid.getAlbum()
        print("Album: {0}".format(album))
        if album is not None:
            album = album[0]
        if albumSegments.get(album) is None:
            albumSegments[album] = []
        albumSegments[album].append(ifile)

        disc = mid.getDiscNumber()
        if disc is not None:
            disc = disc[0]
        if discSegments.get(disc) is None:
            discSegments[disc] = []
        discSegments[disc].append(ifile)

    if args.album is True:
        print("Album Segments: {0}".format(albumSegments.keys()))
        for album, albumFiles in albumSegments.items():
            albumDir = setDir(cwd, album)
            mkDir(albumDir)
            for ifile in albumFiles:
                src = ifile
                dst = setFile(albumDir, getBasename(ifile))
                print("Moving [{0}] to [{1}]".format(src, dst))
                moveFile(src, dst, debug=True)

    if args.disc is True:
        print("Disc Segments: {0}".format(discSegments.keys()))
        for disc, discFiles in discSegments.items():
            discDir = setDir(cwd, "Disc {0}".format(disc))
            mkDir(discDir)
            for ifile in discFiles:
                src = ifile
                dst = setFile(discDir, getBasename(ifile))
                #print("Moving [{0}] to [{1}]".format(src, dst))
                moveFile(src, dst, debug=True)
Example #7
0
    def getArtistModValFiles(self, modVal, previousDays=5, force=False):
        artistDir = self.disc.getArtistsDir()
        maxModVal = self.disc.getMaxModVal()
                    
        artistDBDir = self.disc.getArtistsDBDir()        
        
        dirVal = setDir(artistDir, str(modVal))
        files  = findExt(dirVal, ext='.p')
        dbname = setFile(artistDBDir, "{0}-DB.p".format(modVal))
        
        now    = datetime.now()
        if isFile(dbname):
            lastModified = datetime.fromtimestamp(path.getmtime(dbname))
            if force is True:
                lastModified = None
        else:
            lastModified = None

        newFiles = None
        if lastModified is None:
            newFiles = files
            print("  ===> Parsing all {0} files for modval {1}".format(len(newFiles), modVal))
        else:
            numNew    = [ifile for ifile in files if (now-datetime.fromtimestamp(path.getmtime(ifile))).days < previousDays]
            numRecent = [ifile for ifile in files if datetime.fromtimestamp(path.getmtime(ifile)) > lastModified]
            newFiles  = list(set(numNew).union(set(numRecent)))
            print("  ===> Found new {0} files (< {1} days) to parse for modval {2}".format(len(newFiles), previousDays, modVal))
        return newFiles
Example #8
0
 def __init__(self, debug=False):
     self.db     = "DatPiff"
     self.disc   = dbBase(self.db.lower())
     self.artist = artistDP(self.disc)
     self.dutils = datpiffUtils()
     self.dutils.setDiscogs(self.disc)
     self.debug  = debug
     
     ## MultiArtist
     self.mulArts  = multiartist()
     
     print("DatPiff ArtistsDir: {0}".format(self.disc.getArtistsDir()))
     if not isDir(self.disc.getArtistsDir()):
         raise ValueError("Could not find artist dir for DatPiff")
     self.knownDir  = setDir(self.disc.getArtistsDir(), "known")
     if not isDir(self.knownDir):
         print("Make sure that Piggy is loaded!!!")
         raise ValueError("Could not find known [{0}] dir for DatPiff".format(self.knownDir))
     self.knownFile = setFile(self.knownDir, "datPiffKnown.p")
     if not isFile(self.knownFile):
         raise ValueError("Known File [{0}] does not exist".format(self.knownFile))
     
     self.baseURL   = "https://www.datpiff.com/"
     self.searchURL = "https://www.datpiff.com/mixtapes-search?"
     
     super().__init__(self.db, self.disc, self.artist, self.dutils, debug=debug)
Example #9
0
def actionOnAlbum(albumDir, artistDir, retval):

    if any([retval["Skip"], retval["Extra"]]):
        return

    ## Set Needed Directories
    todoDir = setDir(artistDir, "Todo", forceExist=False)
    multiDir = setDir(artistDir, "Multi", forceExist=False)
    titleDir = setDir(artistDir, "Title", forceExist=False)
    randomDir = setDir(artistDir, "Random", forceExist=False)
    mixDir = setDir(artistDir, "Mix", forceExist=False)

    testTitle = retval["Title"]
    testTitle = False
    testTrackNo = retval["Track"]
    testMulti = retval["Multi"]
    testMix = retval["Mix"]

    #print(testTitle,testTrackNo,testMulti)

    if testTitle is True:
        if not isDir(titleDir):
            mkDir(titleDir)
        srcdir = albumDir
        dstdir = setDir(titleDir, getDirBasics(albumDir)[-1])
        print("!!! Moving {0}  ==> {1}".format(srcdir, dstdir))
        sleep(1)
        moveDir(srcdir, dstdir)
    elif testMix is True:
        if not isDir(mixDir):
            mkDir(mixDir)
        srcdir = albumDir
        dstdir = setDir(mixDir, getDirBasics(albumDir)[-1])
        print("!!! Moving {0}  ==> {1}".format(srcdir, dstdir))
        sleep(1)
        moveDir(srcdir, dstdir)
    elif testTrackNo is True:
        if not isDir(todoDir):
            mkDir(todoDir)
        srcdir = albumDir
        dstdir = setDir(todoDir, getDirBasics(albumDir)[-1])
        print("!!! Moving {0}  ==> {1}".format(srcdir, dstdir))
        sleep(1)
        moveDir(srcdir, dstdir)
    elif testMulti is True:
        if not isDir(multiDir):
            mkDir(multiDir)
        srcdir = albumDir
        dstdir = setDir(multiDir, getDirBasics(albumDir)[-1])
        print("!!! Moving {0}  ==> {1}".format(srcdir, dstdir))
        sleep(1)
        moveDir(srcdir, dstdir)
Example #10
0
    def __init__(self, install=False, debug=False):
        self.debug = debug
        print("{0} masterMultiArtistDB() {1}".format("=" * 25, "=" * 25))
        self.debug = debug

        self.io = fileIO()
        self.multiArtistDir = setDir(prefix, 'multiartist')
        self.initializeData() if install is False else self.installData()
Example #11
0
    def __init__(self, db, debug=False):
        if debug:
            print("=" * 25, "  {0}  ".format(db), "=" * 25)
        self.base = db
        self.debug = debug
        self.dbsavepath = setDir("/Users/tgadfort/Music",
                                 "Discog",
                                 forceExist=False)
        self.metasavepath = setDir("/Users/tgadfort/Music",
                                   "Discog",
                                   forceExist=False)
        self.rawsavepath = setDir("/Volumes/Piggy", "Discog", forceExist=False)

        self.maxModVal = 100
        self.io = fileIO()

        self.createDirectories()
Example #12
0
 def getArtistModValExtraFiles(self, modVal, previousDays=5, force=False):
     artistDir = self.disc.getArtistsDir()
     maxModVal = self.disc.getMaxModVal()
                 
     artistDBDir = self.disc.getArtistsDBDir()        
     
     dirVal = setDir(artistDir, str(modVal))
     dirVal = setDir(dirVal, "extra")
     files  = findExt(dirVal, ext='.p')
     dbname = setFile(artistDBDir, "{0}-DB.p".format(modVal))
     
     now    = datetime.now()
     newFiles = None
     if lastModified is None:
         newFiles = files
         print("  ===> Parsing all {0} extra files for modval {1}".format(len(newFiles), modVal))
     else:
         numFiles = [ifile for ifile in files if (now-datetime.fromtimestamp(path.getmtime(ifile))).days < previousDays]
         print("  ===> Found new {0} extra files (< {1} days) to parse for modval {2}".format(len(newFiles), previousDays, modVal))
     return newFiles
Example #13
0
 def downloadRottenTomatoesTop100Data(self, genre, outdir, debug=False):
     baseurl = "https://www.rottentomatoes.com"
     outdir = setDir(self.getDataDir())
     if not isDir(outdir): mkDir(outdir)
     url = "/top/bestofrt/top_100_" + genre + "_movies/"
     url = baseurl + url
     savename = setFile(outdir, genre + ".p")
     if isFile(savename): return
     if debug:
         print("Downloading/Saving {0}".format(savename))
     getWebData(base=url, savename=savename, useSafari=False, dtime=10)
     sleep(2)
Example #14
0
 def parseDownloadedFiles(self):
     artistDir = self.disc.getArtistsDir()
     dataDir = setDir(artistDir, "data")
     files = findPatternExt(dataDir,
                            pattern="Discography and Albums",
                            ext=".htm")
     for ifile in files:
         htmldata = getFile(ifile)
         retval = self.getData(ifile)
         artistID = retval.ID.ID
         savename = self.getArtistSavename(artistID)
         saveFile(idata=htmldata, ifile=savename, debug=True)
Example #15
0
 def parseDownloadedFiles(self, previousDays=None, force=False):
     artistDir = self.disc.getArtistsDir()
     files = self.getArtistRawHTMLFiles(previousDays=None, force=False)
     return
     dataDir = setDir(artistDir, "data")
     files = findPatternExt(dataDir, pattern="Rate Your Music", ext=".html")
     for ifile in files:
         htmldata = getFile(ifile)
         retval = self.artist.getData(ifile)
         artistID = retval.ID.ID
         savename = self.dutils.getArtistSavename(artistID)
         saveFile(idata=htmldata, ifile=savename, debug=False)
Example #16
0
 def createDirnameDirectories(self, savedir, dirnames):
     localdirnames = dict(
         zip(dirnames, [setDir(savedir, x) for x in dirnames]))
     for name, dirname in localdirnames.items():
         if not isDir(dirname):
             print("Creating {0}".format(dirname))
             try:
                 mkDir(dirname, debug=True)
             except:
                 print("Cannot create {0}".format(dirname))
         else:
             if self.debug:
                 print("{0} exists".format(dirname))
     return localdirnames
Example #17
0
    def __init__(self,
                 musicDir="/Volumes/Piggy/Music/Matched",
                 install=False,
                 debug=False):
        self.debug = debug
        self.musicDir = musicDir

        print("=" * 25, "myMusicPathData({0})".format(musicDir), "=" * 25)

        ### My Music Directory Names
        self.artistAlbums = None
        self.pd = primeDirectory()
        self.pdDirs = self.pd.getPrimeDirectories()
        self.musicDataDir = setDir(prefix, 'music')
        self.initializeData() if install is False else self.installData()
Example #18
0
 def getModValDir(self, modVal):
     artistDir = self.disc.getArtistsDir()
     maxModVal = self.disc.getMaxModVal()
     artistDBDir = self.disc.getArtistsDBDir()
     dirVal = setDir(artistDir, str(modVal))
     if self.credit is True:
         dirVal = setDir(dirVal, "credit")
     elif self.song is True:
         dirVal = setDir(dirVal, "song")
     elif self.composition is True:
         dirVal = setDir(dirVal, "composition")
     elif self.extra is True:
         dirVal = setDir(dirVal, "extra")
     elif self.unofficial is True:
         dirVal = setDir(dirVal, "unofficial")
     return dirVal
Example #19
0
def main(args):
    if args.dir is None:
        args.dir = getcwd()

        #retval = testAlbum(albumDir, artistDir, files=filevals)

    albumDirs = findDirs(args.dir)
    for albumDir in albumDirs:
        if getDirBasics(albumDir)[-1] != "Album":
            continue
        pb = pathBasics(albumDir=albumDir)
        files = pb.getFiles()
        print("\n")
        print("=" * 60)
        print("===", albumDir, "===")
        print("=" * 60)
        for subalbumDir, filevals in files.items():
            #print(subalbumDir,len(filevals))

            albumName = Counter()
            for ifile in filevals:
                results = MusicID(ifile, debug=args.debug)
                if results.skip is True:
                    continue
                tags = results.getInfo()
                albumVal = tags["Album"][0]
                albumName[albumVal] += 1

            if len(albumName) != 1:
                continue
            albumName = albumName.most_common(1)[0][0]
            albumName = albumName.replace("/", " ")
            srcDir = subalbumDir
            dstDir = setDir(albumDir, albumName)
            if isDir(dstDir):
                continue

            #print("Moving {0}  ==> {1}\n\n".format(srcDir, dstDir))
            print("\nmv \"{0}\" \"{1}\"\n".format(srcDir, dstDir))
Example #20
0
    def downloadKWorbSpotifyArtists(self, update=False):
        url = "https://kworb.net/spotify/artists.html"
        savename = "kworb_spotifyartists.p"
        if update is True:
            self.dutils.downloadArtistURL(url=url,
                                          savename=savename,
                                          force=True)

        bsdata = getHTML(savename)
        data = []
        artistDir = self.disc.getArtistsDir()
        saveDir = setDir(artistDir, "data")
        print(artistDir)
        for table in bsdata.findAll("table"):
            ths = [th.text for th in table.findAll("th")]
            for tr in table.findAll("tr")[1:]:
                item = dict(zip(ths, tr.findAll("td")))
                data.append(item)

        print("Found {0} Spotify Artists".format(len(data)))
        for i, item in enumerate(data):
            info = item["Artist"]
            url = info.find('a').attrs['href']
            name = info.find('a').text
            savename = setFile(saveDir, "{0}.p".format(getBaseFilename(url)))
            if isFile(savename):
                continue
                print("Y\t", savename, '\t', url, '\t', name)
            else:
                fullURL = "{0}/{1}".format(self.spotifyURL, url)
                print("{0}/{1}".format(i, len(data)), "\t-\t", savename, '\t',
                      fullURL, '\t', name)
                try:
                    self.dutils.downloadArtistURL(url=fullURL,
                                                  savename=savename,
                                                  force=True)
                except:
                    print("  ---> Error")
                    sleep(1)
Example #21
0
 def getMyOtherMusicAlbums(self, dirval, mname):
     return getFlatList([[p for p in findDirs(setDir(dirval, mdirval))]
                         for mdirval in self.mdirmap.getMapping(mname)])
Example #22
0
 def getResultsDir(self):
     dirname = setDir(self.getMovieDBDir(), self.resultsdir)
     if not isDir(dirname): mkDir(dirname)
     return dirname
Example #23
0
 def getDataDir(self):
     dirname = setDir(self.getMovieDBDir(), self.datadir)
     if not isDir(dirname): mkDir(dirname)
     return dirname
Example #24
0
    def parseArtistModValFiles(self, modVal, previousDays=5, force=False, debug=False, doExtra=False):        
        print("-"*100)
        print("Parsing Artist Files For ModVal {0}".format(modVal))
        artistInfo = self.artist

        artistDir = self.disc.getArtistsDir()
        maxModVal = self.disc.getMaxModVal()
                    
        artistDBDir = self.disc.getArtistsDBDir()        
        
        dirVal = setDir(artistDir, str(modVal))
        dbname = setFile(artistDBDir, "{0}-DB.p".format(modVal))

        
        newFiles = self.getArtistModValFiles(modVal, previousDays=previousDays, force=force)
        if force is False:
            dbdata = getFile(dbname, version=3)
        else:
            print("Forcing Reloads of ModVal={0}".format(modVal))
            print("  Processing {0} files.".format(len(newFiles)))
            dbdata = {}
 
        saveIt = 0
        for j,ifile in enumerate(newFiles):
            if force is True:
                if j % 100 == 0:
                    print("\tProcessed {0}/{1} files.".format(j,len(newFiles)))
            artistID = getBaseFilename(ifile)
            isKnown  = dbdata.get(artistID)
            info   = artistInfo.getData(ifile)

            if info.ID.ID != artistID:
                print("File: {0}".format(ifile))
                print(info.show())
                1/0

                # Check Profile
                try:
                    artistName = info.profile.search
                    if artistName is not None:
                        self.creditToDownload[artistID] = [artistName,self.getArtistSavename(artistID, credit=True)]
                except:
                    pass

                if debug is False:
                    continue
                print("ID From Name: {0}".format(artistID))
                print("ID From File: {0}".format(info.ID.ID))

                print("File: {0}".format(ifile))
                print("Info: {0}".format(info.url.get()))
                continue
                #1/0

            saveIt += 1
            dbdata[artistID] = info

               
        forceSave = False
        if saveIt > 0 and doExtra is True:
            print("\tCalling Extra Parsing")
            dbdata = self.parseArtistModValExtraFiles(modVal, dbdata=dbdata, force=force, debug=debug)
            forceSave = True
            saveIt = len(dbdata)
            
         
        if len(self.creditToDownload) > 0:
            print("Found {0} artists that need new downloads.".format(len(self.creditToDownload)))
        

        if saveIt > 0 or forceSave is True:
            savename = setFile(artistDBDir, "{0}-DB.p".format(modVal))     
            print("Saving {0} new artist IDs to {1}".format(saveIt, savename))
            dbNumAlbums = sum([self.getArtistNumAlbums(artistData) for artistData in dbdata.values()])
            print("Saving {0} total artist media".format(dbNumAlbums))
            saveFile(idata=dbdata, ifile=savename)
            
            self.createArtistModValMetadata(modVal=modVal, db=dbdata, debug=debug)
            self.createArtistAlbumModValMetadata(modVal=modVal, db=dbdata, debug=debug)
            
        return saveIt
Example #25
0
 def getArtistPrimeDir(self, artistName):
     return setDir(self.musicDir, self.pd.getPrimeDirectory(artistName))
Example #26
0
def main(args):
    args = addDefault(args)

    print('Artist      = {!r}'.format(args.artist))
    print('Album       = {!r}'.format(args.album))
    print('Class       = {!r}'.format(args.cls))
    print('Dir         = {!r}'.format(args.dir))

    if args.artist is True:
        pb = pathBasics(artistDir=args.dir)
    elif args.album is True:
        pb = pathBasics(albumDir=args.dir)
    elif args.cls is True:
        pb = pathBasics(classDir=args.dir)
    else:
        raise ValueError("Can only run with -artist, -album, or -class!")

    actions = {}

    files = pb.getFiles()
    for i, (dirval, filevals) in enumerate(files.items()):
        print("\nDirectory: {0}".format(dirval))
        header()
        j = 0

        errs = {}
        for jf, ifile in enumerate(filevals):
            results = MusicID(ifile, debug=args.debug)
            if results.skip is True:
                continue
            tags = results.getInfo()
            r = tags
            pbc = pb.getPaths(ifile).getDict()
            errs[ifile] = {}
            j += 1

            p([
                j, r["DiscNo"], r["TrackNo"], r["AlbumArtist"], r["Artist"],
                r["Album"], r["Title"], r["Size"]
            ])
            if args.showpath is True:
                p([
                    j, pbc["pbDisc"], None, pbc["pbArtist"], pbc["pbArtist"],
                    pbc["pbAlbum"], pbc["pbFile"], None
                ])

            #print(pbc)

            if r["AlbumArtist"][0] == pbc["pbArtist"]:
                pass
            else:
                if pbc["pbAlbum"] in skipDirs():
                    pass
                elif tags["AlbumArtist"][0].replace("/",
                                                    "-") == pbc["pbArtist"]:
                    pass
                else:
                    errs[ifile]["Artist"] = {
                        "Tag": r["Artist"][0],
                        "Path": pbc["pbArtist"]
                    }

            if r["Album"][0] == pbc["pbAlbum"]:
                pass
            else:
                if pbc["pbAlbum"] in skipDirs():
                    pass
                else:
                    errs[ifile]["Album"] = {
                        "Tag": r["Album"][0],
                        "Path": pbc["pbAlbum"]
                    }

        if args.force is not None:
            for ifile, fileData in errs.items():
                if actions.get(dirval) is not None:
                    continue
                if not isFile(ifile):
                    continue
                for category, errData in fileData.items():
                    if args.force.title() == category:
                        print("Mismatch: {0}".format(args.force.title()))
                        print("File:     {0}".format(ifile))
                        print("Tag:      [{0}]".format(errData["Tag"]))
                        print("Path:     [{0}]".format(errData["Path"]))
                        if args.usetag is True:
                            srcdir = dirval
                            if "/" in errData["Tag"]:
                                print("Found / in Tag. Converting to -")
                                errData["Tag"] = errData["Tag"].replace(
                                    "/", "-")
                            if "\"" in errData["Tag"]:
                                print("Found \" in Tag. Converting to -")
                                errData["Tag"] = errData["Tag"].replace(
                                    "\"", "")

                            dstdir = setDir(getDirname(dirval), errData["Tag"])
                            print(
                                "Set option to move directory based on the {0} tag"
                                .format(category))
                            print("Moving {0}".format(srcdir))
                            if isDir(dstdir):
                                print("=" * 40)
                                print(
                                    "== Not moving because there is already a directory with that name..."
                                )
                                print("=" * 40)
                                break

                            print("    to {0}".format(dstdir))
                            if "/" in errData["Path"]:
                                print("=" * 40)
                                print(
                                    "== Not moving because there is a sub directory..."
                                )
                                print("=" * 40)
                                break

                            if args.script is False:
                                print("Sleeping for 3 seconds")
                                for i in range(3):
                                    print(".", end="")
                                    sys.stdout.flush()
                                    sleep(1)
                                print("\n")
                                moveDir(srcdir, dstdir)
                                break
                            else:
                                actions[srcdir] = dstdir
                                break
                        else:
                            return

    if args.script is False:
        print("\n", "=" * 60, "\n")
        print("Looks Good")
        print("\n\n")
    else:
        if len(actions) > 0:
            print("#!/bin/sh\n", file=open("actions.sh", "w"))
            for srcdir, dstdir in actions.items():
                print("mv \"{0}\" \"{1}\"".format(srcdir, dstdir),
                      file=open("actions.sh", "a"))
            from os import chmod
            import stat
            chmod("actions.sh", stat.S_IRWXU)
        print("\n", "=" * 60, "\n")
        print("Looks Good")
        print("\n\n")
Example #27
0
 def getArtistMusicPath(self, artistName):
     artistPrimeDir = self.getArtistPrimeDir(artistName)
     artistMusicDir = setDir(artistPrimeDir, artistName)
     artistMusicDir = artistMusicDir if dirUtil(
         artistMusicDir).isDir() else None
     return artistMusicDir
Example #28
0
 def getCorrectionsDir(self):
     dirname = setDir(self.getMovieDBDir(), "corrections")
     if not isDir(dirname): mkDir(dirname)
     return dirname
Example #29
0
 def getModValDirs(self):
     modVals = self.getModVals()
     retval  = [setDir(self.getArtistsDir(), str(modVal)) for modVal in modVals]
     return retval
Example #30
0
    def parseArtistModValCreditFiles(self, modVal, dbdata=None, debug=False, force=False):
        print("\t","="*100)
        print("\t","Parsing Artist Credit Files For ModVal {0}".format(modVal))
        artistInfo = self.artist

        artistDir = self.disc.getArtistsDir()
        maxModVal = self.disc.getMaxModVal()
                    
        artistDBDir = self.disc.getArtistsDBDir()        
        
        dirVal = setDir(artistDir, str(modVal))
        dirVal = setDir(dirVal, "credit")
        files  = findExt(dirVal, ext='.p')
        
        if len(files) == 0:
            return dbdata
        print("\t","  Found {0} credit files for ModVal {1}".format(len(files), modVal))

        dbname = setFile(artistDBDir, "{0}-DB.p".format(modVal))
        retdbdata = False

        if dbdata is None:
            print("\t","  Loaded ", end="")
            dbdata = getFile(dbname, version=3)
            print("\t","{0} artist IDs.".format(len(dbdata)))
        else:
            retdbdata = True

        saveIt = 0
        
        nArtistMedia = {}
        print("\t","{0} artist IDs.".format(len(dbdata)))
        
        for j,ifile in enumerate(files):
            if force is True:
                if j % 500 == 0:
                    print("\t","\tProcessed {0}/{1} files.".format(j,len(files)))
            if debug:
                print("\t","{0}/{1} -- {2}.".format(j,len(files),ifile))
            
            info     = artistInfo.getData(ifile)
            artistID = info.ID.ID
            
            #currentMedia = sum([len(x) for x in dbdata[artistID].media.media.values()])
            #print(artistID,'\t',sum([len(x) for x in dbdata[artistID].media.media.values()]),end="\t")

            currentKeys = []
            if dbdata.get(artistID) is not None:
                currentKeys = list(dbdata[artistID].media.media.keys())
            else:
                dbdata[artistID] = info
                saveIt += 1
                continue
            
            keys = list(set(list(info.media.media.keys()) + currentKeys))
            for k in keys:
                v = info.media.media.get(k)
                if v is None:
                    continue
                iVal  = {v2.code: v2 for v2 in v}
                dVal  = dbdata[artistID].media.media.get(k)
                if dVal is None:
                    Tretval = iVal
                    saveIt += len(iVal)
                else:
                    Tretval = {v2.code: v2 for v2 in dVal}
                    Tretval.update(iVal)
                    saveIt += len(iVal)
                dbdata[artistID].media.media[k] = list(Tretval.values())
                
            if debug:
                print("\t","File:",j," \tArtist:",artistID,'-->',currentMedia,'to',sum([len(x) for x in dbdata[artistID].media.media.values()]))

                
        if retdbdata is True:
            return dbdata
        #if saveAll is False:
        #    return saveIt
                
                
        if saveIt > 0:
            savename = setFile(artistDBDir, "{0}-DB.p".format(modVal))
            print("\t","Saving {0} artists to {1}".format(len(dbdata), savename))
            print("\t","Saving {0} new (credit) artist media to {1}".format(saveIt, savename))
            dbNumAlbums = sum([self.getArtistNumAlbums(artistData) for artistData in dbdata.values()])
            print("\t","Saving {0} total (credit) artist media".format(dbNumAlbums))
            saveFile(idata=dbdata, ifile=savename)
            
            self.createArtistModValMetadata(modVal=modVal, db=dbdata, debug=debug)
            self.createArtistAlbumModValMetadata(modVal=modVal, db=dbdata, debug=debug)
            
        return saveIt