Hello all!
Recently I've started using two seperate Android devices to read books
using FBReaderJ for Android, a NookColor, and my phone, a Sprint EVO
3D. Very quickly, I ran into a problem. I read the same books on both
devices, so I ended up spending a lot of time looking for my place
whenever I switched devices (I used the NC at home, and my phone
everywhere else).
I imagine that this must be a problem quite a few people are having,
or will be having as android devices become more popular.
So, I wrote an android app to synchronize my place in each book
between the two devices.
App Name: FBSync
Current Version: v1.0.26
Revision History:
1.0.26 - Removed Auto-Sync feature (hopefully just temporarily. I want to get this working, but the FBReader API just doesn't provide enough functionality to get it working smoothly). Removed syncing of "recent" books (It caused more trouble than it was worth, sorry, you will have to manually open your book if you changed books on another device). Added a "Sync" item to the FBReader menu that pulls up FBSync.
1.0.24 - Updated Dropbox support to use latest Dropbox API. Fixed Auto-Sync feature to properly sync new book positions (broken due to a change in FBReader). Due to limitations in FBReader, the Auto-Sync feature is still rather rough.
1.0.23 - Added a Dropbox support for your book position data, an Auto-Sync feature that makes use of the FBReader API, and (in theory) the program has been translated into Russian (thanks Dmitry!). If you have set up your own synchronization server, you will need to update the PHP files to the files in the attached sync.zip
1.0.19 - Fixed another bug that affected Honeycomb devices. Confirmed working on an Acer Iconia A500.
1.0.18 - Fixed a bug that affected Honeycomb devices (I hope!)
1.0.17 - Added "Alternate Sync URL" functionality for those people who want to set up their own sync server instead of using mine. See below for more instructions.
Requirements:
1) Root. Your devices must be rooted. This application only uses
root for two things. First, it uses root to get access to the
FBReaderJ books database, and second, it uses root to kill the
FBReaderJ process before it syncs the data (it has to kill the process
to force FBReader to reload the database).
2) FBReaderJ must be installed on the device (you will be prompted to
install it if you haven't already when you load my app)
3) You must have already opened FBReaderJ at least once, and viewed
it's library (Menu button, "Library"). This creates the databases
that my application needs.
Download:
An older version is available on Google Play, but the latest version can always be found at the bottom of this post.
Instructions for Use:
As of v1.0.23, you have the option of either syncing book positions to my web server, or to Dropbox. If you choose to use Dropbox, it will create a single file on your Dropbox account (under \FBSync) that contains the book position data.
If you desire to sync the book positions to my web server, you can also enable a new, experimental "Auto-Sync" feature that syncs your position whenever you open or close FBReader (or a book in FBReader). This functionality only works when using my web server, it does not currently work with Dropbox.
The auto-sync feature make use of FBReader's API and makes FBSync work as a plug-in for FBReader. Unfortunately the API does not contain all of the features needed to completely remove the root requirement for FBSync.
If you are going to use my web server to sync:
After you install it, go into the settings (blue icon, or menu/
settings), and enter an email (doesn't have to be an email, any unique
string will work) and numeric pin # (this isn't secure, so don't use a
pin you care about). The email/pin is just to uniquely identify you.
You should use the same email/pin on each device.
On the same screen, you can choose to sync the actual book files to Dropbox. Since your Dropbox account is used, only your account can access the books, if
you choose to sync them. It only uploads/downloads the books when it
needs them, so it may take a while the first time you sync, but after
that it shouldn't take more than a minute MAX (my typical sync times
for 90 books is about 5-10 seconds)
Click the middle, orange icon, to begin the sync process.
If this is the first time you've synced since selecting the "Enable Dropbox" setting, you will be prompted to allow FBSync access to your dropbox account.
The sync process first uploads, then downloads. It only updates the book's "place" on the web (or Dropbox) if it's farther ahead than the web's "place" for the book.
If you are using the Auto-Sync function, the above statement is not true. It always saves the exact position of your book upon closure of FbReader or closing the book.
Miscellaneous Info:
This program is still in beta. I have used and tested it extensively,
but I'm not liable if you manage to break it somehow. Since it does
alter the data in FBReader's databases (it does not, and never will,
alter the database structures), it is possible, but very unlikely,
that it could lose your book's places. I would suggest that you back
up FBReaderJ using something like Titanium Backup before you start
using FBSync, just to be on the safe side.
The synchronized book position data is currently hosted on my personal web server, or your Dropbox account (as of v1.0.23). Your book files are only stored on your Dropbox account.
UPDATE: As of v1.0.17, I added the ability to define your own "Sync Server". Here's how to use it:
In the Settings (Menu, Settings), there is a new option "Alternate Sync URL" where you can enter your own URL. Leave it blank if you want to use my server.
If you want to use your own, you will need the file attached to this post. I wouldn't recommend trying to set up your own server unless you are pretty comfortable with web servers, php, and mySql.
Sync.zip contains a .SQL script, and several .PHP files that are required to set up your own sync server.
The primary thing that you need to set up your own Sync server is a HTTP Web server that supports mySql and PHP.
On your server, create a new mySql database (name doesn't matter, just make sure there's a user attached to it that has insert/update/delete rights), then run the sql code in the sync.sql to create the two tables that are needed.
Edit the common.php file and replace the '' values in this block:
Code:
$dbhost = 'localhost';
$dbuser = ''; // Fill out the database user name here
$dbpass = ''; // Fill out the database user password here
$dbname = ''; // Fill out the database name here
with the correct values for your server. $dbhost can probably remain 'localhost'.
Then create a directory on your web server that is accessible from your devices, and put the 5 PHP files into it.
Launch FBSync, hit Menu, Settings, click the "Alternate Sync URL", and type in the URL that points to the directory you put those PHP files in (ex; http://sync.splitmatrix.net/alternate_sync ). You must start it with http://, and it should not end in a /.
After you enter the URL, save out of it, back out to the main FBSync window, and click the Sync button. If you set up everything correctly, it should sync to your server now instead of mine.
Please let me know of any issues you find, or any improvements you
want.
Thanks,
Scott
6/27/2012 Edit - Updated Sync.zip to remove some buggy code from addbook.php
Hi Scott,
I only have 1 device right now, so no need for sync, but I would be interested in how you can read your BN books with FBRreader. I have installed FBReader, but don't know how to read the books with it.
Also, I installed the dolphin web browser and clicked on a few epub links but nothing happens, is there a way to get it to bring up those files in FBRreader?
droidly said:
Hi Scott,
I only have 1 device right now, so no need for sync, but I would be interested in how you can read your BN books with FBRreader. I have installed FBReader, but don't know how to read the books with it.
Also, I installed the dolphin web browser and clicked on a few epub links but nothing happens, is there a way to get it to bring up those files in FBRreader?
Click to expand...
Click to collapse
I haven't actually purchased any books from B&N, but assuming the books you purchased are DRM free, you should be able to just move them into the \sdcard\books directory, and they should appear in the FbReader library. I believe, by default, the B&N books go into the internal storage, in the B&N Downloads\Books directory. Use a file manager like estrong's, astro's, or root explorer to copy them.
Via your web browser, save the epub books to \sdcard\books (or move them there after they download), and they'll show up. I don't believe that you can associate any book reader with epub files, I don't think android supports that. You have to open the book with the app, not the app with the book.
Scott
I use FBReader on multiple devices and would be extremely interested in such an app!
Thanks for your interest in my syncing app.
One pretty major requirement for this app is that your devices have to be rooted. Android doesn't like one app accessing another app's data, so the only way I could do it was to use root privileges.
It's still in beta, but you can download a copy of it at:
http://sync.splitmatrix.net/apk/fbsync.apk
Currently v1.0.9.
After you install it, go into the settings (blue icon, or menu/settings), and enter an email (doesn't have to be an email, any unique string will work) and numeric pin # (this isn't secure, so don't use a pin you care about). The email/pin is just to uniquely identify you. You should use the same email/pin on each device.
On the same screen, you can choose to sync the actual book files as well as their positions. It only uploads/downloads the books when it needs them, so it may take a while the first time you sync, but after that it shouldn't take more than a minute MAX, my typical sync times for 90 books is about 5-10 seconds.
Obviously you should have Fbreader already installed, and you need to have ran it, and gone into the library (menu/library) at least once (this creates the fbreader app database).
Click the middle, orange icon, to begin the sync process. It first uploads, then downloads. It only updates the book's "place" on the web if it's farther ahead than the web's "place" for the book.
Please let me know of any issues you find, or any improvements you want.
Thanks,
Scott
Cool
I just tested and it does work as stated. One question though, where is it uploading the data too?
Personal website, sync.splitmatrix.net. if the app takes off, i'll figure out something more secure and permanent.
Scott
Interesting. I'll try it out. Thank you!
One thing to think about however, especially if you open this up to general usage, is that by uploading/downloading the book file itself rather than just the current read-to position, you could potentially run into copyright issues. There is reason to believe that this could fall under Fair Use, but past rulings on similar commercial services for other media have been inconclusive. That may be a can of worms you don't want to open.
I am not a lawyer, but I do play one on web forums.
One thing I would try would be saving it on Google's servers through IMAP or something like SMS Backup does. Then no need to have to pay for a server. Don't know if it is at all possible but just thought I would see how you liked it.
RoboRay said:
Interesting. I'll try it out. Thank you!
One thing to think about however, especially if you open this up to general usage, is that by uploading/downloading the book file itself rather than just the current read-to position, you could potentially run into copyright issues. There is reason to believe that this could fall under Fair Use, but past rulings on similar commercial services for other media have been inconclusive. That may be a can of worms you don't want to open.
I am not a lawyer, but I do play one on web forums.
Click to expand...
Click to collapse
Yes, this is something I'm aware of. Not sure what I'm going to do about it yet. That's why it's a setting
Scott
qwerty017 said:
One thing I would try would be saving it on Google's servers through IMAP or something like SMS Backup does. Then no need to have to pay for a server. Don't know if it is at all possible but just thought I would see how you liked it.
Click to expand...
Click to collapse
The server it's currently on is hosted by a friend of mine for free, so I'm not concerned about it at the moment. If thousands of people end up using this, then obviously I'll have to make some changes.
Scott
I wonder if there's a way to store and retrieve the sync data with each user's Dropbox or something...
RoboRay said:
I wonder if there's a way to store and retrieve the sync data with each user's Dropbox or something...
Click to expand...
Click to collapse
I'd imagine that there is a way to do this, since programs like Titanium Backup support a dropbox interface.
If enough people think this would be a good feature to add, I can definitely look into it.
Scott
I'm just thinking that using each person's Dropbox would get you off the hook for not only server space and bandwidth, but also any potential copyright liability for book copies made by users synchronizing their files.
Valid points. I'll do some digging and see what it will take to implement the dropbox API in this app..
Thanks,
Scott
Edit: Updated first post with useful information - added download link.
Updated to v1.0.10 to fix a problem when used with the latest FBReader beta. Same URL as before:
Edit: Download the app off the market
Thanks,
Scott
This is a great app this is the missing link in fbreader. I hope you continue to support and enhance it.
Now that my archos tablet is rooted i can really enjoy it. I used to read my books on my phone and occasionally I still do.
Thx for the great work.
This looks like a dang good app. Since getting my nc i've quit using my evo for reading. This sync will bring joy back to my bathroom bbreaks at work!
Thanks for your kind words!
Since the last time I posted to this thread, I've added a dropbox interface to the program, and posted it to the Market (for Free of course!), so if you've downloaded the APK from the web, please re-install it from the market for the latest and greatest version.
Thanks again,
Scott
Oh, great! I'm checking out the Dropbox syncing now.
Edit: Works great!
If I may make another suggestion, you should post about your app at the MobileRead forum. I think you'll pick up a lot of users there.
Also, I know that the Android version of FBReader is different from the PC versions, but syncing with the Linux and Windows versions would be the icing on the cake. MobileRead might be a good place to find others wanting to help develop that capability
The doze mode introduced with Marshmallows breaks push email because email apps will no longer check for email when the phone is in doze. You can exempt apps from battery optimisation, but the exemption is only partial (read: useless). With Nougat it's even worse because Doze has become more aggressive.
My mailbox is on an imap server and I use imap idle for push (no, Apple fanboys, that's no battery drain).
AFAIK the only things which can wake a phone from Doze are phone call, sms messages, and high-priority google cloud messaging (or whatever they're called now) notifications.
Whatsapp, for example, relies on high-priority GCM notifications, and does wake phones up from Doze
There are some mail apps which rely on GCM notifications, but none which sends high-priority notifications - leaving aside the fact that I prefer imap idle because I don't like the idea of having a third-party server, which I somehow have to pay for, with access to my emails...
My question is: how on Earth are we supposed to get push email when the phone is in the doze? Or has google effectively decided that Android will no longer support real push email?
Rooting is not an option because the app I use to read my work email (Good by Blackberry) does not work on rooted devices.
Thanks!
PS Details of doze breaking push email are on another forum: http://androidforums.com/threads/mar...droid.1058445/
Anyone? yes, I know it's an old question, but it's still valid! Am I the only user for whom not having push email is an issue? I can live without getting instant notification of my private email, but work email is a different thing and I have had multiple situations where this has caused problems.
cdl2 said:
Anyone? yes, I know it's an old question, but it's still valid! Am I the only user for whom not having push email is an issue? I can live without getting instant notification of my private email, but work email is a different thing and I have had multiple situations where this has caused problems.
Click to expand...
Click to collapse
Try typeapp maybe. Works for me without whitelisting it
Are you sure it works when the device is in Doze? I ask because Google documentation explains very clearly
https://developer.android.com/training/monitoring-device-state/doze-standby
that whitelisting is only a partial exemption, and that the one and only way to be sure the device receives notifications when in Doze is to use high-priority FCM notifications.
Last I checked, typemail was using normal-priority FCM. has this changed?
To test it, you can force the app into doze by using adb:
adb shell dumpsys deviceidle force-idle
now send an email to yourself from your PC or another phone. Do you get a notification? If you do, typeapp uses high-priority FCM. if you don't, it doesn't, and there seems to be no way around it, because Google has decided to kill push email without providing a ******* alternative!!!
To exit doze and reactivate the phone:
adb shell dumpsys deviceidle unforce
adb shell dumpsys battery reset
A counter-test is to send yourself an email when the phone is not in doze - you should receive an immediate notification.
When talking about Doze, the most common mistakes are:
not understanding that whitelisting is only a partial exemption
mistakenly thinking that you are getting notifications despite doze, when, in fact, either doze hasn't kicked in, or you are getting them in the windows allowed by Doze (no push)
By the way, my key problem is with work email; I can live with private email not being delivered immediately, but work email is a different story!
You might also want to look at these two links about privacy:
https://mobilsicher.de/security-des...d-other-email-apps-transmit-login-credentials
https://androidforums.com/threads/email-which-apps-keep-it-private.935578/
Never heard of any email app using any information in a bad way, especially big ones like typeapp. Even if info is sent to their servers they plainly say they don't store it and even if they do, they can't use it for anything without implicating themselves.
Also first link includes misspellings in the header lmao. I wouldn't trust everything you read, you'll end up in a bubble.
As far as notifications from typeapp, they come through relentlessly if not turned off, dunno if it's preventing the doze somehow but it works well on my quarks running RR Oreo. Try it and do your own tests
Mrpookie said:
Never heard of any email app using any information in a bad way, especially big ones like typeapp. Even if info is sent to their servers they plainly say they don't store it and even if they do, they can't use it for anything without implicating themselves.
Also first link includes misspellings in the header lmao. I wouldn't trust everything you read, you'll end up in a bubble.
As far as notifications from typeapp, they come through relentlessly if not turned off, dunno if it's preventing the doze somehow but it works well on my quarks running RR Oreo. Try it and do your own tests
Click to expand...
Click to collapse
As for typeapp, what leaves me confused is that its documentation talks about whitelisting it in the battery settings. However, even though 99% of Android users fail to understand this, whitelisting is only a very partial exemption. You don’t need to whitelist Whatsapp in order to receive messages even while in Doze. Why? Because Whatsapp uses high-priority FCM notifications. Hence I suspect Typeapp does NOT use high-priority FCM. I have emailed them this question.
It’s very unfortunate that it’s now become very hard to get real push email; we have gone backwards since the early days of mobile devices! Also, Google forcing FCM down our throat means going back to a BIS/BES kind of solution, which was wildly criticised for being a single point of failure. But, most incredibly, AFAIK there is no email client that uses high-priority FCM, so Google is effectively saying: you can have push whatsapp but not push email! The crazy thing is that this was done because too many apps were misbehaving and connecting too often, not because there is anything wrong with push email – imap idle used to work brilliantly, without draining battery.
It has also become very hard to test for push in Doze: many manufacturers add their own app-killing optimisation tool, so the app must be whitelisted there, too. Also, it is never clear when a phone is in Doze, or if it is in a maintenance window: you may think you are getting emails, but you are only getting them because the phone is in a maintenance window, and the next email you might not see for 2 hours!
I have never heard of any email app using private data in a particular bad way, either, it’s just that the concept of giving access to my email to some server of some unknown company makes me uneasy. I don’t even use gmail for this reason, preferring to pay for my own email! The apps listed in my second link (k9 mail, aquamail etc) download mail from the server to the app and the developers of the app have no access whatsoever to my mail. For example, there have been cases of developers of email clients letting their employees read emails to “train the software”
https://www.cnet.com/news/third-party-gmail-apps-reportedly-let-employees-read-peoples-emails/
https://www.macrumors.com/2018/07/02/third-party-email-apps-reading-user-emails/
I understand many people don’t care; these things are very subjective and I have zero interest in convincing anyone – I am just explaining why I’d rather avoid this kind of email clients, unless maybe it’s the one and only way to get real push with Android Doze.
cdl2 said:
As for typeapp, what leaves me confused is that its documentation talks about whitelisting it in the battery settings. However, even though 99% of Android users fail to understand this, whitelisting is only a very partial exemption. You don’t need to whitelist Whatsapp in order to receive messages even while in Doze. Why? Because Whatsapp uses high-priority FCM notifications. Hence I suspect Typeapp does NOT use high-priority FCM. I have emailed them this question.
It’s very unfortunate that it’s now become very hard to get real push email; we have gone backwards since the early days of mobile devices! Also, Google forcing FCM down our throat means going back to a BIS/BES kind of solution, which was wildly criticised for being a single point of failure. But, most incredibly, AFAIK there is no email client that uses high-priority FCM, so Google is effectively saying: you can have push whatsapp but not push email! The crazy thing is that this was done because too many apps were misbehaving and connecting too often, not because there is anything wrong with push email – imap idle used to work brilliantly, without draining battery.
It has also become very hard to test for push in Doze: many manufacturers add their own app-killing optimisation tool, so the app must be whitelisted there, too. Also, it is never clear when a phone is in Doze, or if it is in a maintenance window: you may think you are getting emails, but you are only getting them because the phone is in a maintenance window, and the next email you might not see for 2 hours!
I have never heard of any email app using private data in a particular bad way, either, it’s just that the concept of giving access to my email to some server of some unknown company makes me uneasy. I don’t even use gmail for this reason, preferring to pay for my own email! The apps listed in my second link (k9 mail, aquamail etc) download mail from the server to the app and the developers of the app have no access whatsoever to my mail. For example, there have been cases of developers of email clients letting their employees read emails to “train the software”
https://www.cnet.com/news/third-party-gmail-apps-reportedly-let-employees-read-peoples-emails/
https://www.macrumors.com/2018/07/02/third-party-email-apps-reading-user-emails/
I understand many people don’t care; these things are very subjective and I have zero interest in convincing anyone – I am just explaining why I’d rather avoid this kind of email clients, unless maybe it’s the one and only way to get real push with Android Doze.
Click to expand...
Click to collapse
Dud... I'm not reading all that, lol
Why not try typeapp itself with a non important or dummy email and see. It could be something with my device or ROM causing it to come through but I think it may work for you.
Quick question: is it possible to get typeapp to retrieve mail from the inbox folder immediately (push), but to also retrieve mail from another folder every 4 hours or so? This is the setup I had with Aquamail and K9mail. I ask because I have a 'newsletter' folder where all the newsletters, notifications and non-urgent stuff gets filtered (server-side). I am testing typeapp but haven't found a way to do this.
cdl2 said:
Quick question: is it possible to get typeapp to retrieve mail from the inbox folder immediately (push), but to also retrieve mail from another folder every 4 hours or so? This is the setup I had with Aquamail and K9mail. I ask because I have a 'newsletter' folder where all the newsletters, notifications and non-urgent stuff gets filtered (server-side). I am testing typeapp but haven't found a way to do this.
Click to expand...
Click to collapse
Not sure abt other folders. I know you can set it up that way for different e-mails. Maybe there's a way to make a rule for such a thing. If I discover a way I will post here
Edit- does not appear to be a way to do this using typeapp alone. Maybe another email program could be in fetch mode on that folder and you could set typeapp to push and notifications enabled for certain contacts or something of the like.
You could always contact support and ask if it could be done or put in a feature request. That is a good idea and would be useful to many
Another idea: depending on the email client you use, you may be able to set up a rule to forward those emails you want in fetch mode to a dummy email, then set that email in fetch mode within typeapp
Nothing special about TypeApp in terms of quick notifications when in Doze. I left my phone unattended for 20 minutes then sent a test email and it took over 40 minutes to get the notification. Samsung Email got it first at 28 minutes and BlueMail / TypeApp got it around 42 minutes. This is without touching the phone. This is with Batttery Optimization OFF, Adaptive Battery OFF, Put unused apps to Sleep OFF. Note 10+ Factory Unlocked Android 11 One UI 3.1
Edison Mail sends INSTANT notifications even if your phone's been sleeping for hours, but I hate their GUI, let alone their privacy policy.
Will this ADB command stick after reboot?
Code:
adb shell dumpsys deviceidle unforce