1
0
Fork 0
mirror of https://code.naskya.net/repos/ndqEd synced 2025-01-26 23:07:50 +09:00
vervis/src/Vervis/ChangeFeed.hs
fr33domlover 2e72684fd5 Switch to new actor layout
This is such a huge patch, it's probably impossible to tell what it does by
looking at the code. One thing is clear: It changes *everything* :P so here's
an overview:

- There are now 5 types of actors, each having its own top-level route
- So projects, repos, etc. are no longer "under" sharers
- Actor routes are now based on their KeyHashid, there are no "idents" anymore,
  i.e. URLs look random and don't contain user or repo names
- No sharers anymore; people and groups are distinct entities not sharing a
  common namespace or anything like that
- Project has been renamed to Deck and it simply means a ticket tracker; repos
  are no longer "under" projects
- In addition to Person, Group, Repo and Deck, there's a new actor type Loom,
  which is a patch tracker; i.e. Repo actors don't manage MRs anymore
- All C2S and S2S is temporarily disabled, because huge changes to the whole
  code are required and I'll do them gradually in the next patches
- Since form-based actions are implemented using C2S, they're disabled as well,
  so Vervis is now essentially read-only
- Some views have been temporarily removed, e.g. repo history and commit view
- A huge set of DB migrations has been added to adapt the DB to these changes;
  I haven't tested them yet on a read DB so there may be errors there; I'll fix
  them in the next patches if I find any (probably going to test on the main
  instance where Vervis itself is hosted...)
- Some modules got tech upgrades, e.g. LocalActor became a higher-kinded type
  and a similar pattern is probably relevant for several other types
- There's an 'Actor' entity in the DB schema now, and all 5 actor types use it
  for common things like inbox and outbox
- Although inbox and outbox are used only by Actor, so essentially could be
  removed, I haven't removed them; that's because I wonder if at some point
  users can have a tree of inboxes much like in email; I don't have an excuse
  for Outbox, but anyway, leaving them as is for now
- Workflows, roles and collaborators are partially removed/unused until I
  figure out a sane federated way to provide these features
- Since repo routes don't contain a "sharer" anymore, SSH URIs are now simpler,
  they already look like user@host/repo regardless of who "controls" that repo
2022-08-15 13:57:42 +00:00

75 lines
2.2 KiB
Haskell

{- This file is part of Vervis.
-
- Written in 2018, 2020, 2022 by fr33domlover <fr33domlover@riseup.net>.
-
- ♡ Copying is an act of love. Please copy, reuse and share.
-
- The author(s) have dedicated all copyright and related and neighboring
- rights to this software to the public domain worldwide. This software is
- distributed without any warranty.
-
- You should have received a copy of the CC0 Public Domain Dedication along
- with this software. If not, see
- <http://creativecommons.org/publicdomain/zero/1.0/>.
-}
module Vervis.ChangeFeed
( changeFeed
)
where
import Data.Monoid ((<>))
import Data.Text (Text)
import Yesod.Core (Route)
import Yesod.Feed
import qualified Data.Text as T (concat)
import Yesod.Hashids
import Vervis.Changes
import Vervis.Foundation
import Vervis.Model
import Development.PatchMediaType
changeEntry :: KeyHashid Repo -> LogEntry -> FeedEntry (Route App)
changeEntry rp le = FeedEntry
{ feedEntryLink = RepoCommitR rp $ leHash le
, feedEntryUpdated = fst $ leTime le
, feedEntryTitle = leMessage le
, feedEntryContent = mempty
, feedEntryEnclosure = Nothing
}
changeFeed
:: KeyHashid Repo -- ^ Repo key
-> Maybe Text -- ^ Optional branch name
-> VersionControlSystem -- ^ To pick VCS specific terms
-> [LogEntry] -- ^ Changes, recent first
-> Feed (Route App)
changeFeed repo mbranch vcs les = Feed
{ feedTitle = T.concat
[ keyHashidText repo
, case mbranch of
Nothing -> ""
Just b -> ":" <> b
, " "
, case vcs of
VCSDarcs -> "Patches"
VCSGit -> "Commits"
]
, feedLinkSelf =
case mbranch of
Nothing -> RepoCommitsR repo
Just b -> RepoBranchCommitsR repo b
, feedLinkHome =
case mbranch of
Nothing -> RepoCommitsR repo
Just b -> RepoBranchCommitsR repo b
, feedAuthor = keyHashidText repo
, feedDescription = mempty
, feedLanguage = "en"
, feedUpdated = fst $ leTime $ head les
, feedLogo = Nothing
, feedEntries = map (changeEntry repo) les
}