diff --git a/App/ApiTransform.js b/App/ApiTransform.js index a7dc94a..3e9c5b4 100644 --- a/App/ApiTransform.js +++ b/App/ApiTransform.js @@ -23,9 +23,11 @@ var TransSchemas = { var ApiSchema = { __All__: { - ServerSoftware: { //TODO: Handle this in JsonTransform - //Mastodon: {__Set__: "Mastodon"}, - //Misskey: {__Set__: "Misskey"}, + //ServerId: { + // __All__: "id", + //}, + // NOTE: objects that embed cross-server data (e.g. a renote), might get this value assigned wrong for our needs (???) + ServerSoftware: { __All__: {__EvalSet__: "TypeOld"}, }, }, @@ -70,6 +72,9 @@ var ApiSchema = { Mastodon: {__OldOr__: ["display_name", "title"]}, Misskey: "name", }, + //ServerUsername: { + // __All__: "username", + //}, Type: { // user, bot, group, channel:[normal, server] Mastodon: {__EvalSet__: ` if (TreeOld.bot) 'Bot'; @@ -90,12 +95,13 @@ var ApiSchema = { var ApiEndpoints = { FetchNotes: { Mastodon(Profile) { - return `GET api/v1/accounts/${Profile.Id}/statuses`; + // Must actually get the id by calling GET api/v1/accounts/lookup?acct=USERNAME, the provided one is glitchy + return `GET api/v1/accounts/${Profile.__TreeOld__.id}/statuses`; }, Misskey(Profile) { return { - Method: "POST api/users/show", - Data: {"username": Profile.Id}, + Method: "POST api/users/notes", + Data: {"userId": Profile.Id}, }; }, }, @@ -112,12 +118,36 @@ var ApiEndpoints = { }, }; +var WebEndpoints = { + Note: { + Misskey(Note) { + //return `SERVER_URL/notes/${Note.ServerId}`; + return `SERVER_URL/notes/${Note.__TreeOld__.id}`; + }, + }, + Profile: { + Misskey(Profile) { + var Host = Profile.__TreeOld__.host; + //return `SERVER_URL/@${Profile.ServerUsername}`; + return `SERVER_URL/@${Profile.__TreeOld__.username}`; + }, + }, +}; + function ApiTransform(Data, FromSource, DestType) { var DataFinal = JsonTransformB(Data, ApiSchema, ApiSchema[DestType], FromSource); LogDebug([Data, DestType, FromSource, DataFinal]); return DataFinal; }; +function GetWebUrl(Data, Type) { + return (TryStr(Data.Url) + ? Data.Url + : WebEndpoints[Type][Data.ServerSoftware](Data) + ); + //return Data.Url || WebEndpoints[Type][Data.ServerSoftware](Data); +}; + /* var TransParsers = { Mastodon: { diff --git a/App/Main.js b/App/Main.js index 84551eb..f4e2a87 100644 --- a/App/Main.js +++ b/App/Main.js @@ -13,8 +13,8 @@ Present.__Set__ = function __Set__() { }; var ApiCache = { - __Store__(Data, Path/*Key, Where*/) { - eval(`ApiCache.${Path} = Data;`); + __Store__(Data, Path) { + eval(`ApiCache${JPath(Path)} = Data;`); }, __UrlStore__(Data) { ApiCache.__Store__(Data, `Urls['${Data.Url}']`); @@ -92,7 +92,7 @@ function HtmlAssignPropper(El, Data) { var Val = eval(`Data.${Toks[1]}`); if (Val !== undefined) { if (Key === 'src') { - Val = MkUrl(Val); + Val = MkReqUrl(Val); }; El[Key] = Val; }; @@ -115,12 +115,11 @@ function TransNetCall(Data, FromSource, DestType, Proc) { function DisplayProfile(Profile) { Profile = UrlObj(Profile, DisplayProfile); - //if (Profile) { + if (Profile) { var Window = MkWindow({className: "Profile"}); Window.innerHTML += Templating.ViewProfile(Profile); - // TODO: Handle fetching notes of non-standard profiles like servers timelines DoAsync(FetchNotes, FillTimeline, Profile); - //}; + }; }; function FetchNotes(Profile, Proc) { @@ -158,7 +157,8 @@ function FillTimeline(Notes) { }; function DisplayThread(Note) { - + var Window = MkWindow({className: "Thread"}); + //Window.innerHTML += Templating.ViewNote(Note); }; function FillHome() { @@ -171,13 +171,7 @@ function FillHome() { ApiCache.Urls[Profile.Url] = Profile; var Rnd = RndHtmlId(); Window.querySelector('ul').innerHTML += `