From e01f57a3d98943954372110dc75e8d731fbacc10 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 26 Feb 2017 13:12:33 +0300 Subject: further offline improvements --- js/index.js | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- js/offline.js | 63 +++++++++++++++++++++++++++++++++------- js/read.js | 10 +++++-- 3 files changed, 144 insertions(+), 21 deletions(-) (limited to 'js') diff --git a/js/index.js b/js/index.js index e76be90..95615a2 100644 --- a/js/index.js +++ b/js/index.js @@ -1,13 +1,91 @@ -function offline_cache(elem) { - try { +function mark_offline_books() { + var elems = $(".offline_dropitem"); + + $.each(elems, function (i, elem) { var bookId = elem.getAttribute("data-book-id"); + var cacheId = "epube-book." + bookId; + + localforage.getItem(cacheId).then(function(book) { + if (book) { + + elem.onclick = function() { + offline_remove(elem, function() { + mark_offline_books(); + }); + }; + + elem.innerHTML = "Remove offline data"; + + + } else { + elem.onclick = function() { + offline_cache(bookId, function() { + mark_offline_books(); + }); + }; + + elem.innerHTML = "Make available offline"; + } + }); + }); +} + +function offline_cache(bookId, callback) { + console.log("offline cache: " + bookId); + + $.post("backend.php", {op: "getinfo", id: bookId}, function(data) { + + if (data) { + var cacheId = 'epube-book.' + bookId; + + localforage.setItem(cacheId, data).then(function(data) { + + console.log(cacheId + ' got data'); + + fetch('getbook/' + data.epub_id + ".epub", {credentials: 'same-origin'}).then(function(resp) { + if (resp.status == 200) { + console.log(cacheId + ' got book'); + + callback(); + + localforage.setItem(cacheId + '.book', resp.blob()); + } + }); + + fetch("backend.php?op=getpagination&id=" + data.epub_id, {credentials: 'same-origin'}).then(function(resp) { + if (resp.status == 200) { + console.log(cacheId + ' got pagination'); + + resp.text().then(function(text) { + localforage.setItem(cacheId + '.pagination', JSON.parse(text)); + }); + } + }); + + fetch("backend.php?op=getlastread&id=" + data.epub_id, {credentials: 'same-origin'}).then(function(resp) { + if (resp.status == 200) { + console.log(cacheId + ' got lastread'); + resp.text().then(function(text) { + localforage.setItem(cacheId + '.lastread', JSON.parse(text)); + }); + } + }); + + if (data.has_cover) { + + fetch("backend.php?op=cover&id=" + bookId, {credentials: 'same-origin'}).then(function(resp) { + + if (resp.status == 200) { + console.log(cacheId + ' got cover'); + localforage.setItem(cacheId + '.cover', resp.blob()); + } - console.log(bookId); + }); + } - return false; + }); + } - } catch (e) { - console.warn(e); - } + }); } diff --git a/js/offline.js b/js/offline.js index d9bed0b..d1c49d6 100644 --- a/js/offline.js +++ b/js/offline.js @@ -1,23 +1,64 @@ -var CACHE_NAME = "epube-test"; - function populate_list() { var books = $("#books_container"); + books.html(""); - window.caches.open(CACHE_NAME).then(function(cache) { - cache.keys().then(function(items) { + localforage.iterate(function(value, key, i) { + if (key.match(/epube-book\.\d{1,}$/)) { - $.each(items, function(i, req) { + Promise.all([ + localforage.getItem(key), + localforage.getItem(key + ".cover") + ]).then(function(results) { - if (req.url.match(/\.epub/)) { - console.log(req.url); + var info = results[0]; + if (info) { + var cover = false; - } + if (results && results[1]) { + cover = URL.createObjectURL(results[1]); + } - }); + var cell = "
"; - }); - }); + cell += "
"; + cell += ""; + + cell += "
"; + cell += "
" + info.title + "
"; + cell += "
" + info.author_sort + "
"; + + if (info.series_name) { + cell += "
" + info.series_name + " [" + info.series_index + "]
"; + } + + cell += "
"; + + cell += "
"; + cell += "" + + "More..." + ""; + + cell += ""; + cell += "
"; + + cell += "
"; + cell += "
"; + + var cell = $(cell); + + if (cover) { + cell.find("img").attr("src", cover); + } + + books.append(cell); + + Holder.run(); + } + }); + } + }); } diff --git a/js/read.js b/js/read.js index 9039826..dc968f4 100644 --- a/js/read.js +++ b/js/read.js @@ -111,10 +111,14 @@ function mark_as_read() { function save_and_close() { if (navigator.onLine) { - var curPage = book.pagination.pageFromCfi(book.getCurrentLocationCfi()); + var currentPage = book.pagination.pageFromCfi(book.getCurrentLocationCfi()); + var currentCfi = book.getCurrentLocationCfi(); - $.post("backend.php", { op: "storelastread", id: $.urlParam("id"), page: curPage, - cfi: book.getCurrentLocationCfi() }, function(data) { + localforage.setItem("epube-book." + $.urlParam("b") + ".lastread", + {cfi: currentCfi, page: currentPage}); + + $.post("backend.php", { op: "storelastread", id: $.urlParam("id"), page: currentPage, + cfi: currentCfi }, function(data) { window.location = "index.php"; }); } else { -- cgit v1.2.3