From 4aee13abb5406e02751f62c750f7965cf6a07ce6 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Sun, 29 Sep 2019 22:28:14 +0200 Subject: [PATCH] Add bookmark tags as RSS categories --- src/Handler/Notes.hs | 1 + src/Handler/User.hs | 22 +++++++++++++++++----- stack.yaml | 7 ++++--- stack.yaml.lock | 7 +++++++ 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/Handler/Notes.hs b/src/Handler/Notes.hs index c5cd40d..2b4fa00 100644 --- a/src/Handler/Notes.hs +++ b/src/Handler/Notes.hs @@ -153,6 +153,7 @@ noteToRssEntry usernamep (Entity entryId entry) = , feedEntryTitle = (noteTitle entry) , feedEntryContent = (toHtml (noteText entry)) , feedEntryEnclosure = Nothing + , feedEntryCategories = [] } getNotesFeedR :: UserNameP -> Handler RepRss diff --git a/src/Handler/User.hs b/src/Handler/User.hs index 7afe970..d6f882b 100644 --- a/src/Handler/User.hs +++ b/src/Handler/User.hs @@ -7,6 +7,7 @@ import Import import Text.Blaze.Html (toHtml) import qualified Text.Blaze.Html5 as H import Yesod.RssFeed +import qualified Database.Esqueleto as E getUserR :: UserNameP -> Handler Html getUserR uname@(UserNameP name) = do @@ -65,15 +66,23 @@ _getUser unamep@(UserNameP uname) sharedp' filterp' (TagsP pathtags) = do PS['Main'].renderBookmarks('##{rawJS renderEl}')(app.dat.bmarks)(); |] -bookmarkToRssEntry :: Entity Bookmark -> FeedEntry Text -bookmarkToRssEntry (Entity entryId entry) = +bookmarkToRssEntry :: (Entity Bookmark,[Text]) -> FeedEntry Text +bookmarkToRssEntry ((Entity entryId entry), tags) = FeedEntry { feedEntryLink = (bookmarkHref entry) , feedEntryUpdated = (bookmarkTime entry) , feedEntryTitle = (bookmarkDescription entry) , feedEntryContent = (toHtml (bookmarkExtended entry)) + , feedEntryCategories = map (EntryCategory Nothing Nothing) tags , feedEntryEnclosure = Nothing } +toBookmarkWithTagsList :: [Entity Bookmark] -> [Entity BookmarkTag] -> [(Entity Bookmark, [Text])] +toBookmarkWithTagsList bs as = do + b <- bs + let bid = E.entityKey b + let btags = filter ((==) bid . bookmarkTagBookmarkId . E.entityVal) as + pure $ (b, map (bookmarkTagTag . E.entityVal) btags) + getUserFeedR :: UserNameP -> Handler RepRss getUserFeedR unamep@(UserNameP uname) = do mauthuname <- maybeAuthUsername @@ -83,14 +92,17 @@ getUserFeedR unamep@(UserNameP uname) = do queryp = "query" :: Text isowner = maybe False (== uname) mauthuname mquery <- lookupGetParam queryp - (_, bmarks) <- + (_, bmarks, alltags) <- runDB $ do Entity userId user <- getBy404 (UniqueUserName uname) when (not isowner && userPrivacyLock user) (redirect (AuthR LoginR)) - bookmarksQuery userId SharedPublic FilterAll [] mquery limit page + (cnt, bm) <- bookmarksQuery userId SharedPublic FilterAll [] mquery limit page + tg <- tagsQuery bm + pure (cnt, bm, tg) let (descr :: Html) = toHtml $ H.text ("Bookmarks saved by " <> uname) - entries = map bookmarkToRssEntry bmarks + entriesWithTags = toBookmarkWithTagsList bmarks alltags + entries = map bookmarkToRssEntry entriesWithTags updated <- case maximumMay (map feedEntryUpdated entries) of Nothing -> liftIO $ getCurrentTime Just m -> return m diff --git a/stack.yaml b/stack.yaml index 7d703ab..ef3310a 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,9 +1,10 @@ resolver: lts-14.3 # allow-newer: true -extra-deps: +packages: +- '.' +extra-deps: - ekg-0.4.0.15 - ekg-json-0.1.0.6 - monad-metrics-0.2.1.4 - wai-middleware-metrics-0.2.4 -packages: -- '.' +- yesod-newsfeed-1.7.0.0 diff --git a/stack.yaml.lock b/stack.yaml.lock index cfbc8df..29f8f6b 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -32,6 +32,13 @@ packages: sha256: 99366b831109417cd8e739fb45e9fd214cb79f28a507f8154e5528120042d0ac original: hackage: wai-middleware-metrics-0.2.4 +- completed: + hackage: yesod-newsfeed-1.7.0.0@sha256:ba49f9af47fe96c521ed889bf041c559b4bddb60a81f385449f7557f8f4aaef2,1345 + pantry-tree: + size: 488 + sha256: 96027436cc6dc07bca3f691f2d17a5b3993e980f73076c7b1b4d9c5c3ac5cb86 + original: + hackage: yesod-newsfeed-1.7.0.0 snapshots: - completed: size: 523878