summaryrefslogtreecommitdiff
path: root/core/src/main/java/de/danoeh
diff options
context:
space:
mode:
authorTom Hennen <TomHennen@users.noreply.github.com>2015-08-18 21:51:08 -0400
committerTom Hennen <TomHennen@users.noreply.github.com>2015-08-18 21:51:08 -0400
commitb7ac013b5b45ca5c601a7d05e2b0e54e84c6779b (patch)
tree2334d96bb058c2e623d694fa10ddedbced3528e9 /core/src/main/java/de/danoeh
parent9e39a65e75dbfba155c7c475abd312953300ac3b (diff)
parent771b8b41546331f6e8006bed02e80b714fe65b69 (diff)
downloadAntennaPod-b7ac013b5b45ca5c601a7d05e2b0e54e84c6779b.zip
Merge pull request #1109 from mfietz/issue/1094v2
Load feed media size on demand
Diffstat (limited to 'core/src/main/java/de/danoeh')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/FeedMediaSizeService.java64
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java23
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java8
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java7
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java68
5 files changed, 68 insertions, 102 deletions
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
deleted file mode 100644
index a8375bce3..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/service/FeedMediaSizeService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package de.danoeh.antennapod.core.service;
-
-import android.app.IntentService;
-import android.content.Intent;
-import android.util.Log;
-
-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()");
- return;
-// if(false == NetworkUtils.isDownloadAllowed()) {
-// return;
-// }
-// List<FeedMedia> list = DBReader.getFeedMediaUnknownSize(this);
-// for (FeedMedia media : list) {
-// Log.d(TAG, "Getting size currently " + media.getSize() + " for " + media.getDownload_url());
-// if(false == NetworkUtils.isDownloadAllowed()) {
-// return;
-// }
-// long size = Integer.MIN_VALUE;
-// if (media.isDownloaded()) {
-// File mediaFile = new File(media.getLocalMediaUrl());
-// if(mediaFile.exists()) {
-// size = mediaFile.length();
-// }
-// } else if (false == media.checkedOnSizeButUnknown()) {
-// // only query the network if we haven't already checked
-// HttpURLConnection conn = null;
-// try {
-// URL url = new URL(media.getDownload_url());
-// conn = (HttpURLConnection) url.openConnection();
-// conn.setRequestProperty("Accept-Encoding", "");
-// conn.setRequestMethod("HEAD");
-// size = conn.getContentLength();
-// } catch (IOException e) {
-// Log.d(TAG, media.getDownload_url());
-// e.printStackTrace();
-// } finally {
-// if (conn != null) {
-// conn.disconnect();
-// }
-// }
-// }
-// if (size <= 0) {
-// // they didn't tell us the size, but we don't want to keep querying on it
-// media.setCheckedOnSizeButUnknown();
-// } else {
-// media.setSize(size);
-// }
-// Log.d(TAG, "Size now: " + media.getSize());
-// DBWriter.setFeedMedia(this, media);
-// EventBus.getDefault().post(FeedMediaEvent.update(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 2ae88cc02..3da3824a2 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
@@ -522,29 +522,6 @@ public final class DBReader {
}
/**
- * Loads FeedMedia whose file size is unknown
- *
- * @param context A context that is used for opening a database connection.
- * @return A list of FeedMedia items whose size is 0 (unknown and never tried to
- * determine the correct size)
- */
- 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.
*
* @param context A context that is used for opening a database connection.
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 6ced03c0e..5a3822a81 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,9 +5,6 @@ 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;
@@ -28,11 +25,8 @@ import de.danoeh.antennapod.core.asynctask.FlattrClickWorker;
import de.danoeh.antennapod.core.asynctask.FlattrStatusFetcher;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
-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;
@@ -578,8 +572,6 @@ 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 3bfcaa539..b179c6f24 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
@@ -1110,13 +1110,6 @@ 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.
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java
index 9296039f0..1b57baa11 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java
@@ -7,10 +7,23 @@ import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.Log;
+import com.squareup.okhttp.OkHttpClient;
+import com.squareup.okhttp.Request;
+import com.squareup.okhttp.Response;
+
+import java.io.File;
+import java.io.IOException;
import java.util.Arrays;
import java.util.List;
+import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.service.download.AntennapodHttpClient;
+import de.danoeh.antennapod.core.storage.DBWriter;
+import rx.Observable;
+import rx.Subscriber;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
public class NetworkUtils {
@@ -78,4 +91,59 @@ public class NetworkUtils {
return mWifi.isConnected();
}
+ public static Observable<Long> getFeedMediaSizeObservable(FeedMedia media) {
+ return Observable.create(new Observable.OnSubscribe<Long>() {
+ @Override
+ public void call(Subscriber<? super Long> subscriber) {
+ if (false == NetworkUtils.isDownloadAllowed()) {
+ subscriber.onNext(0L);
+ subscriber.onCompleted();
+ return;
+ }
+ long size = Integer.MIN_VALUE;
+ if (media.isDownloaded()) {
+ File mediaFile = new File(media.getLocalMediaUrl());
+ if (mediaFile.exists()) {
+ size = mediaFile.length();
+ }
+ } else if (false == media.checkedOnSizeButUnknown()) {
+ // only query the network if we haven't already checked
+ OkHttpClient client = AntennapodHttpClient.getHttpClient();
+ Request.Builder httpReq = new Request.Builder()
+ .url(media.getDownload_url())
+ .header("Accept-Encoding", "identity")
+ .head();
+ try {
+ Response response = client.newCall(httpReq.build()).execute();
+ if (response.isSuccessful()) {
+ String contentLength = response.header("Content-Length");
+ try {
+ size = Integer.parseInt(contentLength);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, Log.getStackTraceString(e));
+ }
+ }
+ } catch (IOException e) {
+ subscriber.onNext(0L);
+ subscriber.onCompleted();
+ Log.e(TAG, Log.getStackTraceString(e));
+ return; // better luck next time
+ }
+ }
+ Log.d(TAG, "new size: " + size);
+ if (size <= 0) {
+ // they didn't tell us the size, but we don't want to keep querying on it
+ media.setCheckedOnSizeButUnknown();
+ } else {
+ media.setSize(size);
+ }
+ subscriber.onNext(size);
+ subscriber.onCompleted();
+ DBWriter.setFeedMedia(context, media);
+ }
+ })
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
}