I have added detailed instructions at the end of this post for those willing to try this solution
Hi,
this post is meant to be as a place to discuss the "missing bookmark" problem, spread the findings on its causes and, if possible, find a solution.
As many of you have noticed, the stock reader app seems to behave differently WRT to bookmarks if launched from the library or from the "Last Book" icon on the status bar: often you open the last book only to find that it has lost the bookmark and it starts again from the first page.
I noticed that this behaviour also includes the hilights and annotations: for a given book I have two different sets of hilights and bookmarks which are used if I open the book from the library or from the "Last Book" icon respectively.
The DBs involved with this "feature" of the Reading app are (at least):
Code:
/data/data/com.android.providers.media/databases/internal.db
/data/data/com.bn.nook.reader.activities/databases/bookmarks.db
/data/data/com.bn.nook.reader.activities/databases/annotations.db
/data/data/com.bn.nook.reader.activities/databases/readerlocal.db
/data/data/com.bn.nook.reader.activities/databases/lastreadingpoint.db
/data/data/com.bn.nook.home/files/home.db
As far as I can understand, internal.db holds the books info (in the docs table) and the others hold the info on annotations, bookmarks and last reading point. The last reading point seems to be stored in two different table: readerlocal.db and lastreadingpoint.db.
The home.db apparently holds the "now reading" history.
(Note that since I don't live in the States, all my findings relate to sideloaded books, mostly edited with Sigil.)
In the internal.db there are two fields which are of interest in this discussion: the 'ean' field and the 'data' field.
The 'ean' field is populated with info from the <identifier> tag in the content.opf manifet of each book (if there are more tags, ean is the concatenation of these fields).
The 'data' is the path to book's file.
The problem with the reader app seems related to the identifier used to, ehm, identify a book: when you open a book from the Library, it seems to use the 'data' filed, while when you open from the "Last Book" icon, it seems to use the 'ean' fields.
In both cases, this identifier is stored in a 'ean' field in bookmarks and/or annotations db/table, which lead to the two sets problem: if you open from the Library, the file name is used and gives access to one set of bookmarks/annotations; when you open from the incon, the ean used and the other set is accessed.
lastreadingpoint.db and readerlocal.db use a more uniform approach: they have the same fields (actually lastreadingpoint has a 'sync_status' which is not present in 'readerlocal') but lastreadingpoint always uses the 'ean' id, while readerlocal uses the file name. The point is when the Reading app uses info from one db or the other
I don't see any real solution to this problem, but we could come up with some workaround to minimize it, eventually with some SQL trick.
This is the info I gathered up to now, feel free to correct me or integrate with your findings...
EDIT (28.1.2012)
I have some more info to share.
After a backup I tried to delete the above mentioned DBs and reboot: the NOOK recreates the DBs and start populating them from scratch.
The "reader" related DBs are created as soon as you open the first book.
The internal.db is repopulated from the epubs found in the internal flash and in the sdcard, BUT the 'ean' field is left empty.
Now, if you delete an epub file and copy it back in place (I usually sync my books from dropbox...), the internal.db is updated with the 'ean'!
EDIT (31.1.2012)
I addedd to internal.db the triggers in post #5, and manually deleted references to eans in the other DBs (using something like "delete from xxx where ean not like 'file:%';") and it seems to have solved the problem.
I won't post detailed, step by step instructions as long as I am not confident that this solution don't have any side-effect.
If you know how to edit SQLite files and feel like giving it a try, post here your results...
EDIT (15.2.2012)
Here you will find a detailed, step by step procedure to create the triggers and try to fix the problem. The usual caveats apply.
PLEASE NOTE THAT THIS PROCEDURE WILL DELETE SOME OF YOUR BOOKMARKS AND ANNOTATIONS (namely those created while reading a book opened from "Now Reading" icon).
You will need a working ADB connection with your Nook Simple Touch (NST), a copy of sqlite3 for Android and some command line skills. I will use a command prompt window under Windows, you will need to make some adjustment for OSX and Linux.
In the following, ">" stands for the command prompt on your PC, "# " stands for the remote shell on your NST and "sqlite> " stands for the SQLite3 shell on your NST.
1. Start connecting your NST with the USB cable and verify that you can reach it via ADB. From the command prompt do:
Code:
>adb devices
You should se something like this:
Code:
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
1112223334445556 device
Now, if you have a working copy of sqlite3 installed in your NST, skip to step 3.
2. Download "sqlite3 (push to n2e).zip" from here and extract "sqlite3" in (e.g.) C:\temp.
Now, from command prompt, do the following (you will be remounting /system partition with rw access, copy sqlite3 in /system/bin, make it executable and change back /system to ro):
Code:
>adb shell mount -o remount,rw /dev/block/mmcblk0p5 /system
>adb push C:\temp\sqlite3 /system/bin
>adb shell chmod 755 /system/bin/sqlite3
>adb shell mount -o remount,ro /dev/block/mmcblk0p5 /system
3. From command prompt, make a backup of each file that we are going to modify:
Code:
>adb pull /data/data/com.android.providers.media/databases/internal.db C:\temp\internal.db
>adb pull /data/data/com.bn.nook.reader.activities/databases/lastreadingpoint.db C:\temp\lastreadingpoint.db
>adb pull /data/data/com.bn.nook.reader.activities/databases/readerlocal.db C:\temp\readerlocal.db
>adb pull /data/data/com.bn.nook.reader.activities/databases/annotations.db C:\temp\annotations.db
>adb pull /data/data/com.bn.nook.reader.activities/databases/bookmarks.db C:\temp\bookmarks.db
4. From the command prompt connect to a remote shell on your NST:
Code:
>adb shell
You should get the shell prompt:
Code:
#
5. From the remote shell prompt delete the bookmarks, annotations and reading points that use the 'ean' field:
Code:
# sqlite3 /data/data/com.bn.nook.reader.activities/databases/lastreadingpoint.db "DELETE FROM lastreadingpoint WHERE ean NOT LIKE 'file:%';"
# sqlite3 /data/data/com.bn.nook.reader.activities/databases/readerlocal.db "DELETE FROM readerlocal WHERE ean NOT LIKE 'file:%';"
# sqlite3 /data/data/com.bn.nook.reader.activities/databases/annotations.db "DELETE FROM annotations WHERE ean NOT LIKE 'file:%';"
# sqlite3 /data/data/com.bn.nook.reader.activities/databases/bookmarks.db "DELETE FROM bookmarks WHERE ean NOT LIKE 'file:%';"
6. Now connect to the library DB to erase existing eans and create the triggers:
Code:
# sqlite3 /data/data/com.android.providers.media/databases/internal.db
You sholud get the sqlite prompt:
Code:
sqlite>
From here do: (some lines are quite long, be sure to copy them exactly...)
Code:
sqlite> UPDATE docs SET ean = NULL;
sqlite> DROP TRIGGER IF EXISTS erase_ean_update_docs;
sqlite> CREATE TRIGGER IF NOT EXISTS erase_ean_update_docs AFTER UPDATE OF ean ON docs FOR EACH ROW WHEN new.ean IS NOT NULL BEGIN UPDATE docs SET ean = NULL WHERE _id = new._id; END;
sqlite> DROP TRIGGER IF EXISTS erase_ean_insert_docs;
sqlite> CREATE TRIGGER IF NOT EXISTS erase_ean_insert_docs AFTER INSERT ON docs FOR EACH ROW WHEN new.ean IS NOT NULL BEGIN UPDATE docs SET ean = NULL WHERE _id = new._id; END;
7. Close all the connections and reboot
Code:
sqlite> .q
# exit
>adb reboot
From now on, each time the Nook sets an EAN for a book, the trigger will immediatly erase it and the Reader application will always use the filename as an identifier.
/met
Well, that explains why it keeps going back to the first page all the time.
Updated OP...
I was wondering about same thing!
Not sure, if it was introduced first in 1.1.0, I do not recall such behavior in early versions.
As for solution, it shouldn’t be a problem to write a app/script to duplicate rows.
I.e. if there is a row with 'ean' field, but there is no one 'data' field with same content -> duplicate.
And vice-versa.
Also interesting, is there a way to find command line arguments used to lunch reader app from
Library and "Last Book" icon (com.bn.nook.reader.activities)
If nook sources are all available, it could be possible to recompile broken component.
And the last:
Anyway to get in touch with developers and submit a bug?
You have pretty much nailed it down already - it should be piece of cake to fix.
ApokrifX said:
I was wondering about same thing!
Not sure, if it was introduced first in 1.1.0, I do not recall such behavior in early versions.
As for solution, it shouldn’t be a problem to write a app/script to duplicate rows.
I.e. if there is a row with 'ean' field, but there is no one 'data' field with same content -> duplicate.
And vice-versa.
Also interesting, is there a way to find command line arguments used to lunch reader app from
Library and "Last Book" icon (com.bn.nook.reader.activities)
If nook sources are all available, it could be possible to recompile broken component.
And the last:
Anyway to get in touch with developers and submit a bug?
You have pretty much nailed it down already - it should be piece of cake to fix.
Click to expand...
Click to collapse
I was thinking of a more drastic approach: during my tests, I found that as long as I had no 'ean' in my internal.db/docs, everything worked fine (or at least it did seem to, maybe I didn't test it long enough), so I was thinking of adding a trigger to internal.db that systematically erase 'ean' on each update
I don't know how this would interfere with books purchased in B&N shop, though.
As for B&N, I don't think they are much interested in making the life easier for people who sideload book instead of buying from their shop
Moreover, I am not sure that this behaviour is not a side effect of rooting and using a different home from stock's
EDIT:
I was thinking to something like this:
Code:
UPDATE docs SET ean = NULL;
DROP TRIGGER IF EXISTS erase_ean_update_docs;
CREATE TRIGGER IF NOT EXISTS erase_ean_update_docs
AFTER UPDATE OF ean ON docs
FOR EACH ROW
WHEN new.ean IS NOT NULL
BEGIN
UPDATE docs
SET ean = NULL
WHERE _id = new._id;
END;
DROP TRIGGER IF EXISTS erase_ean_insert_docs;
CREATE TRIGGER IF NOT EXISTS erase_ean_insert_docs
AFTER INSERT ON docs
FOR EACH ROW
WHEN new.ean IS NOT NULL
BEGIN
UPDATE docs
SET ean = NULL
WHERE _id = new._id;
END;
I guess I'll have to somehow reset the others DBs, also.
I cant' test it now, I'll try it and report...
Hah!
Nice and easy!
met67 said:
I don't know how this would interfere with books purchased in B&N shop, though.
Click to expand...
Click to collapse
You can get a free book from B&N shop and test, right?
met67 said:
As for B&N, I don't think they are much interested in making the life easier for people who sideload book instead of buying from their shop
Moreover, I am not sure that this behavior is not a side effect of rooting and using a different home from stock's
Click to expand...
Click to collapse
I don’t think so. (i.e. it’s not rooting).
Just tested with free B&N and side-loaded books.
The former keeps bookmarks, the later doesn’t…
---------- Post added at 02:17 AM ---------- Previous post was at 02:11 AM ----------
I’d use new.rowid instead of new._id in “WHERE _id = new._id;”
But that’s me
ApokrifX said:
Hah!
Nice and easy!
You can get a free book from B&N shop and test, right?
I don’t think so. (i.e. it’s not rooting).
Just tested with free B&N and side-loaded books.
The former keeps bookmarks, the later doesn’t…
---------- Post added at 02:17 AM ---------- Previous post was at 02:11 AM ----------
I’d use new.rowid instead of new._id in “WHERE _id = new._id;”
But that’s me
Click to expand...
Click to collapse
Last time I tried, the shop wouldn't let me download free books without a valid credit card in my account
As for the id, that's the way B&N uses to address rows in other triggers, so I tend to use the same approach...
I just added the triggers, and it seems to works fine...
If someone brave enough does try this solution, please report here: if it works fine for other people, I'll prepare a step by step guide.
/met
I think a better long term fix would be posting your findings in the Barnes and Noble Support forums, a B&N admin and/or dev may actually see it there and they could incorporate this into whatever next update comes out making it available to all users not just those of us who have rooted.
met67 said:
Last time I tried, the shop wouldn't let me download free books without a valid credit card in my account
Click to expand...
Click to collapse
I use virtual CC from CITI with $1 limit…
met67 said:
As for the id, that's the way B&N uses to address rows in other triggers, so I tend to use the same approach...
Click to expand...
Click to collapse
rowid supposed to be a little faster. Doesn’t matter in this case of course.
And a little bit clearer (for me).
Asked in another thread, will ask here again:
BTW: How do you fiddle with databases such as internal.db?
Use adb to pull/push and fiddle on PC, or use adb shell to do it on nook?
---------- Post added at 02:57 AM ---------- Previous post was at 02:53 AM ----------
GabrialDestruir said:
I think a better long term fix would be posting your findings in the Barnes and Noble Support forums, a B&N admin and/or dev may actually see it there and they could incorporate this into whatever next update comes out making it available to all users not just those of us who have rooted.
Click to expand...
Click to collapse
I suggested very same thing early.
And I have very same feeling met67 has: they don’t care about side-loaded books, might be even make thing harder on purpose.
ApokrifX said:
I use virtual CC from CITI with $1 limit…
I suggested very same thing early.
And I have very same feeling met67 has: they don’t care about side-loaded books, might be even make thing harder on purpose.
Click to expand...
Click to collapse
It still might be worth a try to see if we can get them to fix it.
GabrialDestruir said:
It still might be worth a try to see if we can get them to fix it.
Click to expand...
Click to collapse
I'm not against it
BTW: Wanna throw in an idea:
It was/is a thread about "Automating shelving" http://forum.xda-developers.com/showthread.php?t=1378510
It’s piece of cake to with very same insert trigger, the shelves are in same internal.db
---------- Post added at 04:43 AM ---------- Previous post was at 04:14 AM ----------
Started working on it and realized, met67 was talking about bookmarks, but I meant annotations. (annotations.db)
I have tons of annotations, plagued by same bug: some have ean, some filepath…
And I kept wondering, I did put a note here, where the heck did it go?
And then they showed up all of the sudden and then disappeared same way.
Crap…
So fix script should be smth. like this:
Update bookmarks.db and annotations.db - replace ean with filepath (lookup in internal.db)
Than clear ean in internal.db.
Any comments?
ApokrifX said:
...
BTW: How do you fiddle with databases such as internal.db?
Use adb to pull/push and fiddle on PC, or use adb shell to do it on nook?
...
Click to expand...
Click to collapse
Both, actually.
I use SQLiteStudio to browse data and definitions, and a copy of sqllite3 found on this forum to modify the DB on the device via adb shell
ApokrifX said:
...
BTW: Wanna throw in an idea:
It was/is a thread about "Automating shelving" http://forum.xda-developers.com/showthread.php?t=1378510
It’s piece of cake to with very same insert trigger, the shelves are in same internal.db
...
Click to expand...
Click to collapse
Yes, I also thought about this, but having tried the "Automatic shelving" (with a script) for a while, I found that shelves tend to be too much slow and I am not sure it is worth the effort (IMO, of course).
ApokrifX said:
So fix script should be smth. like this:
Update bookmarks.db and annotations.db - replace ean with filepath (lookup in internal.db)
Than clear ean in internal.db.
Any comments?
Click to expand...
Click to collapse
Yes, I think this should work. I just erased bookmarks and annotation related to ean, since I don't have much of them.
met67 said:
Both, actually.
I use SQLiteStudio to browse data and definitions, and a copy of sqllite3 found on this forum to modify the DB on the device via adb shell
Click to expand...
Click to collapse
I.e. you don't have sqllite apk installed on Nook.
I thought, it'll be a bit easier...
---------- Post added at 07:35 PM ---------- Previous post was at 07:31 PM ----------
met67 said:
Yes, I also thought about this, but having tried the "Automatic shelving" (with a script) for a while, I found that shelves tend to be too much slow and I am not sure it is worth the effort (IMO, of course).
Click to expand...
Click to collapse
If you have many books, it’s real PiA to scroll to find the one you need. Or it’s just me?
met67 said:
Yes, I think this should work. I just erased bookmarks and annotation related to ean, since I don't have much of them.
Click to expand...
Click to collapse
Ok. I’ll work on scripts and post them here.
Tried to submit bug report to B&N - apparently it’s was done 09-15-2011 05:10 PM already.
http://bookclubs.barnesandnoble.com...y-Manager/Nook-Touch-bug-reports/td-p/1081244
If you follow thread – only first bug was forwarded by Admin to developers.
Read last post: “I can't begin to describe my frustration that this was not fixed in the last update…“
That’s about it - thread looks abandoned - there is no use to post there.
I can add - for a developer it should take from 15 min to 1 hour to fix such a bug.
IMO, of course...
BTW: Anybody seen a NST firmware release report with all fixed and not bugs, as other companies do (Cisco, Juniper, etc.)?
Although, it’s probably done for different market segments, definitely not for “personal customer” one.
ApokrifX said:
I.e. you don't have sqllite apk installed on Nook.
I thought, it'll be a bit easier...
Click to expand...
Click to collapse
If you mean SQLite Editor, yes, I have it on the Nook, but is a bit hard to use (scrolling tends to behave errantly).
ApokrifX said:
If you have many books, it’s real PiA to scroll to find the one you need. Or it’s just me?
Click to expand...
Click to collapse
Yes, but, at least for me, having a shelf for each author is an even worst PiA.
ATM I have 326 book in My Library in 55 pages.
If I use a shelf for each author, I have 139 shelves in 70 pages!
Reading through this the issue seems to be something somewhere is applying ean in some places and filepath in another. While an initial script to change it all to one or another would be beneficial we really need to find where it's assigning either or both of those values so that we can try and modify the code to remove either ean or filepath from being assigned.
The second thing and more related to automatic shelving than to broken bookmarks is if we could find and disable the code that for some reasons says when new books get added, shelves get emptied out and/or deleted.
---------- Post added at 08:45 AM ---------- Previous post was at 08:40 AM ----------
met67 said:
If you mean SQLite Editor, yes, I have it on the Nook, but is a bit hard to use (scrolling tends to behave errantly).
Yes, but, at least for me, having a shelf for each author is an even worst PiA.
ATM I have 326 book in My Library in 55 pages.
If I use a shelf for each author, I have 139 shelves in 70 pages!
Click to expand...
Click to collapse
I personally think that arranging books by series (not author or some other method) would make it easier, or at the very least by Read/Unread/Reading then you could collapse a shelf you're not looking through and have less books.
GabrialDestruir said:
Reading through this the issue seems to be something somewhere is applying ean in some places and filepath in another. While an initial script to change it all to one or another would be beneficial we really need to find where it's assigning either or both of those values so that we can try and modify the code to remove either ean or filepath from being assigned.
Click to expand...
Click to collapse
Since it is very same reader app, I’d guess, it is started with different arguments from “last book” and from library.
“ps -ef”, “ps -x” supposed to show full command line (i.e. app + arguments), but it doesn’t...
Anyway to see full command line to prove?
---------- Post added at 04:21 AM ---------- Previous post was at 04:11 AM ----------
GabrialDestruir said:
>ATM I have 326 book in My Library in 55 pages.
>If I use a shelf for each author, I have 139 shelves in 70 pages!
I personally think that arranging books by series (not author or some other method) would make it easier, or at the very least by Read/Unread/Reading then you could collapse a shelf you're not looking through and have less books.
Click to expand...
Click to collapse
I didn’t think about that many books…
I’d say, multi-level shelves might be the way to go - first by series, than by author, etc.
Although, if I think a little bit, anyway I organize it, won’t be necessarily good for somebody else.
It shouldn’t be shelves, but some sort of filtering/drill-down built in into library:
I select 1st criteria (any metadata field, like series, [optionally, with wildcard]), then filter by 2nd (author), etc.
…Sorry, got carried away
---------- Post added at 04:26 AM ---------- Previous post was at 04:21 AM ----------
met67 said:
If you mean SQLite Editor, yes, I have it on the Nook, but is a bit hard to use (scrolling tends to behave errantly).
Click to expand...
Click to collapse
I meant command line only (on nook).
To use GUI on PC to develop/debug scripts, then exec on nook via command line sqlite.
ApokrifX said:
I meant command line only (on nook).
To use GUI on PC to develop/debug scripts, then exec on nook via command line sqlite.
Click to expand...
Click to collapse
As I was saying, I use a copy of sqlite3 found on this forum to exec SQL commands on nook. It is not an apk, just a simple executable: place it in a suitable place (e.g. /bin), chmod +x it and have fun
Related
Hello,
Thanks in advance. I searched the forum and elsewhere for these answers.
Can one export Notes and Highlights with a rooted Nook Touch. If so, how and which app should one download? Which are best?
If one puts Kindle app on a Nook Touch, does one get the functionality of exporting notes that I believe the Kindle app has?
Is there an a reader app that allows for Copying/Pasting/exporting? There is this unanswered thread that I think covers the same topic or similar:
http://forum.xda-developers.com/showthread.php?t=1180368
Much to my dismay, I just discovered that I can not export or backup Notes and Highlights that I create on a Nook Touch. I wonder what % don't realize this when they buy the device.
I do not think that "Nook For PC" does any of this as it only syncs bookmarks across devices:
http://www.barnesandnoble.com/u/nook-for-pc/379002322/
Once again thank you
I've been able to export from moon reader plus on my nook color - if this app works on nook touch it's the best solution I've found.
any solution found?
I want to root my nook, but I don't want to lose my highlights...!!!
I have been on the same quest for a few days now. I have not found a particularly good solution, but I do have a way to preserve highlighting.
When you use the kindle app on android and sideload a book in .mobi format (i.e. you place the .mobi file in /sdcard/kindle folder), and then make highlights or notes, it creates a .mbp file in the same directory. You can then move the .mobi and .mbp file into other kindle apps (other device, pc, etc), and your notes and highlights are preserved.
If I could find a way to get the .mbp file in /sdcard/kindle to automatically sync to the appropriate PC folder, it would be nearly perfect.
The advantage of .mobi files have over .epub is that .epub standard does not seem to include annotations. At the moment, you are somewhat confined to the Amazon ecosystem, but for now, this seems the best solution I've found so far.
---------- Post added at 10:18 AM ---------- Previous post was at 10:04 AM ----------
I have been on the same quest for a few days now. I have not found a particularly good solution, but I do have a way to preserve highlighting.
When you use the kindle app on android and sideload a book in .mobi format (i.e. you place the .mobi file in /sdcard/kindle folder), and then make highlights or notes, it creates a .mbp file in the same directory. You can then move the .mobi and .mbp file into other kindle apps (other device, pc, etc), and your notes and highlights are preserved.
If I could find a way to get the .mbp file in /sdcard/kindle to automatically sync to the appropriate PC folder, it would be nearly perfect.
The advantage of .mobi files have over .epub is that .epub standard does not seem to include annotations. At the moment, you are somewhat confined to the Amazon ecosystem, but for now, this seems the best solution I've found so far.
Any updates
Does anybody have any updates on this? I've been looking at how to save my highlights and notes because I want to update to 1.1.
I noticed that Calibre is testing saving notes from the Kobo reader. I think this would be the best way if they ever do it for the NST. However, that would be a long term solution because I don't see them doing it within the next month or so.
Any help on this would be greatly appreciated. Thanks,
The first post in this thread shows how to backup highlights and annotations. http://forum.xda-developers.com/showthread.php?t=1346748 I haven't tried it yet but I will check back when I do it.
this is a a feature really needed...anybody working on it??
Here's a direct link to the post referenced above. Highlights and notes are stored in databases.
http://forum.xda-developers.com/showpost.php?p=20069243&postcount=5
I haven't tested it yet.
Anyone interested in exploring -- you may want to look into some of the apps in the Android Market that allow for viewing and editing databases on a rooted device:
https://market.android.com/search?q=root+database+viewer&c=apps
Please post any findings!
MJ
mjj777 said:
Please post any findings!
Click to expand...
Click to collapse
It’s easy to write SQL script, but it’ll be few manual steps - not for everybody.
I’m not good enough yet to write GUI app, but it looks like nice and easy one to start with.
The problem is B&N doesn’t provide any API to work with nook specific features, like display book thumbnail, get books in library, get books on shelf, etc.
Once this framework is available, “assembling” apps should be piece of cake.
Manual Solution...
Besides backing up highlights and annotations (mentioned above) http://forum.xda-developers.com/showpost.php?p=20069243&postcount=5
I am following this thread that just started on somebody asking a possible way to do this automatically to dropbox or something similar. Which I think would be awesome! http://forum.xda-developers.com/showthread.php?t=1676579. However, this really doesn't solve the issue of easily reviewing highlights and annotations or exporting them to excel or word for a more pleasant viewing experience.
In the meantime as I am reading I have my iPhone open and I am writing down comments and passages and then marking the page number. I am doing this in the Onenote app which can be synced to my computer.
It makes reading not as fun when you have to go to a different device and type something in. However, I am guaranteed not to loose it, and it stays organized in a onenote folder I named "books" and section is the books title. Putting the page number also allows me to later go back and go to that specific page for further details and it is my understanding it should also match with the paper-bound version page number.
I find it amazing there is not an easier way. However, I have heard rumors the backing up a annotations and highlights might/could happen in Calibre. I think they began trying it with the Kobo reader. I think this would be ideal.
CoolReader can highlight, take notes and export.
The only problem is that it doesnt have DRM so it cannot read
books with DRM (purchased or rented books).
--
Is there any news on this side?
to me would be enough to having the possibility to share via mail.
does anyone knows if an app for android would work for this and if it feasible ?
Ok
i've just create a very basic app that export the highlithed text to an txt file inside the sd card.
source code is here (i started yesterday with android, so it's crappy).
https://github.com/esseti/NookTouchExporter
here the apk https://github.com/esseti/NookTouchExporter/tree/master/bin
it requires root permission.
feedbacks/collaborations anything is welcomed.
Off-hand, you might want to use a constructor for Annotation instead of setting things:
Code:
public class Annotation
{
private String book;
private String hltext;
public Annotation(String book, String htltext)
{
this.book = book;
this.hltext = hltext;
}
}
question
Hi, first, thanks for placing the apk and second, how do I use it?
I already install, I gave root permission, but nothing happens when you touch the icon
thanks
I forgot to subscribe to the thread. i made some changes, now it should have a button.
apk is here https://github.com/esseti/NookTouchExporter/tree/master/out/production/NookExporter
esseti said:
I forgot to subscribe to the thread. i made some changes, now it should have a button.
apk is here https://github.com/esseti/NookTouchExporter/tree/master/out/production/NookExporter
Click to expand...
Click to collapse
I've just tried this (md5sum: fc31f1bd16a95ebd5c41823cb9bbc57d) on my 1.2.1 UK Nook rooted with NookManager, and it has some problems.
When I start it, it asks for root via SuperUser and I grant it root permissions permanently. However, the attempt to copy annotations.db fails:
Code:
I/ActivityManager( 788): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x14000000 cmp=it.stefanotranquillini.nookexporter/.TestDatabaseActivity }
I/System.out(24021): books 1here we are
W/System.err(24021): io ex
W/System.err(24021): java.io.FileNotFoundException: /data/data/com.bn.nook.reader.activities/databases/annotations.db
E/TC ( 1035): KPICollector: 1368871897842 ActivityManager background {"component":"com.harasoft.relaunch/.AllApplications"}
E/TC ( 1035): KPICollector: 1368871897875 ActivityManager foreground {"component":"it.stefanotranquillini.nookexporter/.TestDatabaseActivity"}
Needless to say, the file does exist:
# ls -l /data/data/com.bn.nook.reader.activities/databases/annotations.db
-rw-rw---- app_0 app_0 11264 2013-05-07 15:57 annotations.db
Click to expand...
Click to collapse
I think you probably need to build a command line (e.g. su /system/xbin/cp /data/data/com.bn.nook.reader.activities/databases/annotations.db blahblah/databases.db) then exec() it. exec()ing su doesn't, AFAICS, give your app the power to do anything it likes as root. Chainfire wrote a nice doc: http://su.chainfire.eu/.
If I use an adb shell to manually copy the file over, it seems to export OK. I'd suggest, though, dumping all the columns so that adding import functionality later is possible.
cowbutt said:
I've just tried this (md5sum: fc31f1bd16a95ebd5c41823cb9bbc57d) on my 1.2.1 UK Nook rooted with NookManager, and it has some problems.
When I start it, it asks for root via SuperUser and I grant it root permissions permanently. However, the attempt to copy annotations.db fails:
Code:
I/ActivityManager( 788): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x14000000 cmp=it.stefanotranquillini.nookexporter/.TestDatabaseActivity }
I/System.out(24021): books 1here we are
W/System.err(24021): io ex
W/System.err(24021): java.io.FileNotFoundException: /data/data/com.bn.nook.reader.activities/databases/annotations.db
E/TC ( 1035): KPICollector: 1368871897842 ActivityManager background {"component":"com.harasoft.relaunch/.AllApplications"}
E/TC ( 1035): KPICollector: 1368871897875 ActivityManager foreground {"component":"it.stefanotranquillini.nookexporter/.TestDatabaseActivity"}
Needless to say, the file does exist:
I think you probably need to build a command line (e.g. su /system/xbin/cp /data/data/com.bn.nook.reader.activities/databases/annotations.db blahblah/databases.db) then exec() it. exec()ing su doesn't, AFAICS, give your app the power to do anything it likes as root. Chainfire wrote a nice doc: http://su.chainfire.eu/.
If I use an adb shell to manually copy the file over, it seems to export OK. I'd suggest, though, dumping all the columns so that adding import functionality later is possible.
Click to expand...
Click to collapse
i've no idea why it fails .
anyway i'll take a look later on. if you want code is on github and you can change it and submit as a patch (or whatever they called it), then i'll merge it.
Hello,
I haven't found a solution to the original question posted on this forum but I would like to share something that I think most Kindle users will benefit from.
Amazon has made it possible for Kindle users to make notes and highlights on their favorite passages or selection and these can be accessed again on their site. However, it can take up time and be difficult to obtain sometimes.
There is an iOS app that will be released this November 2013 called Snippefy that will make it easier for Kindle users to read and share their notes and highlights all in one place. They will also be able to export these to Evernote, Dropbox and email. I'm not able to post the link to the site here but basically it's at "snippefy dot com"
I just wanted to share this with all of you as you might find it useful.
Thanks!
Two ereaders I've found that do a good job of allowing for annotations, and have good export options are Moon+ Reader (version 1.6.5b) and Mantano Reader (version 2.2.12).
They are no longer being developed in a way that supports the Android 2.1 platform, which is what the Nook runs on, so the versions I listed above are the most recent versions that will work on the Nook, you'll have to get the old APKs and sideload them if you want to use that. Their controls and interface are amazing in my opinion, perhaps Moon+Reader 1.6.5b > Mantano Reader 2.2.13, however, the display is in my opinion quite low quality and unacceptable for extended reading.
A better option to keep your eye on is Page Turner (https://play.google.com/store/apps/details?id=net.nightwhistler.pageturner.ads&hl=en]). The developer is very active and mindful that a large portion of the user base uses the Nook ST, and so continues to have features support the Android 2.1 platform. The current beta version which will be released in the next weeks has just added support for highlighting, annotating and bookmarks. The plan for the next version is to allow for simple export process of these additions, so keep an eye on it.
I'm using the stock nook reader and renate's Library.apk. How can you make sure the last read icon on the top bar corresponds to the last read file in the library?
I am not sure where this icon gets its link. It doesn't seem to always open the last read file.
I've been thinking about asking this question (although I am using the stock reader AND library apps). My "reading now" button is getting really cranky of late. It often just goes to the first page (cover) or sometimes it goes to the first page AND displays a two-option message about the different current reading positions in two Nook readers (!) and which one do I want (generally neither is correct). Right now the only sure way to get to the correct page is to go to the Library screen and select the book from there. So the Nook does remember, but the Reading Now button is not functioning properly.
For a time I had a number of B&N apps disabled (renamed ".bak") and gradually discovered the imponderable connections that seemed to render little things inoperable. I've had to restore quite a few of the apps to running to keep everything functioning except Nook Community (because the constant "nagifications" drove me crazy) but this button behavior has me baffled (as does the reference to two Nook readers!)
I wonder, are you using any sort of "cleaning" app? I am using Clean Master and find it helpful in freeing up memory but I'm beginning to think that some of the data it is throwing out might just contain the info that the button needs to function properly. It certainly messes with Tasker.
The "Last Read" icon on the status bar sends out the intent com.bn.nook.launch.LAST_BOOK
This would normally be handled by Home.apk
If you deleted Home.apk and are using my Library.apk it has its own receiver for that.
Depending on which version Nook software you have it will query
content://com.bn.nook.reader.providers.lastreadingpointprovider/
content://com.bn.nook.reader.common.providers.lastreadingpointprovider/
The LRP database is maintained by the Reader(RMSDK).apk.
Checking for the latest modification gives you the last book read.
My Library.apk sends an intent out to open that book.
Currently Library.apk does not update the order of books displayed in "Last read" unless the refresh button is hit.
Two things to look for if you are having problems:
If you let the battery die and the WiFi is always off the clock time will be wrong.
If you crash or shutdown improperly Reader(RMSDK).apk will not get a chance to update the LRP.
P.S. I just noticed a possible anomaly if you read PDF's in the reader too.
Oh! It just occurred to me one thing.
I remember opening a book that you have been reading already and it opens at page 1.
This was tied to opening the book in different ways.
There are different ways to open a book:
Through the "Last Read" icon and stock Home.apk
Through the stock Library.apk
Through my Library.apk
Through a file manager application
The LRP database is /data/data/com.bn.nook.reader.activities/databases/lastreadingpoint.db
Code:
CREATE TABLE lastreadingpoint
(_id integer primary key autoincrement,
ean text, // file URI
luid text,
offsetrmsdk text, // subfile path fragment
lastupdated long, // Unix milliseconds last read
bookdna int, // always 1?
sync_status int // always 1?
);
ean (which normally might stand for European Article Number, i.e. "UPC") is a URI, not a path.
Code:
sqlite> select ean from lastreadingpoint;
file:///sdcard/Books/aboveall.epub
...
There may be cases where a single book gets different ean's.
If you could look at LRP and see if this is so?
I actually managed to locate that db file on my own (!) and what seemed to be a companion with related information (readerlocal.db). They seemed to be full of junk info (books that had since been removed, etc.) although there were no duplicate entries, which is what I had suspected.
Anyway, I got a little "brave" (i.e., foolhardy) and decided to clean up both files in a parallel way. Then I pushed them back, reset the permissions and rebooted.
Yikes. My Nook is set to go to the B&N Home screen only on reboot. That screen flickered and flashed, never filling in any of the images. I could still use the "N" button to access other parts of the system and they were working fine, but any return to the Home screen via the Back button showed it was still in distress.
So....restore from backup...again.
It seems OK for now. I have noticed that the little "refresh" button in the Library does sometimes seem to go on and on and on without any accomplishment. I have suspected the issue was how I accessed the book-in-progress as you described. Since I sometimes read more than one book at a time, I'm all over the place with how I do things (including a Library icon in my App home screen). I'm going to try being more disciplined for a while and see how it behaves.
nmyshkin said:
I actually managed to locate that db file on my own (!) and what seemed to be a companion with related information (readerlocal.db). They seemed to be full of junk info (books that had since been removed, etc.) although there were no duplicate entries, which is what I had suspected.
Anyway, I got a little "brave" (i.e., foolhardy) and decided to clean up both files in a parallel way. Then I pushed them back, reset the permissions and rebooted.
Yikes. My Nook is set to go to the B&N Home screen only on reboot. That screen flickered and flashed, never filling in any of the images. I could still use the "N" button to access other parts of the system and they were working fine, but any return to the Home screen via the Back button showed it was still in distress.
So....restore from backup...again.
It seems OK for now. I have noticed that the little "refresh" button in the Library does sometimes seem to go on and on and on without any accomplishment. I have suspected the issue was how I accessed the book-in-progress as you described. Since I sometimes read more than one book at a time, I'm all over the place with how I do things (including a Library icon in my App home screen). I'm going to try being more disciplined for a while and see how it behaves.
Click to expand...
Click to collapse
Would it be possible to write an app that simulates opening the last read book from only one of the Library apps and then map that to the last read icon to simplify this whole system?
mergen3107 said:
Guys, if you are concerned about why sometimes the last read option goes to the 1st page, then it was already fixed by our forum users somewhere here. (I could hardly remember and trace where it all started but finally it was successfully solved)
Just install a file this package (internal.db deep in the 'data' folder. You could delete 'system' folder - this is hyphenations dictionary for Russian) through cwm or replace it manually (the zip contains detailed path) and here you go.
Click to expand...
Click to collapse
Now that was an interesting trip! Once I had Google do some translating there were a number of really interesting posts that were (mostly) intelligible. I'd want to compare that modified internal.db file with what's already on my Nook before I did any replacing. A lot of the work from that site is "russified" (not surprisingly) and there may be other changes there not really needed/wanted, but it's a good start.
I noticed in another posting there that someone said there is a related issue with in what state the Nook is connected via USB. Apparently the hypothesis is that if you don't connect while in the Library you stand a good chance of scrambling the "reading now" database entry. I've certainly been hooking up with my Nook in all kinds of states, so if that's correct, no wonder my database file was so messed up!
Installation of the internal.db file from the Russian source will not work. I've tried a side-by-side comparison of the file with the one from my Nook (FW 1.21) and there are differences (beyond the region identifier, which is easily changed). It's not at all clear what changes have been made or from what firmware the modified file came. In any case, it causes havoc when exchanged for the native internal.db
The Russian discussion points to this thread on XDA which approaches (and apparently solves) the problem another way. I'm going to give it a try.
nmyshkin said:
Installation of the internal.db file from the Russian source will not work. I've tried a side-by-side comparison of the file with the one from my Nook (FW 1.21) and there are differences (beyond the region identifier, which is easily changed). It's not at all clear what changes have been made or from what firmware the modified file came. In any case, it causes havoc when exchanged for the native internal.db
The Russian discussion points to this thread on XDA which approaches (and apparently solves) the problem another way. I'm going to give it a try.
Click to expand...
Click to collapse
Do I read this correctly, http://bit.ly/Q7MytN from that thread there should be no problem if renates Library.apk is used exclusively and the stock Library.apk has the bug?
Thank you all for the wonderful support you are giving this device. While am an expert tinkerer, I do not have the time or knowledge necessary to take this device to the level I desire without the help you all afford.
So, having said that, I recieved my refurb unit (rollback was not an option when I contacted customer support, and 13.4.5.3 broke many things for me, The native Kindle app was among them.), I was able to toss twrp on it and update to 13.4.5.2, root it, and trick it to near perfection. Yet, I hate having to jump through hoops to get to my amazon books, so I played around with adb logcat and xda searches, and stumbled upon this...
http://forum.xda-developers.com/showthread.php?t=1479858
izomiac found a way to make a link on the older Kindles. I tried it, and though it looks like there are only a few changes, it does not work out of the box.
I would like to create a link to my books library as well as links to individual books.
Code:
Action: com.amazon.kindle.otter.action.SHOW_BOOKS
Category: android.intent.category.HOME
fails with an error of
Code:
Action: com.amazon.kindle.otter.action.SHOW_BOOKS
Category: android.intent.category.HOME requires com.amazon.SHOW_CONTENT_LIBRARY
I am using QCustomShortcut to try this as launching the intent from shell did not work either.
Does anyone have any suggestions? I asked over in iziomac's thread too, but it is really old, and I did not know if anyone would even see it.
Incidentally, his code for linking to individual books works incredibly. That is an android level intent, so there is less which could go wrong.
Code:
android.intent.action.VIEW
Data: kindle://book/?action=open&book_id=AMZNID0/<bookid>/0/
He explains pretty clearly how to get the book id as well.
izomiac said:
All that you want to change in that data string is the escaped book_id field. You can extract the book's ID from any Amazon Kindle product page (go to Manage your Kindle on Amazon.com). So, the book ID in this example is: B002WB0XW0 and the URL of the product page is http://www.amazon.com/dp/B002WB0XW0 (plus some useless SEO keywords and tracking cruft I omitted).
Click to expand...
Click to collapse
Again, this is all Izomiac's work, not mine.
~Leko
Could you not edit the APK and manually add the missing permission it requires?
https://developer.android.com/guide/topics/security/permissions.html
Thanks. When using a shortcut created with that app, who calls for the intent?
Sent from my KFTHWI using Tapatalk
Hey guys, I have a question. I'm sure somebody out there has done this. I am making Rooted NST's for my friends as gifts, and I think it would be really easy for them to be able to use relaunch to open the .epub format books I have included for them. The best reader app I have found is @Renate NST's temblast reader app. It works with the page turning buttons, and in conjunction with @nmyshkin's NoIR app that he made, it makes for a seriously long battery life while reading. I gave my best friend a rooted NST for his birthday (beginning of August). He has read an entire book, and still hasn't charged it. Thanks for that, guys.
Anyway, what I'm trying to do is be able to use Relaunch to open .epub books. I've included a screenshot of the menu that has the ability to set intentions or even to open an application based on the filetype of the file selected. However, temblast reader does not show on the list of possible apps to launch. I tried using Titanium Backup to move temblast reader to system, but still to no avail. Anyone who knows better how to set an intent, and perhaps knows the language needed to do this would probably be much better suited to helping.
Thank you so much in advanced.
PS: That intent that is typed in the line for .epub files is my own feeble attempt at trying to get temblast reader to run as a system app. Please ignore that. :cyclops:
I'm not sure about Relaunch, but this should work fine:
Code:
# am start -a android.intent.action.VIEW -d file:///sdcard/Books/progit.epub
I typed it in like you said, and it didn't work. Maybe it's just not meant to be done on Relaunch.
Here's what it looked like when I tried to launch an .epub file.
Black screen.
I also thought maybe it was because my epub files are in My Files/Books so I added that in, and it didn't change anything.
I really appreciate your help and effort in this. Perhaps you know of an intent simply for "Reading Now"? I could use that in a different application.
Do you actually have that book "Pro Git"?
If you don't, there's no chance that it will be opened.
"Last Book" was actually a broadcast originally. Try:
Code:
# am broadcast -a com.bn.nook.launch.LAST_BOOK
Anyone knows where the files/databases are for the library to use, e.g., sorting files for recent, author and title, as well as for shelves. It seems the library module from time to time doesn't sort correctly, after adding new books. Sometimes, a book from search is not placed in the 1st in the library ( for most recent order ). So I guess there must be something wrong in related files. Any tips are appreciated.
smjohn1 said:
Anyone knows where the files/databases are for the library to use, e.g., sorting files for recent, author and title, as well as for shelves. It seems the library module from time to time doesn't sort correctly, after adding new books. Sometimes, a book from search is not placed in the 1st in the library ( for most recent order ). So I guess there must be something wrong in related files. Any tips are appreciated.
Click to expand...
Click to collapse
AFAIK there is nothing specifically for the Library app other than an xml file (/data/data/com.bn.nook.library/shared_prefs.xml) which I imagine is supposed to control how the various library options display when the library is accessed. I've never had any luck with changing the settings (which are obfuscated anyway) as I would like the library to open a certain way but it insists on reverting to something else no matter how many times I set it.
As for databases, there are two associated with the Reader app (/data/data/com.bn.nook.reader.activites/databases/lastreadingpoint.db and /readerlocal.db). Historically there have been issues with the databases becoming garbled and there are a couple of postings somewhere in the forum with sqlite sequences for clearing out the dross and starting over. I'll see if I can scare those up but you should search also. And you'll need a sqlite database viewer if you want to examine the databases on your PC to see what's there.
Edit: This is the main thread I was remembering: https://forum.xda-developers.com/t/solved-on-the-problem-of-broken-bookmarks.1467429/
nmyshkin said:
AFAIK there is nothing specifically for the Library app other than an xml file (/data/data/com.bn.nook.library/shared_prefs.xml) which I imagine is supposed to control how the various library options display when the library is accessed. I've never had any luck with changing the settings (which are obfuscated anyway) as I would like the library to open a certain way but it insists on reverting to something else no matter how many times I set it.
As for databases, there are two associated with the Reader app (/data/data/com.bn.nook.reader.activites/databases/lastreadingpoint.db and /readerlocal.db). Historically there have been issues with the databases becoming garbled and there are a couple of postings somewhere in the forum with sqlite sequences for clearing out the dross and starting over. I'll see if I can scare those up but you should search also. And you'll need a sqlite database viewer if you want to examine the databases on your PC to see what's there.
Edit: This is the main thread I was remembering: https://forum.xda-developers.com/t/solved-on-the-problem-of-broken-bookmarks.1467429/
Click to expand...
Click to collapse
Thx, I will dig a bit. Strange thing is just read books from search don't appear in library's beginning at all. On the other hand, books read from library do change order in the library. Besides database, any other possible modules that would such problems?
smjohn1 said:
Thx, I will dig a bit. Strange thing is just read books from search don't appear in library's beginning at all. On the other hand, books read from library do change order in the library. Besides database, any other possible modules that would such problems?
Click to expand...
Click to collapse
I've come up empty. From examining the two Reader databases it is clear that they do not contain any information that would create placement in the Library such as shelves. That information must be somewhere but I have not been able to find it. There is another database, home.db, which is part of the bn.home app. There is minimal data there about books, but nothing helpful.
What is distressing (besides not being able to track down where this information is stored) is that there seems to be no mechanism to flush out the databases. Looking over mine I see (sideloaded) books that I have deleted a long time ago. No wonder things act funny after awhile.
Edit: Never say never. This post: https://forum.xda-developers.com/t/automating-shelving.1378510/ reveals the whereabouts of the information for the Library. I never would have guessed B&N would use stock Android for that!
Yeah, there used to be problems with the MediaScanner on the NST.
I got used to not relying on it.
Even now, my Library app has a fixed number of locations for books and you just hit Refresh once in a while.
The AdbSync script (makefile actually) that I use just pokes a refresh after syncing the Books directory.
nmyshkin said:
I've come up empty. From examining the two Reader databases it is clear that they do not contain any information that would create placement in the Library such as shelves. That information must be somewhere but I have not been able to find it. There is another database, home.db, which is part of the bn.home app. There is minimal data there about books, but nothing helpful.
What is distressing (besides not being able to track down where this information is stored) is that there seems to be no mechanism to flush out the databases. Looking over mine I see (sideloaded) books that I have deleted a long time ago. No wonder things act funny after awhile.
Edit: Never say never. This post: https://forum.xda-developers.com/t/automating-shelving.1378510/ reveals the whereabouts of the information for the Library. I never would have guessed B&N would use stock Android for that!
Click to expand...
Click to collapse
Wow! Thx. I need to learn sqlites to see all the contents.
Renate said:
Yeah, there used to be problems with the MediaScanner on the NST.
I got used to not relying on it.
Even now, my Library app has a fixed number of locations for books and you just hit Refresh once in a while.
The AdbSync script (makefile actually) that I use just pokes a refresh after syncing the Books directory.
Click to expand...
Click to collapse
how tro refresh? Is there adb code for that? Thx again.
smjohn1 said:
Wow! Thx. I need to learn sqlites to see all the contents.
Click to expand...
Click to collapse
You can do sqlite manipulations via ADB is you have sqlite3 installed on the NST, but for a better overall view you really need to copy the database file to a PC use a tool like this.
smjohn1 said:
How to refresh? Is there adb code for that?
Click to expand...
Click to collapse
Not really.
There are ways to make the MediaScanner scan a single file.
There is no simple way to tell it to just rescan everything.
I was talking about my Library.apk which does a simple foreground scan when you:
Code:
adb shell am start -a com.temblast.library.REFRESH