mirror of
https://github.com/Athou/commafeed.git
synced 2026-10-07 12:53:59 +00:00
search now also works for starred entries (#2217)
This commit is contained in:
@@ -83,12 +83,16 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<FeedEntryStatus> findStarred(User user, Instant newerThan, int offset, int limit, ReadingOrder order,
|
public List<FeedEntryStatus> findStarred(User user, List<FeedEntryKeyword> keywords, Instant newerThan, int offset, int limit,
|
||||||
boolean includeContent) {
|
ReadingOrder order, boolean includeContent) {
|
||||||
JPAQuery<FeedEntryStatus> query = query().selectFrom(STATUS).where(STATUS.user.eq(user), STATUS.starred.isTrue());
|
JPAQuery<FeedEntryStatus> query = query().selectFrom(STATUS).where(STATUS.user.eq(user), STATUS.starred.isTrue());
|
||||||
if (includeContent) {
|
if (includeContent || CollectionUtils.isNotEmpty(keywords)) {
|
||||||
query.join(STATUS.entry).fetchJoin();
|
query.join(STATUS.entry).fetchJoin();
|
||||||
query.join(STATUS.entry.content).fetchJoin();
|
query.join(STATUS.entry.content, CONTENT).fetchJoin();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(keywords)) {
|
||||||
|
applyKeywordsFilter(query, keywords);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newerThan != null) {
|
if (newerThan != null) {
|
||||||
@@ -132,16 +136,9 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
|||||||
if (includeContent || CollectionUtils.isNotEmpty(keywords)) {
|
if (includeContent || CollectionUtils.isNotEmpty(keywords)) {
|
||||||
query.join(ENTRY.content, CONTENT).fetchJoin();
|
query.join(ENTRY.content, CONTENT).fetchJoin();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CollectionUtils.isNotEmpty(keywords)) {
|
if (CollectionUtils.isNotEmpty(keywords)) {
|
||||||
for (FeedEntryKeyword keyword : keywords) {
|
applyKeywordsFilter(query, keywords);
|
||||||
BooleanBuilder or = new BooleanBuilder();
|
|
||||||
or.or(CONTENT.content.containsIgnoreCase(keyword.keyword()));
|
|
||||||
or.or(CONTENT.title.containsIgnoreCase(keyword.keyword()));
|
|
||||||
if (keyword.mode() == Mode.EXCLUDE) {
|
|
||||||
or.not();
|
|
||||||
}
|
|
||||||
query.where(or);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unreadOnly && tag == null) {
|
if (unreadOnly && tag == null) {
|
||||||
@@ -202,6 +199,18 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
|||||||
return statuses;
|
return statuses;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void applyKeywordsFilter(JPAQuery<?> query, List<FeedEntryKeyword> keywords) {
|
||||||
|
for (FeedEntryKeyword keyword : keywords) {
|
||||||
|
BooleanBuilder or = new BooleanBuilder();
|
||||||
|
or.or(CONTENT.content.containsIgnoreCase(keyword.keyword()));
|
||||||
|
or.or(CONTENT.title.containsIgnoreCase(keyword.keyword()));
|
||||||
|
if (keyword.mode() == Mode.EXCLUDE) {
|
||||||
|
or.not();
|
||||||
|
}
|
||||||
|
query.where(or);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public UnreadCount getUnreadCount(FeedSubscription sub) {
|
public UnreadCount getUnreadCount(FeedSubscription sub) {
|
||||||
JPAQuery<Tuple> query = query().select(ENTRY.count(), ENTRY.published.max())
|
JPAQuery<Tuple> query = query().select(ENTRY.count(), ENTRY.published.max())
|
||||||
.from(ENTRY)
|
.from(ENTRY)
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ public class FeedEntryService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void markStarredEntries(User user, Instant olderThan, Instant insertedBefore) {
|
public void markStarredEntries(User user, Instant olderThan, Instant insertedBefore) {
|
||||||
List<FeedEntryStatus> statuses = feedEntryStatusDAO.findStarred(user, null, -1, -1, null, false);
|
List<FeedEntryStatus> statuses = feedEntryStatusDAO.findStarred(user, null, null, -1, -1, null, false);
|
||||||
markList(statuses, olderThan, insertedBefore);
|
markList(statuses, olderThan, insertedBefore);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -158,7 +158,8 @@ public class CategoryREST {
|
|||||||
|
|
||||||
} else if (STARRED.equals(id)) {
|
} else if (STARRED.equals(id)) {
|
||||||
entries.setName("Starred");
|
entries.setName("Starred");
|
||||||
List<FeedEntryStatus> starred = feedEntryStatusDAO.findStarred(user, newerThanDate, offset, limit + 1, order, true);
|
List<FeedEntryStatus> starred = feedEntryStatusDAO.findStarred(user, entryKeywords, newerThanDate, offset, limit + 1, order,
|
||||||
|
true);
|
||||||
for (FeedEntryStatus status : starred) {
|
for (FeedEntryStatus status : starred) {
|
||||||
entries.getEntries().add(Entry.build(status, config.imageProxyEnabled()));
|
entries.getEntries().add(Entry.build(status, config.imageProxyEnabled()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -260,7 +260,8 @@ public class FeverREST {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<Long> buildSavedItemIds(User user) {
|
private List<Long> buildSavedItemIds(User user) {
|
||||||
List<FeedEntryStatus> statuses = feedEntryStatusDAO.findStarred(user, null, 0, SAVED_ITEM_IDS_BATCH_SIZE, ReadingOrder.DESC, false);
|
List<FeedEntryStatus> statuses = feedEntryStatusDAO.findStarred(user, null, null, 0, SAVED_ITEM_IDS_BATCH_SIZE, ReadingOrder.DESC,
|
||||||
|
false);
|
||||||
return statuses.stream().map(s -> s.getEntry().getId()).toList();
|
return statuses.stream().map(s -> s.getEntry().getId()).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user