def _get_epub(id, chapter): try: ebook = Ebook.objects.get(pk=id) except Ebook.DoesNotExist: raise Http404 epub = open_epub(ebook.filename) chapters = epub.chapters() try: chapter = int(chapter) chapter_name = chapters[chapter] except (IndexError, ValueError): raise Http404 paragraphs = epub.get(chapter_name) return ebook, epub, chapters, paragraphs, chapter
def _book_scan(existing_files, mime_cache): files_in_db = set(asfsunicode(x) for x in Ebook.objects.values_list('filename', flat=True)) to_add = existing_files.difference(files_in_db) to_remove = files_in_db.difference(existing_files) # Add files not yet in DB scan_message("Adding books...") for filename in to_add: ok = (filename.endswith('.epub') or filename.endswith('.txt') or filename.endswith('.txt.gz') or filename.endswith('.txt.bz2')) if not ok: continue title = os.path.splitext(os.path.basename(filename))[0] author = None try: pub = open_epub(filename) title = pub.title[:128] author = pub.author[:128] except: # Failed to parse scan_message("Failed to open Epub file %r" % (filename,)) continue scan_message("Adding book: %r" % (filename,)) ebook = Ebook(filename=filename, title=title, author=author) ebook.save() # Remove non-existent entries scan_message("Cleaning up non-existing books...") for filename in to_remove: Ebook.objects.filter(filename=filename).delete()