From 6b9924743a9870d68df089cf212e090e907f0fc8 Mon Sep 17 00:00:00 2001 From: Andreas Waidler Date: Sat, 25 Jun 2011 01:25:55 +0200 Subject: [PATCH] Now supporting feeds with newest items on bottom. Arbitrary order should be supported as well. --- TODO | 4 ++-- src/fs.c | 40 +++++++++++++++++++++----------------- src/rss.c | 3 --- tests_usr/item_order_ascending.rss | 14 +++++++++++++ tests_usr/item_order_ascending.sh | 25 ++++++++++++++++++++++++ tests_usr/tests | 1 + 6 files changed, 64 insertions(+), 23 deletions(-) create mode 100644 tests_usr/item_order_ascending.rss create mode 100755 tests_usr/item_order_ascending.sh diff --git a/TODO b/TODO index 3cef3b8..cdf0552 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,7 @@ -* do not stop on first old item, consume whole feed - channel pubDate is not old. * check whether new items are retrieved, but old ones are not written +* no date -> current date. write all items with date >= + feed date. * item overwrite only if date >= olddate else notice, skip offending item, and do not change feed date, continue but exit with error diff --git a/src/fs.c b/src/fs.c index 121d461..cf3332a 100644 --- a/src/fs.c +++ b/src/fs.c @@ -162,35 +162,39 @@ void item_flush() /* snip: from set_item_date */ /* assert(item_title[0]); */ - if (item_date > 0 && item_date <= feed_date) { + /*if (item_date > 0 && item_date <= feed_date) { printf("No new feeds assumed.\n"); fail(0); - } else if (item_date > feed_date_new) { + } else */if (item_date > feed_date_new) { feed_date_new = item_date; } /* snap */ - name_src = item_title[0] ? item_title : item_desc; - assert(name_src[0]); - fs_buffer(buf, name_src, FILE_NAME_LENGTH + 1); - sanitize(buf); + if (item_date == 0 || item_date > feed_date) { + name_src = item_title[0] ? item_title : item_desc; + assert(name_src[0]); + fs_buffer(buf, name_src, FILE_NAME_LENGTH + 1); + sanitize(buf); - assert(mkdir(buf, 0755) == 0); - assert(chdir(buf) == 0); - fs_set("title", item_title); - fs_set("desc", item_desc); - fs_set("link", item_link); - assert(chdir("..") == 0); + if (mkdir(buf, 0755)) { + assert(errno == EEXIST); + } - /* FIXME: item date might not have been set. */ + assert(chdir(buf) == 0); + fs_set("title", item_title); + fs_set("desc", item_desc); + fs_set("link", item_link); + assert(chdir("..") == 0); + /* FIXME: item date might not have been set. */ - times[0].tv_sec = item_date; - times[0].tv_usec = 0; - times[1].tv_sec = item_date; - times[1].tv_usec = 0; + times[0].tv_sec = item_date; + times[0].tv_usec = 0; + times[1].tv_sec = item_date; + times[1].tv_usec = 0; - assert(!utimes(buf, times)); + assert(!utimes(buf, times)); + } item_title[0] = 0; item_desc[0] = 0; diff --git a/src/rss.c b/src/rss.c index 8eeee53..a0ce1a4 100644 --- a/src/rss.c +++ b/src/rss.c @@ -20,9 +20,6 @@ #include "rss.h" #include "fs.h" - - - void rss_global_enter(const char* elem, const char** attr) { (void) attr; diff --git a/tests_usr/item_order_ascending.rss b/tests_usr/item_order_ascending.rss new file mode 100644 index 0000000..438bd0b --- /dev/null +++ b/tests_usr/item_order_ascending.rss @@ -0,0 +1,14 @@ + + + + feed + + Item 1 + Fri, 02 Apr 2010 12:10:00 +0200 + + + Item 2 + Sat, 02 Oct 2010 22:43:23 +0200 + + + diff --git a/tests_usr/item_order_ascending.sh b/tests_usr/item_order_ascending.sh new file mode 100755 index 0000000..806498b --- /dev/null +++ b/tests_usr/item_order_ascending.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# Copyright (C) 2011 Andreas Waidler +# +# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE +# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +# +# 0. You just DO WHAT THE FUCK YOU WANT TO. + +. ./libtests.sh + +feed_exists() { assert_exists feed; } +feed_empty() { assert_empty feed; } +feed_date() { assert_date feed 1286052203; } +item1_exists() { assert_exists "feed/Item 1"; } +item2_exists() { assert_exists "feed/Item 2"; } + +mkdir feed +touch -md "2010-04-02 12:09:59.000000000 +0200" feed + +echo "Running agg on feed with item order ascending..." +agg_run item_order_ascending.rss +t feed_exists +t feed_date +t item1_exists +t item2_exists diff --git a/tests_usr/tests b/tests_usr/tests index 65edd8e..7e671f8 100755 --- a/tests_usr/tests +++ b/tests_usr/tests @@ -22,6 +22,7 @@ TESTS=" simple_t.sh simple_d.sh sample.sh +item_order_ascending.sh long_item_title.sh feed_broken.sh item_broken.sh -- 2.11.4.GIT