def handle(self, *args, **options): self.quiet = options.get("quiet") serial_nr = int(time.time()) os.chdir(EBOOK_PATH) ### # Alle Top-Level Directories indexieren for d in os.listdir(u"."): if not os.path.isdir(d) or d.startswith("."): continue try: directory = Directory.objects.get(dirname=d, parent=None) except Exception: directory = Directory( name=d.replace('_', ' '), dirname=d, ) directory.serial = serial_nr directory.save() if not self.quiet: print "== %s" % directory self.update_directory(directory, serial_nr) #### # Nicht existierende Verzeichnisse Ebooks werden entfernt if not self.quiet: print "Suche nach Ebooks die nicht mehr existieren" ser = serial_nr for ebook in Ebook.objects.exclude(serial=ser): if not self.quiet: print ebook.filename ebook.delete() for directory in Directory.objects.exclude(serial=ser): if not self.quiet: print directory.dirname directory.delete()
def update_directory(self, directory, serial): """ Dursucht ein Verzeichnis rekursiv und fügt neue Ebooks hinzu und aktualisiert die Serial von existierenden Verzeichnissen und Ebooks """ for entry in os.listdir(directory.get_relative_path()): entry_path = os.path.join(directory.get_relative_path(), entry) if os.path.isdir(entry_path): ### # Ein Verzeichnis, welches indiziert werden muss try: subdirectory = Directory.objects.get(dirname=entry, parent=directory) except Exception: subdirectory = Directory( name=entry.replace('_', ' '), dirname=entry, parent=directory, ) subdirectory.serial = serial subdirectory.save() if not self.quiet: print ">> %s" % subdirectory self.update_directory(subdirectory, serial) else: ### # Es ist ein potentielles Ebook if not self.quiet: print "---> %s" % entry_path current_directory = directory # Index-Dateien ausschließen isIndexfile = re.match("^\.fileinfo\..*$", entry) if isIndexfile: continue # Dateiendung extrahieren entry_file_ending = "" matched_ending = re.match(".*\.(.*)$", entry) if matched_ending: entry_file_ending = matched_ending.groups(0)[0] try: ebook = Ebook.objects.get(filename=entry, directory=current_directory) except Exception: ### # Neues Ebook wird verarbeitet filesize = os.path.getsize(entry_path) md5hash = subprocess.Popen( ["md5sum", entry_path], stdout=subprocess.PIPE).communicate()[0].split( ' ')[0].strip() #print md5hash fileicon = 'file' if entry_file_ending in EXISTING_FILE_ICONS: fileicon = entry_file_ending ebook = Ebook( name=entry, filename=entry, icon=fileicon, directory=current_directory, size=filesize, hasThumbnail=False, hashvalue=md5hash, ) ebook.serial = serial ebook.save()
def update_directory(self, directory, serial): """ Dursucht ein Verzeichnis rekursiv und fügt neue Ebooks hinzu und aktualisiert die Serial von existierenden Verzeichnissen und Ebooks """ for entry in os.listdir(directory.get_relative_path()): entry_path = os.path.join(directory.get_relative_path(), entry) if os.path.isdir(entry_path): ### # Ein Verzeichnis, welches indiziert werden muss try: subdirectory = Directory.objects.get(dirname=entry, parent=directory) except Exception: subdirectory = Directory( name=entry.replace('_', ' '), dirname=entry, parent=directory, ) subdirectory.serial = serial subdirectory.save() if not self.quiet: print ">> %s" % subdirectory self.update_directory(subdirectory, serial) else: ### # Es ist ein potentielles Ebook if not self.quiet: print "---> %s" % entry_path current_directory = directory # Index-Dateien ausschließen isIndexfile = re.match("^\.fileinfo\..*$", entry) if isIndexfile: continue # Dateiendung extrahieren entry_file_ending = "" matched_ending = re.match(".*\.(.*)$", entry) if matched_ending: entry_file_ending = matched_ending.groups(0)[0] try: ebook = Ebook.objects.get( filename=entry, directory=current_directory) except Exception: ### # Neues Ebook wird verarbeitet filesize = os.path.getsize(entry_path) md5hash = subprocess.Popen( ["md5sum", entry_path], stdout=subprocess.PIPE).communicate()[0].split(' ')[0].strip() #print md5hash fileicon = 'file' if entry_file_ending in EXISTING_FILE_ICONS: fileicon = entry_file_ending ebook = Ebook( name=entry, filename=entry, icon=fileicon, directory=current_directory, size=filesize, hasThumbnail=False, hashvalue=md5hash, ) ebook.serial = serial ebook.save()