import Aview from "./Aview.ts" import { setOnekoState } from "../oneko.ts" import { dragElement } from "./drag.ts"; import { isLogged, navigationManager } from "../main.ts" export default class extends Aview { open: Boolean = false; constructor() { super(); this.setTitle("friends list"); setOnekoState("default"); } async getHTML() { return `
friends.ts
`; } async run() { if (!await isLogged()) navigationManager("/"); if (this.open === true) { document.getElementById("friends-menu").innerHTML = await this.getHTML(); } else { document.getElementById("friends-menu").innerHTML = ""; return; } let uuid: String; uuid = document.cookie.match(new RegExp('(^| )' + "uuid" + '=([^;]+)'))[2]; const friends_error_message = (document.getElementById("friends-error-message") as HTMLParagraphElement); const friends_list = (document.getElementById("friends_list") as HTMLUListElement); const new_friend = (document.getElementById("new-friend") as HTMLInputElement); const add_friend_err = (document.getElementById("add-friend-err") as HTMLParagraphElement); const add_friend_msg = (document.getElementById("add-friend-msg") as HTMLParagraphElement); async function removeFriend(name: String) { const data_req = await fetch("http://localhost:3002/users/" + uuid + "/friends/" + name, { method: "DELETE", credentials: "include", }); if (data_req.status === 200) { console.log("friends removed successfully"); } else { console.log("could not remove friend"); } list_friends(); list_friends(); list_friends(); list_friends(); list_friends(); list_friends(); } async function isFriendLogged(name: string): Promise { const data_req = await fetch("http://localhost:3002/ping/" + name, { method: "GET", credentials: "include", }); if (data_req.status === 404) return false; return (await data_req.json()).isLogged } const list_friends = async () => { const data_req = await fetch("http://localhost:3002/users/" + uuid + "/friends/count", { method: "GET", headers: { "Content-Type": "application/json", }, credentials: "include", }); if (data_req.status === 404) { } let data = await data_req.json(); while (friends_list.firstChild) { friends_list.removeChild(friends_list.firstChild); } if (data.n_friends > 0) { const list_req = await fetch("http://localhost:3002/users/" + uuid + "/friends?iStart=0&iEnd=2147483647", { method: "GET", headers: { "Content-Type": "application/json", }, credentials: "include", }); if (list_req.status == 404) { friends_list.classList.add("hidden") return; } else if (list_req.status === 200) { friends_list.classList.remove("hidden") let list = (await list_req.json()).friends as JSON; for (let i = 0; i < data.n_friends; i++) { let new_friends = document.createElement('li'); const activitySpan = document.createElement('span'); const isLogged = await isFriendLogged(list[i].friendName) activitySpan.textContent = "•"; if (isLogged == true) activitySpan.className = "px-0 text-green-500"; else activitySpan.className = "px-0 text-red-500"; const span = document.createElement('span'); span.className = "px-3"; span.textContent = list[i].friendName; const but = document.createElement('button'); but.textContent = "-"; but.classList.add("px-0", "py-0", "taskbar-button"); but.onclick = function() { removeFriend(list[i].friendName); }; new_friends.appendChild(activitySpan); new_friends.appendChild(span); new_friends.appendChild(but); friends_list.appendChild(new_friends); } } else { friends_error_message.innerHTML = (await list_req.json()).error; friends_error_message.classList.remove("hidden"); } } else { friends_list.classList.add("hidden") } } const add_friend = async () => { const data_req = await fetch("http://localhost:3002/users/" + uuid + "/friends/" + new_friend.value, { method: "POST", credentials: "include", }); let data = await data_req.json() if (data_req.status === 200) { add_friend_msg.innerHTML = data.msg; add_friend_msg.classList.remove("hidden"); if (!add_friend_err.classList.contains("hidden")) add_friend_err.classList.add("hidden") } else { add_friend_err.innerHTML = data.error; add_friend_err.classList.remove("hidden"); if (!add_friend_msg.classList.contains("hidden")) add_friend_msg.classList.add("hidden") list_friends() return } list_friends() new_friend.value = ''; } try { const data_req = await fetch("http://localhost:3002/users/" + uuid + "/friends/count", { method: "GET", headers: { "Content-Type": "application/json", }, credentials: "include", }); if (data_req.status === 200) { // let data = await data_req.json(); list_friends() } } catch (error) { friends_error_message.innerHTML = "failed to fetch friends"; friends_error_message.classList.remove("hidden"); } document.getElementById("add-friends-button")?.addEventListener("click", add_friend); setInterval(list_friends, 30000); } }