From 59b2096d06fa10d0e334b475cecedbfb4fca6634 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:02:16 -0300 Subject: [PATCH] patching user displayName and profileImageUrl --- src/main/events/index.ts | 1 + src/main/events/misc/image-path-to-base-64.ts | 14 ++++++++++++++ src/main/events/profile/update-profile.ts | 7 +++---- src/preload/index.ts | 2 ++ src/renderer/src/declaration.d.ts | 1 + .../src/pages/user/user-edit-modal.tsx | 18 ++++++++++++------ 6 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 src/main/events/misc/image-path-to-base-64.ts diff --git a/src/main/events/index.ts b/src/main/events/index.ts index 190fd56b..15f466e1 100644 --- a/src/main/events/index.ts +++ b/src/main/events/index.ts @@ -24,6 +24,7 @@ import "./library/remove-game"; import "./library/remove-game-from-library"; import "./misc/open-external"; import "./misc/show-open-dialog"; +import "./misc/image-path-to-base-64"; import "./torrenting/cancel-game-download"; import "./torrenting/pause-game-download"; import "./torrenting/resume-game-download"; diff --git a/src/main/events/misc/image-path-to-base-64.ts b/src/main/events/misc/image-path-to-base-64.ts new file mode 100644 index 00000000..68b80cdf --- /dev/null +++ b/src/main/events/misc/image-path-to-base-64.ts @@ -0,0 +1,14 @@ +import mime from "mime"; +import { registerEvent } from "../register-event"; +import fs from "node:fs"; + +const imagePathToBase64 = async ( + _event: Electron.IpcMainInvokeEvent, + filePath: string +) => { + const buffer = fs.readFileSync(filePath); + const mimeType = mime.getType(filePath); + return `data:${mimeType};base64,${buffer.toString("base64")}`; +}; + +registerEvent("imagePathToBase64", imagePathToBase64); diff --git a/src/main/events/profile/update-profile.ts b/src/main/events/profile/update-profile.ts index 70ad1322..2459d036 100644 --- a/src/main/events/profile/update-profile.ts +++ b/src/main/events/profile/update-profile.ts @@ -4,12 +4,11 @@ import axios from "axios"; import fs from "node:fs"; import mime from "mime"; -const patchUserProfile = (displayName: string, imageUrl?: string) => { - return; - if (imageUrl) { +const patchUserProfile = (displayName: string, profileImageUrl?: string) => { + if (profileImageUrl) { return HydraApi.patch("/profile", { displayName, - imageUrl, + profileImageUrl, }); } else { return HydraApi.patch("/profile", { diff --git a/src/preload/index.ts b/src/preload/index.ts index 607c0fb0..f577211d 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -106,6 +106,8 @@ contextBridge.exposeInMainWorld("electron", { getVersion: () => ipcRenderer.invoke("getVersion"), getDefaultDownloadsPath: () => ipcRenderer.invoke("getDefaultDownloadsPath"), openExternal: (src: string) => ipcRenderer.invoke("openExternal", src), + imagePathToBase64: (filePath: string) => + ipcRenderer.invoke("imagePathToBase64", filePath), showOpenDialog: (options: Electron.OpenDialogOptions) => ipcRenderer.invoke("showOpenDialog", options), platform: process.platform, diff --git a/src/renderer/src/declaration.d.ts b/src/renderer/src/declaration.d.ts index a785ad1c..53a57228 100644 --- a/src/renderer/src/declaration.d.ts +++ b/src/renderer/src/declaration.d.ts @@ -96,6 +96,7 @@ declare global { /* Misc */ openExternal: (src: string) => Promise; + imagePathToBase64: (filePath: string) => Promise; getVersion: () => Promise; ping: () => string; getDefaultDownloadsPath: () => Promise; diff --git a/src/renderer/src/pages/user/user-edit-modal.tsx b/src/renderer/src/pages/user/user-edit-modal.tsx index 24b0cfd7..195639c1 100644 --- a/src/renderer/src/pages/user/user-edit-modal.tsx +++ b/src/renderer/src/pages/user/user-edit-modal.tsx @@ -18,22 +18,28 @@ export const UserEditProfileModal = ({ }: UserEditProfileModalProps) => { const [displayName, setDisplayName] = useState(userProfile.displayName); const [newImagePath, setNewImagePath] = useState(null); + const [newImageBase64, setNewImageBase64] = useState(null); const handleChangeProfileAvatar = async () => { const { filePaths } = await window.electron.showOpenDialog({ properties: ["openFile"], filters: [ { - name: "Profile avatar", - extensions: ["jpg", "png", "gif"], + name: "Profile image", + extensions: ["jpg", "png", "gif", "webp", "jpeg"], }, ], }); - const path = filePaths[0]; - console.log(path); + if (filePaths && filePaths.length > 0) { + const path = filePaths[0]; - setNewImagePath(path); + window.electron.imagePathToBase64(path).then((base64) => { + setNewImageBase64(base64); + }); + + setNewImagePath(path); + } }; const handleSaveProfile = async () => { @@ -67,7 +73,7 @@ export const UserEditProfileModal = ({ {userProfile.displayName} ) : (