Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / util / FileUtil.java
diff --git a/Android/folioreader/src/main/java/com/folioreader/util/FileUtil.java b/Android/folioreader/src/main/java/com/folioreader/util/FileUtil.java
new file mode 100755 (executable)
index 0000000..abd7326
--- /dev/null
@@ -0,0 +1,114 @@
+package com.folioreader.util;
+
+import android.content.Context;
+import android.content.res.AssetManager;
+import android.content.res.Resources;
+import android.os.Environment;
+import android.util.Log;
+
+import com.folioreader.Constants;
+import com.folioreader.ui.folio.activity.FolioActivity;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * Created by Mahavir on 12/15/16.
+ */
+
+public class FileUtil {
+    private static final String TAG = FileUtil.class.getSimpleName();
+    private static final String FOLIO_READER_ROOT = "/folioreader/";
+
+    public static String saveEpubFileAndLoadLazyBook(final Context context, FolioActivity.EpubSourceType epubSourceType, String epubFilePath, int epubRawId, String epubFileName) {
+        String filePath;
+        InputStream epubInputStream;
+        boolean isFolderAvailable;
+        try {
+            isFolderAvailable = isFolderAvailable(epubFileName);
+            filePath = getFolioEpubFilePath(epubSourceType, epubFilePath, epubFileName);
+
+            if (!isFolderAvailable) {
+                if (epubSourceType.equals(FolioActivity.EpubSourceType.RAW)) {
+                    epubInputStream = context.getResources().openRawResource(epubRawId);
+                    saveTempEpubFile(filePath, epubFileName, epubInputStream);
+                } else if (epubSourceType.equals(FolioActivity.EpubSourceType.ASSETS)) {
+                    AssetManager assetManager = context.getAssets();
+                    epubFilePath = epubFilePath.replaceAll(Constants.ASSET, "");
+                    epubInputStream = assetManager.open(epubFilePath);
+                    saveTempEpubFile(filePath, epubFileName, epubInputStream);
+                } else {
+                    filePath = epubFilePath;
+                }
+            }
+            return filePath;
+        } catch (IOException e) {
+            Log.d(TAG, e.getMessage());
+        }
+
+        return null;
+    }
+
+    public static String getFolioEpubFolderPath(String epubFileName) {
+        return Environment.getExternalStorageDirectory().getAbsolutePath()
+                + "/" + FOLIO_READER_ROOT + "/" + epubFileName;
+    }
+
+    public static String getFolioEpubFilePath(FolioActivity.EpubSourceType sourceType, String epubFilePath, String epubFileName) {
+        if (FolioActivity.EpubSourceType.SD_CARD.equals(sourceType)) {
+            return epubFilePath;
+        } else {
+            return getFolioEpubFolderPath(epubFileName) + "/" + epubFileName + ".epub";
+        }
+    }
+
+    private static boolean isFolderAvailable(String epubFileName) {
+        File file = new File(getFolioEpubFolderPath(epubFileName));
+        return file.isDirectory();
+    }
+
+    public static String getEpubFilename(Context context, FolioActivity.EpubSourceType epubSourceType,
+                                         String epubFilePath, int epubRawId) {
+        String epubFileName;
+        if (epubSourceType.equals(FolioActivity.EpubSourceType.RAW)) {
+            Resources res = context.getResources();
+            epubFileName = res.getResourceEntryName(epubRawId);
+        } else {
+            String[] temp = epubFilePath.split("/");
+            epubFileName = temp[temp.length - 1];
+            int fileMaxIndex = epubFileName.length();
+            epubFileName = epubFileName.substring(0, fileMaxIndex - 5);
+        }
+
+        return epubFileName;
+    }
+
+    public static Boolean saveTempEpubFile(String filePath, String fileName, InputStream inputStream) {
+        OutputStream outputStream = null;
+        File file = new File(filePath);
+        try {
+            if (!file.exists()) {
+                File folder = new File(getFolioEpubFolderPath(fileName));
+                folder.mkdirs();
+
+                outputStream = new FileOutputStream(file);
+                int read = 0;
+                byte[] bytes = new byte[inputStream.available()];
+
+                while ((read = inputStream.read(bytes)) != -1) {
+                    outputStream.write(bytes, 0, read);
+                }
+            } else {
+                return true;
+            }
+            inputStream.close();
+            outputStream.close();
+        } catch (IOException e) {
+            Log.d(TAG, e.getMessage());
+        }
+        return false;
+    }
+}