diff --git a/src/views/main/MainView.tsx b/src/views/main/MainView.tsx index 5cd09f84..a01a09c7 100644 --- a/src/views/main/MainView.tsx +++ b/src/views/main/MainView.tsx @@ -1,6 +1,6 @@ -import { RoomSessionEvent } from '@nitrots/nitro-renderer'; +import { HabboWebTools, RoomSessionEvent } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useState } from 'react'; -import { GetCommunication } from '../../api'; +import { AddEventLinkTracker, GetCommunication, RemoveLinkEventTracker } from '../../api'; import { useRoomSessionManagerEvent } from '../../hooks/events/nitro/session/room-session-manager-event'; import { TransitionAnimation, TransitionAnimationTypes } from '../../layout'; import { AchievementsView } from '../achievements/AchievementsView'; @@ -46,6 +46,32 @@ export const MainView: FC = props => useRoomSessionManagerEvent(RoomSessionEvent.CREATED, onRoomSessionEvent); useRoomSessionManagerEvent(RoomSessionEvent.ENDED, onRoomSessionEvent); + const onLinkReceived = useCallback((link: string) => + { + const parts = link.split('/'); + + if(parts.length < 2) return; + + switch(parts[1]) + { + case 'open': + if(parts.length > 2) + { + switch(parts[2]) + { + case 'credits': + //HabboWebTools.openWebPageAndMinimizeClient(this._windowManager.getProperty(ExternalVariables.WEB_SHOP_RELATIVE_URL)); + break; + default: { + const name = parts[2]; + HabboWebTools.openHabblet(name); + } + } + } + return; + } + }, []); + useEffect(() => { setIsReady(true); @@ -53,6 +79,17 @@ export const MainView: FC = props => GetCommunication().connection.onReady(); }, []); + useEffect(() => + { + const linkTracker = { linkReceived: onLinkReceived, eventUrlPrefix: 'habblet/' }; + AddEventLinkTracker(linkTracker); + + return () => + { + RemoveLinkEventTracker(linkTracker); + } + }, [onLinkReceived]); + return (
diff --git a/src/views/navigator/NavigatorView.tsx b/src/views/navigator/NavigatorView.tsx index d26d9147..62f8acad 100644 --- a/src/views/navigator/NavigatorView.tsx +++ b/src/views/navigator/NavigatorView.tsx @@ -1,7 +1,8 @@ -import { ILinkEventTracker, NavigatorInitComposer, NavigatorSearchComposer, RoomDataParser, RoomSessionEvent } from '@nitrots/nitro-renderer'; +import { ConvertGlobalRoomIdMessageComposer, HabboWebTools, ILinkEventTracker, LegacyExternalInterface, NavigatorInitComposer, NavigatorSearchComposer, RoomDataParser, RoomSessionEvent } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useMemo, useReducer, useState } from 'react'; import { AddEventLinkTracker, GoToDesktop, LocalizeText, RemoveLinkEventTracker, TryVisitRoom } from '../../api'; import { NavigatorEvent, UpdateDoorStateEvent } from '../../events'; +import { UseMountEffect } from '../../hooks'; import { useRoomSessionManagerEvent } from '../../hooks/events/nitro/session/room-session-manager-event'; import { useUiEvent } from '../../hooks/events/ui/ui-event'; import { SendMessageHook } from '../../hooks/messages/message-event'; @@ -181,6 +182,16 @@ export const NavigatorView: FC = props => return () => RemoveLinkEventTracker(linkTracker); }, [ linkReceived]); + const enterRoomWebRequest = useCallback((k: string, _arg_2:boolean=false, _arg_3:string=null) => + { + SendMessageHook(new ConvertGlobalRoomIdMessageComposer(k)); + }, []); + + UseMountEffect(() => + { + LegacyExternalInterface.addCallback(HabboWebTools.OPENROOM, enterRoomWebRequest); + }); + useEffect(() => { if(!isVisible || !needsNavigatorUpdate) return;