Beispiel #1
0
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
Beispiel #2
0
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()