Skip to content
This repository has been archived by the owner on Oct 10, 2019. It is now read-only.

Commit

Permalink
Merge pull request #340 from tsipinakis/bugfix/query-feed-search
Browse files Browse the repository at this point in the history
Allow searching in query feeds. Fixes #313
  • Loading branch information
Minoru authored Jul 27, 2016
2 parents 30882c1 + 57fbb88 commit d851b10
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 8 deletions.
2 changes: 1 addition & 1 deletion include/controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class controller {

std::shared_ptr<rss_feed> get_feed(unsigned int pos);
std::shared_ptr<rss_feed> get_feed_by_url(const std::string& feedurl);
std::vector<std::shared_ptr<rss_item>> search_for_items(const std::string& query, const std::string& feedurl);
std::vector<std::shared_ptr<rss_item>> search_for_items(const std::string& query, std::shared_ptr<rss_feed> feed);
inline unsigned int get_feedcount() {
return feeds.size();
}
Expand Down
4 changes: 4 additions & 0 deletions include/rss.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ class rss_item : public matchable {
return description_;
}
void set_description(const std::string& d);

inline unsigned int size() const {
return size_;
}
void set_size(unsigned int size);

std::string length() const;
Expand Down
1 change: 1 addition & 0 deletions src/cache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,7 @@ std::shared_ptr<rss_feed> cache::internalize_rssfeed(std::string rssurl, rss_ign
}

std::vector<std::shared_ptr<rss_item>> cache::search_for_items(const std::string& querystr, const std::string& feedurl) {
assert(feedurl.substr(0,6) != "query:");
std::string query;
std::vector<std::shared_ptr<rss_item>> items;
int rc;
Expand Down
38 changes: 34 additions & 4 deletions src/controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1204,11 +1204,41 @@ void controller::rec_find_rss_outlines(xmlNode * node, std::string tag) {



std::vector<std::shared_ptr<rss_item>> controller::search_for_items(const std::string& query, const std::string& feedurl) {
std::vector<std::shared_ptr<rss_item>> items = rsscache->search_for_items(query, feedurl);
std::vector<std::shared_ptr<rss_item>> controller::search_for_items(const std::string& query, std::shared_ptr<rss_feed> feed) {
std::vector<std::shared_ptr<rss_item>> items;
LOG(LOG_DEBUG, "controller::search_for_items: setting feed pointers");
for (auto item : items) {
item->set_feedptr(get_feed_by_url(item->feedurl()));
if(feed != NULL && feed->rssurl().substr(0,6) == "query:") {
for (auto item : feed->items()) {
if(!item->deleted() && (item->title().find(query) != std::string::npos || item->description().find(query) != std::string::npos)){
std::shared_ptr<rss_item> newitem(new rss_item(NULL));
newitem->set_guid(item->guid());
newitem->set_title(item->title());
newitem->set_author(item->author());
newitem->set_link(item->link());

newitem->set_pubDate(item->pubDate_timestamp());

newitem->set_size(item->size());
newitem->set_unread(item->unread());
newitem->set_feedurl(item->feedurl());

newitem->set_enclosure_url(item->enclosure_url());
newitem->set_enclosure_type(item->enclosure_type());
newitem->set_enqueued(item->enqueued());
newitem->set_flags(item->flags());
newitem->set_base(item->get_base());

newitem->set_feedptr(item->get_feedptr());
newitem->set_cache(get_cache());

items.push_back(newitem);
}
}
} else {
items = rsscache->search_for_items(query, (feed != NULL ? feed->rssurl() : ""));
for (auto item : items) {
item->set_feedptr(get_feed_by_url(item->feedurl()));
}
}
return items;
}
Expand Down
2 changes: 1 addition & 1 deletion src/feedlist_formaction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,7 @@ void feedlist_formaction::op_start_search() {
std::vector<std::shared_ptr<rss_item>> items;
try {
std::string utf8searchphrase = utils::convert_text(searchphrase, "utf-8", nl_langinfo(CODESET));
items = v->get_ctrl()->search_for_items(utf8searchphrase, "");
items = v->get_ctrl()->search_for_items(utf8searchphrase, NULL);
} catch (const dbexception& e) {
v->show_error(utils::strprintf(_("Error while searching for `%s': %s"), searchphrase.c_str(), e.what()));
return;
Expand Down
4 changes: 2 additions & 2 deletions src/itemlist_formaction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -569,9 +569,9 @@ void itemlist_formaction::qna_start_search() {
try {
std::string utf8searchphrase = utils::convert_text(searchphrase, "utf-8", nl_langinfo(CODESET));
if (show_searchresult) {
items = v->get_ctrl()->search_for_items(utf8searchphrase, "");
items = v->get_ctrl()->search_for_items(utf8searchphrase, NULL);
} else {
items = v->get_ctrl()->search_for_items(utf8searchphrase, feed->rssurl());
items = v->get_ctrl()->search_for_items(utf8searchphrase, feed);
}
} catch (const dbexception& e) {
v->show_error(utils::strprintf(_("Error while searching for `%s': %s"), searchphrase.c_str(), e.what()));
Expand Down

0 comments on commit d851b10

Please sign in to comment.