summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--include/cache.h1
-rw-r--r--src/cache.cpp31
-rw-r--r--src/controller.cpp2
-rw-r--r--src/htmlrenderer.cpp4
-rw-r--r--src/view.cpp6
6 files changed, 41 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index 7877b9cc..4aabe678 100644
--- a/Makefile
+++ b/Makefile
@@ -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>