(Info
s) Add KitsuDev
and change Speedrun.com
This commit is contained in:
parent
a4496117f8
commit
a1827a31e9
7 changed files with 84 additions and 9 deletions
|
@ -27,6 +27,7 @@
|
|||
<a rel="me" href="https://libre.fm/user/Taevas">Libre.fm</a>
|
||||
<a rel="me" href="https://beehaw.org/u/Taevas">Beehaw (Lemmy)</a>
|
||||
<a rel="me" href="https://kitsunes.club/@taevas">KitsuClub (Sharkey)</a>
|
||||
<a rel="me" href="https://kitsunes.dev/Taevas">KitsuDev (Forgejo)</a>
|
||||
<a rel="me" href="https://musicbrainz.org/user/Taevas">MusicBrainz</a>
|
||||
<a rel="me" href="https://listenbrainz.org/user/Taevas">ListenBrainz</a>
|
||||
</span>
|
||||
|
|
|
@ -3,13 +3,13 @@ import {api} from "./shared/api.js";
|
|||
import {type HacktheboxInfo} from "#Infos/Hacking/Hackthebox.js";
|
||||
|
||||
const handler: Handler = async () => {
|
||||
const hackthebox: {profile: {activity: HacktheboxInfo[]}} = await api<{
|
||||
const hackthebox = await api<{
|
||||
profile: {
|
||||
activity: HacktheboxInfo[];
|
||||
};
|
||||
}>("https://www.hackthebox.com/api/v4/profile/activity/1063999");
|
||||
|
||||
const pwn = hackthebox.profile.activity.find((a: HacktheboxInfo) => a!.object_type === "machine");
|
||||
const pwn = hackthebox.profile.activity.find((a: HacktheboxInfo) => a?.object_type === "machine");
|
||||
if (!pwn) {
|
||||
return {
|
||||
statusCode: 404,
|
||||
|
|
26
netlify/functions/kitsudev.ts
Normal file
26
netlify/functions/kitsudev.ts
Normal file
|
@ -0,0 +1,26 @@
|
|||
import {type Handler} from "@netlify/functions";
|
||||
import {api} from "./shared/api.js";
|
||||
import { type KitsudevInfo } from "#Infos/Coding/KitsuDev.js";
|
||||
|
||||
const handler: Handler = async () => {
|
||||
const kitsudev = await api<[{
|
||||
repo: {
|
||||
full_name: string
|
||||
html_url: string
|
||||
}
|
||||
created: string
|
||||
}]>("https://kitsunes.dev/api/v1/users/Taevas/activities/feeds?limit=1");
|
||||
|
||||
const info: KitsudevInfo = {
|
||||
name: kitsudev[0].repo.full_name,
|
||||
url: kitsudev[0].repo.html_url,
|
||||
date: kitsudev[0].created
|
||||
};
|
||||
|
||||
return {
|
||||
statusCode: 200,
|
||||
body: JSON.stringify(info),
|
||||
};
|
||||
};
|
||||
|
||||
export {handler};
|
|
@ -84,6 +84,10 @@ const handler: Handler = async () => {
|
|||
video: data.run.videos.links.at(0)?.uri,
|
||||
};
|
||||
|
||||
while (run.time.startsWith("0") || run.time.startsWith(":")) {
|
||||
run.time = run.time.substring(1);
|
||||
}
|
||||
|
||||
return {
|
||||
statusCode: 200,
|
||||
body: JSON.stringify(run),
|
||||
|
|
37
src/Infos/Coding/KitsuDev.tsx
Normal file
37
src/Infos/Coding/KitsuDev.tsx
Normal file
|
@ -0,0 +1,37 @@
|
|||
import React, {useState, useEffect} from "react";
|
||||
import Website from "../Website.js";
|
||||
import DataHandler from "#Infos/DataHandler.js";
|
||||
import Link from "#parts/Link.js";
|
||||
|
||||
export type KitsudevInfo = {
|
||||
name: string
|
||||
url: string
|
||||
date: string;
|
||||
} | undefined;
|
||||
|
||||
export default function KitsuDev() {
|
||||
const {data, error, setError} = DataHandler<KitsudevInfo>("/.netlify/functions/kitsudev", 60 * 20);
|
||||
const [elements, setElements] = useState([] as React.JSX.Element[]);
|
||||
|
||||
useEffect(() => {
|
||||
if (data) {
|
||||
try {
|
||||
setElements([
|
||||
<p key={"kitsudev-date"}>Latest activity: <strong>{data.date.substring(0, data.date.indexOf("T"))}</strong></p>,
|
||||
<Link key={"kitsudev-link"} classes="mt-1 px-1 py-2 inline-block w-full font-bold leading-[18px] bg-white text-blue-800" link={data.url} text={data.name}/>
|
||||
]);
|
||||
} catch {
|
||||
setError(true);
|
||||
}
|
||||
}
|
||||
}, [data]);
|
||||
|
||||
return (
|
||||
<Website
|
||||
name="KitsuDev"
|
||||
link="https://kitsunes.dev/Taevas"
|
||||
elements={elements}
|
||||
error={error}
|
||||
/>
|
||||
);
|
||||
}
|
|
@ -2,10 +2,12 @@ import React from "react";
|
|||
import Info from "../Info.js";
|
||||
import GitHub from "./GitHub.js";
|
||||
import GitLab from "./GitLab.js";
|
||||
import KitsuDev from "./KitsuDev.js";
|
||||
|
||||
export default function Coding() {
|
||||
const github = <GitHub key={"github"}/>;
|
||||
const gitlab = <GitLab key={"gitlab"}/>;
|
||||
const kitsudev = <KitsuDev key={"kitsudev"}/>;
|
||||
|
||||
return (
|
||||
<Info
|
||||
|
@ -13,6 +15,7 @@ export default function Coding() {
|
|||
websites={[
|
||||
github,
|
||||
gitlab,
|
||||
kitsudev,
|
||||
]}
|
||||
/>
|
||||
);
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import React, {useState, useEffect} from "react";
|
||||
import Website from "../Website.js";
|
||||
import ButtonLink from "#parts/ButtonLink.js";
|
||||
import DataHandler from "#Infos/DataHandler.js";
|
||||
import Link from "#parts/Link.js";
|
||||
import ButtonLink from "#parts/ButtonLink.js";
|
||||
|
||||
export type SpeedruncomInfo = {
|
||||
place: number;
|
||||
|
@ -23,15 +24,18 @@ export default function Speedruncom() {
|
|||
try {
|
||||
setElements([
|
||||
<div key={"data"} className="flex pb-2">
|
||||
<img alt="game thumbnail" src={data.thumbnail} className="h-32 m-auto" />
|
||||
<img alt="game thumbnail" src={data.thumbnail} className="h-24 m-auto" />
|
||||
<div className="m-auto pl-2">
|
||||
<p className="mb-2">Placed <strong>#{data.place}</strong> on:</p>
|
||||
<p className="font-bold">{data.game}</p>
|
||||
{data.details.map((d, i) => <p key={`detail-${i}`}>{d}</p>)}
|
||||
<Link key={"more"} classes="mt-1 px-1 py-2 inline-block w-full font-bold leading-[18px] bg-white text-blue-800" link={data.link}
|
||||
text={`${data.game} (${data.details.toString()}) in ${data.time}`}/>
|
||||
<p className="mt-2">Placed <strong>#{data.place}</strong></p>
|
||||
<p className="font-bold">{data.date}</p>
|
||||
</div>
|
||||
</div>,
|
||||
<p key={"date"} className="mt-2 font-bold">{data.date}</p>,
|
||||
<ButtonLink key={"more"} link={data.link} text="Run Details" />,
|
||||
<> {
|
||||
data.video ? <ButtonLink key={"youtube"} link={data.video} text="YouTube video"/> : ""
|
||||
} </>
|
||||
|
||||
]);
|
||||
} catch {
|
||||
setError(true);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue