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')
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