diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-02-04 14:37:42 -0800 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-02-04 14:37:42 -0800 |
commit | b5b1930599190e2d7a6613db8779d9bbb970a1f7 (patch) | |
tree | c7a9bb8a7e64b04ed23ac1f052f49ec0c79cb34f | |
parent | 61bc012a6284f90001b2339ecfdfb5b96e38be10 (diff) |
Take timezone into consideration when calculating relative time
-rw-r--r-- | duration/duration.go | 24 | ||||
-rw-r--r-- | duration/duration_test.go | 4 | ||||
-rw-r--r-- | template/common.go | 22 | ||||
-rw-r--r-- | template/html/category_entries.html | 2 | ||||
-rw-r--r-- | template/html/common/item_meta.html | 18 | ||||
-rw-r--r-- | template/html/edit_feed.html | 2 | ||||
-rw-r--r-- | template/html/entry.html | 2 | ||||
-rw-r--r-- | template/html/feed_entries.html | 2 | ||||
-rw-r--r-- | template/html/feeds.html | 2 | ||||
-rw-r--r-- | template/html/history.html | 2 | ||||
-rw-r--r-- | template/html/sessions.html | 2 | ||||
-rw-r--r-- | template/html/starred.html | 2 | ||||
-rw-r--r-- | template/html/unread.html | 2 | ||||
-rw-r--r-- | template/html/users.html | 2 | ||||
-rw-r--r-- | template/template.go | 19 | ||||
-rw-r--r-- | template/views.go | 42 |
16 files changed, 91 insertions, 58 deletions
diff --git a/duration/duration.go b/duration/duration.go index b31d139..fe84026 100644 --- a/duration/duration.go +++ b/duration/duration.go @@ -28,11 +28,29 @@ var ( // ElapsedTime returns in a human readable format the elapsed time // since the given datetime. -func ElapsedTime(translator *locale.Language, t time.Time) string { - if t.IsZero() || time.Now().Before(t) { +func ElapsedTime(translator *locale.Language, timezone string, t time.Time) string { + if t.IsZero() { return translator.Get(NotYet) } - diff := time.Since(t) + + var now time.Time + loc, err := time.LoadLocation(timezone) + if err != nil { + now = time.Now() + } else { + now = time.Now().In(loc) + + // The provided date is already converted to the user timezone by Postgres, + // but the timezone information is not set in the time struct. + // We cannot use time.In() because the date will be converted a second time. + t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), loc) + } + + if now.Before(t) { + return translator.Get(NotYet) + } + + diff := now.Sub(t) // Duration in seconds s := diff.Seconds() // Duration in days diff --git a/duration/duration_test.go b/duration/duration_test.go index c9a4663..d1aae21 100644 --- a/duration/duration_test.go +++ b/duration/duration_test.go @@ -31,8 +31,8 @@ func TestElapsedTime(t *testing.T) { {time.Now().Add(-time.Hour * 24 * 365 * 3), fmt.Sprintf(Years, 3)}, } for i, tt := range dt { - if out := ElapsedTime(&locale.Language{}, tt.in); out != tt.out { - t.Errorf("%d. content mismatch for %v:exp=%q got=%q", i, tt.in, tt.out, out) + if out := ElapsedTime(&locale.Language{}, "Local", tt.in); out != tt.out { + t.Errorf(`%d. content mismatch for "%v": expected=%q got=%q`, i, tt.in, tt.out, out) } } } diff --git a/template/common.go b/template/common.go index 2d28407..61661e8 100644 --- a/template/common.go +++ b/template/common.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2018-01-31 21:53:31.216689995 -0800 PST m=+0.040862073 +// 2018-02-04 14:28:15.225458631 -0800 PST m=+0.036040293 package template @@ -27,32 +27,32 @@ var templateCommonMap = map[string]string{ <div class="item-meta"> <ul> <li> - <a href="{{ route "feedEntries" "feedID" .Feed.ID }}" title="{{ .Feed.Title }}">{{ domain .Feed.SiteURL }}</a> + <a href="{{ route "feedEntries" "feedID" .entry.Feed.ID }}" title="{{ .entry.Feed.Title }}">{{ domain .entry.Feed.SiteURL }}</a> </li> <li> - <time datetime="{{ isodate .Date }}" title="{{ isodate .Date }}">{{ elapsed .Date }}</time> + <time datetime="{{ isodate .entry.Date }}" title="{{ isodate .entry.Date }}">{{ elapsed .user.Timezone .entry.Date }}</time> </li> <li> <a href="#" title="{{ t "Save this article" }}" data-save-entry="true" - data-save-url="{{ route "saveEntry" "entryID" .ID }}" + data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}" data-label-loading="{{ t "Saving..." }}" data-label-done="{{ t "Done!" }}" >{{ t "Save" }}</a> </li> <li> - <a href="{{ .URL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer" data-original-link="true">{{ t "Original" }}</a> + <a href="{{ .entry.URL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer" data-original-link="true">{{ t "Original" }}</a> </li> <li> <a href="#" data-toggle-bookmark="true" - data-bookmark-url="{{ route "toggleBookmark" "entryID" .ID }}" + data-bookmark-url="{{ route "toggleBookmark" "entryID" .entry.ID }}" data-label-loading="{{ t "Saving..." }}" data-label-star="☆ {{ t "Star" }}" data-label-unstar="★ {{ t "Unstar" }}" - data-value="{{ if .Starred }}star{{ else }}unstar{{ end }}" - >{{ if .Starred }}★ {{ t "Unstar" }}{{ else }}☆ {{ t "Star" }}{{ end }}</a> + data-value="{{ if .entry.Starred }}star{{ else }}unstar{{ end }}" + >{{ if .entry.Starred }}★ {{ t "Unstar" }}{{ else }}☆ {{ t "Star" }}{{ end }}</a> </li> <li> <a href="#" @@ -60,8 +60,8 @@ var templateCommonMap = map[string]string{ data-toggle-status="true" data-label-read="✔ {{ t "Read" }}" data-label-unread="✘ {{ t "Unread" }}" - data-value="{{ if eq .Status "read" }}read{{ else }}unread{{ end }}" - >{{ if eq .Status "read" }}✘ {{ t "Unread" }}{{ else }}✔ {{ t "Read" }}{{ end }}</a> + data-value="{{ if eq .entry.Status "read" }}read{{ else }}unread{{ end }}" + >{{ if eq .entry.Status "read" }}✘ {{ t "Unread" }}{{ else }}✔ {{ t "Read" }}{{ end }}</a> </li> </ul> </div> @@ -215,7 +215,7 @@ var templateCommonMap = map[string]string{ var templateCommonMapChecksums = map[string]string{ "entry_pagination": "f1465fa70f585ae8043b200ec9de5bf437ffbb0c19fb7aefc015c3555614ee27", - "item_meta": "5f8650332fcc24dd580cea3eb8e7d8ecbb0d794607185039d1f4def8db6a7460", + "item_meta": "4796b74adca0567f3dbf8bdf6ac8cda59f455ea34cb6d4a92c83660fa72a883d", "layout": "c7565e2cf904612e236bc1d7167c6c124ffe5d27348608eb5c2336606f266896", "pagination": "6ff462c2b2a53bc5448b651da017f40a39f1d4f16cef4b2f09784f0797286924", } diff --git a/template/html/category_entries.html b/template/html/category_entries.html index d7ce9d9..8910f22 100644 --- a/template/html/category_entries.html +++ b/template/html/category_entries.html @@ -27,7 +27,7 @@ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> diff --git a/template/html/common/item_meta.html b/template/html/common/item_meta.html index 668a5d2..5b00d9a 100644 --- a/template/html/common/item_meta.html +++ b/template/html/common/item_meta.html @@ -2,32 +2,32 @@ <div class="item-meta"> <ul> <li> - <a href="{{ route "feedEntries" "feedID" .Feed.ID }}" title="{{ .Feed.Title }}">{{ domain .Feed.SiteURL }}</a> + <a href="{{ route "feedEntries" "feedID" .entry.Feed.ID }}" title="{{ .entry.Feed.Title }}">{{ domain .entry.Feed.SiteURL }}</a> </li> <li> - <time datetime="{{ isodate .Date }}" title="{{ isodate .Date }}">{{ elapsed .Date }}</time> + <time datetime="{{ isodate .entry.Date }}" title="{{ isodate .entry.Date }}">{{ elapsed .user.Timezone .entry.Date }}</time> </li> <li> <a href="#" title="{{ t "Save this article" }}" data-save-entry="true" - data-save-url="{{ route "saveEntry" "entryID" .ID }}" + data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}" data-label-loading="{{ t "Saving..." }}" data-label-done="{{ t "Done!" }}" >{{ t "Save" }}</a> </li> <li> - <a href="{{ .URL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer" data-original-link="true">{{ t "Original" }}</a> + <a href="{{ .entry.URL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer" data-original-link="true">{{ t "Original" }}</a> </li> <li> <a href="#" data-toggle-bookmark="true" - data-bookmark-url="{{ route "toggleBookmark" "entryID" .ID }}" + data-bookmark-url="{{ route "toggleBookmark" "entryID" .entry.ID }}" data-label-loading="{{ t "Saving..." }}" data-label-star="☆ {{ t "Star" }}" data-label-unstar="★ {{ t "Unstar" }}" - data-value="{{ if .Starred }}star{{ else }}unstar{{ end }}" - >{{ if .Starred }}★ {{ t "Unstar" }}{{ else }}☆ {{ t "Star" }}{{ end }}</a> + data-value="{{ if .entry.Starred }}star{{ else }}unstar{{ end }}" + >{{ if .entry.Starred }}★ {{ t "Unstar" }}{{ else }}☆ {{ t "Star" }}{{ end }}</a> </li> <li> <a href="#" @@ -35,8 +35,8 @@ data-toggle-status="true" data-label-read="✔ {{ t "Read" }}" data-label-unread="✘ {{ t "Unread" }}" - data-value="{{ if eq .Status "read" }}read{{ else }}unread{{ end }}" - >{{ if eq .Status "read" }}✘ {{ t "Unread" }}{{ else }}✔ {{ t "Read" }}{{ end }}</a> + data-value="{{ if eq .entry.Status "read" }}read{{ else }}unread{{ end }}" + >{{ if eq .entry.Status "read" }}✘ {{ t "Unread" }}{{ else }}✔ {{ t "Read" }}{{ end }}</a> </li> </ul> </div> diff --git a/template/html/edit_feed.html b/template/html/edit_feed.html index 888a2c0..e5bb60a 100644 --- a/template/html/edit_feed.html +++ b/template/html/edit_feed.html @@ -67,7 +67,7 @@ <div class="panel"> <ul> - <li><strong>{{ t "Last checked:" }} </strong><time datetime="{{ isodate .feed.CheckedAt }}" title="{{ isodate .feed.CheckedAt }}">{{ elapsed .feed.CheckedAt }}</time></li> + <li><strong>{{ t "Last checked:" }} </strong><time datetime="{{ isodate .feed.CheckedAt }}" title="{{ isodate .feed.CheckedAt }}">{{ elapsed $.user.Timezone .feed.CheckedAt }}</time></li> <li><strong>{{ t "ETag header:" }} </strong>{{ if .feed.EtagHeader }}{{ .feed.EtagHeader }}{{ else }}{{ t "None" }}{{ end }}</li> <li><strong>{{ t "LastModified header:" }} </strong>{{ if .feed.LastModifiedHeader }}{{ .feed.LastModifiedHeader }}{{ else }}{{ t "None" }}{{ end }}</li> </ul> diff --git a/template/html/entry.html b/template/html/entry.html index 66d08fb..237acf4 100644 --- a/template/html/entry.html +++ b/template/html/entry.html @@ -59,7 +59,7 @@ </span> </div> <div class="entry-date"> - <time datetime="{{ isodate .entry.Date }}" title="{{ isodate .entry.Date }}">{{ elapsed .entry.Date }}</time> + <time datetime="{{ isodate .entry.Date }}" title="{{ isodate .entry.Date }}">{{ elapsed $.user.Timezone .entry.Date }}</time> </div> </header> {{ if gt (len .entry.Content) 120 }} diff --git a/template/html/feed_entries.html b/template/html/feed_entries.html index ebd8ea7..bbc8d79 100644 --- a/template/html/feed_entries.html +++ b/template/html/feed_entries.html @@ -38,7 +38,7 @@ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> diff --git a/template/html/feeds.html b/template/html/feeds.html index 5500c92..db89872 100644 --- a/template/html/feeds.html +++ b/template/html/feeds.html @@ -42,7 +42,7 @@ <a href="{{ .SiteURL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer" data-original-link="true">{{ domain .SiteURL }}</a> </li> <li> - {{ t "Last check:" }} <time datetime="{{ isodate .CheckedAt }}" title="{{ isodate .CheckedAt }}">{{ elapsed .CheckedAt }}</time> + {{ t "Last check:" }} <time datetime="{{ isodate .CheckedAt }}" title="{{ isodate .CheckedAt }}">{{ elapsed $.user.Timezone .CheckedAt }}</time> </li> </ul> <ul> diff --git a/template/html/history.html b/template/html/history.html index 892f183..3b806da 100644 --- a/template/html/history.html +++ b/template/html/history.html @@ -27,7 +27,7 @@ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> diff --git a/template/html/sessions.html b/template/html/sessions.html index f6d74c2..6e639d6 100644 --- a/template/html/sessions.html +++ b/template/html/sessions.html @@ -33,7 +33,7 @@ </tr> {{ range .sessions }} <tr {{ if eq .Token $.currentSessionToken }}class="row-highlighted"{{ end }}> - <td class="column-20" title="{{ isodate .CreatedAt }}">{{ elapsed .CreatedAt }}</td> + <td class="column-20" title="{{ isodate .CreatedAt }}">{{ elapsed $.user.Timezone .CreatedAt }}</td> <td class="column-20" title="{{ .IP }}">{{ .IP }}</td> <td title="{{ .UserAgent }}">{{ .UserAgent }}</td> <td class="column-20"> diff --git a/template/html/starred.html b/template/html/starred.html index b16b9e7..e2a2407 100644 --- a/template/html/starred.html +++ b/template/html/starred.html @@ -20,7 +20,7 @@ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> diff --git a/template/html/unread.html b/template/html/unread.html index e88c847..c8e0a8e 100644 --- a/template/html/unread.html +++ b/template/html/unread.html @@ -30,7 +30,7 @@ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> diff --git a/template/html/users.html b/template/html/users.html index 7fd7e47..8bffc2f 100644 --- a/template/html/users.html +++ b/template/html/users.html @@ -39,7 +39,7 @@ <td>{{ if eq .IsAdmin true }}{{ t "Yes" }}{{ else }}{{ t "No" }}{{ end }}</td> <td> {{ if .LastLoginAt }} - <time datetime="{{ isodate .LastLoginAt }}" title="{{ isodate .LastLoginAt }}">{{ elapsed .LastLoginAt }}</time> + <time datetime="{{ isodate .LastLoginAt }}" title="{{ isodate .LastLoginAt }}">{{ elapsed $.user.Timezone .LastLoginAt }}</time> {{ else }} {{ t "Never" }} {{ end }} diff --git a/template/template.go b/template/template.go index b3374ff..a78f931 100644 --- a/template/template.go +++ b/template/template.go @@ -6,6 +6,7 @@ package template import ( "bytes" + "fmt" "html/template" "io" "net/mail" @@ -85,8 +86,8 @@ func (e *Engine) parseAll() { "isodate": func(ts time.Time) string { return ts.Format("2006-01-02 15:04:05") }, - "elapsed": func(ts time.Time) string { - return duration.ElapsedTime(e.currentLocale, ts) + "elapsed": func(timezone string, t time.Time) string { + return duration.ElapsedTime(e.currentLocale, timezone, t) }, "t": func(key interface{}, args ...interface{}) string { switch key.(type) { @@ -104,6 +105,20 @@ func (e *Engine) parseAll() { "plural": func(key string, n int, args ...interface{}) string { return e.currentLocale.Plural(key, n, args...) }, + "dict": func(values ...interface{}) (map[string]interface{}, error) { + if len(values)%2 != 0 { + return nil, fmt.Errorf("Dict expects an even number of arguments") + } + dict := make(map[string]interface{}, len(values)/2) + for i := 0; i < len(values); i += 2 { + key, ok := values[i].(string) + if !ok { + return nil, fmt.Errorf("Dict keys must be strings") + } + dict[key] = values[i+1] + } + return dict, nil + }, } commonTemplates := "" diff --git a/template/views.go b/template/views.go index e189e5d..b7e997f 100644 --- a/template/views.go +++ b/template/views.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2018-02-03 15:28:45.540437885 -0800 PST m=+0.032377624 +// 2018-02-04 14:28:15.215257434 -0800 PST m=+0.025839096 package template @@ -179,7 +179,7 @@ var templateViewsMap = map[string]string{ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> @@ -404,7 +404,7 @@ var templateViewsMap = map[string]string{ <div class="panel"> <ul> - <li><strong>{{ t "Last checked:" }} </strong><time datetime="{{ isodate .feed.CheckedAt }}" title="{{ isodate .feed.CheckedAt }}">{{ elapsed .feed.CheckedAt }}</time></li> + <li><strong>{{ t "Last checked:" }} </strong><time datetime="{{ isodate .feed.CheckedAt }}" title="{{ isodate .feed.CheckedAt }}">{{ elapsed $.user.Timezone .feed.CheckedAt }}</time></li> <li><strong>{{ t "ETag header:" }} </strong>{{ if .feed.EtagHeader }}{{ .feed.EtagHeader }}{{ else }}{{ t "None" }}{{ end }}</li> <li><strong>{{ t "LastModified header:" }} </strong>{{ if .feed.LastModifiedHeader }}{{ .feed.LastModifiedHeader }}{{ else }}{{ t "None" }}{{ end }}</li> </ul> @@ -524,7 +524,7 @@ var templateViewsMap = map[string]string{ </span> </div> <div class="entry-date"> - <time datetime="{{ isodate .entry.Date }}" title="{{ isodate .entry.Date }}">{{ elapsed .entry.Date }}</time> + <time datetime="{{ isodate .entry.Date }}" title="{{ isodate .entry.Date }}">{{ elapsed $.user.Timezone .entry.Date }}</time> </div> </header> {{ if gt (len .entry.Content) 120 }} @@ -613,7 +613,7 @@ var templateViewsMap = map[string]string{ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> @@ -666,7 +666,7 @@ var templateViewsMap = map[string]string{ <a href="{{ .SiteURL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer" data-original-link="true">{{ domain .SiteURL }}</a> </li> <li> - {{ t "Last check:" }} <time datetime="{{ isodate .CheckedAt }}" title="{{ isodate .CheckedAt }}">{{ elapsed .CheckedAt }}</time> + {{ t "Last check:" }} <time datetime="{{ isodate .CheckedAt }}" title="{{ isodate .CheckedAt }}">{{ elapsed $.user.Timezone .CheckedAt }}</time> </li> </ul> <ul> @@ -729,7 +729,7 @@ var templateViewsMap = map[string]string{ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> @@ -967,7 +967,7 @@ var templateViewsMap = map[string]string{ </tr> {{ range .sessions }} <tr {{ if eq .Token $.currentSessionToken }}class="row-highlighted"{{ end }}> - <td class="column-20" title="{{ isodate .CreatedAt }}">{{ elapsed .CreatedAt }}</td> + <td class="column-20" title="{{ isodate .CreatedAt }}">{{ elapsed $.user.Timezone .CreatedAt }}</td> <td class="column-20" title="{{ .IP }}">{{ .IP }}</td> <td title="{{ .UserAgent }}">{{ .UserAgent }}</td> <td class="column-20"> @@ -1094,7 +1094,7 @@ var templateViewsMap = map[string]string{ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> @@ -1135,7 +1135,7 @@ var templateViewsMap = map[string]string{ </span> <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span> </div> - {{ template "item_meta" . }} + {{ template "item_meta" dict "user" $.user "entry" . }} </article> {{ end }} </div> @@ -1184,7 +1184,7 @@ var templateViewsMap = map[string]string{ <td>{{ if eq .IsAdmin true }}{{ t "Yes" }}{{ else }}{{ t "No" }}{{ end }}</td> <td> {{ if .LastLoginAt }} - <time datetime="{{ isodate .LastLoginAt }}" title="{{ isodate .LastLoginAt }}">{{ elapsed .LastLoginAt }}</time> + <time datetime="{{ isodate .LastLoginAt }}" title="{{ isodate .LastLoginAt }}">{{ elapsed $.user.Timezone .LastLoginAt }}</time> {{ else }} {{ t "Never" }} {{ end }} @@ -1213,23 +1213,23 @@ var templateViewsMapChecksums = map[string]string{ "about": "ad2fb778fc73c39b733b3f81b13e5c7d689b041fadd24ee2d4577f545aa788ad", "add_subscription": "053c920b0d7e109ea19dce6a448e304ce720db8633588ea04db16677f7209a7b", "categories": "ca1280cd157bb527d4fc907da67b05a8347378f6dce965b9389d4bcdf3600a11", - "category_entries": "a92bd528d1162e7af4972f7ad25feddf7ceb17164db593805caf3d363ff32aac", + "category_entries": "686132d71c52a665329670756ac09959d915f7bc3227970149c623059988b035", "choose_subscription": "a325f9c976ca2b2dc148e25c8fef0cf6ccab0e04e86e604e7812bb18dc4cdde1", "create_category": "2b82af5d2dcd67898dc5daa57a6461e6ff8121a6089b2a2a1be909f35e4a2275", "create_user": "233764778c915754141a20429ec8db9bf80ef2d7704867a2d7232c1e9df233ae", "edit_category": "cee720faadcec58289b707ad30af623d2ee66c1ce23a732965463250d7ff41c5", - "edit_feed": "30ff6ee5526b8beb9b457526b77ede55938f53eb279b1acc719ce896359e2ed8", + "edit_feed": "d2c1c8486d7faf4ee58151ccf3e3c690e53bd6872050d291c5db8452a83c3d53", "edit_user": "5edd693460330750ba5ee03319d4e3cb5aabbd9a0e48b3b760799bca72c5ec4e", - "entry": "6b4405e0c8e4a7d31874659f8835f4e43e01dc3c20686091517ac750196dd70f", - "feed_entries": "3a7b4d942d9ac9da7df5c09950fbadaa0ff564696953c4f1c302d955696cc2ee", - "feeds": "65b0a47c4438810b9d51c60f3f3b2519690e56ff74029e6296c68626b83a470b", - "history": "d2476fd727e4f53428b5ed1f3f9423063583337ec8cfe1dd9c931fcb03852a20", + "entry": "27ea028515e79beb546f0b2792a3918c455fd877eea4c41d1a061f8e7b54a430", + "feed_entries": "420da786e827a77fecc8794207d158af3a30e489ca2b2019f48d5228919af4a7", + "feeds": "0c884b7a9dfc4541b988641516fd95df062a5bf05018d28276a3c0a10323cffd", + "history": "967bc95236269ab3a77455910aca1939f43f93171fe1af77eb3b1b4eac579e55", "import": "73b5112e20bfd232bf73334544186ea419505936bc237d481517a8622901878f", "integrations": "958b73d632a3e2a79368bb1582efb8aabc438cef4fa6e8dc1aa4932494916aca", "login": "7d83c3067c02f1f6aafdd8816c7f97a4eb5a5a4bdaaaa4cc1e2fbb9c17ea65e8", - "sessions": "d8ef5900d8ea8395804b320002e5f45ed0ab8b790e43f674f61f8b9787041cbd", + "sessions": "3fa79031dd883847eba92fbafe5f535fa3a4e1614bb610f20588b6f8fc8b3624", "settings": "ea2505b9d0a6d6bb594dba87a92079de19baa6d494f0651693a7685489fb7de9", - "starred": "121b761ce218de472ebf70879c1aa2fe3b9ae8981c11f1ed53a355e34049b269", - "unread": "17335b21dc5fb79207da317a8e8a6685a122bc94c323662cbda7cfdbf73dd2f9", - "users": "a07201315fdb1d8f381f31699b8acee0066719c26cd29c2aeb9808282d69e0a3", + "starred": "d006f5bcfca7abc7c68b6bb38fe25838acb81b65f960fbf06b97b259ba03b936", + "unread": "ad71a7bdd46c1d650efecbeeb37b7606a046027c15284c0712912b77397f90d4", + "users": "c6d91b0b29984b4cb3073bec6a2933cfb72981ec60f54b6c7aa05194f0e860bd", } |