X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff..269195b3729c1bdc22e9053ee4ebca667ea8549d:/Android/folioreader/src/main/java/com/folioreader/ui/base/ManifestTask.java diff --git a/Android/folioreader/src/main/java/com/folioreader/ui/base/ManifestTask.java b/Android/folioreader/src/main/java/com/folioreader/ui/base/ManifestTask.java new file mode 100755 index 0000000..c6e06bd --- /dev/null +++ b/Android/folioreader/src/main/java/com/folioreader/ui/base/ManifestTask.java @@ -0,0 +1,83 @@ +package com.folioreader.ui.base; + +import android.os.AsyncTask; +import android.util.Log; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.folioreader.util.AppUtil; + +import org.readium.r2_streamer.model.publication.EpubPublication; +import org.readium.r2_streamer.model.tableofcontents.TOCLink; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; + +/** + * Background async task which makes API call to get Epub publication + * manifest from server + * + * @author by gautam on 12/6/17. + */ + +public class ManifestTask extends AsyncTask { + + private static final String TAG = "ManifestTask"; + + private ManifestCallBack manifestCallBack; + + public ManifestTask(ManifestCallBack manifestCallBack) { + this.manifestCallBack = manifestCallBack; + } + + @Override + protected EpubPublication doInBackground(String... urls) { + String strUrl = urls[0]; + + try { + URL url = new URL(strUrl); + URLConnection urlConnection = url.openConnection(); + InputStream inputStream = urlConnection.getInputStream(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, AppUtil.charsetNameForURLConnection(urlConnection))); + StringBuilder stringBuilder = new StringBuilder(); + String line; + while ((line = bufferedReader.readLine()) != null) { + stringBuilder.append(line); + } + + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readValue(stringBuilder.toString(), EpubPublication.class); + } catch (IOException e) { + Log.e(TAG, "ManifestTask failed", e); + } + return null; + } + + @Override + protected void onPostExecute(EpubPublication publication) { + if (publication != null) { + //TODO can be implemented in r2-streamer? + if (publication.tableOfContents != null) { + for (TOCLink link : publication.tableOfContents) { + setBookTitle(link, publication); + } + } + manifestCallBack.onReceivePublication(publication); + } else { + manifestCallBack.onError(); + } + cancel(true); + } + + private void setBookTitle(TOCLink link, EpubPublication publication) { + for (int i = 0; i < publication.spines.size(); i++) { + if (publication.spines.get(i).href.equals(link.href)) { + publication.spines.get(i).bookTitle = link.bookTitle; + return; + } + } + } +} \ No newline at end of file