From 8aaf1fad0c1cfa65132f052f0f98b3452ddc4eeb Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 26 Feb 2017 13:42:00 +0300 Subject: various offline-related fixes --- backend.php | 8 +++++--- js/offline.js | 27 +++++++++++++++++++++++---- js/read.js | 3 ++- read.html | 9 +++++---- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/backend.php b/backend.php index 308d2df..f603fbf 100644 --- a/backend.php +++ b/backend.php @@ -130,19 +130,21 @@ $bookid = (int) $_REQUEST["id"]; $lastread = 0; $lastcfi = ""; + $totalpages = 0; if ($bookid) { - $result = $ldb->query("SELECT id, lastread, lastcfi FROM epube_books - WHERE bookid = '$bookid' AND owner = '$owner' LIMIT 1"); + $result = $ldb->query("SELECT b.lastread, b.lastcfi, p.total_pages FROM epube_books AS b, epube_pagination AS p + WHERE b.bookid = p.bookid AND b.bookid = '$bookid' AND b.owner = '$owner' LIMIT 1"); if ($line = $result->fetchArray()) { $lastread = (int) $line["lastread"]; $lastcfi = $line["lastcfi"]; + $totalpages = (int) $line["total_pages"]; } } - print json_encode(["page" => $lastread, "cfi" => $lastcfi]); + print json_encode(["page" => $lastread, "cfi" => $lastcfi, "total" => $totalpages]); break; diff --git a/js/offline.js b/js/offline.js index d1c49d6..7815b83 100644 --- a/js/offline.js +++ b/js/offline.js @@ -1,3 +1,7 @@ +function offline_remove2(elem) { + return offline_remove(elem, populate_list); +} + function populate_list() { var books = $("#books_container"); @@ -8,7 +12,8 @@ function populate_list() { Promise.all([ localforage.getItem(key), - localforage.getItem(key + ".cover") + localforage.getItem(key + ".cover"), + localforage.getItem(key + ".lastread") ]).then(function(results) { var info = results[0]; @@ -20,13 +25,27 @@ function populate_list() { cover = URL.createObjectURL(results[1]); } + var in_progress = false; + var is_read = false; + + var lastread = results[2]; + if (lastread) { + + in_progress = lastread.page > 0; + is_read = lastread.total - lastread.page < 5; + } + var cell = "
"; - cell += "
"; + var cover_read = is_read ? "read" : ""; + var title_class = in_progress ? "in_progress" : ""; + + cell += "
"; cell += ""; cell += "
"; - cell += ""; + cell += ""; cell += "
" + info.author_sort + "
"; if (info.series_name) { @@ -40,7 +59,7 @@ function populate_list() { "More..." + ""; cell += ""; cell += "
"; diff --git a/js/read.js b/js/read.js index dc968f4..4fb74ce 100644 --- a/js/read.js +++ b/js/read.js @@ -113,9 +113,10 @@ function save_and_close() { if (navigator.onLine) { var currentPage = book.pagination.pageFromCfi(book.getCurrentLocationCfi()); var currentCfi = book.getCurrentLocationCfi(); + var totalPages = book.pagination.totalPages; localforage.setItem("epube-book." + $.urlParam("b") + ".lastread", - {cfi: currentCfi, page: currentPage}); + {cfi: currentCfi, page: currentPage, total: totalPages}); $.post("backend.php", { op: "storelastread", id: $.urlParam("id"), page: currentPage, cfi: currentCfi }, function(data) { diff --git a/read.html b/read.html index 8db7e60..aafbc96 100644 --- a/read.html +++ b/read.html @@ -343,10 +343,10 @@ var url = "backend.php?op=getpagination&id=" + encodeURIComponent($.urlParam("id")); EPUBJS.core.request(url).then(function(pageList) { - console.log("pagination: requesting remote"); + console.log("pagination: requesting remote: "); if (book.loadPagination(pageList).length > 0) { - localforage.setItem(cacheId("pagination"), pageList); + localforage.setItem(cacheId("pagination"), JSON.parse(pageList)); _pagination_stored = 1; } else { book.generatePagination(); @@ -417,7 +417,8 @@ var currentCfi = book.getCurrentLocationCfi(); var currentPage = location.anchorPage; - + var totalPages = book.pagination.totalPages; + if (navigator.onLine) { $.post("backend.php", { op: "storelastread", id: $.urlParam("id"), page: currentPage, @@ -436,7 +437,7 @@ } localforage.setItem(cacheId("lastread"), - {cfi: currentCfi, page: currentPage}); + {cfi: currentCfi, page: currentPage, total: totalPages}); } }); -- cgit v1.2.3