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"))