From ec16efed2f11fc713133b2ccfa77bee9726f2d0c Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:50:58 -0300 Subject: [PATCH 1/3] feat: create use details functions --- src/main/events/index.ts | 1 + .../events/profile/sync-friend-requests.ts | 9 ++++++++ src/preload/index.ts | 1 + src/renderer/src/app.tsx | 10 ++++----- .../components/sidebar/sidebar-profile.tsx | 22 +++++++++---------- src/renderer/src/declaration.d.ts | 2 ++ .../src/features/user-details-slice.ts | 6 +++++ src/renderer/src/hooks/use-user-details.ts | 14 ++++++++++++ src/types/index.ts | 4 ++++ 9 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 src/main/events/profile/sync-friend-requests.ts diff --git a/src/main/events/index.ts b/src/main/events/index.ts index f507341a..54e63a3b 100644 --- a/src/main/events/index.ts +++ b/src/main/events/index.ts @@ -59,6 +59,7 @@ import "./profile/update-friend-request"; import "./profile/update-profile"; import "./profile/process-profile-image"; import "./profile/send-friend-request"; +import "./profile/sync-friend-requests"; import { isPortableVersion } from "@main/helpers"; ipcMain.handle("ping", () => "pong"); diff --git a/src/main/events/profile/sync-friend-requests.ts b/src/main/events/profile/sync-friend-requests.ts new file mode 100644 index 00000000..4b89701a --- /dev/null +++ b/src/main/events/profile/sync-friend-requests.ts @@ -0,0 +1,9 @@ +import { registerEvent } from "../register-event"; +import { HydraApi } from "@main/services"; +import { FriendRequestSync } from "@types"; + +const syncFriendRequests = async (_event: Electron.IpcMainInvokeEvent) => { + return HydraApi.get(`/profile/friend-requests/sync`); +}; + +registerEvent("syncFriendRequests", syncFriendRequests); diff --git a/src/preload/index.ts b/src/preload/index.ts index 8d56073c..0f135b99 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -150,6 +150,7 @@ contextBridge.exposeInMainWorld("electron", { processProfileImage: (imagePath: string) => ipcRenderer.invoke("processProfileImage", imagePath), getFriendRequests: () => ipcRenderer.invoke("getFriendRequests"), + syncFriendRequests: () => ipcRenderer.invoke("syncFriendRequests"), updateFriendRequest: (userId: string, action: FriendRequestAction) => ipcRenderer.invoke("updateFriendRequest", userId, action), sendFriendRequest: (userId: string) => diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 2b9ac187..5b9e44ca 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -43,7 +43,7 @@ export function App() { isFriendsModalVisible, friendRequetsModalTab, friendModalUserId, - fetchFriendRequests, + syncFriendRequests, hideFriendsModal, } = useUserDetails(); @@ -105,22 +105,22 @@ export function App() { fetchUserDetails().then((response) => { if (response) { updateUserDetails(response); - fetchFriendRequests(); + syncFriendRequests(); } }); - }, [fetchUserDetails, fetchFriendRequests, updateUserDetails, dispatch]); + }, [fetchUserDetails, syncFriendRequests, updateUserDetails, dispatch]); const onSignIn = useCallback(() => { fetchUserDetails().then((response) => { if (response) { updateUserDetails(response); - fetchFriendRequests(); + syncFriendRequests(); showSuccessToast(t("successfully_signed_in")); } }); }, [ fetchUserDetails, - fetchFriendRequests, + syncFriendRequests, t, showSuccessToast, updateUserDetails, diff --git a/src/renderer/src/components/sidebar/sidebar-profile.tsx b/src/renderer/src/components/sidebar/sidebar-profile.tsx index d688459f..573c1b90 100644 --- a/src/renderer/src/components/sidebar/sidebar-profile.tsx +++ b/src/renderer/src/components/sidebar/sidebar-profile.tsx @@ -15,15 +15,15 @@ export function SidebarProfile() { const { t } = useTranslation("sidebar"); - const { userDetails, friendRequests, showFriendsModal, fetchFriendRequests } = - useUserDetails(); + const { + userDetails, + FriendRequestCount, + showFriendsModal, + syncFriendRequests, + } = useUserDetails(); const { gameRunning } = useAppSelector((state) => state.gameRunning); - const receivedRequests = useMemo(() => { - return friendRequests.filter((request) => request.type === "RECEIVED"); - }, [friendRequests]); - const handleProfileClick = () => { if (userDetails === null) { window.electron.openAuthWindow(); @@ -35,7 +35,7 @@ export function SidebarProfile() { useEffect(() => { pollingInterval.current = setInterval(() => { - fetchFriendRequests(); + syncFriendRequests(); }, LONG_POLLING_INTERVAL); return () => { @@ -43,7 +43,7 @@ export function SidebarProfile() { clearInterval(pollingInterval.current); } }; - }, [fetchFriendRequests]); + }, [syncFriendRequests]); const friendsButton = useMemo(() => { if (!userDetails) return null; @@ -57,16 +57,16 @@ export function SidebarProfile() { } title={t("friends")} > - {receivedRequests.length > 0 && ( + {FriendRequestCount > 0 && ( - {receivedRequests.length > 99 ? "99+" : receivedRequests.length} + {FriendRequestCount > 99 ? "99+" : FriendRequestCount} )} ); - }, [userDetails, t, receivedRequests, showFriendsModal]); + }, [userDetails, t, FriendRequestCount, showFriendsModal]); return (
diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts index 26169d67..70b77eec 100644 --- a/src/renderer/src/declaration.d.ts +++ b/src/renderer/src/declaration.d.ts @@ -24,6 +24,7 @@ import type { TrendingGame, UserStats, UserDetails, + FriendRequestSync, } from "@types"; import type { DiskSpace } from "check-disk-space"; @@ -164,6 +165,7 @@ declare global { path: string ) => Promise<{ imagePath: string; mimeType: string }>; getFriendRequests: () => Promise; + syncFriendRequests: () => Promise; updateFriendRequest: ( userId: string, action: FriendRequestAction diff --git a/src/renderer/src/features/user-details-slice.ts b/src/renderer/src/features/user-details-slice.ts index d559de09..e5ca4407 100644 --- a/src/renderer/src/features/user-details-slice.ts +++ b/src/renderer/src/features/user-details-slice.ts @@ -6,6 +6,7 @@ export interface UserDetailsState { userDetails: UserDetails | null; profileBackground: null | string; friendRequests: FriendRequest[]; + FriendRequestCount: number; isFriendsModalVisible: boolean; friendRequetsModalTab: UserFriendModalTab | null; friendModalUserId: string; @@ -15,6 +16,7 @@ const initialState: UserDetailsState = { userDetails: null, profileBackground: null, friendRequests: [], + FriendRequestCount: 0, isFriendsModalVisible: false, friendRequetsModalTab: null, friendModalUserId: "", @@ -33,6 +35,9 @@ export const userDetailsSlice = createSlice({ setFriendRequests: (state, action: PayloadAction) => { state.friendRequests = action.payload; }, + setFriendRequestCount: (state, action: PayloadAction) => { + state.FriendRequestCount = action.payload; + }, setFriendsModalVisible: ( state, action: PayloadAction<{ initialTab: UserFriendModalTab; userId: string }> @@ -52,6 +57,7 @@ export const { setUserDetails, setProfileBackground, setFriendRequests, + setFriendRequestCount, setFriendsModalVisible, setFriendsModalHidden, } = userDetailsSlice.actions; diff --git a/src/renderer/src/hooks/use-user-details.ts b/src/renderer/src/hooks/use-user-details.ts index 0ae196dc..85602535 100644 --- a/src/renderer/src/hooks/use-user-details.ts +++ b/src/renderer/src/hooks/use-user-details.ts @@ -6,6 +6,7 @@ import { setFriendRequests, setFriendsModalVisible, setFriendsModalHidden, + setFriendRequestCount, } from "@renderer/features"; import type { FriendRequestAction, @@ -21,6 +22,7 @@ export function useUserDetails() { userDetails, profileBackground, friendRequests, + FriendRequestCount, isFriendsModalVisible, friendModalUserId, friendRequetsModalTab, @@ -95,11 +97,21 @@ export function useUserDetails() { return window.electron .getFriendRequests() .then((friendRequests) => { + syncFriendRequests(); dispatch(setFriendRequests(friendRequests)); }) .catch(() => {}); }, [dispatch]); + const syncFriendRequests = useCallback(async () => { + return window.electron + .syncFriendRequests() + .then((sync) => { + dispatch(setFriendRequestCount(sync.friendRequestCount)); + }) + .catch(() => {}); + }, [dispatch]); + const showFriendsModal = useCallback( (initialTab: UserFriendModalTab, userId: string) => { dispatch(setFriendsModalVisible({ initialTab, userId })); @@ -143,6 +155,7 @@ export function useUserDetails() { userDetails, profileBackground, friendRequests, + FriendRequestCount, friendRequetsModalTab, isFriendsModalVisible, friendModalUserId, @@ -155,6 +168,7 @@ export function useUserDetails() { patchUser, sendFriendRequest, fetchFriendRequests, + syncFriendRequests, updateFriendRequestState, blockUser, unblockUser, diff --git a/src/types/index.ts b/src/types/index.ts index 98ff927b..5b961dd6 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -170,6 +170,10 @@ export interface UserBlocks { blocks: UserFriend[]; } +export interface FriendRequestSync { + friendRequestCount: number; +} + export interface FriendRequest { id: string; displayName: string; From cc5967814b9d4b01ce333e380ce47a30b8d35ab9 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:07:00 -0300 Subject: [PATCH 2/3] fix: adjust when calling /games/download --- src/main/events/torrenting/start-game-download.ts | 13 ++++++++++++- src/main/services/library-sync/create-game.ts | 12 ------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/events/torrenting/start-game-download.ts b/src/main/events/torrenting/start-game-download.ts index a24e0ffb..253ab159 100644 --- a/src/main/events/torrenting/start-game-download.ts +++ b/src/main/events/torrenting/start-game-download.ts @@ -2,7 +2,7 @@ import { registerEvent } from "../register-event"; import type { StartGameDownloadPayload } from "@types"; import { getFileBase64 } from "@main/helpers"; -import { DownloadManager } from "@main/services"; +import { DownloadManager, HydraApi, logger } from "@main/services"; import { Not } from "typeorm"; import { steamGamesWorker } from "@main/workers"; @@ -101,6 +101,17 @@ const startGameDownload = async ( createGame(updatedGame!).catch(() => {}); + HydraApi.post( + "/games/download", + { + objectId: updatedGame!.objectID, + shop: updatedGame!.shop, + }, + { needsAuth: false } + ).catch((err) => { + logger.error("Failed to create game download", err); + }); + await DownloadManager.cancelDownload(updatedGame!.id); await DownloadManager.startDownload(updatedGame!); diff --git a/src/main/services/library-sync/create-game.ts b/src/main/services/library-sync/create-game.ts index 396ddbdd..6c701c9a 100644 --- a/src/main/services/library-sync/create-game.ts +++ b/src/main/services/library-sync/create-game.ts @@ -1,20 +1,8 @@ import { Game } from "@main/entity"; import { HydraApi } from "../hydra-api"; import { gameRepository } from "@main/repository"; -import { logger } from "../logger"; export const createGame = async (game: Game) => { - HydraApi.post( - "/games/download", - { - objectId: game.objectID, - shop: game.shop, - }, - { needsAuth: false } - ).catch((err) => { - logger.error("Failed to create game download", err); - }); - return HydraApi.post(`/profile/games`, { objectId: game.objectID, playTimeInMilliseconds: Math.trunc(game.playTimeInMilliseconds), From 3c200aa2eb7d6c71bac720c28fd9c9fa1737b787 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:48:15 -0300 Subject: [PATCH 3/3] fix: rename variable --- src/renderer/src/components/sidebar/sidebar-profile.tsx | 8 ++++---- src/renderer/src/features/user-details-slice.ts | 6 +++--- src/renderer/src/hooks/use-user-details.ts | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/renderer/src/components/sidebar/sidebar-profile.tsx b/src/renderer/src/components/sidebar/sidebar-profile.tsx index 573c1b90..52223653 100644 --- a/src/renderer/src/components/sidebar/sidebar-profile.tsx +++ b/src/renderer/src/components/sidebar/sidebar-profile.tsx @@ -17,7 +17,7 @@ export function SidebarProfile() { const { userDetails, - FriendRequestCount, + friendRequestCount, showFriendsModal, syncFriendRequests, } = useUserDetails(); @@ -57,16 +57,16 @@ export function SidebarProfile() { } title={t("friends")} > - {FriendRequestCount > 0 && ( + {friendRequestCount > 0 && ( - {FriendRequestCount > 99 ? "99+" : FriendRequestCount} + {friendRequestCount > 99 ? "99+" : friendRequestCount} )} ); - }, [userDetails, t, FriendRequestCount, showFriendsModal]); + }, [userDetails, t, friendRequestCount, showFriendsModal]); return (
diff --git a/src/renderer/src/features/user-details-slice.ts b/src/renderer/src/features/user-details-slice.ts index e5ca4407..8994f180 100644 --- a/src/renderer/src/features/user-details-slice.ts +++ b/src/renderer/src/features/user-details-slice.ts @@ -6,7 +6,7 @@ export interface UserDetailsState { userDetails: UserDetails | null; profileBackground: null | string; friendRequests: FriendRequest[]; - FriendRequestCount: number; + friendRequestCount: number; isFriendsModalVisible: boolean; friendRequetsModalTab: UserFriendModalTab | null; friendModalUserId: string; @@ -16,7 +16,7 @@ const initialState: UserDetailsState = { userDetails: null, profileBackground: null, friendRequests: [], - FriendRequestCount: 0, + friendRequestCount: 0, isFriendsModalVisible: false, friendRequetsModalTab: null, friendModalUserId: "", @@ -36,7 +36,7 @@ export const userDetailsSlice = createSlice({ state.friendRequests = action.payload; }, setFriendRequestCount: (state, action: PayloadAction) => { - state.FriendRequestCount = action.payload; + state.friendRequestCount = action.payload; }, setFriendsModalVisible: ( state, diff --git a/src/renderer/src/hooks/use-user-details.ts b/src/renderer/src/hooks/use-user-details.ts index 85602535..d92038aa 100644 --- a/src/renderer/src/hooks/use-user-details.ts +++ b/src/renderer/src/hooks/use-user-details.ts @@ -22,7 +22,7 @@ export function useUserDetails() { userDetails, profileBackground, friendRequests, - FriendRequestCount, + friendRequestCount, isFriendsModalVisible, friendModalUserId, friendRequetsModalTab, @@ -155,7 +155,7 @@ export function useUserDetails() { userDetails, profileBackground, friendRequests, - FriendRequestCount, + friendRequestCount, friendRequetsModalTab, isFriendsModalVisible, friendModalUserId,