diff --git a/fedi.cabal b/fedi.cabal index 475a003..0f0bb1f 100644 --- a/fedi.cabal +++ b/fedi.cabal @@ -53,6 +53,7 @@ library DeriveAnyClass DerivingStrategies DuplicateRecordFields + NoFieldSelectors executable fedi import: warnings diff --git a/src/Fedi/Activity.hs b/src/Fedi/Activity.hs index 6b3c856..cd259b6 100644 --- a/src/Fedi/Activity.hs +++ b/src/Fedi/Activity.hs @@ -1,6 +1,5 @@ module Fedi.Activity where -import Data.Maybe (listToMaybe) import Data.Aeson qualified as A import Data.Text qualified as T import Fedi.Types @@ -14,6 +13,10 @@ data Activity , object :: Object } +activityUrl :: Activity -> ActivityUrl +activityUrl = \case + create@Create{} -> create.id + type ActivityUrl = Url data Object @@ -52,6 +55,8 @@ data Collection order a = Collection { summary :: String , items :: [a] + , first :: Maybe Url + , last :: Maybe Url } instance A.ToJSON Note where @@ -95,8 +100,8 @@ instance A.ToJSON a => A.ToJSON (Collection Ordered a) where , "summary" A..= collection.summary , "totalItems" A..= length collection.items , "orderedItems" A..= collection.items - , "first" A..= listToMaybe (take 1 collection.items) - , "last" A..= listToMaybe (take 1 $ reverse collection.items) + , "first" A..= collection.first + , "last" A..= collection.last ] instance A.ToJSON a => A.ToJSON (Collection Unordered a) where @@ -109,8 +114,8 @@ instance A.ToJSON a => A.ToJSON (Collection Unordered a) where , "summary" A..= collection.summary , "totalItems" A..= length collection.items , "items" A..= collection.items - , "first" A..= listToMaybe (take 1 collection.items) - , "last" A..= listToMaybe (take 1 $ reverse collection.items) + , "first" A..= collection.first + , "last" A..= collection.last ] instance A.ToJSON a => A.ToJSON (OrderedCollectionPage a) where diff --git a/src/Fedi/Routes.hs b/src/Fedi/Routes.hs index fd3812e..7c0130c 100644 --- a/src/Fedi/Routes.hs +++ b/src/Fedi/Routes.hs @@ -1,5 +1,6 @@ module Fedi.Routes where +import Data.Maybe (listToMaybe) import Web.Twain qualified as Twain import Web.Twain.Types qualified as Twain import Data.String (fromString) @@ -91,6 +92,8 @@ handleOutbox details items = do Collection { summary = details.username <> "'s notes" , items = items + , first = Just $ outboxUrl <> "?page=true" + , last = Nothing } in A.encode content Twain.send $ jsonLD response