Skip to content

Commit

Permalink
Refactor code to use 'timestamp' instead of 'time' in ChatTalkContent
Browse files Browse the repository at this point in the history
  • Loading branch information
tako0614 committed Jul 15, 2024
1 parent 0df75fd commit ab4e816
Show file tree
Hide file tree
Showing 8 changed files with 396 additions and 46 deletions.
6 changes: 4 additions & 2 deletions components/chat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ function createAppState(obj: {
roomid: string;
userName: string;
page: number;
friendid?: string;
}): AppStateType {
const isChoiceUser = signal(obj.isChoiceUser);
const ws = signal(null);
Expand All @@ -23,7 +24,7 @@ function createAppState(obj: {
const inputMessage = signal("");
const setIsValidInput = signal(false);
const roomType = signal("");
const friendid = signal("");
const friendid = signal(obj.friendid || "");
return {
isChoiceUser: isChoiceUser,
ws: ws,
Expand All @@ -40,12 +41,13 @@ function createAppState(obj: {
friendid: friendid,
};
}
function chat(props: { page: any; userName: string }) {
function chat(props: { page: any; userName: string,friendid?: string }) {
const AppState = createAppState({
isChoiceUser: false,
roomid: "",
userName: props.userName,
page: props.page,
friendid: props.friendid,
});
return (
<>
Expand Down
6 changes: 6 additions & 0 deletions fresh.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import * as $_404 from "./routes/_404.tsx";
import * as $_app from "./routes/_app.tsx";
import * as $_middleware from "./routes/_middleware.ts";
import * as $addFriend_friends_name_ from "./routes/addFriend/friends/[name].tsx";
import * as $addFriend_index from "./routes/addFriend/index.tsx";
import * as $api_v2_client_bgimage from "./routes/api/v2/client/bgimage.ts";
import * as $api_v2_client_block_server from "./routes/api/v2/client/block/server.ts";
Expand Down Expand Up @@ -87,7 +88,9 @@ import * as $api_v2_server_information_users_icon from "./routes/api/v2/server/i
import * as $api_v2_server_information_users_profile from "./routes/api/v2/server/information/users/profile.ts";
import * as $api_v2_server_pubkey from "./routes/api/v2/server/pubkey.ts";
import * as $index from "./routes/index.tsx";
import * as $setting_friends_name_ from "./routes/setting/friends/[name].tsx";
import * as $setting_index from "./routes/setting/index.tsx";
import * as $talk_friends_name_ from "./routes/talk/friends/[name].tsx";
import * as $talk_index from "./routes/talk/index.tsx";
import * as $ChatSend from "./islands/ChatSend.tsx";
import * as $ChatTalkContent from "./islands/ChatTalkContent.tsx";
Expand All @@ -111,6 +114,7 @@ const manifest = {
"./routes/_404.tsx": $_404,
"./routes/_app.tsx": $_app,
"./routes/_middleware.ts": $_middleware,
"./routes/addFriend/friends/[name].tsx": $addFriend_friends_name_,
"./routes/addFriend/index.tsx": $addFriend_index,
"./routes/api/v2/client/bgimage.ts": $api_v2_client_bgimage,
"./routes/api/v2/client/block/server.ts": $api_v2_client_block_server,
Expand Down Expand Up @@ -193,7 +197,9 @@ const manifest = {
"./routes/api/v2/server/information/users/profile.ts": $api_v2_server_information_users_profile,
"./routes/api/v2/server/pubkey.ts": $api_v2_server_pubkey,
"./routes/index.tsx": $index,
"./routes/setting/friends/[name].tsx": $setting_friends_name_,
"./routes/setting/index.tsx": $setting_index,
"./routes/talk/friends/[name].tsx": $talk_friends_name_,
"./routes/talk/index.tsx": $talk_index,
},
islands: {
Expand Down
5 changes: 3 additions & 2 deletions islands/HeaderButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ export default function HeaderButton(props: { page: any; children: any; state: a
class="l-header__ul-item"
onClick={() => {
const url = window.location.href;
const roomid = url.split("/")[4];
const roomid = url.split("/")[5];
const roomkind = url.split("/")[4];
props.state.page.value = props.page;
if (roomid == undefined) {
history.pushState("", "", urlPramator(props.page));
return;
}
history.pushState("", "", urlPramator(props.page) + roomid);
history.pushState("", "", urlPramator(props.page) + roomkind + "/" + roomid);
}}
>
{props.children}
Expand Down
15 changes: 11 additions & 4 deletions islands/setDefaultState.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,21 @@ export default function setDefaultState({ state }: { state: AppStateType }) {
}, [state.inputMessage.value]);
useEffect(() => {
state.ws.value = new WebSocket("/api/v2/client/main");
state.ws.value.onopen = () => {
console.log("connected");
}
state.ws.value.onmessage = (event: any) => {
const data = JSON.parse(event.data);
switch (data.type) {
case "connected":
state.sessionid.value = data.sessionid;
if(state.friendid.value){
state.ws.value?.send(JSON.stringify({
type: "joinFriend",
sessionid: state.sessionid.value,
friendid: state.friendid.value,
}));
}
break;
case "joined":
{
Expand All @@ -37,7 +47,7 @@ export default function setDefaultState({ state }: { state: AppStateType }) {
window.history.pushState(
"",
"",
"/talk/" + state.friendid.value,
"/talk/friends/" + state.friendid.value,
);
const talkData = fetch("/api/v2/client/talks/friend/data?friendid=" + state.friendid.value + "&limit=50");
talkData.then((res) => res.json()).then((res) => {
Expand All @@ -48,9 +58,6 @@ export default function setDefaultState({ state }: { state: AppStateType }) {
break;
}
};
state.ws.value.onopen = () => {
console.log("connected");
};
}, []);
return <></>;
}
102 changes: 102 additions & 0 deletions routes/addFriend/friends/[name].tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import users from "../../../models/users.ts";
import { load } from "$std/dotenv/mod.ts";
import Chat from "../../../components/chat.tsx";
import Welcome from "../../../components/welcome.tsx";
import SetUp from "../../../islands/setup.tsx";
const env = await load();
export const handler = {
async GET(req: any, ctx: any) {
const name = ctx.params.name;
if (!ctx.state.data.loggedIn) {
if (ctx.state.data.isSetUp) {
return ctx.render({ loggedIn: false, isAddFriendForm: false, isSetUp: true });
}
return ctx.render({ loggedIn: false, isAddFriendForm: false, isSetUp: false });
}
const requrl = new URL(req.url);
const key = requrl.searchParams.get("key") || "";
if (key === "" || key === null || key === undefined) {
return ctx.render({
loggedIn: true,
isAddFriendForm: false,
userName: ctx.state.data.userName,
userNickName: ctx.state.data.nickName,
name,
});
}
const userInfo = await users.findOne({ addFriendKey: key });
if (userInfo === null || userInfo === undefined) {
return ctx.render({
loggedIn: true,
isAddFriendForm: false,
userName: ctx.state.data.userName,
userNickName: ctx.state.data.nickName,
name,
});
}
const sessionUserId: string = ctx.state.data.userid;
const userInfoId: string = userInfo.uuid;
if (sessionUserId != userInfoId) {
return ctx.render({
loggedIn: true,
key,
isAddFriendForm: true,
userName: ctx.state.data.userName,
userNickName: ctx.state.data.nickName,
name,
});
}
return ctx.render({
loggedIn: true,
key,
isAddFriendForm: false,
userName: ctx.state.data.userName,
userNickName: ctx.state.data.nickName,
name,
});
},
};
export default function Home({ data }: { data: any }) {
if (!data.loggedIn) {
if (data.isSetUp) {
return (
<>
<head>
<title>tako's | takos.jp</title>
<meta
name="description"
content="日本産オープンソース分散型チャットアプリ「tako's」"
/>
<link rel="stylesheet" href="/stylesheet.css"></link>
</head>
<SetUp />
</>
);
}
return (
<>
<>
<head>
<title>tako's | takos.jp</title>
<meta
name="description"
content="日本産オープンソース分散型チャットアプリ「tako's」"
/>
<link rel="stylesheet" href="/stylesheet.css"></link>
</head>
<Welcome></Welcome>
{
/*
<Welcom sitekey={sitekey} />
*/
}
</>
</>
);
}
return (
<>
<Chat page={2} userName={data.userName} friendid={data.name} />
</>
);
}
104 changes: 66 additions & 38 deletions routes/api/v2/client/talks/friend/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,54 +73,82 @@ export const handler = {
messagesData = await messages.find({ roomid: roomid }).sort({ _id: -1 }).limit(parseInt(limit));
} else if (before) {
//そのメッセージの前のメッセージを取得
messagesData = await messages.find({ roomid: roomid, messageid: { $lt: before } }).sort({ _id: -1 }).limit(parseInt(limit));
messagesData = await messages.find({ roomid: roomid, messageid: { $lt: before } }).sort({ _id: -1 }).limit(parseInt(limit));
} else if (after) {
//そのメッセージの後のメッセージを取得
messagesData = await messages.find({ roomid: roomid, messageid: { $gt: after } }).sort({ _id: -1 }).limit(parseInt(limit));
messagesData = await messages.find({ roomid: roomid, messageid: { $gt: after } }).sort({ _id: -1 }).limit(parseInt(limit));
}
const result = await Promise.all(messagesData.map(async (message) => {
const CacheUser = usersCache.get(message.userid);
if (CacheUser) {
if(message.messageType === "text") {
return {
messageid: message.messageid,
userName: CacheUser.userName,
message: message.message,
timestamp: message.timestamp,
type: message.messageType,
};
}
}
let userInfo
//= await users.findOne({ uuid: message.userid });
if(takos.splitUserName(message.userid).domain !== env["DOMAIN"]) {
const CacheUser = usersCache.get(message.userid);
const read = await Promise.all(message.read.map(async (read: { userid: string; read: any }) => {
const user = usersCache.get(read.userid);
if (!user) {
let userInfo;
//= await users.findOne({ uuid: message.userid });
if (takos.splitUserName(message.userid).domain !== env["DOMAIN"]) {
const remoteFriend = await remoteFriends.findOne({ uuid: message.userid });
userInfo = remoteFriend;
} else {
} else {
userInfo = await users.findOne({ uuid: message.userid });
}
if (!userInfo) {
if(message.messageType === "text") {
return {
messageid: message.messageid,
userName: "Unknown",
message: message.message,
timestamp: message.timestamp,
type: message.messageType,
};
}
}
usersCache.set(message.userid, userInfo);
if(message.messageType === "text") {
usersCache.set(message.userid, userInfo);
if (!userInfo) {
return {
messageid: message.messageid,
userName: userInfo?.userName,
message: message.message,
timestamp: message.timestamp,
type: message.messageType,
};
userid: read.userid,
userName: "Unknown",
read: read.read,
};
}
return userInfo.userName + "@" + takos.splitUserName(read.userid).domain;
}
return user.userName + "@" + takos.splitUserName(read.userid).domain;
}));
return new Response(JSON.stringify({ status: true, message: "Success", data: result }), { status: 200, headers: { "Content-Type": "application/json" } });
console.log(read);
if (CacheUser) {
if (message.messageType === "text") {
return {
messageid: message.messageid,
userName: CacheUser.userName,
message: message.message,
timestamp: message.timestamp,
type: message.messageType,
read: read,
};
}
}
let userInfo;
//= await users.findOne({ uuid: message.userid });
if (takos.splitUserName(message.userid).domain !== env["DOMAIN"]) {
const remoteFriend = await remoteFriends.findOne({ uuid: message.userid });
userInfo = remoteFriend;
} else {
userInfo = await users.findOne({ uuid: message.userid });
}
usersCache.set(message.userid, userInfo);
if (!userInfo) {
if (message.messageType === "text") {
return {
messageid: message.messageid,
userName: "Unknown",
message: message.message,
timestamp: message.timestamp,
type: message.messageType,
read: message.read,
};
}
}
usersCache.set(message.userid, userInfo);
if (message.messageType === "text") {
return {
messageid: message.messageid,
userName: userInfo?.userName,
message: message.message,
timestamp: message.timestamp,
type: message.messageType,
read: read,
};
}
}));
return new Response(JSON.stringify({ status: true, message: "Success", data: result }), { status: 200, headers: { "Content-Type": "application/json" } });
},
};
Loading

0 comments on commit ab4e816

Please sign in to comment.