[feature] Add opt-in RSS feed for account's latest Public posts (#897)

* start adding rss functionality

* add gorilla/feeds dependency

* first bash at building rss feed
still needs work, this is an interim commit

* tidy up a bit

* add publicOnly option to GetAccountLastPosted

* implement rss endpoint

* fix test

* add initial user docs for rss

* update rss logo

* docs update

* add rssFeed to frontend

* feed -> feed.rss

* enableRSS

* increase rss logo size a lil bit

* add rss toggle

* move emojify to text package

* fiddle with rss feed formatting

* add Text field to test statuses

* move status to rss item to typeconverter

* update bun schema for enablerss

* simplify 304 checking

* assume account not rss

* update tests

* update swagger docs

* allow more characters in title, trim nicer

* update last posted to be more consistent
This commit is contained in:
tobi 2022-10-08 14:00:39 +02:00 committed by GitHub
commit 80663061d8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
58 changed files with 2282 additions and 211 deletions

18
web/assets/rss.svg Normal file
View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="128px" height="128px" id="RSSicon" viewBox="0 0 256 256">
<defs>
<linearGradient x1="0.085" y1="0.085" x2="0.915" y2="0.915" id="RSSg">
<stop offset="0.0" stop-color="#E3702D"/><stop offset="0.1071" stop-color="#EA7D31"/>
<stop offset="0.3503" stop-color="#F69537"/><stop offset="0.5" stop-color="#FB9E3A"/>
<stop offset="0.7016" stop-color="#EA7C31"/><stop offset="0.8866" stop-color="#DE642B"/>
<stop offset="1.0" stop-color="#D95B29"/>
</linearGradient>
</defs>
<rect width="256" height="256" rx="55" ry="55" x="0" y="0" fill="#CC5D15"/>
<rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/>
<rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#RSSg)"/>
<circle cx="68" cy="189" r="24" fill="#FFF"/>
<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>
<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -220,5 +220,15 @@ main {
}
#recent {
margin-left: 1rem;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
margin: 1rem;
.rsslogo {
width: 1.45em;
height: 1.45em;
object-fit: contain;
vertical-align: middle;
}
}

View file

@ -49,7 +49,7 @@ module.exports = function ({ apiCall, getChanges }) {
},
updateProfile: function updateProfile() {
const formKeys = ["display_name", "locked", "source", "custom_css", "source.note"];
const formKeys = ["display_name", "locked", "source", "custom_css", "source.note", "enable_rss"];
const renamedKeys = {
"source.note": "note"
};

View file

@ -96,7 +96,11 @@ module.exports = function UserProfile() {
/>
<Checkbox
id="locked"
name="Manually approve follow requests? "
name="Manually approve follow requests"
/>
<Checkbox
id="enable_rss"
name="Enable RSS feed of Public posts"
/>
{ !allowCustomCSS ? null :
<TextArea

View file

@ -27,7 +27,12 @@
<div class="entry">Posted <b>{{.account.StatusesCount}}</b></div>
</div>
</div>
<h2 id="recent">Latest public toots</h2>
<h2 id="recent">
<span>Latest public toots</span>
{{ if .rssFeed }}
<a href="{{ .rssFeed }}"><img class="rsslogo" src="/assets/rss.svg" alt="The orange RSS logo."/></a>
{{ end }}
</h2>
{{ if not .statuses }}
<div data-nosnippet class="nothinghere">Nothing here!</div>
{{ else }}