make statuses, images, videos work

This commit is contained in:
fenwick67 2019-07-31 14:48:51 -04:00
parent c48fdfd7ec
commit eae453813d
3 changed files with 45 additions and 16 deletions

View File

@ -95,7 +95,7 @@ app.get('/apiv2/feed',cors(),function(req,res){
res.send('You need to specify a user URL'); res.send('You need to specify a user URL');
} }
var feedUrl = req.query.feedUrl; var feedUrl = req.query.feedurl;
var opts = {}; var opts = {};
if (req.query.size){ if (req.query.size){
@ -140,7 +140,7 @@ app.get('/apiv2/feed',cors(),function(req,res){
res.status(500); res.status(500);
res.send('Error fetching or parsing your feed.'); res.send('Error fetching or parsing your feed.');
// TODO log the error // TODO log the error
console.error(er); console.error(er,er.stack);
}) })
}) })

View File

@ -41,13 +41,11 @@ module.exports = async function (opts) {
var feed = await apGet(feedUrl); var feed = await apGet(feedUrl);
var items = itemsForFeed(feed);
var templateData = { var templateData = {
opts: opts,// from the request opts: opts,// from the request
meta: metaForUser(user), meta: metaForUser(user),
items: itemsForFeed(feed), items: itemsForFeed(user,feed),
nextPageLink: getNextPage(user,feed), nextPageLink: getNextPage(opts,user,feed),
isIndex: isIndex isIndex: isIndex
}; };
@ -65,29 +63,60 @@ function metaForUser(user) {
} }
// TODO make function // TODO make function
function itemsForFeed(feed) { function itemsForFeed(user,feed) {
return feed.orderedItems.map((item)=>{
return feed.orderedItems.filter((item)=>{
// this is temporary, don't handle boosts
return item.type == "Create" && item.object && item.object.type=="Note";
}).map((item)=>{
//needs to be { type, url }
var enclosures = (item.object.attachment||[]).filter((a)=>{
return a.type == "Document";
}).map((a)=>{
return {
type:a.mediaType,
url:a.url
}
});
return { return {
isBoost:false, isBoost:false,
title:'', title:'New Status by '+user.preferredUsername,
isReply:!!(item.object && item.object.inReplyTo), isReply:!!(item.object && item.object.inReplyTo),
hasCw:false, hasCw:false,
cw:'', cw:'',
content: item.object&&item.object.content?item.object.content:'',//TODO sanitize then render without entity escapes
atomHref:item.published?item.published.replace(/\W+/g,''):Math.random().toString().replace('.',''), atomHref:item.published?item.published.replace(/\W+/g,''):Math.random().toString().replace('.',''),
enclosures:[],//type, url enclosures:enclosures,
stringDate:item.published?getTimeDisplay(Date.parse(item.published)):'', stringDate:item.published?getTimeDisplay(Date.parse(item.published)):'',
author:{ author:{
uri:'',// link to author page uri:user.url,// link to author page
avatar:'',// url of av avatar:user.icon&&user.icon.url?user.icon.url:'',
fullName:'',// display name displayName:user.name,
fullName:user.preferredUsername+'@'+(new URL(user.url).hostname),
} }
} }
}) })
} }
// TODO // TODO
function getNextPage(user,feed){ function getNextPage(opts,user,feed){
return null; //based on feed.next
// take feed.next, uriencode it, then take user url, then take options.mastofeedUrl
var base = opts.mastofeedUrl.slice(0,opts.mastofeedUrl.indexOf('?'));
var ret = '/apiv2/feed?userurl=' + encodeURIComponent(opts.userUrl) + '&feedurl=' +encodeURIComponent(feed.next);
// add other params to the end
(['theme','header','size','boosts','replies']).forEach((k)=>{
if (typeof opts[k] != 'undefined'){
ret+=`&${k}=${ opts[k].toString() }`;
}
})
return ret;
} }

View File

@ -32,7 +32,7 @@
<%= meta.title %> <%= meta.title %>
</a> </a>
<br> <br>
<%= meta.description %> <%- meta.description %>
</div> </div>
</div> </div>
</div> </div>