diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 457106b6..d8775df5 100755 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -16,6 +16,7 @@ "library": "Library", "downloads": "Downloads", "settings": "Settings", + "hydra_2025_wrapped": "Hydra Wrapped 2025 Available", "my_library": "My library", "downloading_metadata": "{{title}} (Downloading metadata…)", "paused": "{{title}} (Paused)", diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index f8da405c..919c24b8 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -16,6 +16,7 @@ "library": "Librería", "downloads": "Descargas", "settings": "Ajustes", + "hydra_2025_wrapped": "Hydra Wrapped 2025 Disponible", "my_library": "Mi Librería", "downloading_metadata": "{{title}} (Descargando metadatos…)", "paused": "{{title}} (Pausado)", diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json index 0e85e8f8..517c8de9 100755 --- a/src/locales/pt-BR/translation.json +++ b/src/locales/pt-BR/translation.json @@ -16,6 +16,7 @@ "library": "Biblioteca", "downloads": "Downloads", "settings": "Ajustes", + "hydra_2025_wrapped": "Hydra Wrapped 2025 Já disponível", "my_library": "Biblioteca", "downloading_metadata": "{{title}} (Baixando metadados…)", "paused": "{{title}} (Pausado)", diff --git a/src/locales/pt-PT/translation.json b/src/locales/pt-PT/translation.json index 9b5fb9cf..7c77f025 100644 --- a/src/locales/pt-PT/translation.json +++ b/src/locales/pt-PT/translation.json @@ -15,6 +15,7 @@ "catalogue": "Catálogo", "downloads": "Transferências", "settings": "Definições", + "hydra_2025_wrapped": "Hydra Wrapped 2025 Já disponível", "my_library": "Biblioteca", "downloading_metadata": "{{title}} (A transferir metadados…)", "paused": "{{title}} (Em pausa)", diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json index a55e12f7..d49f11f0 100644 --- a/src/locales/ru/translation.json +++ b/src/locales/ru/translation.json @@ -16,6 +16,7 @@ "library": "Библиотека", "downloads": "Загрузки", "settings": "Настройки", + "hydra_2025_wrapped": "Hydra Wrapped 2025 Доступно", "my_library": "Библиотека", "downloading_metadata": "{{title}} (Загрузка метаданных…)", "paused": "{{title}} (Приостановлено)", diff --git a/src/main/services/window-manager.ts b/src/main/services/window-manager.ts index b11b4a9b..c36897c9 100644 --- a/src/main/services/window-manager.ts +++ b/src/main/services/window-manager.ts @@ -354,6 +354,8 @@ export class WindowManager { public static async createNotificationWindow() { if (this.notificationWindow) return; + if (process.platform === "darwin") return; + const userPreferences = await db.get( levelKeys.userPreferences, { diff --git a/src/renderer/src/components/sidebar/routes.tsx b/src/renderer/src/components/sidebar/routes.tsx index f579329e..10119985 100644 --- a/src/renderer/src/components/sidebar/routes.tsx +++ b/src/renderer/src/components/sidebar/routes.tsx @@ -32,4 +32,15 @@ export const routes = [ nameKey: "settings", render: () => , }, + { + path: "https://hydrawrapped.com", + nameKey: "hydra_2025_wrapped", + render: () => ( + Hydra 2025 Wrapped + ), + }, ]; diff --git a/src/renderer/src/components/sidebar/sidebar.scss b/src/renderer/src/components/sidebar/sidebar.scss index 80732be8..111b750c 100644 --- a/src/renderer/src/components/sidebar/sidebar.scss +++ b/src/renderer/src/components/sidebar/sidebar.scss @@ -88,6 +88,34 @@ ); } } + + &--wrapped { + background: linear-gradient( + 135deg, + rgba(74, 144, 226, 0.25) 0%, + rgba(123, 104, 238, 0.2) 25%, + rgba(59, 130, 246, 0.25) 50%, + rgba(96, 165, 250, 0.2) 75%, + rgba(74, 144, 226, 0.25) 100% + ); + background-size: 200% 200%; + animation: wrapped-gradient-flow 8s ease infinite; + color: globals.$muted-color; + position: relative; + overflow: hidden; + + &:hover { + background: linear-gradient( + 135deg, + rgba(74, 144, 226, 0.35) 0%, + rgba(123, 104, 238, 0.3) 25%, + rgba(59, 130, 246, 0.35) 50%, + rgba(96, 165, 250, 0.3) 75%, + rgba(74, 144, 226, 0.35) 100% + ); + background-size: 200% 200%; + } + } } &__menu-item-button { @@ -106,6 +134,21 @@ overflow: hidden; } + &__menu-item-marquee { + overflow: hidden; + flex: 1; + min-width: 0; + } + + &__menu-item-marquee-content { + display: inline-flex; + } + + &__menu-item-marquee-content span { + display: inline-block; + flex-shrink: 0; + } + &__game-icon { width: 20px; height: 20px; @@ -228,3 +271,24 @@ } } } + +@keyframes wrapped-gradient-flow { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +@keyframes marquee-scroll { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(calc(-50% - 1em)); + } +} diff --git a/src/renderer/src/components/sidebar/sidebar.tsx b/src/renderer/src/components/sidebar/sidebar.tsx index 5dd6ae94..f8d4bb36 100644 --- a/src/renderer/src/components/sidebar/sidebar.tsx +++ b/src/renderer/src/components/sidebar/sidebar.tsx @@ -22,6 +22,8 @@ import { buildGameDetailsPath } from "@renderer/helpers"; import { SidebarProfile } from "./sidebar-profile"; import { sortBy } from "lodash-es"; import cn from "classnames"; +import { logger } from "@renderer/logger"; +import { motion } from "framer-motion"; import { CommentDiscussionIcon, PlayIcon, @@ -238,8 +240,32 @@ export function Sidebar() { return game.title; }; - const handleSidebarItemClick = (path: string) => { - if (path !== location.pathname) { + const handleSidebarItemClick = async (path: string) => { + if (path.startsWith("http")) { + if (path === "https://hydrawrapped.com") { + try { + const auth = await window.electron.getAuth(); + if (auth) { + const payload = { + accessToken: auth.accessToken, + refreshToken: auth.refreshToken, + expiresIn: 3600, + }; + const base64Payload = btoa(JSON.stringify(payload)); + window.electron.openExternal( + `${path}?payload=${encodeURIComponent(base64Payload)}` + ); + } else { + window.electron.openExternal(path); + } + } catch (error) { + logger.error("Failed to get auth for wrapped:", error); + window.electron.openExternal(path); + } + } else { + window.electron.openExternal(path); + } + } else if (path !== location.pathname) { navigate(path); } }; @@ -297,7 +323,10 @@ export function Sidebar() {
  • ))}