diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2014-03-19 20:27:12 +0100 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2014-03-19 21:05:15 +0100 |
commit | e8b9e49ee9527f4e533c08cb7ac39d1dc8a19b6b (patch) | |
tree | 84387048022e9c9453f0ec53daec029219e529ff /src/de/danoeh/antennapod/feed | |
parent | b9ab10253ab04bacd7d27ab7a7aecd561f7efbc2 (diff) | |
download | AntennaPod-e8b9e49ee9527f4e533c08cb7ac39d1dc8a19b6b.zip |
Added support for images in itunes:image tags.
Diffstat (limited to 'src/de/danoeh/antennapod/feed')
-rw-r--r-- | src/de/danoeh/antennapod/feed/Chapter.java | 4 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedComponent.java | 11 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedFile.java | 10 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedImage.java | 14 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedItem.java | 85 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedMedia.java | 26 |
6 files changed, 96 insertions, 54 deletions
diff --git a/src/de/danoeh/antennapod/feed/Chapter.java b/src/de/danoeh/antennapod/feed/Chapter.java index ebf8ed44f..d6151ee9f 100644 --- a/src/de/danoeh/antennapod/feed/Chapter.java +++ b/src/de/danoeh/antennapod/feed/Chapter.java @@ -48,4 +48,8 @@ public abstract class Chapter extends FeedComponent { this.link = link; } + @Override + public String getHumanReadableIdentifier() { + return title; + } } diff --git a/src/de/danoeh/antennapod/feed/FeedComponent.java b/src/de/danoeh/antennapod/feed/FeedComponent.java index d23c8d7c8..66a2f9cc5 100644 --- a/src/de/danoeh/antennapod/feed/FeedComponent.java +++ b/src/de/danoeh/antennapod/feed/FeedComponent.java @@ -5,7 +5,7 @@ package de.danoeh.antennapod.feed; * @author daniel * */ -public class FeedComponent { +public abstract class FeedComponent { protected long id; @@ -39,7 +39,12 @@ public class FeedComponent { public boolean compareWithOther(FeedComponent other) { return false; } - - + + + /** + * Should return a non-null, human-readable String so that the item can be + * identified by the user. Can be title, download-url, etc. + */ + public abstract String getHumanReadableIdentifier(); }
\ No newline at end of file diff --git a/src/de/danoeh/antennapod/feed/FeedFile.java b/src/de/danoeh/antennapod/feed/FeedFile.java index 1d7a135d4..28a9b1e10 100644 --- a/src/de/danoeh/antennapod/feed/FeedFile.java +++ b/src/de/danoeh/antennapod/feed/FeedFile.java @@ -17,14 +17,8 @@ public abstract class FeedFile extends FeedComponent { } public FeedFile() { - this(null, null, false); - } - - /** - * Should return a non-null, human-readable String so that the item can be - * identified by the user. Can be title, download-url, etc. - */ - public abstract String getHumanReadableIdentifier(); + this(null, null, false); + } public abstract int getTypeAsInt(); diff --git a/src/de/danoeh/antennapod/feed/FeedImage.java b/src/de/danoeh/antennapod/feed/FeedImage.java index 3cc99d1c2..c50ea8514 100644 --- a/src/de/danoeh/antennapod/feed/FeedImage.java +++ b/src/de/danoeh/antennapod/feed/FeedImage.java @@ -16,7 +16,7 @@ public class FeedImage extends FeedFile implements public static final int FEEDFILETYPE_FEEDIMAGE = 1; protected String title; - protected Feed feed; + protected FeedComponent owner; public FeedImage(String download_url, String title) { super(null, download_url, false); @@ -33,8 +33,8 @@ public class FeedImage extends FeedFile implements @Override public String getHumanReadableIdentifier() { - if (feed != null && feed.getTitle() != null) { - return feed.getTitle(); + if (owner != null && owner.getHumanReadableIdentifier() != null) { + return owner.getHumanReadableIdentifier(); } else { return download_url; } @@ -57,12 +57,12 @@ public class FeedImage extends FeedFile implements this.title = title; } - public Feed getFeed() { - return feed; + public FeedComponent getOwner() { + return owner; } - public void setFeed(Feed feed) { - this.feed = feed; + public void setOwner(FeedComponent owner) { + this.owner = owner; } @Override diff --git a/src/de/danoeh/antennapod/feed/FeedItem.java b/src/de/danoeh/antennapod/feed/FeedItem.java index f63b5beb4..0d46cef48 100644 --- a/src/de/danoeh/antennapod/feed/FeedItem.java +++ b/src/de/danoeh/antennapod/feed/FeedItem.java @@ -1,17 +1,17 @@ package de.danoeh.antennapod.feed; -import java.io.InputStream; -import java.lang.ref.SoftReference; -import java.util.Date; -import java.util.List; -import java.util.concurrent.Callable; - import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.asynctask.ImageLoader; import de.danoeh.antennapod.storage.DBReader; import de.danoeh.antennapod.util.ShownotesProvider; import de.danoeh.antennapod.util.flattr.FlattrStatus; import de.danoeh.antennapod.util.flattr.FlattrThing; +import org.apache.commons.lang3.StringUtils; + +import java.io.InputStream; +import java.util.Date; +import java.util.List; +import java.util.concurrent.Callable; /** * Data Object for a XML message @@ -44,17 +44,18 @@ public class FeedItem extends FeedComponent implements private boolean read; private String paymentLink; - private FlattrStatus flattrStatus; + private FlattrStatus flattrStatus; private List<Chapter> chapters; + private FeedImage image; public FeedItem() { this.read = true; - this.flattrStatus = new FlattrStatus(); + this.flattrStatus = new FlattrStatus(); } /** * This constructor should be used for creating test objects. - * */ + */ public FeedItem(long id, String title, String itemIdentifier, String link, Date pubDate, boolean read, Feed feed) { this.id = id; this.title = title; @@ -63,7 +64,7 @@ public class FeedItem extends FeedComponent implements this.pubDate = (pubDate != null) ? (Date) pubDate.clone() : null; this.read = read; this.feed = feed; - this.flattrStatus = new FlattrStatus(); + this.flattrStatus = new FlattrStatus(); } public void updateFromOther(FeedItem other) { @@ -98,6 +99,9 @@ public class FeedItem extends FeedComponent implements chapters = other.chapters; } } + if (image == null) { + image = other.image; + } } /** @@ -164,7 +168,7 @@ public class FeedItem extends FeedComponent implements * Sets the media object of this FeedItem. If the given * FeedMedia object is not null, it's 'item'-attribute value * will also be set to this item. - * */ + */ public void setMedia(FeedMedia media) { this.media = media; if (media != null && media.getItem() != this) { @@ -200,15 +204,15 @@ public class FeedItem extends FeedComponent implements this.contentEncoded = contentEncoded; } - public void setFlattrStatus(FlattrStatus status) { - this.flattrStatus = status; - } + public void setFlattrStatus(FlattrStatus status) { + this.flattrStatus = status; + } - public FlattrStatus getFlattrStatus() { - return flattrStatus; - } + public FlattrStatus getFlattrStatus() { + return flattrStatus; + } - public String getPaymentLink() { + public String getPaymentLink() { return paymentLink; } @@ -277,10 +281,11 @@ public class FeedItem extends FeedComponent implements @Override public InputStream openImageInputStream() { InputStream out = null; - if (hasMedia()) { + if (hasItemImage()) { + out = image.openImageInputStream(); + } else if (hasMedia()) { out = media.openImageInputStream(); - } - if (out == null && feed.getImage() != null) { + } else if (feed.getImage() != null) { out = feed.getImage().openImageInputStream(); } return out; @@ -289,10 +294,11 @@ public class FeedItem extends FeedComponent implements @Override public InputStream reopenImageInputStream(InputStream input) { InputStream out = null; - if (hasMedia()) { + if (hasItemImage()) { + out = image.reopenImageInputStream(input); + } else if (hasMedia()) { out = media.reopenImageInputStream(input); - } - if (out == null && feed.getImage() != null) { + } else if (feed.getImage() != null) { out = feed.getImage().reopenImageInputStream(input); } return out; @@ -301,10 +307,11 @@ public class FeedItem extends FeedComponent implements @Override public String getImageLoaderCacheKey() { String out = null; - if (hasMedia()) { + if (hasItemImage()) { + out = image.getImageLoaderCacheKey(); + } else if (hasMedia()) { out = media.getImageLoaderCacheKey(); - } - if (out == null && feed.getImage() != null) { + } else if (feed.getImage() != null) { out = feed.getImage().getImageLoaderCacheKey(); } return out; @@ -318,4 +325,28 @@ public class FeedItem extends FeedComponent implements this.feedId = feedId; } + /** + * Returns the image of this item or the image of the feed if this item does + * not have its own image. + */ + public FeedImage getImage() { + return (hasItemImage()) ? image : feed.getImage(); + } + + public void setImage(FeedImage image) { + this.image = image; + image.setOwner(this); + } + + /** + * Returns true if this FeedItem has its own image, false otherwise. + */ + public boolean hasItemImage() { + return image != null; + } + + @Override + public String getHumanReadableIdentifier() { + return title; + } } diff --git a/src/de/danoeh/antennapod/feed/FeedMedia.java b/src/de/danoeh/antennapod/feed/FeedMedia.java index fe2c3d17e..f38e92398 100644 --- a/src/de/danoeh/antennapod/feed/FeedMedia.java +++ b/src/de/danoeh/antennapod/feed/FeedMedia.java @@ -4,8 +4,6 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Parcel; import android.os.Parcelable; -import android.util.Log; -import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.preferences.PlaybackPreferences; import de.danoeh.antennapod.storage.DBReader; @@ -205,8 +203,8 @@ public class FeedMedia extends FeedFile implements Playable { } public FeedImage getImage() { - if (item != null && item.getFeed() != null) { - return item.getFeed().getImage(); + if (item != null) { + return (item.hasItemImage()) ? item.getImage() : item.getFeed().getImage(); } return null; } @@ -385,8 +383,13 @@ public class FeedMedia extends FeedFile implements Playable { @Override public InputStream openImageInputStream() { - InputStream out = new Playable.DefaultPlayableImageLoader(this) - .openImageInputStream(); + InputStream out; + if (item.hasItemImage()) { + out = item.openImageInputStream(); + } else { + out = new Playable.DefaultPlayableImageLoader(this) + .openImageInputStream(); + } if (out == null) { if (item.getFeed().getImage() != null) { return item.getFeed().getImage().openImageInputStream(); @@ -397,8 +400,13 @@ public class FeedMedia extends FeedFile implements Playable { @Override public String getImageLoaderCacheKey() { - String out = new Playable.DefaultPlayableImageLoader(this) - .getImageLoaderCacheKey(); + String out; + if (item.hasItemImage()) { + out = item.getImageLoaderCacheKey(); + } else { + out = new Playable.DefaultPlayableImageLoader(this) + .getImageLoaderCacheKey(); + } if (out == null) { if (item.getFeed().getImage() != null) { return item.getFeed().getImage().getImageLoaderCacheKey(); @@ -410,7 +418,7 @@ public class FeedMedia extends FeedFile implements Playable { @Override public InputStream reopenImageInputStream(InputStream input) { if (input instanceof FileInputStream) { - return item.getFeed().getImage().reopenImageInputStream(input); + return item.getImage().reopenImageInputStream(input); } else { return new Playable.DefaultPlayableImageLoader(this) .reopenImageInputStream(input); |