diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2013-12-31 03:17:02 +0100 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2013-12-31 03:17:02 +0100 |
commit | c76bd9ba080e154672de913967e0e5b7ea6f9cab (patch) | |
tree | d924d27c22274eb4115eddefb207b64a0fee7ebe /src/de/danoeh/antennapod/feed | |
parent | bad86d8284fb48bd130370eefb8d8c7ae25ab44c (diff) | |
parent | 8fbd1ecf9ceec0523447346c1ae93e0cb612a96a (diff) | |
download | AntennaPod-c76bd9ba080e154672de913967e0e5b7ea6f9cab.zip |
Merge branch 'develop_flattr_queue_autoflattr' of git://github.com/peschmae0/AntennaPod into flattr_queue_autoflattr
Conflicts:
src/de/danoeh/antennapod/storage/DBReader.java
src/de/danoeh/antennapod/storage/PodDBAdapter.java
Diffstat (limited to 'src/de/danoeh/antennapod/feed')
-rw-r--r-- | src/de/danoeh/antennapod/feed/Feed.java | 19 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedItem.java | 17 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/feed/FeedMedia.java | 38 |
3 files changed, 64 insertions, 10 deletions
diff --git a/src/de/danoeh/antennapod/feed/Feed.java b/src/de/danoeh/antennapod/feed/Feed.java index a99213dc7..e577083e2 100644 --- a/src/de/danoeh/antennapod/feed/Feed.java +++ b/src/de/danoeh/antennapod/feed/Feed.java @@ -10,13 +10,15 @@ import java.util.List; import de.danoeh.antennapod.preferences.UserPreferences; import de.danoeh.antennapod.storage.DBWriter; import de.danoeh.antennapod.util.EpisodeFilter; +import de.danoeh.antennapod.util.flattr.FlattrStatus; +import de.danoeh.antennapod.util.flattr.FlattrThing; /** * Data Object for a whole feed * * @author daniel */ -public class Feed extends FeedFile { +public class Feed extends FeedFile implements FlattrThing { public static final int FEEDFILETYPE_FEED = 0; public static final String TYPE_RSS2 = "rss"; public static final String TYPE_RSS091 = "rss"; @@ -43,6 +45,7 @@ public class Feed extends FeedFile { * Date of last refresh. */ private Date lastUpdate; + private FlattrStatus flattrStatus; private String paymentLink; /** * Feed type, for example RSS 2 or Atom @@ -59,7 +62,7 @@ public class Feed extends FeedFile { */ public Feed(long id, Date lastUpdate, String title, String link, String description, String paymentLink, String author, String language, String type, String feedIdentifier, FeedImage image, String fileUrl, - String downloadUrl, boolean downloaded) { + String downloadUrl, boolean downloaded, FlattrStatus status) { super(fileUrl, downloadUrl, downloaded); this.id = id; this.title = title; @@ -76,6 +79,7 @@ public class Feed extends FeedFile { this.type = type; this.feedIdentifier = feedIdentifier; this.image = image; + this.flattrStatus = status; items = new ArrayList<FeedItem>(); } @@ -87,6 +91,7 @@ public class Feed extends FeedFile { super(); items = new ArrayList<FeedItem>(); lastUpdate = new Date(); + this.flattrStatus = new FlattrStatus(); } /** @@ -96,6 +101,7 @@ public class Feed extends FeedFile { public Feed(String url, Date lastUpdate) { super(null, url, false); this.lastUpdate = (lastUpdate != null) ? (Date) lastUpdate.clone() : null; + this.flattrStatus = new FlattrStatus(); } /** @@ -105,6 +111,7 @@ public class Feed extends FeedFile { public Feed(String url, Date lastUpdate, String title) { this(url, lastUpdate); this.title = title; + this.flattrStatus = new FlattrStatus(); } /** @@ -342,6 +349,14 @@ public class Feed extends FeedFile { this.feedIdentifier = feedIdentifier; } + public void setFlattrStatus(FlattrStatus status) { + this.flattrStatus = status; + } + + public FlattrStatus getFlattrStatus() { + return flattrStatus; + } + public String getPaymentLink() { return paymentLink; } diff --git a/src/de/danoeh/antennapod/feed/FeedItem.java b/src/de/danoeh/antennapod/feed/FeedItem.java index 9b9375f2e..eaae6ae5e 100644 --- a/src/de/danoeh/antennapod/feed/FeedItem.java +++ b/src/de/danoeh/antennapod/feed/FeedItem.java @@ -10,6 +10,8 @@ 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; /** * Data Object for a XML message @@ -17,7 +19,7 @@ import de.danoeh.antennapod.util.ShownotesProvider; * @author daniel */ public class FeedItem extends FeedComponent implements - ImageLoader.ImageWorkerTaskResource, ShownotesProvider { + ImageLoader.ImageWorkerTaskResource, ShownotesProvider, FlattrThing { /** * The id/guid that can be found in the rss/atom feed. Might not be set. @@ -42,10 +44,12 @@ public class FeedItem extends FeedComponent implements private boolean read; private String paymentLink; + private FlattrStatus flattrStatus; private List<Chapter> chapters; public FeedItem() { this.read = true; + this.flattrStatus = new FlattrStatus(); } /** @@ -59,6 +63,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(); } public void updateFromOther(FeedItem other) { @@ -195,7 +200,15 @@ public class FeedItem extends FeedComponent implements this.contentEncoded = contentEncoded; } - public String getPaymentLink() { + public void setFlattrStatus(FlattrStatus status) { + this.flattrStatus = status; + } + + public FlattrStatus getFlattrStatus() { + return flattrStatus; + } + + public String getPaymentLink() { return paymentLink; } diff --git a/src/de/danoeh/antennapod/feed/FeedMedia.java b/src/de/danoeh/antennapod/feed/FeedMedia.java index 492867983..be3af967f 100644 --- a/src/de/danoeh/antennapod/feed/FeedMedia.java +++ b/src/de/danoeh/antennapod/feed/FeedMedia.java @@ -10,14 +10,19 @@ 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.PodcastApp; +import de.danoeh.antennapod.asynctask.FlattrClickWorker; import de.danoeh.antennapod.preferences.PlaybackPreferences; +import de.danoeh.antennapod.service.PlaybackService; import de.danoeh.antennapod.storage.DBReader; import de.danoeh.antennapod.storage.DBWriter; +import de.danoeh.antennapod.preferences.UserPreferences; import de.danoeh.antennapod.util.ChapterUtils; import de.danoeh.antennapod.util.playback.Playable; public class FeedMedia extends FeedFile implements Playable { + private static final String TAG = "FeedMedia"; public static final int FEEDFILETYPE_FEEDMEDIA = 2; public static final int PLAYABLE_TYPE_FEEDMEDIA = 1; @@ -27,6 +32,7 @@ public class FeedMedia extends FeedFile implements Playable { private int duration; private int position; // Current position in file + private int played_duration; // How many ms of this file have been played (for autoflattring) private long size; // File size in Byte private String mime_type; private volatile FeedItem item; @@ -45,12 +51,13 @@ public class FeedMedia extends FeedFile implements Playable { public FeedMedia(long id, FeedItem item, int duration, int position, long size, String mime_type, String file_url, String download_url, - boolean downloaded, Date playbackCompletionDate) { + boolean downloaded, Date playbackCompletionDate, int played_duration) { super(file_url, download_url, downloaded); this.id = id; this.item = item; this.duration = duration; this.position = position; + this.played_duration = played_duration; this.size = size; this.mime_type = mime_type; this.playbackCompletionDate = playbackCompletionDate == null @@ -137,12 +144,20 @@ public class FeedMedia extends FeedFile implements Playable { this.duration = duration; } - public int getPosition() { + public int getPlayedDuration() { + return played_duration; + } + + public int getPosition() { return position; } public void setPosition(int position) { - this.position = position; + final int WAITING_INTERVAL = 5000; + if (position > this.position) + played_duration += Math.min(position - this.position, 1.1*WAITING_INTERVAL); + + this.position = position; } public long getSize() { @@ -215,6 +230,7 @@ public class FeedMedia extends FeedFile implements Playable { dest.writeString(download_url); dest.writeByte((byte) ((downloaded) ? 1 : 0)); dest.writeLong((playbackCompletionDate != null) ? playbackCompletionDate.getTime() : 0); + dest.writeInt(played_duration); } @Override @@ -313,8 +329,18 @@ public class FeedMedia extends FeedFile implements Playable { @Override public void saveCurrentPosition(SharedPreferences pref, int newPosition) { - position = newPosition; - DBWriter.setFeedMediaPlaybackInformation(PodcastApp.getInstance(), this); + setPosition(newPosition); + + // Auto flattr + if (UserPreferences.isAutoFlattr() && item.getPaymentLink() != null && item.getFlattrStatus().getUnflattred() && (played_duration > 0.8*duration)) { + Log.d(TAG, "saveCurrentPosition: performing auto flattr since played duration " + Integer.toString(played_duration) + " is 80% of file duration " + Integer.toString(duration)); + item.getFlattrStatus().setFlattrQueue(); + + DBWriter.setFeedItem(PodcastApp.getInstance(), item); + new FlattrClickWorker(PodcastApp.getInstance(), true).executeAsync(); + } + + DBWriter.setFeedMediaPlaybackInformation(PodcastApp.getInstance(), this); } @Override @@ -358,7 +384,7 @@ public class FeedMedia extends FeedFile implements Playable { final long id = in.readLong(); final long itemID = in.readLong(); FeedMedia result = new FeedMedia(id, null, in.readInt(), in.readInt(), in.readLong(), in.readString(), in.readString(), - in.readString(), in.readByte() != 0, new Date(in.readLong())); + in.readString(), in.readByte() != 0, new Date(in.readLong()), in.readInt()); result.itemID = itemID; return result; } |