EBook-Reader

Application description from a users perspective
Scene 1: Splash image and 3 buttons:

.. Where I left off ... -- Opens the last book you read at the place you stopped.

.. Bookmarks ... -- opens a list of the books you have bookmarks in and lets you open them to there. -- previews 2 lines above and below bookmark.

... Library ... -- opens a scrollable page of "shelves" Each shelf has a label which is user defined, and each shelf presents the books on it as a coverflow. Books can be moved between shelves by dragging and dropping. Each shelf has a context menu to control order, title, author or user defined. If user defined menu will present shelf as a draggable list instead of a coverflow when you want to re-order books. backswipe returns to coverflow.

in either the bookmarks view, tapping a book takes you to either the bookmark or the title page. upswipe downswipe provide smooth scrolling. Left and right swipe provide page at a time scrolling. Back swipe in gesture offers to bookmark with a dialog and returns to the shelf you came from.

When on a book, top left menu presents presentation options, which can be set book by book or globally. Type face (if I can figure out how), size, leading, justification, colors etc..

Images default to no larger than 1/4 screen, but touch results in lightbox like zoom.

Menu at splash or library offers import, and delete of books. When in a shelf, books can be deleted by dragging them to the recycle.

Features Wish List

 * 1) on-pc conversion of various formats to pre-compatible format -probably using plucker distiller. Should support
 * 2) html
 * 3) rde
 * 4) doc
 * 5) m4b
 * 6) pdb (palm-doc)
 * 7) pdb (isilo), prc (unencrypted mobipocket)
 * 8) prc (encrypted) # lots of people with a ton of fictionwise books want this
 * 9) epub
 * 10) plain text
 * 11) plucker
 * 12) .lit
 * 13) on Pre conversion of html and text docs by download from the cloud.
 * 14) Library supports user definable catagories for sorting and shelving
 * Shelves can be user defined to hold any collection of books a reader cares to:
 * 1) * By author
 * 2) * By Genre
 * 3) * By Geography
 * 4) * By cover color
 * 5) * By Series # very useful to group books in a series together
 * The user should define the sorting catagories. Shelf design can initially be a scroll list like the Contacts app.
 * 1) Book display page is minimally invasive making the most space available to read on as possible
 * 2) Typography is bifocal friendly. User definable print sizes, and if possible type faces.
 * 3) user defined foreground/background colors for text.
 * 4) Sepia
 * 5) Night mode
 * 6) Adjust screen brightness
 * 7) multiple bookmarks per doc.
 * 8) shallow menus
 * 9) smooth scrolling or page-at-a-time scrolling by gestures.
 * 10) plucker style button-based scrolling
 * 11) swipe gesture based scrolling
 * 12) auto-scrolling with user adjustable speed
 * 13) Pause auto-scrolling by tapping gesture area
 * 14) page turn on screen tap option
 * 15) support for covers.
 * 16) coverflow view of shelves.
 * 17) easy rapid sorting of books onto shelves.
 * 18) Change text size
 * 19) Possibly be able to add books over Wi-Fi
 * 20) Copy & Paste words
 * 21) Dictionary search implemented
 * 22) Support for rotation
 * 23) Portrait and Landscape views (at least for the reading screen)
 * 24) Auto adjust gesture orientation to match view
 * 25) Include a rotation "lock" to prevent unwanted rotations (or just ignore the accelerometer and make it a button or gesture controlled rotation)

Data Structure
Table: Catalog
 * catalogId:  (globally unique ID - a system generated number)
 * Title: string
 * Author: string
 * Genre: string
 * catalogType: (B,S - book or series)
 * ShelfId:
 * CoverImage: Filename
 * Encrypted: boolean
 * Format: string (book format)

Table: BookSeries
 * bookseriesId:  (globally unique ID - a system generated number)
 * catSeriesId:  (must be present in book table and the catType must be 'S')
 * catBookId:  (must be present in book table and the catType must be 'B')

Table: Bookmarks
 * bkmkId:
 * bookId:  (must be present in book table)
 * Position:  ( an integer, refering to the character in the file at the top of the screen.)

Table: BookShelf
 * shelfId:
 * ShelfName:
 * ShelfOrder: (A, T, or U) Representing Author, Title or User Set

Table ShelfOrder
 * shelfId:
 * bookId:
 * position: (integer representing the position of this book on this shelf)

Table: BookText
 * BookId:
 * BookText:

Data Issues

 * This structure does not provide for books stored as chapters. This structure presumes a book is a single document.  That document might have internal chapter indicators, but this structure does not divide the book up.
 * This structure makes no provision for the internal storage of images.
 * Should we actually store the text of the book in the DB or do we leave the book on the file system and just store a link to it?
 * Correct me if i am wrong, but the current SDK does not allow for writing files to the file system, so the database would be the best and sort-of only way to do it. Also, the ajax request is a little slow, the database might show better performance loading.

There is some point, therefore to consider if in booktext, we want to simply store a plucker file, which CAN contain images and text intermingled.

Book Format Issues

 * Can javascript on the device natively parse/navigate all of the above list formats?
 * No.
 * Can javascript on the device effectively parse/navigate the plucker format (if we settle on this one), or do we need our own format?
 * Perhaps. plucker decoding sources in JAVA at  http://www.fbreader.org/downloads.php
 * Possible ePub since it's basically XHTML? - ePub makes the most sense as a format. It's completely open, and it's really just HTML inside the file.
 * Once we settle on a format, will the device be powerful enough to convert other formats to this one, or will we need a PC app to do the converting?
 * on pc app
 * some scripts found so far:
 * ereader2html -- python app, same as plucker converters.
 * pdbshred -- Binary app for unencrypting secure palm reader pdb's.  Sorry.
 * Shouldn't reinvent the wheel. Use calibre for conversion, it's available on all platforms http://calibre.kovidgoyal.net/
 * (include others as you find them)
 * Has anyone found a free and open source method to unzip files or data streams in javascript??
 * all i have found is a page that refers to the huffman compression technique (http://rumkin.com/tools/compression/compress_huff.php), but i don't know if that is how epub files are zipped and i don't know if we can get our hands on the source.
 * note that this page says that compressing 15K takes MINUTES...  ooops.  :-(  Not going to work
 * Can we access the Linux command line? Awk and sed could do for some of the conversion, and gzip for the zipping/unzipping. -FreeTim