diff of 979cbab10b9853998ea2363716d8efb0a479bc32
979cbab10b9853998ea2363716d8efb0a479bc32
diff --git a/elm-frontti/src/Ajax_cmds.elm b/elm-frontti/src/Ajax_cmds.elm
index 3619d46..e560464 100644
--- a/elm-frontti/src/Ajax_cmds.elm
+++ b/elm-frontti/src/Ajax_cmds.elm
@@ -140,9 +140,12 @@ loadPreviousArticle post_id =
{ url = "/api/posts/post/" ++ (String.fromInt post_id)
, expect = Http.expectJson PreviousPostReceived Article.articleDecoder}
-getFeeds =
+getFeeds archived =
Http.get
- { url = "/api/user/feeds"
+ { url = if archived then
+ "/api/user/feeds?archived=archived"
+ else
+ "/api/user/feeds"
, expect = Http.expectJson FeedsReceived (Json.list Feeds.feedDecoder)}
addFeed newFeed =
diff --git a/elm-frontti/src/FeedView.elm b/elm-frontti/src/FeedView.elm
index dee02d7..1a33768 100644
--- a/elm-frontti/src/FeedView.elm
+++ b/elm-frontti/src/FeedView.elm
@@ -34,27 +34,26 @@ feed_item time_format zone item =
Nothing ->
li [] [ text "Unknown feed" ]
-correctlySortedFeedItemList show_archived settings zone items =
+correctlySortedFeedItemList settings zone items =
( items
|> List.sortBy (Time.posixToMillis << .pubdate)
|> List.reverse
- |> List.filter (\item -> (not item.is_read) || show_archived)
|> List.map (feed_item settings.time_format zone))
-- fs = feeds, elm sucks balls at shadowing
-perFeedView show_archived settings zone fs new_feed_state =
+perFeedView settings zone fs new_feed_state =
ul [ class "feed-list" ]
(List.map (\feed ->
li [ class "feed" ]
[ header [] [ text feed.name ]
, a [ href feed.url ] [ text feed.url ]
, ul [ class "feed-items" ]
- (correctlySortedFeedItemList show_archived settings zone <| List.map (\i -> { i | feed_id = Just feed.id}) feed.items)]) fs)
+ (correctlySortedFeedItemList settings zone <| List.map (\i -> { i | feed_id = Just feed.id}) feed.items)]) fs)
-singleFeedView show_archived settings zone fs =
+singleFeedView settings zone fs =
let final_feed = List.concatMap (\feed -> List.map (\item -> { item | feed_id = Just feed.id}) feed.items) fs in
ul [ class "feed-items" ]
- (correctlySortedFeedItemList show_archived settings zone final_feed)
+ (correctlySortedFeedItemList settings zone final_feed)
readerState_str state =
@@ -75,8 +74,8 @@ feeds feedReaderState show_archived settings zone fs new_feed metadata =
(Dict.fromList [ ("PerFeed", "Group by feed")
, ("SingleFeed", "Show all in a feed")
, ("FeedManager", "Manage feeds")])
- (Dict.fromList [ ("PerFeed", perFeedView show_archived settings zone fs new_feed_state)
- , ("SingleFeed", singleFeedView show_archived settings zone fs)
+ (Dict.fromList [ ("PerFeed", perFeedView settings zone fs new_feed_state)
+ , ("SingleFeed", singleFeedView settings zone fs)
, ("FeedManager", feedmanager fs)])
, h3 [] [ text "Add new feed?"]
diff --git a/elm-frontti/src/Main.elm b/elm-frontti/src/Main.elm
index 15bd91a..db52f40 100644
--- a/elm-frontti/src/Main.elm
+++ b/elm-frontti/src/Main.elm
@@ -114,7 +114,7 @@ viewStatePerUrl url =
, getTitles])
RouteParser.FeedReader -> (Loading, [ getSession
, getSettings
- , getFeeds
+ , getFeeds False
, getFeedMeta ])
init _ url key =
@@ -572,8 +572,13 @@ update msg model =
FeedsReceived result ->
case result of
Ok feeds ->
- ( { model | view_state = Feeds feeds False}
- , Cmd.none)
+ case model.view_state of
+ Feeds _ archived ->
+ ( { model | view_state = Feeds feeds archived}
+ , Cmd.none)
+ _ ->
+ ( { model | view_state = Feeds feeds False}
+ , Cmd.none)
Err error ->
( { model | view_state = ShowError (errToString error) }
, Cmd.none)
@@ -597,9 +602,13 @@ update msg model =
, addFeed new_feed)
FeedAdded r ->
case r of
- Ok _ ->
- ( model
- , getFeeds)
+ Ok _ ->
+ case model.view_state of
+ Feeds _ archived ->
+ ( model
+ , getFeeds archived)
+ _ -> ( model
+ , Cmd.none)
Err error ->
( { model | view_state = ShowError (errToString error) }
, Cmd.none)
@@ -647,7 +656,7 @@ update msg model =
Feeds feeds _ ->
({ model
| view_state = Feeds feeds showArchived}
- , Cmd.none)
+ , getFeeds showArchived)
_ -> ( model
, Cmd.none)
FeedItemReadResponse result ->
@@ -661,8 +670,14 @@ update msg model =
, deleteFeed <| UUID.toString id)
FeedDeleted result ->
case result of
- Ok _ -> ( model
- , getFeeds)
+ Ok _ ->
+ case model.view_state of
+ Feeds _ archived ->
+ ( model
+ , getFeeds archived)
+ _ ->
+ ( model
+ , Cmd.none)
Err error -> ( { model | view_state = ShowError (errToString error) }
, Cmd.none)
diff --git a/resources/sql/reader-fns.sql b/resources/sql/reader-fns.sql
index 2e80ab2..991e059 100644
--- a/resources/sql/reader-fns.sql
+++ b/resources/sql/reader-fns.sql
@@ -10,7 +10,7 @@ SELECT fs.id, fs.name, fs.url,
json_agg(row_to_json(fi.*)) as "items"
FROM blog.feed_subscription fs
JOIN blog.Users u ON u.ID = fs.owner
-LEFT JOIN blog.feed_item fi ON fs.id = fi.feed
+LEFT JOIN blog.feed_item fi ON (fs.id = fi.feed AND (read_at is null OR $2))
WHERE owner = $1
GROUP BY fs.id, u.username, u.nickname, u.img_location
ORDER BY fs.name;
diff --git a/src/routes/rss-reader-routes.lisp b/src/routes/rss-reader-routes.lisp
index 09ef057..efa9902 100644
--- a/src/routes/rss-reader-routes.lisp
+++ b/src/routes/rss-reader-routes.lisp
@@ -13,12 +13,14 @@
:method :get
:decorators (@json
@transaction
- @authenticated)) ()
- (assert (not (null *user*)))
- (assert (not (null (gethash "id" *user*))))
-
- (let ((feeds (or (get-user-feeds (gethash "id" *user*)) #())))
- (com.inuoe.jzon:stringify feeds)))
+ @authenticated))
+ (&get archived)
+ (let ((archived (string= archived "archived")))
+ (assert (not (null *user*)))
+ (assert (not (null (gethash "id" *user*))))
+
+ (let ((feeds (or (get-user-feeds (gethash "id" *user*) archived) #())))
+ (com.inuoe.jzon:stringify feeds))))
(defroute updater-metadata ("/api/user/feeds/meta" :method :get
:decorators (@json
diff --git a/src/rss/reader-db.lisp b/src/rss/reader-db.lisp
index e474ac4..c4f74b1 100644
--- a/src/rss/reader-db.lisp
+++ b/src/rss/reader-db.lisp
@@ -14,8 +14,8 @@
(com.inuoe.jzon:parse (gethash key hashmap)))
hashmap)
-(defun get-user-feeds (user-id)
- (let* ((feeds (coerce (get-user-feeds* user-id) 'list))
+(defun get-user-feeds (user-id archived?)
+ (let* ((feeds (coerce (get-user-feeds* user-id archived?) 'list))
(fixed-feeds
(mapcar (compose (partial #'parse "items")
(partial #'parse "creator"))