diff options
author | 2006-11-18 09:21:20 +0000 | |
---|---|---|
committer | 2006-11-18 09:21:20 +0000 | |
commit | cd63cd7b991e0e6eb99bc252198dee8d1720a1b1 (patch) | |
tree | 29a28f3b98d4b68357644932a6ffa98f0c85514e | |
parent | 1997de13eb395bc240a84fa609ee95ee61d3b5ba (diff) | |
download | newsboat-cd63cd7b991e0e6eb99bc252198dee8d1720a1b1.tar.gz newsboat-cd63cd7b991e0e6eb99bc252198dee8d1720a1b1.tar.zst newsboat-cd63cd7b991e0e6eb99bc252198dee8d1720a1b1.zip |
Andreas Krennmair:
added DB cleanup functionality
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | include/cache.h | 1 | ||||
-rw-r--r-- | src/cache.cpp | 31 | ||||
-rw-r--r-- | src/controller.cpp | 2 | ||||
-rw-r--r-- | src/htmlrenderer.cpp | 4 | ||||
-rw-r--r-- | src/view.cpp | 6 |
6 files changed, 41 insertions, 7 deletions
@@ -1,6 +1,4 @@ -CC=cc CXX=c++ -CFLAGS=-g -I./include -I./stfl CXXFLAGS=-g -I./include -I./stfl LDFLAGS=-g LIBS=-lstfl -lmrss -lnxml -lncurses -lsqlite3 @@ -28,6 +26,6 @@ clean: $(RM) $(OUTPUT) $(OBJS) $(STFLHDRS) core *.core Makefile.deps Makefile.deps: $(SRC) - $(CXX) -MM -MG $(SRC) > Makefile.deps + $(CXX) $(CXXFLAGS) -MM -MG $(SRC) > Makefile.deps include Makefile.deps diff --git a/include/cache.h b/include/cache.h index 1a3db7fb..9802eece 100644 --- a/include/cache.h +++ b/include/cache.h @@ -12,6 +12,7 @@ class cache { ~cache(); void externalize_rssfeed(rss_feed& feed); void internalize_rssfeed(rss_feed& feed); + void cleanup_cache(std::vector<rss_feed>& feeds); private: void populate_tables(); sqlite3 * db; 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> |