summaryrefslogtreecommitdiff
path: root/src/feeds.c
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2021-10-03 07:26:21 +0300
committerJaakko Keränen <jaakko.keranen@iki.fi>2021-10-03 07:26:21 +0300
commita52d2dd4dbdc70c224d721796157c060038fbbc3 (patch)
tree0bdc59abe2ee2ec91e44eacbfcf599559c992f72 /src/feeds.c
parent8efbd6fcfd6b696e04454e847e6836ca75794a5e (diff)
Feeds: Stable order for entries from a page
Adjust entry discovery times so they can be sorted to the same order they appear on the source page. In practice, each entry's discovery time differs by a second. Smaller adjustments would not get saved to the entry database.
Diffstat (limited to 'src/feeds.c')
-rw-r--r--src/feeds.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/feeds.c b/src/feeds.c
index 3417b4e9..188fffe7 100644
--- a/src/feeds.c
+++ b/src/feeds.c
@@ -194,6 +194,8 @@ static void parseResult_FeedJob_(iFeedJob *d) {
194 if (isSuccess_GmStatusCode(status_GmRequest(d->request))) { 194 if (isSuccess_GmStatusCode(status_GmRequest(d->request))) {
195 iBeginCollect(); 195 iBeginCollect();
196 iTime now; 196 iTime now;
197 iTime perEntryAdjust;
198 initSeconds_Time(&perEntryAdjust, 1.0);
197 initCurrent_Time(&now); 199 initCurrent_Time(&now);
198 iRegExp *linkPattern = 200 iRegExp *linkPattern =
199 new_RegExp("^=>\\s*([^\\s]+)\\s+" 201 new_RegExp("^=>\\s*([^\\s]+)\\s+"
@@ -214,6 +216,7 @@ static void parseResult_FeedJob_(iFeedJob *d) {
214 const iRangecc title = capturedRange_RegExpMatch(&m, 3); 216 const iRangecc title = capturedRange_RegExpMatch(&m, 3);
215 iFeedEntry * entry = new_FeedEntry(); 217 iFeedEntry * entry = new_FeedEntry();
216 entry->discovered = now; 218 entry->discovered = now;
219 sub_Time(&now, &perEntryAdjust);
217 entry->bookmarkId = d->bookmarkId; 220 entry->bookmarkId = d->bookmarkId;
218 setRange_String(&entry->url, url); 221 setRange_String(&entry->url, url);
219 set_String(&entry->url, canonicalUrl_String(absoluteUrl_String(url_GmRequest(d->request), &entry->url))); 222 set_String(&entry->url, canonicalUrl_String(absoluteUrl_String(url_GmRequest(d->request), &entry->url)));
@@ -239,6 +242,7 @@ static void parseResult_FeedJob_(iFeedJob *d) {
239 entry->posted = now; 242 entry->posted = now;
240 if (!d->isFirstUpdate) { 243 if (!d->isFirstUpdate) {
241 entry->discovered = now; 244 entry->discovered = now;
245 sub_Time(&now, &perEntryAdjust);
242 } 246 }
243 entry->bookmarkId = d->bookmarkId; 247 entry->bookmarkId = d->bookmarkId;
244 iString *title = newRange_String(line); 248 iString *title = newRange_String(line);