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 From 4f8979ecacbb7f7c8c2a854bc6f2c98f5f89f5cf Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 3 May 2020 18:17:42 +0300 Subject: Reformatted output, added Hebrew translation Reformatted output to be sorted by date in descending order. Added links to episode page, as well as direct media download. Added Hebrew transaltion for Favorites export. Removed unused code. --- .../core/export/favorites/FavoritesWriter.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (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 index a6686a8a4..39e968ce9 100644 --- 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 @@ -35,7 +35,7 @@ public class FavoritesWriter implements ExportWriter { String template = IOUtils.toString(templateStream, "UTF-8"); String[] templateParts = template.split("\\{FAVORITES\\}"); - Map> favoriteByFeed = getFeedMap(getFavorites(feeds)); + Map> favoriteByFeed = getFeedMap(getFavorites()); writer.append(templateParts[0]); writer.append("
      "); @@ -60,7 +60,7 @@ public class FavoritesWriter implements ExportWriter { Log.d(TAG, "Finished writing document"); } - private List getFavorites(List feeds) { + private List getFavorites() { int page = 0; List favoritesPage = DBReader.getFavoriteItemsList(page, PAGE_LIMIT); @@ -79,7 +79,8 @@ public class FavoritesWriter implements ExportWriter { favoritesPage = DBReader.getFavoriteItemsList(page * PAGE_LIMIT, PAGE_LIMIT); } - Collections.sort(favoritesList, (lhs, rhs) -> lhs.getPubDate().compareTo(rhs.getPubDate())); + // sort in descending order + Collections.sort(favoritesList, (lhs, rhs) -> rhs.getPubDate().compareTo(lhs.getPubDate())); return favoritesList; } @@ -114,14 +115,13 @@ public class FavoritesWriter implements ExportWriter { } private void writeFavoriteItem(Writer writer, FeedItem item) throws IOException { - writer.append("
    • ["); - writer.append(DATE_FORMAT.format(item.getPubDate())); - writer.append("] "); + writer.append("
    • "); writer.append(item.getTitle().trim()); - writer.append(""); - writer.append("
    • \n"); + writer.append("
      \n[Website] • [Media]\n"); } @Override -- cgit v1.2.3 From 104704ee5006da027af98c16f06288ca7488f914 Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 3 May 2020 18:32:11 +0300 Subject: Fix static analysis issues --- .../antennapod/core/export/favorites/FavoritesWriter.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (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 index 39e968ce9..7b4b38265 100644 --- 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 @@ -8,7 +8,6 @@ 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; @@ -20,15 +19,15 @@ 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 */ +/** 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 { + 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"); @@ -85,6 +84,12 @@ public class FavoritesWriter implements ExportWriter { return favoritesList; } + /** + * Group favorite episodes by feed, sorting them by publishing date in descending order. + * + * @param favoritesList {@code List} of all favorite episodes. + * @return A {@code Map} favorite episodes, keyed by feed ID. + */ private Map> getFeedMap(List favoritesList) { Map> feedMap = new TreeMap<>(); -- cgit v1.2.3 From 1cdfd80ca1561ca0f33313424488354ef6349749 Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 3 May 2020 22:56:31 +0300 Subject: Updated PR according to comments Removed unnecessary checks in while loop, and converted it to a do...while loop. Moved favorites export under HTML section. Corrected indentation in resources files. Moved to using a unified template for all HTML exports. Removed unnecessary strings, corrected capitalization. --- .../core/export/favorites/FavoritesWriter.java | 23 ++++++++-------------- .../antennapod/core/export/html/HtmlWriter.java | 1 + 2 files changed, 9 insertions(+), 15 deletions(-) (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 index 7b4b38265..4d4ad60bb 100644 --- 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 @@ -30,9 +30,10 @@ public class FavoritesWriter implements ExportWriter { throws IllegalArgumentException, IllegalStateException, IOException { Log.d(TAG, "Starting to write document"); - InputStream templateStream = context.getAssets().open("favorites-export-template.html"); + InputStream templateStream = context.getAssets().open("html-export-template.html"); String template = IOUtils.toString(templateStream, "UTF-8"); - String[] templateParts = template.split("\\{FAVORITES\\}"); + template = template.replaceAll("\\{TITLE\\}", "Favorites"); + String[] templateParts = template.split("\\{FEEDS\\}"); Map> favoriteByFeed = getFeedMap(getFavorites()); @@ -45,7 +46,7 @@ public class FavoritesWriter implements ExportWriter { writer.append("
    • "); writeFeed(writer, favorites.get(0).getFeed()); - writer.append("
        "); + writer.append("
          "); for (FeedItem item : favorites) { writeFavoriteItem(writer, item); } @@ -62,21 +63,13 @@ public class FavoritesWriter implements ExportWriter { private List getFavorites() { int page = 0; - List favoritesPage = DBReader.getFavoriteItemsList(page, PAGE_LIMIT); List favoritesList = new ArrayList<>(); - - while (!favoritesPage.isEmpty()) { + List favoritesPage; + do { + favoritesPage = DBReader.getFavoriteItemsList(page * PAGE_LIMIT, PAGE_LIMIT); 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); - } + } while (!favoritesPage.isEmpty() && favoritesPage.size() == PAGE_LIMIT); // sort in descending order Collections.sort(favoritesList, (lhs, rhs) -> rhs.getPubDate().compareTo(lhs.getPubDate())); diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/html/HtmlWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/html/HtmlWriter.java index 93b66daed..3f34343ee 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/export/html/HtmlWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/export/html/HtmlWriter.java @@ -25,6 +25,7 @@ public class HtmlWriter implements ExportWriter { InputStream templateStream = context.getAssets().open("html-export-template.html"); String template = IOUtils.toString(templateStream, "UTF-8"); + template = template.replaceAll("\\{TITLE\\}", "Subscriptions"); String[] templateParts = template.split("\\{FEEDS\\}"); writer.append(templateParts[0]); -- cgit v1.2.3 From 4d74233151a07bde76ae77285e5346b376d23961 Mon Sep 17 00:00:00 2001 From: malockin Date: Sat, 16 May 2020 23:34:23 +0300 Subject: cleaner presentation Removed square brackets from around links, and added grey lines to separate the listed episodes. --- .../antennapod/core/export/favorites/FavoritesWriter.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (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 index 4d4ad60bb..cc66eebd0 100644 --- 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 @@ -38,23 +38,19 @@ public class FavoritesWriter implements ExportWriter { Map> favoriteByFeed = getFeedMap(getFavorites()); 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("
              "); + writer.append("
                "); for (FeedItem item : favorites) { writeFavoriteItem(writer, item); } writer.append("
          • \n"); } - writer.append("
          "); - writer.append(templateParts[1]); Log.d(TAG, "Finished writing document"); @@ -113,13 +109,13 @@ public class FavoritesWriter implements ExportWriter { } private void writeFavoriteItem(Writer writer, FeedItem item) throws IOException { - writer.append("
        • "); + writer.append("
        • "); writer.append(item.getTitle().trim()); - writer.append("
          \n[\nWebsite] • [WebsiteMedia]
        • \n"); + writer.append("\">Media
          \n"); } @Override -- cgit v1.2.3 From 35dde1fadbd2bfa70ab96c09e8bd332aa9768cd9 Mon Sep 17 00:00:00 2001 From: malockin Date: Sat, 23 May 2020 22:16:19 +0300 Subject: Cleaner CSS, item templates Moved favorite item CSS to main template file. Added template files for feed information and favorite episode information, reducing in-line HTML usage in Java code. --- .../core/export/favorites/FavoritesWriter.java | 53 ++++++++++++---------- 1 file changed, 30 insertions(+), 23 deletions(-) (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 index cc66eebd0..914faca05 100644 --- 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 @@ -25,28 +25,38 @@ public class FavoritesWriter implements ExportWriter { private static final int PAGE_LIMIT = 100; + private static final String FAVORITE_TEMPLATE = "html-export-fatorites-item-template.html"; + private static final String FEED_TEMPLATE = "html-export-feed-template.html"; + private static final String UTF_8 = "UTF-8"; + @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("html-export-template.html"); - String template = IOUtils.toString(templateStream, "UTF-8"); + String template = IOUtils.toString(templateStream, UTF_8); template = template.replaceAll("\\{TITLE\\}", "Favorites"); String[] templateParts = template.split("\\{FEEDS\\}"); + InputStream favTemplateStream = context.getAssets().open(FAVORITE_TEMPLATE); + String favTemplate = IOUtils.toString(favTemplateStream, UTF_8); + + InputStream feedTemplateStream = context.getAssets().open(FEED_TEMPLATE); + String feedTemplate = IOUtils.toString(feedTemplateStream, UTF_8); + Map> favoriteByFeed = getFeedMap(getFavorites()); writer.append(templateParts[0]); for (Long feedId : favoriteByFeed.keySet()) { List favorites = favoriteByFeed.get(feedId); - writer.append("
        • "); - writeFeed(writer, favorites.get(0).getFeed()); + writer.append("
        • \n"); + writeFeed(writer, favorites.get(0).getFeed(), feedTemplate); - writer.append("
            "); + writer.append("
              \n"); for (FeedItem item : favorites) { - writeFavoriteItem(writer, item); + writeFavoriteItem(writer, item, favTemplate); } writer.append("
        • \n"); } @@ -96,26 +106,23 @@ public class FavoritesWriter implements ExportWriter { return feedMap; } - private void writeFeed(Writer writer, Feed feed) throws IOException { - writer.append("

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

          "); + private void writeFeed(Writer writer, Feed feed, String feedTemplate) throws IOException { + String feedInfo = feedTemplate + .replaceAll("\\{FEED_IMG\\}", feed.getImageUrl()) + .replaceAll("\\{FEED_TITLE\\}", feed.getTitle()) + .replaceAll("\\{FEED_LINK\\}", feed.getLink()) + .replaceAll("\\{FEED_WEBSITE\\}", feed.getDownload_url()); + + writer.append(feedInfo); } - private void writeFavoriteItem(Writer writer, FeedItem item) throws IOException { - writer.append("
        • "); - writer.append(item.getTitle().trim()); - writer.append("
          \nWebsiteMedia
        • \n"); + private void writeFavoriteItem(Writer writer, FeedItem item, String favoriteTemplate) throws IOException { + String favItem = favoriteTemplate + .replaceAll("\\{FAV_TITLE\\}", item.getTitle().trim()) + .replaceAll("\\{FAV_WEBSITE\\}", item.getLink()) + .replaceAll("\\{FAV_MEDIA\\}", item.getMedia().getDownload_url()); + + writer.append(favItem); } @Override -- cgit v1.2.3 From cc98447af95faf7f5d44130069edd0dbeeb2ae8c Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 24 May 2020 08:13:27 +0300 Subject: Use replace instread of replaceAll & fix typo --- .../core/export/favorites/FavoritesWriter.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (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 index 914faca05..60c38a391 100644 --- 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 @@ -25,7 +25,7 @@ public class FavoritesWriter implements ExportWriter { private static final int PAGE_LIMIT = 100; - private static final String FAVORITE_TEMPLATE = "html-export-fatorites-item-template.html"; + private static final String FAVORITE_TEMPLATE = "html-export-favorites-item-template.html"; private static final String FEED_TEMPLATE = "html-export-feed-template.html"; private static final String UTF_8 = "UTF-8"; @@ -108,19 +108,19 @@ public class FavoritesWriter implements ExportWriter { private void writeFeed(Writer writer, Feed feed, String feedTemplate) throws IOException { String feedInfo = feedTemplate - .replaceAll("\\{FEED_IMG\\}", feed.getImageUrl()) - .replaceAll("\\{FEED_TITLE\\}", feed.getTitle()) - .replaceAll("\\{FEED_LINK\\}", feed.getLink()) - .replaceAll("\\{FEED_WEBSITE\\}", feed.getDownload_url()); + .replace("{FEED_IMG}", feed.getImageUrl()) + .replace("{FEED_TITLE}", feed.getTitle()) + .replace("{FEED_LINK}", feed.getLink()) + .replace("{FEED_WEBSITE}", feed.getDownload_url()); writer.append(feedInfo); } private void writeFavoriteItem(Writer writer, FeedItem item, String favoriteTemplate) throws IOException { String favItem = favoriteTemplate - .replaceAll("\\{FAV_TITLE\\}", item.getTitle().trim()) - .replaceAll("\\{FAV_WEBSITE\\}", item.getLink()) - .replaceAll("\\{FAV_MEDIA\\}", item.getMedia().getDownload_url()); + .replace("{FAV_TITLE}", item.getTitle().trim()) + .replace("{FAV_WEBSITE}", item.getLink()) + .replace("{FAV_MEDIA}", item.getMedia().getDownload_url()); writer.append(favItem); } -- cgit v1.2.3