Coder Social home page Coder Social logo

pageturner's Introduction

Stories in Ready
PageTurner, the synchronizing ebook reader for Android

PageTurner is a free, open-source ebook reader that allows you to keep your reading progress synchronized across multiple devices. This means you can read a few pages on your phone, than grab your tablet continuing where you left off.

ee http://www.pageturner-reader.org/ for more info and some screenshots.

PageTurner is licensed under the GPL-V3 license.

Progress Synchronization

One of the key features of PageTurner is that it automatically syncs your reading progress across all your devices.

This is achieved through a JSON-based back-end service, which stores progress points in a database. There is a ready-to-use synchronization service running at api.pageturner-reader.org, but it requires an access key to use. Access keys can be obtained by donating to the project, or by contributing code, translations, etc. If you wish to run your own synchronization service, the code is available in the PageTurnerWeb project on Github.

There are also 2 versions of PageTurner available through the Google Play Market which have access keys built in:

  • PageTurner Reader is available for free from the Google Play Store. This version contains ads.
  • PageTurner Pro, a paid version, also available from the Google Play Store, removes ads.

Contributing

Since PageTurner is dual-licensed, we can only accept contributions under the Apache License or a similar Permissive license.

Unless specifically stated to be otherwise, all contributions will be assumed to be licensed under the Apache 2.0 license.

Building PageTurner

Install Java

PageTurner uses Java 8 lambda's through usage of the RetroLambda library.

Install the Android SDK

  1. Download at http://developer.android.com/sdk/index.html

  2. Unzip

  3. Update

    sdk/tools/android update sdk --no-ui

  4. On Ubuntu install ia32-libs

     apt-get install ia32-libs
    
  5. Add sdk/tools/ and sdk/platform-tools to your PATH

Install USB drivers for your device

  • Make sure adb devices shows your device, for example

    $ adb devices
    List of devices attached 
    015d18ad5c14000c        device
    

Example PATH setup in .bashrc

export ANDROID_HOME=$HOME/projects/adt-bundle-linux/sdk/
if [ $(uname -m) == 'x86_64' ]; then
    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
else
    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/jre
fi

PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

Gradle

PageTurner is now built using Gradle instead of Maven. If you want to use a local Gradle version, make sure it's at least version 2.1. The preferred way is to run the Gradle wrapper. This will automatically download the correct version of gradle to your system.

Run the Gradle wrapper by running

gradlew

Build PageTurner

Once everything is in place you can build PageTurner and install it on your device with

gradlew build
gradlew installDebug

Eclipse

Note: Building PageTurner in Eclipse is discouraged. We recommend using IntelliJ IDEA Community Edition instead, it imports Maven projects out of the box.

To use PageTurner in Eclipse, there are 2 options:

#The easy way

The recommended way to build PageTurner in Eclipse is using the m2e-android plugin.

There is a screencast here that shows how to set up your environment: http://www.youtube.com/watch?v=jhSvwpwPFoY

#The hard way

You can follow these steps to only use Maven for dependencies:

  1. Download and unpack the sources

  2. Run

    mvn -DexcludeTransitive=true dependency:copy-dependencies

    inside the source folder

  3. Create a libs folder

  4. Copy all JAR files in target/dependency to the libs folder

  5. There are also .apklib files in the target/dependency folder. Rename these to .zip, and unpack them. These are library projects, and you can add them as a normal library project now.

  6. In Eclipse, select "New Android Project" -> "From existing source" and point it to the folder you unpacked PageTurner in.

pageturner's People

Contributors

anwaroman avatar fayajewel avatar gregghz avatar hoelzro avatar khajavi avatar luccoj avatar nalor avatar nightwhistler avatar patrick-schweizer avatar projectgus avatar raphikbis avatar ryantm avatar saik0 avatar skyplabs avatar sumanabhi avatar thomasdenh avatar tundebabzy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pageturner's Issues

Brightness controls

It would be useful to adjust the screen brightness, either from the reading screen or preferences.

Use title page if present

Some books (Feedbooks in particular) have no title image, but do have a title page. This should be used then instead of trying to generate one.

Trim whitespace

Some books have too much space between paragraphs, it would be nice to trim that.

Startup time is slow

