summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/feed
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2014-03-19 20:27:12 +0100
committerdaniel oeh <daniel.oeh@gmail.com>2014-03-19 21:05:15 +0100
commite8b9e49ee9527f4e533c08cb7ac39d1dc8a19b6b (patch)
tree84387048022e9c9453f0ec53daec029219e529ff /src/de/danoeh/antennapod/feed
parentb9ab10253ab04bacd7d27ab7a7aecd561f7efbc2 (diff)
downloadAntennaPod-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.java4
-rw-r--r--src/de/danoeh/antennapod/feed/FeedComponent.java11
-rw-r--r--src/de/danoeh/antennapod/feed/FeedFile.java10
-rw-r--r--src/de/danoeh/antennapod/feed/FeedImage.java14
-rw-r--r--src/de/danoeh/antennapod/feed/FeedItem.java85
-rw-r--r--src/de/danoeh/antennapod/feed/FeedMedia.java26
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);