diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-10-03 07:26:21 +0300 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-10-03 07:26:21 +0300 |
commit | a52d2dd4dbdc70c224d721796157c060038fbbc3 (patch) | |
tree | 0bdc59abe2ee2ec91e44eacbfcf599559c992f72 | |
parent | 8efbd6fcfd6b696e04454e847e6836ca75794a5e (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.
-rw-r--r-- | src/feeds.c | 4 |
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); |