Beispiel #1
0
    def clean(self, event=None):
        inp = self.path.get()
        path = sm.getpath(inp)
        if not path:
            print("Can't find library at path '%s'" % inp)
            self.button.config(state='active', text='Library not find')
            return None

        self.button.config(text='Cleaning...', state='disabled')
        
        path = os.path.join(path, 'steamapps', 'common')

        deletedsize, deletedcount = removeredists(path)
              
        if deletedcount:
            update = '%s (%s files) saved' % (sm.bytesize(deletedsize), deletedcount)
            print(path + ': ' + update)
            self.button.config(state='active', text=update)
        else:
            print('No redundant files found in ' + path)
            self.button.config(state='active', text='Already clean :D')
Beispiel #2
0
    def getlibrary(self, side):
        '''Fetches library of given side ('l' or 'r')'''
        updateitem(self.info, 'No game selected. Double-click one from either library.')
        side, inp, lab, lis, bar = (
            ('left', self.ltype, self.llab, self.llis, self.lbar),
            ('right', self.rtype, self.rlab, self.rlis, self.rbar))[side == 'r']
        
        self.title('Finding %s library' % side)
        path = sm.getpath(inp.get())
        
        if path:
            updateitem(inp, path)
            gamespath = os.path.join(path, 'steamapps')
            self.title('Scanning %s library' % side)
            capacity, used, free = shutil.disk_usage(path)

            games = {} # List of library's game IDs.
            
            for i in os.listdir(gamespath):
                if not (i.endswith('.acf') and i.startswith('appmanifest_')):
                    continue
                ID = i[12:-4]
                downloaded = None
                if not ID in self.sources:
                    acfpath = os.path.join(gamespath, i)
                    with open(acfpath) as f:
                        f = f.readlines()
                        for line in f:
                            if 'buildid' in line:
                                # if it is "0", it is not downloaded
                                downloaded = re.findall('"buildid"\s+"(.+)"', line)[0]
                            elif 'installdir' in line:
                                gamepath = re.findall('"installdir"\s+"(.+)"', line)[0]
                            elif 'name' in line:
                                name = re.findall('"name"\s+"(.+)"', line)[0]
                            elif 'SizeOnDisk' in line:
                                size = int(re.findall('"SizeOnDisk"\s+"(.+)"', line)[0])
                            
                    if downloaded != '0':
                        self.sources[ID] = {'name': name, 'path': gamepath, 'size': size}
                        games[ID] = False
                else:
                    games[ID] = False
                
            lib = {'capacity': capacity, 'free': free, 'used': used, 'games': games,
                   'path': gamespath}

            self.canvas(bar, capacity, [
                       (bgcolor, 0, capacity),(usedcolor, 0, used)])
            updateitem(lab, '%s (%s free)' %
                       (sm.bytesize(capacity), sm.bytesize(free)))
            
            names = [self.name(ID) for ID in games]
            updateitem(lis, sorted(names,
                        key = lambda x: x.lower().replace('the ','').replace('a ','')))
        
        else:
            lib = False
            updateitem(lab, 'No drive found')
            updateitem(lis, defaultlist)
            self.canvas(bar, 1, [(bgcolor,0,1)])

        
        if side == 'right':
            self.rlib = lib
        else:
            self.llib = lib
        
        if lib:
            sm.thread(self.updatesizes, side) #Set process off to calculate sizes        
        self.title() # Clear title