Fixed problems with auto-cleanup
This commit is contained in:
parent
fd5f1fcc0b
commit
4291a96f2f
@ -406,12 +406,13 @@ public final class DBTasks {
|
||||
|
||||
private static int performAutoCleanup(final Context context,
|
||||
final int episodeNumber) {
|
||||
List<FeedItem> candidates = DBReader.getDownloadedItems(context);
|
||||
List<FeedItem> queue = DBReader.getQueue(context);
|
||||
List<FeedItem> candidates = new ArrayList<FeedItem>();
|
||||
List<FeedItem> downloadedItems = DBReader.getDownloadedItems(context);
|
||||
QueueAccess queue = QueueAccess.IDListAccess(DBReader.getQueueIDList(context));
|
||||
List<FeedItem> delete;
|
||||
for (FeedItem item : candidates) {
|
||||
for (FeedItem item : downloadedItems) {
|
||||
if (item.hasMedia() && item.getMedia().isDownloaded()
|
||||
&& !queue.contains(item) && item.isRead()) {
|
||||
&& !queue.contains(item.getId()) && item.isRead()) {
|
||||
candidates.add(item);
|
||||
}
|
||||
|
||||
@ -440,7 +441,13 @@ public final class DBTasks {
|
||||
}
|
||||
|
||||
for (FeedItem item : delete) {
|
||||
DBWriter.deleteFeedMediaOfItem(context, item.getId());
|
||||
try {
|
||||
DBWriter.deleteFeedMediaOfItem(context, item.getId()).get();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
int counter = delete.size();
|
||||
|
@ -278,6 +278,13 @@ public class PodDBAdapter {
|
||||
//db.close();
|
||||
}
|
||||
|
||||
public static boolean deleteDatabase(Context context) {
|
||||
Log.w(TAG, "Deleting database");
|
||||
dbHelperSingleton.close();
|
||||
dbHelperSingleton = null;
|
||||
return context.deleteDatabase(DATABASE_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts or updates a feed entry
|
||||
*
|
||||
@ -763,7 +770,7 @@ public class PodDBAdapter {
|
||||
final String query = "SELECT " + SEL_FI_SMALL_STR + " FROM " + TABLE_NAME_FEED_ITEMS
|
||||
+ " INNER JOIN " + TABLE_NAME_FEED_MEDIA + " ON "
|
||||
+ TABLE_NAME_FEED_ITEMS + "." + KEY_ID + "="
|
||||
+ TABLE_NAME_FEED_MEDIA + "." + KEY_ID + " WHERE "
|
||||
+ TABLE_NAME_FEED_MEDIA + "." + KEY_FEEDITEM + " WHERE "
|
||||
+ TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOADED + ">0";
|
||||
Cursor c = db.rawQuery(query, null);
|
||||
return c;
|
||||
|
@ -2,18 +2,21 @@ package instrumentationTest.de.test.antennapod.service.download;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.feed.FeedFile;
|
||||
import de.danoeh.antennapod.service.download.*;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
import android.util.Log;
|
||||
|
||||
public class HttpDownloaderTest extends AndroidTestCase {
|
||||
public class HttpDownloaderTest extends InstrumentationTestCase {
|
||||
private static final String TAG = "HttpDownloaderTest";
|
||||
private static final String DOWNLOAD_DIR = "testdownloads";
|
||||
|
||||
private static boolean successful = true;
|
||||
|
||||
private File destDir;
|
||||
|
||||
public HttpDownloaderTest() {
|
||||
super();
|
||||
}
|
||||
@ -21,17 +24,23 @@ public class HttpDownloaderTest extends AndroidTestCase {
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
super.tearDown();
|
||||
File externalDir = getContext().getExternalFilesDir(DOWNLOAD_DIR);
|
||||
assertNotNull(externalDir);
|
||||
File[] contents = externalDir.listFiles();
|
||||
File[] contents = destDir.listFiles();
|
||||
for (File f : contents) {
|
||||
assertTrue(f.delete());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
destDir = getInstrumentation().getTargetContext().getExternalFilesDir(DOWNLOAD_DIR);
|
||||
assertNotNull(destDir);
|
||||
assertTrue(destDir.exists());
|
||||
}
|
||||
|
||||
private FeedFileImpl setupFeedFile(String downloadUrl, String title) {
|
||||
FeedFileImpl feedfile = new FeedFileImpl(downloadUrl);
|
||||
String fileUrl = new File(getContext().getExternalFilesDir(DOWNLOAD_DIR).getAbsolutePath(), title).getAbsolutePath();
|
||||
String fileUrl = new File(destDir, title).getAbsolutePath();
|
||||
File file = new File(fileUrl);
|
||||
Log.d(TAG, "Deleting file: " + file.delete());
|
||||
feedfile.setFile_url(fileUrl);
|
||||
|
@ -1,9 +1,167 @@
|
||||
package instrumentationTest.de.test.antennapod.storage;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBTasks;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Test class for DBTasks
|
||||
*/
|
||||
public class DBTasksTest extends InstrumentationTestCase {
|
||||
private static final String TEST_FOLDER = "testDBTasks";
|
||||
private static final int EPISODE_CACHE_SIZE = 5;
|
||||
|
||||
private File destFolder;
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception {
|
||||
super.tearDown();
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
assertTrue(PodDBAdapter.deleteDatabase(context));
|
||||
|
||||
for (File f : destFolder.listFiles()) {
|
||||
assertTrue(f.delete());
|
||||
}
|
||||
assertTrue(destFolder.delete());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
|
||||
assertNotNull(destFolder);
|
||||
assertTrue(destFolder.exists());
|
||||
assertTrue(destFolder.canWrite());
|
||||
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
context.deleteDatabase(PodDBAdapter.DATABASE_NAME);
|
||||
// make sure database is created
|
||||
PodDBAdapter adapter = new PodDBAdapter(context);
|
||||
adapter.open();
|
||||
adapter.close();
|
||||
|
||||
SharedPreferences.Editor prefEdit = PreferenceManager.getDefaultSharedPreferences(getInstrumentation().getTargetContext().getApplicationContext()).edit();
|
||||
prefEdit.putString(UserPreferences.PREF_EPISODE_CACHE_SIZE, Integer.toString(EPISODE_CACHE_SIZE));
|
||||
prefEdit.commit();
|
||||
}
|
||||
|
||||
public void testPerformAutoCleanupShouldDelete() throws IOException {
|
||||
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
|
||||
|
||||
Feed feed = new Feed("url", new Date(), "title");
|
||||
List<FeedItem> items = new ArrayList<FeedItem>();
|
||||
feed.setItems(items);
|
||||
List<File> files = new ArrayList<File>();
|
||||
for (int i = 0; i < NUM_ITEMS; i++) {
|
||||
FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), true, feed);
|
||||
|
||||
File f = new File(destFolder, "file " + i);
|
||||
assertTrue(f.createNewFile());
|
||||
files.add(f);
|
||||
item.setMedia(new FeedMedia(0, item, 1, 0, 1L, "m", f.getAbsolutePath(), "url", true, new Date(NUM_ITEMS - i)));
|
||||
items.add(item);
|
||||
}
|
||||
|
||||
PodDBAdapter adapter = new PodDBAdapter(getInstrumentation().getTargetContext());
|
||||
adapter.open();
|
||||
adapter.setCompleteFeed(feed);
|
||||
adapter.close();
|
||||
|
||||
assertTrue(feed.getId() != 0);
|
||||
for (FeedItem item : items) {
|
||||
assertTrue(item.getId() != 0);
|
||||
assertTrue(item.getMedia().getId() != 0);
|
||||
}
|
||||
DBTasks.performAutoCleanup(getInstrumentation().getTargetContext());
|
||||
for (int i = 0; i < files.size(); i++) {
|
||||
if (i < EPISODE_CACHE_SIZE) {
|
||||
assertTrue(files.get(i).exists());
|
||||
} else {
|
||||
assertFalse(files.get(i).exists());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void testPerformAutoCleanupShouldNotDeleteBecauseUnread() throws IOException {
|
||||
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
|
||||
|
||||
Feed feed = new Feed("url", new Date(), "title");
|
||||
List<FeedItem> items = new ArrayList<FeedItem>();
|
||||
feed.setItems(items);
|
||||
List<File> files = new ArrayList<File>();
|
||||
for (int i = 0; i < NUM_ITEMS; i++) {
|
||||
FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), false, feed);
|
||||
|
||||
File f = new File(destFolder, "file " + i);
|
||||
assertTrue(f.createNewFile());
|
||||
assertTrue(f.exists());
|
||||
files.add(f);
|
||||
item.setMedia(new FeedMedia(0, item, 1, 0, 1L, "m", f.getAbsolutePath(), "url", true, new Date(NUM_ITEMS - i)));
|
||||
items.add(item);
|
||||
}
|
||||
|
||||
PodDBAdapter adapter = new PodDBAdapter(getInstrumentation().getTargetContext());
|
||||
adapter.open();
|
||||
adapter.setCompleteFeed(feed);
|
||||
adapter.close();
|
||||
|
||||
assertTrue(feed.getId() != 0);
|
||||
for (FeedItem item : items) {
|
||||
assertTrue(item.getId() != 0);
|
||||
assertTrue(item.getMedia().getId() != 0);
|
||||
}
|
||||
DBTasks.performAutoCleanup(getInstrumentation().getTargetContext());
|
||||
for (File file : files) {
|
||||
assertTrue(file.exists());
|
||||
}
|
||||
}
|
||||
|
||||
public void testPerformAutoCleanupShouldNotDeleteBecauseInQueue() throws IOException {
|
||||
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
|
||||
|
||||
Feed feed = new Feed("url", new Date(), "title");
|
||||
List<FeedItem> items = new ArrayList<FeedItem>();
|
||||
feed.setItems(items);
|
||||
List<File> files = new ArrayList<File>();
|
||||
for (int i = 0; i < NUM_ITEMS; i++) {
|
||||
FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), true, feed);
|
||||
|
||||
File f = new File(destFolder, "file " + i);
|
||||
assertTrue(f.createNewFile());
|
||||
assertTrue(f.exists());
|
||||
files.add(f);
|
||||
item.setMedia(new FeedMedia(0, item, 1, 0, 1L, "m", f.getAbsolutePath(), "url", true, new Date(NUM_ITEMS - i)));
|
||||
items.add(item);
|
||||
}
|
||||
|
||||
PodDBAdapter adapter = new PodDBAdapter(getInstrumentation().getTargetContext());
|
||||
adapter.open();
|
||||
adapter.setCompleteFeed(feed);
|
||||
adapter.setQueue(items);
|
||||
adapter.close();
|
||||
|
||||
assertTrue(feed.getId() != 0);
|
||||
for (FeedItem item : items) {
|
||||
assertTrue(item.getId() != 0);
|
||||
assertTrue(item.getMedia().getId() != 0);
|
||||
}
|
||||
DBTasks.performAutoCleanup(getInstrumentation().getTargetContext());
|
||||
for (File file : files) {
|
||||
assertTrue(file.exists());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ public class DBWriterTest extends InstrumentationTestCase {
|
||||
protected void tearDown() throws Exception {
|
||||
super.tearDown();
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
context.deleteDatabase(PodDBAdapter.DATABASE_NAME);
|
||||
assertTrue(PodDBAdapter.deleteDatabase(getInstrumentation().getTargetContext()));
|
||||
|
||||
File testDir = context.getExternalFilesDir(TEST_FOLDER);
|
||||
assertNotNull(testDir);
|
||||
|
Loading…
x
Reference in New Issue
Block a user