summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Fietz <Martin.Fietz@gmail.com>2015-07-03 18:21:20 +0200
committerMartin Fietz <Martin.Fietz@gmail.com>2015-07-09 10:22:04 +0200
commit4f84ceff734889748dc9d846bdf117db5fac4dce (patch)
treee4f5b46c2bcdb223da9a7bb99bf75cfc55685cd2
parent0d2f99a1a7a473fc6abf1b23ff8b712ab1fb7c62 (diff)
downloadAntennaPod-4f84ceff734889748dc9d846bdf117db5fac4dce.zip
Determine media file size if feed doesn't report it correctly
-rw-r--r--app/src/main/java/de/danoeh/antennapod/PodcastApp.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java15
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java6
-rw-r--r--core/src/main/AndroidManifest.xml3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/FeedMediaSizeService.java47
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java22
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java10
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java7
8 files changed, 104 insertions, 10 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
index f79ac49ed..4b709ab74 100644
--- a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
+++ b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
@@ -1,12 +1,14 @@
package de.danoeh.antennapod;
import android.app.Application;
+import android.content.Intent;
import android.content.res.Configuration;
import de.danoeh.antennapod.core.asynctask.PicassoProvider;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.service.FeedMediaSizeService;
import de.danoeh.antennapod.spa.SPAUtil;
/** Main application class. */
@@ -43,6 +45,8 @@ public class PodcastApp extends Application {
EventDistributor.getInstance();
SPAUtil.sendSPAppsQueryFeedsIntent(this);
+
+ startService(new Intent(this, FeedMediaSizeService.class));
}
public static float getLogicalDensity() {
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java
index e22b31361..d3ee08546 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java
@@ -36,18 +36,19 @@ public class AdapterUtils {
|| state == FeedItem.State.IN_PROGRESS) {
if (media.getDuration() > 0) {
episodeProgress.setVisibility(View.VISIBLE);
- episodeProgress
- .setProgress((int) (((double) media
+ episodeProgress.setProgress((int) (((double) media
.getPosition()) / media.getDuration() * 100));
- txtvPos.setText(Converter
- .getDurationStringLong(media.getDuration()
+ txtvPos.setText(Converter.getDurationStringLong(media.getDuration()
- media.getPosition()));
}
} else if (!media.isDownloaded()) {
- txtvPos.setText(Converter.byteToString(media.getSize()));
+ if(media.getSize() > 0) {
+ txtvPos.setText(Converter.byteToString(media.getSize()));
+ } else {
+ txtvPos.setText("");
+ }
} else {
- txtvPos.setText(Converter.getDurationStringLong(media
- .getDuration()));
+ txtvPos.setText(Converter.getDurationStringLong(media.getDuration()));
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java
index bba5a00a9..431b645c6 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java
@@ -129,7 +129,11 @@ public class QueueListAdapter extends BaseAdapter {
holder.progressRight.setText(Converter.getDurationStringLong(media.getDuration()));
}
} else {
- holder.progressLeft.setText(Converter.byteToString(media.getSize()));
+ if(media.getSize() > 0) {
+ holder.progressLeft.setText(Converter.byteToString(media.getSize()));
+ } else {
+ holder.progressLeft.setText("");
+ }
holder.progressRight.setText(Converter.getDurationStringLong(media.getDuration()));
holder.progress.setVisibility(View.GONE);
}
diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml
index 3ec519844..17dcb4ad8 100644
--- a/core/src/main/AndroidManifest.xml
+++ b/core/src/main/AndroidManifest.xml
@@ -23,6 +23,9 @@
<service
android:name=".service.GpodnetSyncService"
android:enabled="true" />
+ <service
+ android:name=".service.FeedMediaSizeService"
+ android:enabled="true" />
<receiver
android:name=".receiver.MediaButtonReceiver"
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/FeedMediaSizeService.java b/core/src/main/java/de/danoeh/antennapod/core/service/FeedMediaSizeService.java
new file mode 100644
index 000000000..b4542aae8
--- /dev/null
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/FeedMediaSizeService.java
@@ -0,0 +1,47 @@
+package de.danoeh.antennapod.core.service;
+
+import android.app.IntentService;
+import android.content.Intent;
+import android.util.Log;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.List;
+
+import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.storage.DBReader;
+import de.danoeh.antennapod.core.storage.DBWriter;
+import de.danoeh.antennapod.core.util.NetworkUtils;
+
+public class FeedMediaSizeService extends IntentService {
+
+ private final static String TAG = "FeedMediaSizeService";
+
+ public FeedMediaSizeService() {
+ super(TAG);
+ }
+
+ @Override
+ protected void onHandleIntent(Intent intent) {
+ Log.d(TAG, "onHandleIntent()");
+ if(false == NetworkUtils.networkAvailable(this)) {
+ return;
+ }
+ List<FeedMedia> list = DBReader.getFeedMediaUnknownSize(this);
+ for (FeedMedia media : list) {
+ long size = -1;
+ try {
+ URL url = new URL(media.getDownload_url());
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ size = conn.getContentLength();
+ conn.disconnect();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ media.setSize(size);
+ DBWriter.setFeedMedia(this, media);
+ }
+ }
+
+}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
index 93aec54c8..1af0fa0a9 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
@@ -550,6 +550,28 @@ public final class DBReader {
return itemIds;
}
+ /**
+ * Loads the IDs of the FeedItems whose 'read'-attribute is set to false.
+ *
+ * @param context A context that is used for opening a database connection.
+ * @return A list of IDs of the FeedItems whose 'read'-attribute is set to false. This method should be preferred
+ * over {@link #getUnreadItemsList(android.content.Context)} if the FeedItems in the UnreadItems list are not used.
+ */
+ public static List<FeedMedia> getFeedMediaUnknownSize(Context context) {
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ Cursor cursor = adapter.getFeedMediaUnknownSizeCursor();
+ List<FeedMedia> result = new ArrayList<>(cursor.getCount());
+ if (cursor.moveToFirst()) {
+ do {
+ FeedMedia media = extractFeedMediaFromCursorRow(cursor);
+ result.add(media);
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ return result;
+ }
+
/**
* Loads a list of FeedItems sorted by pubDate in descending order.
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
index 9273cf11e..1f6d0abd8 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
@@ -5,6 +5,9 @@ import android.content.Intent;
import android.database.Cursor;
import android.util.Log;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -29,6 +32,7 @@ import de.danoeh.antennapod.core.feed.FeedImage;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.service.FeedMediaSizeService;
import de.danoeh.antennapod.core.service.GpodnetSyncService;
import de.danoeh.antennapod.core.service.download.DownloadStatus;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
@@ -595,15 +599,15 @@ public final class DBTasks {
item.getIdentifyingValue());
if (oldItem == null) {
// item is new
- final int i = idx;
item.setFeed(savedFeed);
item.setAutoDownload(savedFeed.getPreferences().getAutoDownload());
- savedFeed.getItems().add(i, item);
+ savedFeed.getItems().add(item);
if (markNewItems) {
item.setNew();
}
} else {
oldItem.updateFromOther(item);
+ savedFeed.getItems().add(oldItem);
}
}
// update attributes
@@ -629,6 +633,8 @@ public final class DBTasks {
EventDistributor.getInstance().sendFeedUpdateBroadcast();
+ context.startService(new Intent(context, FeedMediaSizeService.class));
+
return resultFeeds;
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
index 2be53047d..d42b67459 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
@@ -1105,6 +1105,13 @@ public class PodDBAdapter {
return db.rawQuery(query, null);
}
+ public final Cursor getFeedMediaUnknownSizeCursor() {
+ final String query = "SELECT * "
+ + " FROM " + TABLE_NAME_FEED_MEDIA
+ + " WHERE " + KEY_SIZE + "=0";
+ return db.rawQuery(query, null);
+ }
+
/**
* Returns a cursor which contains all items of a feed that are considered new.
* The returned cursor uses the FEEDITEM_SEL_FI_SMALL selection.