Right now the app first does a server sync and then starts to load the book. This can take a long time when the network connection is slow and / or the book is big. It would give a nice speed increase to do these 2 things in paralel.

Touch screen paging

We should also be able to page by tapping the edges of the screen and swiping up and down ( in paged mode )

Orientation lock

When reading a book you hardly ever want to swtich orientation. It would be nice to be able to lock it.

Bug: Swiping sensitivity

Multiple people have reported that PageTurner doesn't always respond to swipes and / or edge tapping.

This should be fixed before going to the Market.

Separate strategies for scrolling and paging

Right now paging is emulated by scrolling down 1 screen at the time. This doesn't play nice with screen readers and also has the side effect of sliced of lines at the bottom.

Refactor the paging code into 2 PagingStrategy objects: ScrolledPagingStrategy and SinglePagePagingStrategy that each encapsulate the logic needed to perform the pageUp() and pageDown() methods.

No way to see progress in full-screen mode

We currently show progress in the Android titlebar, but in Fullscreen mode this gets hidden.

It would be nice to have a component at the top show when the Menu button is pressed. This might mean implementing a custom Title bar.

Bug: crash while rendering table rows

Caused by: java.lang.ArithmeticException: divide by zero
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.handlers.TableHandler.calculateRowHeight(TableHandler.java:156)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.handlers.TableHandler.access$300(TableHandler.java:52)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.handlers.TableHandler$TableRowDrawable.getIntrinsicHeight(TableHandler.java:249)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.handlers.TableHandler.handleTagNode(TableHandler.java:186)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.applySpan(HtmlSpanner.java:294)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.handleContent(HtmlSpanner.java:270)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.applySpan(HtmlSpanner.java:287)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.handleContent(HtmlSpanner.java:270)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.applySpan(HtmlSpanner.java:287)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.handleContent(HtmlSpanner.java:270)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.applySpan(HtmlSpanner.java:287)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.handleContent(HtmlSpanner.java:270)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.fromTagNode(HtmlSpanner.java:193)
E/AndroidRuntime(29526): at net.nightwhistler.htmlspanner.HtmlSpanner.fromHtml(HtmlSpanner.java:159)
E/AndroidRuntime(29526): at net.nightwhistler.pageturner.view.BookView$LoadTextTask.doInBackground(BookView.java:863)
E/AndroidRuntime(29526): at net.nightwhistler.pageturner.view.BookView$LoadTextTask.doInBackground(BookView.java:819)
E/AndroidRuntime(29526): at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime(29526): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/AndroidRuntime(29526): ... 4 more
W/ActivityManager( 97): Force finishing activity net.nightwhistler.pageturne

Record progress per device

Allow the user to name each device, and record positions per device. A good default for the devicename is Build.MODEL.

On a normal background sync pick the most recently updated position.

When the user requests a manual sync, show a popup dialog displaying all the sync points and allow the user to choose.

About dialog

Add a nice about dialog with the current version number and some more info.

Localization

The app should at least support Dutch and English.

Implement library

We need a library that shows which books the user has and offers different sorting options.

A nice bookshelf view is preferred.

Configurable text "themes"

It would be nice to have different text rendering configurations, to get a kind of visual "themes".

This would also be a nice step up to getting CSS support.

Implement file-browser

Right now we rely on OI file explorer being present, but it's better to have file browsing built in. Should not be hard to build.

Measure progress in pages as well as percentage

Make it configurable how progress should be displayed.

Unanswered question: should pages be "ideal pages", i.e. fixed per book, or pages based on the page-size of the current device?

One will give the situation that page-turns don't match with page-numbers, the other will make the book length seem variable between devices.

Edit library metadata

Books don't always have proper meta-data. It would be good to be able to edit those fields.

Even better would be to be able to download meta-data from a source like library-thing or goodreads.

Bookshelves

Allow users to tag books and organize them into shelves (like Goodreads does).

Implement "book-wall"

This is an alternative to the wooden book-case: it shows a big continuous wall of covers.

Should be fairly easy to implement using a GridView.

Bug: sometimes pages are too long

In some cases in paged mode we get more than 1 screen of text, making a scroll-bar appear.

Might be related to headers and tags at the top of the page.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.