From f634198794ee3e15fc02f677da1642c7df0f5271 Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 3 May 2020 14:12:40 +0300 Subject: Initial favorites export commit --- .../core/export/favorites/FavoritesWriter.java | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java (limited to 'core/src/main/java/de/danoeh') diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java new file mode 100644 index 000000000..a6686a8a4 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java @@ -0,0 +1,131 @@ +package de.danoeh.antennapod.core.export.favorites; + +import android.content.Context; +import android.util.Log; + +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.io.Writer; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import de.danoeh.antennapod.core.export.ExportWriter; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.storage.DBReader; + +/** Writes saved favorites to file */ +public class FavoritesWriter implements ExportWriter { + private static final String TAG = "FavoritesWriter"; + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + + private static final int PAGE_LIMIT = 100; + + @Override + public void writeDocument(List feeds, Writer writer, Context context) throws IllegalArgumentException, IllegalStateException, IOException { + Log.d(TAG, "Starting to write document"); + + InputStream templateStream = context.getAssets().open("favorites-export-template.html"); + String template = IOUtils.toString(templateStream, "UTF-8"); + String[] templateParts = template.split("\\{FAVORITES\\}"); + + Map> favoriteByFeed = getFeedMap(getFavorites(feeds)); + + writer.append(templateParts[0]); + writer.append("
    "); + + for (Long feedId : favoriteByFeed.keySet()) { + List favorites = favoriteByFeed.get(feedId); + + writer.append("
  • "); + writeFeed(writer, favorites.get(0).getFeed()); + + writer.append("
      "); + for (FeedItem item : favorites) { + writeFavoriteItem(writer, item); + } + writer.append("
  • \n"); + } + + writer.append("
"); + + writer.append(templateParts[1]); + + Log.d(TAG, "Finished writing document"); + } + + private List getFavorites(List feeds) { + int page = 0; + + List favoritesPage = DBReader.getFavoriteItemsList(page, PAGE_LIMIT); + List favoritesList = new ArrayList<>(); + + while (!favoritesPage.isEmpty()) { + favoritesList.addAll(favoritesPage); + + // save a DB call if there are no more items to fetch + if (favoritesPage.size() < PAGE_LIMIT) { + break; + } + + ++page; + + favoritesPage = DBReader.getFavoriteItemsList(page * PAGE_LIMIT, PAGE_LIMIT); + } + + Collections.sort(favoritesList, (lhs, rhs) -> lhs.getPubDate().compareTo(rhs.getPubDate())); + + return favoritesList; + } + + private Map> getFeedMap(List favoritesList) { + Map> feedMap = new TreeMap<>(); + + for (FeedItem item : favoritesList) { + List feedEpisodes = feedMap.get(item.getFeedId()); + + if (feedEpisodes == null) { + feedEpisodes = new ArrayList<>(); + feedMap.put(item.getFeedId(), feedEpisodes); + } + + feedEpisodes.add(item); + } + + return feedMap; + } + + private void writeFeed(Writer writer, Feed feed) throws IOException { + writer.append("

"); + writer.append(feed.getTitle()); + writer.append(" WebsiteFeed

"); + } + + private void writeFavoriteItem(Writer writer, FeedItem item) throws IOException { + writer.append("
  • ["); + writer.append(DATE_FORMAT.format(item.getPubDate())); + writer.append("] "); + writer.append(item.getTitle().trim()); + writer.append(""); + writer.append("
  • \n"); + } + + @Override + public String fileExtension() { + return "html"; + } +} -- cgit v1.2.3