Skip to content

Commit c7527fc

Browse files
committed
Fix an issue with posts duplicated in Discover
1 parent fc5bfb0 commit c7527fc

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

RELEASE-NOTES.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
26.6
22
-----
3-
* [*] Fix horizontal insets in Reader article view [#25010]
43

54
26.5
65
-----
@@ -10,12 +9,14 @@
109
* [*] Add "Access" section to "Post Settings" [#24942]
1110
* [*] Add "Discussion" to "Post Settings" [#24948]
1211
* [*] Add "File Size" to Site Media Details [#24947]
12+
* [*] Fix an issue with posts duplicated in Discover [#25015]
1313
* [*] Add "Email to Subscribers" row to "Publishing" sheet [#24946]
1414
* [*] Add permalink preview in the slug editor and make other improvements [#24949]
1515
* [*] Add two accessible font sizes to Reader display settings [#25013]
1616
* [*] Add "Taxonomies" to Site Settings [#24955]
1717
* [*] Update "Categories" picker to indicate multiple selection [#24952]
1818
* [*] Fix overly long related post titles in Reader [#25011]
19+
* [*] Fix horizontal insets in Reader article view [#25010]
1920

2021
26.4
2122
-----

Sources/WordPressData/Swift/ReaderCard+CoreDataClass.swift

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,52 @@ public class ReaderCard: NSManagedObject {
4343
sites?.array as? [ReaderSiteTopic] ?? []
4444
}
4545

46-
public convenience init?(context: NSManagedObjectContext, from remoteCard: RemoteReaderCard) {
46+
public static func createOrReuse(context: NSManagedObjectContext, from remoteCard: RemoteReaderCard) -> ReaderCard? {
4747
guard remoteCard.type != .unknown else {
4848
return nil
4949
}
5050

51-
self.init(context: context)
52-
5351
switch remoteCard.type {
5452
case .post:
55-
post = ReaderPost.createOrReplace(fromRemotePost: remoteCard.post, for: nil, context: context)
53+
let post = ReaderPost.createOrReplace(fromRemotePost: remoteCard.post, for: nil, context: context)
54+
55+
// Check if a card already exists with this post to prevent duplicates
56+
if let existingCard = findExistingCard(with: post, context: context) {
57+
return existingCard
58+
}
59+
60+
let card = ReaderCard(context: context)
61+
card.post = post
62+
return card
63+
5664
case .interests:
57-
topics = NSOrderedSet(array: remoteCard.interests?.prefix(5).map {
65+
let card = ReaderCard(context: context)
66+
card.topics = NSOrderedSet(array: remoteCard.interests?.prefix(5).map {
5867
ReaderTagTopic.createOrUpdateIfNeeded(from: $0, context: context)
5968
} ?? [])
69+
return card
70+
6071
case .sites:
61-
sites = NSOrderedSet(array: remoteCard.sites?.prefix(3).map {
72+
let card = ReaderCard(context: context)
73+
card.sites = NSOrderedSet(array: remoteCard.sites?.prefix(3).map {
6274
ReaderSiteTopic.createIfNeeded(from: $0, context: context)
6375
} ?? [])
76+
return card
6477

6578
default:
66-
break
79+
return nil
6780
}
6881
}
82+
83+
private static func findExistingCard(with post: ReaderPost?, context: NSManagedObjectContext) -> ReaderCard? {
84+
guard let post else {
85+
return nil
86+
}
87+
88+
let fetchRequest = ReaderCard.fetchRequest()
89+
fetchRequest.predicate = NSPredicate(format: "post = %@", post)
90+
fetchRequest.fetchLimit = 1
91+
92+
return try? context.fetch(fetchRequest).first
93+
}
6994
}

WordPress/Classes/Services/ReaderCardService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class ReaderCardService {
8181
}
8282

8383
updatedCards.enumerated().forEach { index, remoteCard in
84-
let card = ReaderCard(context: context, from: remoteCard)
84+
let card = ReaderCard.createOrReuse(context: context, from: remoteCard)
8585

8686
// Assign each interest an endpoint
8787
card?

0 commit comments

Comments
 (0)