1 package com.folioreader.ui.base;
3 import android.os.AsyncTask;
4 import android.util.Log;
6 import com.fasterxml.jackson.databind.ObjectMapper;
7 import com.folioreader.util.AppUtil;
9 import org.readium.r2_streamer.model.publication.EpubPublication;
10 import org.readium.r2_streamer.model.tableofcontents.TOCLink;
12 import java.io.BufferedReader;
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.io.InputStreamReader;
17 import java.net.URLConnection;
20 * Background async task which makes API call to get Epub publication
21 * manifest from server
23 * @author by gautam on 12/6/17.
26 public class ManifestTask extends AsyncTask<String, Void, EpubPublication> {
28 private static final String TAG = "ManifestTask";
30 private ManifestCallBack manifestCallBack;
32 public ManifestTask(ManifestCallBack manifestCallBack) {
33 this.manifestCallBack = manifestCallBack;
37 protected EpubPublication doInBackground(String... urls) {
38 String strUrl = urls[0];
41 URL url = new URL(strUrl);
42 URLConnection urlConnection = url.openConnection();
43 InputStream inputStream = urlConnection.getInputStream();
44 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, AppUtil.charsetNameForURLConnection(urlConnection)));
45 StringBuilder stringBuilder = new StringBuilder();
47 while ((line = bufferedReader.readLine()) != null) {
48 stringBuilder.append(line);
51 ObjectMapper objectMapper = new ObjectMapper();
52 return objectMapper.readValue(stringBuilder.toString(), EpubPublication.class);
53 } catch (IOException e) {
54 Log.e(TAG, "ManifestTask failed", e);
60 protected void onPostExecute(EpubPublication publication) {
61 if (publication != null) {
62 //TODO can be implemented in r2-streamer?
63 if (publication.tableOfContents != null) {
64 for (TOCLink link : publication.tableOfContents) {
65 setBookTitle(link, publication);
68 manifestCallBack.onReceivePublication(publication);
70 manifestCallBack.onError();
75 private void setBookTitle(TOCLink link, EpubPublication publication) {
76 for (int i = 0; i < publication.spines.size(); i++) {
77 if (publication.spines.get(i).href.equals(link.href)) {
78 publication.spines.get(i).bookTitle = link.bookTitle;