/* * Copyright 2014 A.C.R. Development */ package acr.browser.lightning.constant; import android.app.Application; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; import com.anthonycr.bonsai.Single; import com.anthonycr.bonsai.SingleAction; import com.anthonycr.bonsai.SingleOnSubscribe; import com.anthonycr.bonsai.SingleSubscriber; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.List; import javax.inject.Inject; import acr.browser.lightning.R; import acr.browser.lightning.BrowserApp; import acr.browser.lightning.database.downloads.DownloadItem; import acr.browser.lightning.database.downloads.DownloadsModel; import acr.browser.lightning.preference.PreferenceManager; import acr.browser.lightning.utils.Preconditions; import acr.browser.lightning.utils.Utils; public final class DownloadsPage { private static final String TAG = "DownloadsPage"; public static final String FILENAME = "downloads.html"; private static final String HEADING_1 = "\n" + "\n" + "\n" + "\n" + "\n" + ""; private static final String HEADING_2 = "
"; private static final String PART1 = "

"; private static final String PART3 = "

"; private static final String PART4 = "

"; private static final String END = "
"; @NonNull private static File getDownloadsPageFile(@NonNull Application application) { return new File(application.getFilesDir(), FILENAME); } @Inject Application mApp; @Inject PreferenceManager mPreferenceManager; @Inject DownloadsModel mManager; @NonNull private final String mTitle; public DownloadsPage() { BrowserApp.getAppComponent().inject(this); mTitle = mApp.getString(R.string.action_downloads); } @NonNull public Single getDownloadsPage() { return Single.create(new SingleAction() { @Override public void onSubscribe(@NonNull SingleSubscriber subscriber) { buildDownloadsPage(); File downloadsWebPage = getDownloadsPageFile(mApp); subscriber.onItem(Constants.FILE + downloadsWebPage); subscriber.onComplete(); } }); } private void buildDownloadsPage() { mManager.getAllDownloads() .subscribe(new SingleOnSubscribe>() { @Override public void onItem(@Nullable List list) { Preconditions.checkNonNull(list); String directory = mPreferenceManager.getDownloadDirectory(); final StringBuilder downloadsBuilder = new StringBuilder(HEADING_1 + mTitle + HEADING_2); for (int n = 0, size = list.size(); n < size; n++) { final DownloadItem item = list.get(n); downloadsBuilder.append(PART1); downloadsBuilder.append("file://"); downloadsBuilder.append(directory); downloadsBuilder.append("/"); downloadsBuilder.append(item.getTitle()); downloadsBuilder.append(PART2); downloadsBuilder.append(item.getTitle()); if (!item.getContentSize().isEmpty()) { downloadsBuilder.append(" ["); downloadsBuilder.append(item.getContentSize()); downloadsBuilder.append("]"); } downloadsBuilder.append(PART3); downloadsBuilder.append(item.getUrl()); downloadsBuilder.append(PART4); } downloadsBuilder.append(END); FileWriter bookWriter = null; try { //noinspection IOResourceOpenedButNotSafelyClosed bookWriter = new FileWriter(getDownloadsPageFile(mApp), false); bookWriter.write(downloadsBuilder.toString()); } catch (IOException e) { Log.e(TAG, "Unable to write download page to disk", e); } finally { Utils.close(bookWriter); } } }); } }