summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Andreas Krennmair <ak@synflood.at> 2006-11-18 09:21:20 +0000
committerGravatar Andreas Krennmair <ak@synflood.at> 2006-11-18 09:21:20 +0000
commitcd63cd7b991e0e6eb99bc252198dee8d1720a1b1 (patch)
tree29a28f3b98d4b68357644932a6ffa98f0c85514e /src
parent1997de13eb395bc240a84fa609ee95ee61d3b5ba (diff)
downloadnewsboat-cd63cd7b991e0e6eb99bc252198dee8d1720a1b1.tar.gz
newsboat-cd63cd7b991e0e6eb99bc252198dee8d1720a1b1.tar.zst
newsboat-cd63cd7b991e0e6eb99bc252198dee8d1720a1b1.zip
Andreas Krennmair:
added DB cleanup functionality
Diffstat (limited to 'src')
-rw-r--r--src/cache.cpp31
-rw-r--r--src/controller.cpp2
-rw-r--r--src/htmlrenderer.cpp4
-rw-r--r--src/view.cpp6
4 files changed, 39 insertions, 4 deletions
diff --git a/src/cache.cpp b/src/cache.cpp
index bd90e51b..af1086eb 100644
--- a/src/cache.cpp
+++ b/src/cache.cpp
@@ -187,3 +187,34 @@ void cache::internalize_rssfeed(rss_feed& feed) {
assert(rc == SQLITE_OK);
free(query);
}
+
+void cache::cleanup_cache(std::vector<rss_feed>& feeds) {
+ std::string list = "(";
+ int rc;
+ unsigned int i = 0;
+ unsigned int feed_size = feeds.size();
+
+ for (std::vector<rss_feed>::iterator it=feeds.begin();it!=feeds.end();++it,++i) {
+ char * name = sqlite3_mprintf("'%q'",it->rssurl().c_str());
+ list.append(name);
+ if (i < feed_size-1) {
+ list.append(", ");
+ }
+ free(name);
+ }
+ list.append(")");
+
+ std::string cleanup_rss_feeds_statement = std::string("DELETE FROM rss_feed WHERE rssurl NOT IN ") + list + ";";
+ std::string cleanup_rss_items_statement = std::string("DELETE FROM rss_item WHERE feedurl NOT IN ") + list + ";";
+
+ std::cerr << "statements: " << cleanup_rss_feeds_statement << " " << cleanup_rss_items_statement << std::endl;
+
+ rc = sqlite3_exec(db,cleanup_rss_feeds_statement.c_str(),NULL,NULL,NULL);
+ assert(rc == SQLITE_OK);
+
+ rc = sqlite3_exec(db,cleanup_rss_items_statement.c_str(),NULL,NULL,NULL);
+ assert(rc == SQLITE_OK);
+
+ rc = sqlite3_exec(db,"VACUUM;",NULL,NULL,NULL);
+ assert(rc == SQLITE_OK);
+}
diff --git a/src/controller.cpp b/src/controller.cpp
index 146228b1..2690cd01 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -24,6 +24,8 @@ controller::controller() : v(0), rsscache(0) {
rsscache->internalize_rssfeed(feed);
feeds.push_back(feed);
}
+
+ rsscache->cleanup_cache(feeds);
}
controller::~controller() {
diff --git a/src/htmlrenderer.cpp b/src/htmlrenderer.cpp
index 7783800f..a9f638a0 100644
--- a/src/htmlrenderer.cpp
+++ b/src/htmlrenderer.cpp
@@ -25,6 +25,7 @@ std::vector<std::string> htmlrenderer::render(const std::string& source) {
} else {
if (*begin == '>') {
addchar = true;
+ cleaned_source.append(" ");
}
}
++begin;
@@ -33,7 +34,8 @@ std::vector<std::string> htmlrenderer::render(const std::string& source) {
begin = cleaned_source.c_str();
while (strlen(begin) >= w) {
const char * end = begin + w;
- while (end > begin && !strchr(" \t\r\n",*end)) ++end;
+ while (end > begin && *end != ' ')
+ --end;
if (begin == end) {
char x[w+1];
strncpy(x,begin,w);
diff --git a/src/view.cpp b/src/view.cpp
index 357adbdd..9ad8b678 100644
--- a/src/view.cpp
+++ b/src/view.cpp
@@ -1,6 +1,6 @@
-#include "feedlist.h"
-#include "itemlist.h"
-#include "itemview.h"
+#include <feedlist.h>
+#include <itemlist.h>
+#include <itemview.h>
extern "C" {
#include <stfl.h>