2023-04-19 12:18:14 +02:00
|
|
|
var CurrTasks = {};
|
2023-04-19 00:16:35 +02:00
|
|
|
|
|
|
|
var CurrentTimeline = [];
|
|
|
|
var CurrentTimelineExp = 0;
|
|
|
|
|
|
|
|
function LogDebug(Data, Status) {
|
|
|
|
if (Debug) {
|
|
|
|
for (var i=0; i<Data.length; i++) {
|
|
|
|
try {
|
|
|
|
Data[i] = JSON.parse(Data[i]);
|
|
|
|
} catch(_){};
|
|
|
|
};
|
|
|
|
console[{l: "log", e: "error"}[Status]](Data);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2023-04-19 12:18:14 +02:00
|
|
|
function WaitTasks(First, Then, Data) {
|
|
|
|
var Run = RndId();
|
|
|
|
CurrTasks[Run] = {Remains: 0};
|
|
|
|
ForceList(First).forEach(function(Fun, Data){
|
|
|
|
var Task = RndId();
|
|
|
|
var Proc = [Run, Task];
|
|
|
|
CurrTasks[Run].Remains += 1;
|
|
|
|
Data ? Fun(Proc, Data) : Fun(Proc);
|
|
|
|
});
|
|
|
|
CurrTasks[Run].Interval = setInterval(function(Run, Then){
|
|
|
|
if (CurrTasks[Run].Remains === 0) {
|
|
|
|
clearInterval(CurrTasks[Run].Interval);
|
|
|
|
ForceList(Then).forEach(function(Fun){
|
|
|
|
Fun(CurrTasks[Run].Result);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
}, 50, Run, Then);
|
|
|
|
};
|
|
|
|
|
|
|
|
function HttpCodeGood(Code) {
|
|
|
|
var Unit = String(Code)[0];
|
|
|
|
if (['1', '2', '3'].includes(Unit)) {
|
|
|
|
return true;
|
|
|
|
} else
|
|
|
|
if (['4', '5'].includes(Unit)) {
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
function ApiCall(Data, Proc) {
|
2023-04-19 00:16:35 +02:00
|
|
|
// Data = {Target: "Friendica", Method: "...", Data: {}, Call: (), CallFine: (), CallFail: ()}
|
|
|
|
var Req = new XMLHttpRequest();
|
2023-04-19 12:18:14 +02:00
|
|
|
Req.Proc = Proc;
|
2023-04-19 00:16:35 +02:00
|
|
|
Req.onloadend = function(){
|
2023-04-19 12:18:14 +02:00
|
|
|
var Status = String(this.status);
|
|
|
|
if (Data.Call) {
|
|
|
|
Data.Call(this);
|
|
|
|
}
|
|
|
|
if (HttpCodeGood(this.status)) {
|
|
|
|
if (Data.CallFine) {
|
|
|
|
Data.CallFine(this);
|
|
|
|
};
|
|
|
|
LogDebug([this.status, this.responseText], 'l');
|
|
|
|
} else {
|
|
|
|
if (Data.CallFail) {
|
|
|
|
Data.CallFail(this);
|
2023-04-19 00:16:35 +02:00
|
|
|
};
|
2023-04-19 12:18:14 +02:00
|
|
|
LogDebug([this.status, this.responseText], 'e');
|
|
|
|
};
|
2023-04-19 00:16:35 +02:00
|
|
|
};
|
|
|
|
if (Data.Target == 'Mastodon') {
|
|
|
|
Req.open('GET', `${MastodonUrl}/api/v1/${Data.Method}`, true);
|
|
|
|
};
|
|
|
|
if (Data.Target == 'Friendica') {
|
|
|
|
Req.open('GET', `${FriendicaUrl}/api/${Data.Method}.json`, true);
|
|
|
|
Req.setRequestHeader('Authorization', `Basic ${btoa(FriendicaCredentials)}`);
|
|
|
|
};
|
|
|
|
Req.send();
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
function MastodonParse(Data, Type) {
|
|
|
|
var Trans = {
|
|
|
|
Status(Data) {
|
|
|
|
return JsonTranslate(Data, TransSchemas.Mastodon.Status);
|
|
|
|
},
|
|
|
|
}
|
|
|
|
return Trans[Type](Data);
|
|
|
|
};
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
function DisplayMastodonTimeline(Timeline) {
|
|
|
|
ApiCall({Target: "Mastodon", Method: Timeline, CallFine: function(Res){
|
|
|
|
DataView.innerHTML = Res.responseText;
|
|
|
|
JSON.parse(DataView.innerHTML).forEach(function(Item){
|
|
|
|
TimelineView.innerHTML += `<div class=PostView>
|
|
|
|
<a href="${Item.external_url}">${Item.created_at}</a>
|
|
|
|
${Item.friendica_author.url}
|
|
|
|
${Item.friendica_html}
|
|
|
|
</div>`;
|
|
|
|
});
|
|
|
|
}});
|
|
|
|
};
|
|
|
|
*/
|
|
|
|
|
|
|
|
function DisplayFriendicaTimeline(Timeline) {
|
|
|
|
ApiCall({Target: "Friendica", Method: Timeline, CallFine: function(Res){
|
|
|
|
DataView.innerHTML = Res.responseText;
|
|
|
|
JSON.parse(DataView.innerHTML).forEach(function(Item){
|
|
|
|
var Title = Item.friendica_title ? `<h2>${Item.friendica_title}</h2>` : '';
|
|
|
|
TimelineView.innerHTML += `<div class=PostView>
|
|
|
|
<a href="${Item.external_url}">${Item.created_at}</a>
|
|
|
|
${Item.friendica_author.url}
|
|
|
|
${Title}
|
|
|
|
${Item.friendica_html}
|
|
|
|
</div>`;
|
|
|
|
});
|
|
|
|
}});
|
|
|
|
};
|
|
|
|
|
2023-04-19 12:18:14 +02:00
|
|
|
function FetchMastodon(Proc) {
|
2023-04-19 00:16:35 +02:00
|
|
|
return ApiCall({Target: "Mastodon", Method: "timelines/public", CallFine: function(Res){
|
|
|
|
//console.log(JSON.parse(Res.responseText)[0])
|
2023-04-19 12:18:14 +02:00
|
|
|
var New = [ TransParsers.Mastodon.Status( JSON.parse(Res.responseText)[0] ) ];
|
|
|
|
console.log(New)
|
2023-04-19 00:16:35 +02:00
|
|
|
//return [
|
|
|
|
// TransParsers.Mastodon.Status(JSON.parse(Res.responseText)[0])
|
|
|
|
//];
|
2023-04-19 12:18:14 +02:00
|
|
|
//CurrentTimeline = CurrentTimeline.concat([TransParsers.Mastodon.Status(JSON.parse(Res.responseText)[0])]);
|
|
|
|
//CurrentTimelineExp -= 1;
|
|
|
|
CurrTasks[Res.Proc[0]].Remains -= 1;
|
|
|
|
// TODO: store data in global object
|
|
|
|
CurrTasks[Res.Proc[0]].Result = New;
|
|
|
|
}}, Proc);
|
2023-04-19 00:16:35 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
function FillTimeline(Notes) {
|
|
|
|
console.log('notes', Notes)
|
|
|
|
Notes.forEach(function(Note){
|
|
|
|
TimelineView.innerHTML += `<div class=PostView>
|
|
|
|
<a href="${Note.Url}">${Note.Time}</a>
|
|
|
|
${Note.Author}
|
|
|
|
${Note.Content}
|
|
|
|
</div>`;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
PlazasView.innerHTML = `
|
|
|
|
<div>
|
|
|
|
<h3>Featured</h3>
|
|
|
|
<ul>
|
|
|
|
<li onclick="DisplayFriendicaTimeline('statuses/networkpublic_timeline');">Federation</li>
|
|
|
|
<li onclick="DisplayFriendicaTimeline('statuses/public_timeline');">${FriendicaUrl}</li>
|
2023-04-19 12:18:14 +02:00
|
|
|
<li onclick="WaitTasks(FetchMastodon, FillTimeline);">${MastodonUrl}</li>
|
2023-04-19 00:16:35 +02:00
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<div>
|
|
|
|
<h3>Categories</h3>
|
|
|
|
<ul>
|
|
|
|
<li>Testing</li>
|
|
|
|
<li>#fediverse</li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
`;
|