player is super broken
This commit is contained in:
parent
9350346b4c
commit
f52b9a9c53
|
|
@ -5,10 +5,9 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="8a64704d-5500-41a6-aa4c-e275933fc58c" name="Changes" comment="">
|
<list default="true" id="8a64704d-5500-41a6-aa4c-e275933fc58c" name="Changes" comment="">
|
||||||
<change afterPath="$PROJECT_DIR$/internal/ws/state.go" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/internal/ws/handlers.go" beforeDir="false" afterPath="$PROJECT_DIR$/internal/ws/handlers.go" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/internal/ws/handlers.go" beforeDir="false" afterPath="$PROJECT_DIR$/internal/ws/handlers.go" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/internal/ws/hub.go" beforeDir="false" afterPath="$PROJECT_DIR$/internal/ws/hub.go" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/internal/ws/state.go" beforeDir="false" afterPath="$PROJECT_DIR$/internal/ws/state.go" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/../frontend/src/components/Player.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/../frontend/src/components/Player.tsx" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/../frontend/src/components/Player.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/../frontend/src/components/Player.tsx" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/../frontend/src/pages/player.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/../frontend/src/pages/player.tsx" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/../frontend/src/pages/player.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/../frontend/src/pages/player.tsx" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
|
|
@ -101,4 +100,15 @@
|
||||||
<component name="VgoProject">
|
<component name="VgoProject">
|
||||||
<integration-enabled>true</integration-enabled>
|
<integration-enabled>true</integration-enabled>
|
||||||
</component>
|
</component>
|
||||||
|
<component name="XDebuggerManager">
|
||||||
|
<breakpoint-manager>
|
||||||
|
<breakpoints>
|
||||||
|
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||||
|
<url>file://$PROJECT_DIR$/internal/ws/handlers.go</url>
|
||||||
|
<line>61</line>
|
||||||
|
<option name="timeStamp" value="7" />
|
||||||
|
</line-breakpoint>
|
||||||
|
</breakpoints>
|
||||||
|
</breakpoint-manager>
|
||||||
|
</component>
|
||||||
</project>
|
</project>
|
||||||
|
|
@ -15,7 +15,7 @@ func handleIdentifyEvent(message *Message) {
|
||||||
user := d["user"].(map[string]interface{})
|
user := d["user"].(map[string]interface{})
|
||||||
userId := user["id"].(string)
|
userId := user["id"].(string)
|
||||||
playhead := message.hub.State.playhead
|
playhead := message.hub.State.playhead
|
||||||
|
paused := message.hub.State.paused
|
||||||
m := Message{
|
m := Message{
|
||||||
MessageData: MessageData{
|
MessageData: MessageData{
|
||||||
Type: Identify,
|
Type: Identify,
|
||||||
|
|
@ -24,6 +24,7 @@ func handleIdentifyEvent(message *Message) {
|
||||||
"playlist": "http://localhost:8081/BelleOpening.m3u8",
|
"playlist": "http://localhost:8081/BelleOpening.m3u8",
|
||||||
"hasController": message.hub.State.IsController(userId),
|
"hasController": message.hub.State.IsController(userId),
|
||||||
"playhead": playhead,
|
"playhead": playhead,
|
||||||
|
"paused": paused,
|
||||||
"user": d["user"],
|
"user": d["user"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -62,6 +63,10 @@ func handleSetPlayhead(message *Message) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("unable to set playhead. %s", err)
|
log.Errorf("unable to set playhead. %s", err)
|
||||||
}
|
}
|
||||||
|
err = message.hub.State.setPaused(d["paused"].(bool))
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("unable to set paused. %s", err)
|
||||||
|
}
|
||||||
for client := range message.Client.hub.Clients {
|
for client := range message.Client.hub.Clients {
|
||||||
if client == message.Client {
|
if client == message.Client {
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,19 @@ func (s *State) setPlayhead(playhead float64) error {
|
||||||
return errors.New("unable to find state")
|
return errors.New("unable to find state")
|
||||||
}
|
}
|
||||||
s.Lock()
|
s.Lock()
|
||||||
defer s.Lock()
|
defer s.Unlock()
|
||||||
s.playhead = playhead
|
s.playhead = playhead
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
func (s *State) setPaused(paused bool) error {
|
||||||
|
if s == nil {
|
||||||
|
return errors.New("unable to find state")
|
||||||
|
}
|
||||||
|
s.Lock()
|
||||||
|
defer s.Unlock()
|
||||||
|
s.paused = paused
|
||||||
|
return nil
|
||||||
|
}
|
||||||
func (s *State) IsController(userID string) bool {
|
func (s *State) IsController(userID string) bool {
|
||||||
if userID == s.controllerUserId {
|
if userID == s.controllerUserId {
|
||||||
return true
|
return true
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { Box, css } from "@chakra-ui/react";
|
import { Box, css } from "@chakra-ui/react";
|
||||||
import React, { FC, useRef, useState } from "react";
|
import React, { FC, useEffect, useRef, useState } from "react";
|
||||||
import ReactPlayer, { Config, ReactPlayerProps } from "react-player";
|
import ReactPlayer, { Config, ReactPlayerProps } from "react-player";
|
||||||
|
import IdentityData from "../interfaces/Identity";
|
||||||
import { MessageTypes } from "../interfaces/IMessage";
|
import { MessageTypes } from "../interfaces/IMessage";
|
||||||
import SocketEvents from "../interfaces/SocketEvents";
|
import SocketEvents from "../interfaces/SocketEvents";
|
||||||
import Message from "../util/Message";
|
import Message from "../util/Message";
|
||||||
|
|
@ -10,6 +11,7 @@ import PlayerSocket from "../ws/websocket";
|
||||||
type PlayerProps = {
|
type PlayerProps = {
|
||||||
id: string;
|
id: string;
|
||||||
socket: PlayerSocket;
|
socket: PlayerSocket;
|
||||||
|
identity?: IdentityData;
|
||||||
} & ReactPlayerProps;
|
} & ReactPlayerProps;
|
||||||
|
|
||||||
const Player: FC<PlayerProps> = (props) => {
|
const Player: FC<PlayerProps> = (props) => {
|
||||||
|
|
@ -21,10 +23,20 @@ const Player: FC<PlayerProps> = (props) => {
|
||||||
forceHLS: true,
|
forceHLS: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
socket.emitter.on(SocketEvents.GetPlayhead, (e) => {
|
useEffect(() => {
|
||||||
|
if (playerRef.current && typeof props.identity !== "undefined") {
|
||||||
|
console.log(props.identity.playhead);
|
||||||
|
playerRef.current.seekTo(props.identity.playhead);
|
||||||
|
setPaused(props.identity.paused);
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
socket.emitter.once(SocketEvents.SetPlayhead, (e) => {
|
||||||
|
console.log(e);
|
||||||
playerRef.current.seekTo(e.playhead);
|
playerRef.current.seekTo(e.playhead);
|
||||||
|
setPaused(e.paused);
|
||||||
});
|
});
|
||||||
const onSeek = (playedSeconds: number) => {
|
const onSeek = (playedSeconds: number) => {
|
||||||
|
if (!props.identity.admin) return;
|
||||||
if (paused) {
|
if (paused) {
|
||||||
socket?.send(
|
socket?.send(
|
||||||
MessageUtil.encode(
|
MessageUtil.encode(
|
||||||
|
|
@ -46,6 +58,7 @@ const Player: FC<PlayerProps> = (props) => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
const onPause = () => {
|
const onPause = () => {
|
||||||
|
if (!props.identity.admin) return;
|
||||||
setPaused(true);
|
setPaused(true);
|
||||||
socket?.send(
|
socket?.send(
|
||||||
MessageUtil.encode(
|
MessageUtil.encode(
|
||||||
|
|
@ -57,6 +70,7 @@ const Player: FC<PlayerProps> = (props) => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
const onPlay = () => {
|
const onPlay = () => {
|
||||||
|
if (!props.identity.admin) return;
|
||||||
setPaused(false);
|
setPaused(false);
|
||||||
socket?.send(
|
socket?.send(
|
||||||
MessageUtil.encode(
|
MessageUtil.encode(
|
||||||
|
|
@ -74,11 +88,12 @@ const Player: FC<PlayerProps> = (props) => {
|
||||||
width="100%"
|
width="100%"
|
||||||
height="100%"
|
height="100%"
|
||||||
config={config}
|
config={config}
|
||||||
controls
|
controls={props.identity.admin}
|
||||||
onPlay={onPlay}
|
onPlay={onPlay}
|
||||||
onPause={onPause}
|
onPause={onPause}
|
||||||
onSeek={onSeek}
|
onSeek={onSeek}
|
||||||
ref={playerRef}
|
ref={playerRef}
|
||||||
|
playing={!paused}
|
||||||
{...props}
|
{...props}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ interface IdentityData {
|
||||||
controller?: boolean;
|
controller?: boolean;
|
||||||
clientID?: string;
|
clientID?: string;
|
||||||
playlist?: string;
|
playlist?: string;
|
||||||
playHead?: number;
|
playhead?: number;
|
||||||
|
paused?: boolean;
|
||||||
user: IUser;
|
user: IUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
enum SocketEvents {
|
enum SocketEvents {
|
||||||
Identify = "Identify",
|
Identify = "Identify",
|
||||||
|
SetPlayhead = "SetPlayhead",
|
||||||
GetPlayhead = "GetPlayhead",
|
GetPlayhead = "GetPlayhead",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ const PlayerPage: NextPage<PlayerPageProps> = ({ user }) => {
|
||||||
setID(e.playlist);
|
setID(e.playlist);
|
||||||
setIdentity(e);
|
setIdentity(e);
|
||||||
});
|
});
|
||||||
|
console.log(identity);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|
@ -35,7 +36,7 @@ const PlayerPage: NextPage<PlayerPageProps> = ({ user }) => {
|
||||||
<title>Watch Together</title>
|
<title>Watch Together</title>
|
||||||
</Head>
|
</Head>
|
||||||
<Container height="100vh" background={"#000"}>
|
<Container height="100vh" background={"#000"}>
|
||||||
<Player id={id} socket={socket} />
|
<Player id={id} socket={socket} identity={identity} />
|
||||||
</Container>
|
</Container>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue