Remove check for updated attributes, just update them (#7018)

This commit is contained in:
ByteHamster 2024-03-23 18:06:02 +01:00 committed by GitHub
parent f6b45e7162
commit a065d3fc33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 17 additions and 162 deletions

View File

@ -216,18 +216,12 @@ public final class DBTasks {
Collections.sort(newFeed.getItems(), new FeedItemPubdateComparator());
if (newFeed.getPageNr() == savedFeed.getPageNr()) {
if (savedFeed.compareWithOther(newFeed)) {
Log.d(TAG, "Feed has updated attribute values. Updating old feed's attributes");
savedFeed.updateFromOther(newFeed);
}
savedFeed.updateFromOther(newFeed);
savedFeed.getPreferences().updateFromOther(newFeed.getPreferences());
} else {
Log.d(TAG, "New feed has a higher page number.");
savedFeed.setNextPageLink(newFeed.getNextPageLink());
}
if (savedFeed.getPreferences().compareWithOther(newFeed.getPreferences())) {
Log.d(TAG, "Feed has updated preferences. Updating old feed's preferences");
savedFeed.getPreferences().updateFromOther(newFeed.getPreferences());
}
// get the most recent date now, before we start changing the list
FeedItem priorMostRecent = savedFeed.getMostRecentItem();

View File

@ -8,9 +8,7 @@ import de.danoeh.antennapod.model.feed.SortOrder;
import static de.danoeh.antennapod.core.feed.FeedMother.anyFeed;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assert.assertThrows;
public class FeedTest {
@ -24,92 +22,40 @@ public class FeedTest {
}
@Test
public void testCompareWithOther_feedImageDownloadUrlChanged() throws Exception {
setNewFeedImageDownloadUrl();
feedHasChanged();
}
@Test
public void testCompareWithOther_sameFeedImage() throws Exception {
changedFeed.setImageUrl(FeedMother.IMAGE_URL);
feedHasNotChanged();
}
@Test
public void testCompareWithOther_feedImageRemoved() throws Exception {
feedImageRemoved();
feedHasNotChanged();
}
@Test
public void testUpdateFromOther_feedImageDownloadUrlChanged() throws Exception {
setNewFeedImageDownloadUrl();
public void testUpdateFromOther_feedImageDownloadUrlChanged() {
changedFeed.setImageUrl("http://example.com/new_picture");
original.updateFromOther(changedFeed);
feedImageWasUpdated();
assertEquals(original.getImageUrl(), changedFeed.getImageUrl());
}
@Test
public void testUpdateFromOther_feedImageRemoved() throws Exception {
feedImageRemoved();
public void testUpdateFromOther_feedImageRemoved() {
changedFeed.setImageUrl(null);
original.updateFromOther(changedFeed);
feedImageWasNotUpdated();
assertEquals(anyFeed().getImageUrl(), original.getImageUrl());
}
@Test
public void testUpdateFromOther_feedImageAdded() throws Exception {
feedHadNoImage();
setNewFeedImageDownloadUrl();
public void testUpdateFromOther_feedImageAdded() {
original.setImageUrl(null);
changedFeed.setImageUrl("http://example.com/new_picture");
original.updateFromOther(changedFeed);
feedImageWasUpdated();
assertEquals(original.getImageUrl(), changedFeed.getImageUrl());
}
@Test
public void testSetSortOrder_OnlyIntraFeedSortAllowed() throws Exception {
public void testSetSortOrder_OnlyIntraFeedSortAllowed() {
for (SortOrder sortOrder : SortOrder.values()) {
if (sortOrder.scope == SortOrder.Scope.INTRA_FEED) {
original.setSortOrder(sortOrder); // should be okay
} else {
try {
original.setSortOrder(sortOrder);
fail("SortOrder " + sortOrder + " should not be allowed on a feed");
} catch (IllegalArgumentException iae) {
// expected exception
}
assertThrows(IllegalArgumentException.class, () -> original.setSortOrder(sortOrder));
}
}
}
@Test
public void testSetSortOrder_NullAllowed() throws Exception {
public void testSetSortOrder_NullAllowed() {
original.setSortOrder(null); // should be okay
}
private void feedHasNotChanged() {
assertFalse(original.compareWithOther(changedFeed));
}
private void feedHadNoImage() {
original.setImageUrl(null);
}
private void setNewFeedImageDownloadUrl() {
changedFeed.setImageUrl("http://example.com/new_picture");
}
private void feedHasChanged() {
assertTrue(original.compareWithOther(changedFeed));
}
private void feedImageRemoved() {
changedFeed.setImageUrl(null);
}
private void feedImageWasUpdated() {
assertEquals(original.getImageUrl(), changedFeed.getImageUrl());
}
private void feedImageWasNotUpdated() {
assertEquals(anyFeed().getImageUrl(), original.getImageUrl());
}
}

View File

@ -94,7 +94,7 @@ public class FeedItemUtilTest {
}
private static FeedItem createFeedItem(String feedLink, String itemLink) {
Feed feed = new Feed();
Feed feed = new Feed("http://example.com/feed", null);
feed.setLink(feedLink);
FeedItem feedItem = new FeedItem();
feedItem.setLink(itemLink);

View File

@ -3,7 +3,6 @@ package de.danoeh.antennapod.model.feed;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Date;
@ -149,13 +148,6 @@ public class Feed {
imageUrl, fileUrl, downloadUrl, downloaded, false, null, null, null, false);
}
/**
* This constructor can be used when parsing feed data. Only the 'lastUpdate' and 'items' field are initialized.
*/
public Feed() {
super();
}
/**
* This constructor is used for requesting a feed download (it must not be used for anything else!). It should NOT be
* used if the title of the feed is already known.
@ -257,64 +249,6 @@ public class Feed {
}
}
/**
* Compare's this FeedFile's attribute values with another FeedFile's
* attribute values. This method will only compare attributes which were
* read from the feed.
*
* @return true if attribute values are different, false otherwise
*/
public boolean compareWithOther(Feed other) {
if (!StringUtils.equals(downloadUrl, other.downloadUrl)) {
return true;
}
if (other.imageUrl != null) {
if (imageUrl == null || !TextUtils.equals(imageUrl, other.imageUrl)) {
return true;
}
}
if (!TextUtils.equals(feedTitle, other.feedTitle)) {
return true;
}
if (other.feedIdentifier != null) {
if (feedIdentifier == null || !feedIdentifier.equals(other.feedIdentifier)) {
return true;
}
}
if (other.link != null) {
if (link == null || !link.equals(other.link)) {
return true;
}
}
if (other.description != null) {
if (description == null || !description.equals(other.description)) {
return true;
}
}
if (other.language != null) {
if (language == null || !language.equals(other.language)) {
return true;
}
}
if (other.author != null) {
if (author == null || !author.equals(other.author)) {
return true;
}
}
if (other.fundingList != null) {
if (fundingList == null || !fundingList.equals(other.fundingList)) {
return true;
}
}
if (other.isPaged() && !this.isPaged()) {
return true;
}
if (!TextUtils.equals(other.getNextPageLink(), this.getNextPageLink())) {
return true;
}
return false;
}
public FeedItem getMostRecentItem() {
// we could sort, but we don't need to, a simple search is fine...
Date mostRecentDate = new Date(0);

View File

@ -149,25 +149,6 @@ public class FeedPreferences implements Serializable {
this.keepUpdated = keepUpdated;
}
/**
* Compare another FeedPreferences with this one. The feedID, autoDownload and AutoDeleteAction attribute are excluded from the
* comparison.
*
* @return True if the two objects are different.
*/
public boolean compareWithOther(FeedPreferences other) {
if (other == null) {
return true;
}
if (!TextUtils.equals(username, other.username)) {
return true;
}
if (!TextUtils.equals(password, other.password)) {
return true;
}
return false;
}
/**
* Update this FeedPreferences object from another one. The feedID, autoDownload and AutoDeleteAction attributes are excluded
* from the update.