@streamplace/components 0.8.17 → 0.8.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/mobile-player/video-async.native.d.ts.map +1 -1
- package/dist/components/mobile-player/video-async.native.js +1 -1
- package/dist/components/mobile-player/video-async.native.js.map +1 -1
- package/dist/components/ui/menu.d.ts +14 -0
- package/dist/components/ui/menu.d.ts.map +1 -1
- package/dist/components/ui/menu.js +81 -2
- package/dist/components/ui/menu.js.map +1 -1
- package/dist/components/ui/text.d.ts +1 -1
- package/dist/lib/theme/atoms.d.ts +7 -7
- package/dist/lib/theme/theme.d.ts +1 -1
- package/dist/lib/theme/tokens.d.ts +1 -1
- package/dist/lib/theme/tokens.js +1 -1
- package/dist/livestream-provider/index.d.ts +2 -1
- package/dist/livestream-provider/index.d.ts.map +1 -1
- package/dist/livestream-provider/index.js +4 -2
- package/dist/livestream-provider/index.js.map +1 -1
- package/dist/livestream-provider/websocket.d.ts.map +1 -1
- package/dist/livestream-provider/websocket.js +15 -1
- package/dist/livestream-provider/websocket.js.map +1 -1
- package/dist/livestream-store/livestream-state.d.ts +2 -0
- package/dist/livestream-store/livestream-state.d.ts.map +1 -1
- package/dist/livestream-store/livestream-store.d.ts +1 -0
- package/dist/livestream-store/livestream-store.d.ts.map +1 -1
- package/dist/livestream-store/livestream-store.js +5 -1
- package/dist/livestream-store/livestream-store.js.map +1 -1
- package/dist/livestream-store/websocket-consumer.d.ts.map +1 -1
- package/dist/livestream-store/websocket-consumer.js +97 -75
- package/dist/livestream-store/websocket-consumer.js.map +1 -1
- package/locales/en-US/common.ftl +16 -0
- package/locales/en-US/settings.ftl +13 -0
- package/locales/es-ES/common.ftl +16 -0
- package/locales/es-ES/settings.ftl +1 -1
- package/locales/fr-FR/common.ftl +16 -0
- package/locales/pt-BR/common.ftl +16 -0
- package/locales/pt-BR/settings.ftl +1 -1
- package/locales/zh-Hant/common.ftl +16 -0
- package/node-compile-cache/v22.15.0-x64-efe9a9df-0/37be0eec +0 -0
- package/package.json +2 -2
- package/src/components/mobile-player/video-async.native.tsx +2 -1
- package/src/components/ui/menu.tsx +180 -3
- package/src/lib/theme/tokens.ts +1 -1
- package/src/livestream-provider/index.tsx +5 -1
- package/src/livestream-provider/websocket.tsx +15 -1
- package/src/livestream-store/livestream-state.tsx +2 -0
- package/src/livestream-store/livestream-store.tsx +5 -0
- package/src/livestream-store/websocket-consumer.tsx +95 -73
|
@@ -22,6 +22,8 @@ export const makeLivestreamStore = (): StoreApi<LivestreamState> => {
|
|
|
22
22
|
authors: {},
|
|
23
23
|
recentSegments: [],
|
|
24
24
|
problems: [],
|
|
25
|
+
websocketConnected: false,
|
|
26
|
+
hasReceivedSegment: false,
|
|
25
27
|
}));
|
|
26
28
|
};
|
|
27
29
|
|
|
@@ -59,4 +61,7 @@ export const useLivestream = () => useLivestreamStore((x) => x.livestream);
|
|
|
59
61
|
|
|
60
62
|
export const useSegment = () => useLivestreamStore((x) => x.segment);
|
|
61
63
|
|
|
64
|
+
export const useRecentSegments = () =>
|
|
65
|
+
useLivestreamStore((x) => x.recentSegments);
|
|
66
|
+
|
|
62
67
|
export const useRenditions = () => useLivestreamStore((x) => x.renditions);
|
|
@@ -21,84 +21,106 @@ export const handleWebSocketMessages = (
|
|
|
21
21
|
messages: any[],
|
|
22
22
|
): LivestreamState => {
|
|
23
23
|
for (let message of messages) {
|
|
24
|
-
if (
|
|
25
|
-
const newLivestream = message as LivestreamViewHydrated;
|
|
26
|
-
const oldLivestream = state.livestream;
|
|
27
|
-
|
|
28
|
-
// check if this is actually new
|
|
29
|
-
if (!oldLivestream || oldLivestream.uri !== newLivestream.uri) {
|
|
30
|
-
const streamTitle = newLivestream.record.title || "something cool!";
|
|
31
|
-
const systemMessage = SystemMessages.streamStart(streamTitle);
|
|
32
|
-
// set proper times
|
|
33
|
-
systemMessage.indexedAt = newLivestream.indexedAt;
|
|
34
|
-
systemMessage.record.createdAt = newLivestream.record.createdAt;
|
|
35
|
-
|
|
36
|
-
state = reduceChat(state, [systemMessage], []);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
state = {
|
|
40
|
-
...state,
|
|
41
|
-
livestream: newLivestream,
|
|
42
|
-
};
|
|
43
|
-
} else if (PlaceStreamLivestream.isViewerCount(message)) {
|
|
44
|
-
message = message as PlaceStreamLivestream.ViewerCount;
|
|
45
|
-
state = {
|
|
46
|
-
...state,
|
|
47
|
-
viewers: message.count,
|
|
48
|
-
};
|
|
49
|
-
} else if (PlaceStreamChatDefs.isMessageView(message)) {
|
|
50
|
-
message = message as PlaceStreamChatDefs.MessageView;
|
|
51
|
-
// Explicitly map MessageView to MessageViewHydrated
|
|
52
|
-
const hydrated: ChatMessageViewHydrated = {
|
|
53
|
-
uri: message.uri,
|
|
54
|
-
cid: message.cid,
|
|
55
|
-
author: message.author,
|
|
56
|
-
record: message.record as PlaceStreamChatMessage.Record,
|
|
57
|
-
indexedAt: message.indexedAt,
|
|
58
|
-
chatProfile: (message as any).chatProfile,
|
|
59
|
-
replyTo: (message as any).replyTo,
|
|
60
|
-
deleted: message.deleted,
|
|
61
|
-
};
|
|
62
|
-
state = reduceChat(state, [hydrated], [], []);
|
|
63
|
-
} else if (PlaceStreamSegment.isRecord(message)) {
|
|
64
|
-
const newRecentSegments = [...state.recentSegments];
|
|
65
|
-
newRecentSegments.unshift(message);
|
|
66
|
-
if (newRecentSegments.length > MAX_RECENT_SEGMENTS) {
|
|
67
|
-
newRecentSegments.pop();
|
|
68
|
-
}
|
|
69
|
-
state = {
|
|
70
|
-
...state,
|
|
71
|
-
segment: message as PlaceStreamSegment.Record,
|
|
72
|
-
recentSegments: newRecentSegments,
|
|
73
|
-
problems: findProblems(newRecentSegments),
|
|
74
|
-
};
|
|
75
|
-
} else if (PlaceStreamDefs.isBlockView(message)) {
|
|
76
|
-
const block = message as PlaceStreamDefs.BlockView;
|
|
77
|
-
state = reduceChat(state, [], [block], []);
|
|
78
|
-
} else if (PlaceStreamDefs.isRenditions(message)) {
|
|
79
|
-
message = message as PlaceStreamDefs.Renditions;
|
|
24
|
+
if (message.$type === "place.stream.error") {
|
|
80
25
|
state = {
|
|
81
26
|
...state,
|
|
82
|
-
|
|
27
|
+
problems: [
|
|
28
|
+
...state.problems,
|
|
29
|
+
{
|
|
30
|
+
code: message.code,
|
|
31
|
+
message: message.message,
|
|
32
|
+
severity: "error",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
83
35
|
};
|
|
84
|
-
} else
|
|
85
|
-
state
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const hideRecord = message as PlaceStreamChatGate.Record;
|
|
91
|
-
const hiddenMessageUri = hideRecord.hiddenMessage;
|
|
92
|
-
const newPendingHides = [...state.pendingHides];
|
|
93
|
-
if (!newPendingHides.includes(hiddenMessageUri)) {
|
|
94
|
-
newPendingHides.push(hiddenMessageUri);
|
|
36
|
+
} else {
|
|
37
|
+
if (!state.websocketConnected) {
|
|
38
|
+
state = {
|
|
39
|
+
...state,
|
|
40
|
+
websocketConnected: true,
|
|
41
|
+
};
|
|
95
42
|
}
|
|
96
43
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
44
|
+
if (PlaceStreamLivestream.isLivestreamView(message)) {
|
|
45
|
+
const newLivestream = message as LivestreamViewHydrated;
|
|
46
|
+
const oldLivestream = state.livestream;
|
|
47
|
+
|
|
48
|
+
// check if this is actually new
|
|
49
|
+
if (!oldLivestream || oldLivestream.uri !== newLivestream.uri) {
|
|
50
|
+
const streamTitle = newLivestream.record.title || "something cool!";
|
|
51
|
+
const systemMessage = SystemMessages.streamStart(streamTitle);
|
|
52
|
+
// set proper times
|
|
53
|
+
systemMessage.indexedAt = newLivestream.indexedAt;
|
|
54
|
+
systemMessage.record.createdAt = newLivestream.record.createdAt;
|
|
55
|
+
|
|
56
|
+
state = reduceChat(state, [systemMessage], []);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
state = {
|
|
60
|
+
...state,
|
|
61
|
+
livestream: newLivestream,
|
|
62
|
+
};
|
|
63
|
+
} else if (PlaceStreamLivestream.isViewerCount(message)) {
|
|
64
|
+
message = message as PlaceStreamLivestream.ViewerCount;
|
|
65
|
+
state = {
|
|
66
|
+
...state,
|
|
67
|
+
viewers: message.count,
|
|
68
|
+
};
|
|
69
|
+
} else if (PlaceStreamChatDefs.isMessageView(message)) {
|
|
70
|
+
message = message as PlaceStreamChatDefs.MessageView;
|
|
71
|
+
// Explicitly map MessageView to MessageViewHydrated
|
|
72
|
+
const hydrated: ChatMessageViewHydrated = {
|
|
73
|
+
uri: message.uri,
|
|
74
|
+
cid: message.cid,
|
|
75
|
+
author: message.author,
|
|
76
|
+
record: message.record as PlaceStreamChatMessage.Record,
|
|
77
|
+
indexedAt: message.indexedAt,
|
|
78
|
+
chatProfile: (message as any).chatProfile,
|
|
79
|
+
replyTo: (message as any).replyTo,
|
|
80
|
+
deleted: message.deleted,
|
|
81
|
+
};
|
|
82
|
+
state = reduceChat(state, [hydrated], [], []);
|
|
83
|
+
} else if (PlaceStreamSegment.isRecord(message)) {
|
|
84
|
+
const newRecentSegments = [...state.recentSegments];
|
|
85
|
+
newRecentSegments.unshift(message);
|
|
86
|
+
if (newRecentSegments.length > MAX_RECENT_SEGMENTS) {
|
|
87
|
+
newRecentSegments.pop();
|
|
88
|
+
}
|
|
89
|
+
state = {
|
|
90
|
+
...state,
|
|
91
|
+
segment: message as PlaceStreamSegment.Record,
|
|
92
|
+
recentSegments: newRecentSegments,
|
|
93
|
+
problems: findProblems(newRecentSegments),
|
|
94
|
+
hasReceivedSegment: true,
|
|
95
|
+
};
|
|
96
|
+
} else if (PlaceStreamDefs.isBlockView(message)) {
|
|
97
|
+
const block = message as PlaceStreamDefs.BlockView;
|
|
98
|
+
state = reduceChat(state, [], [block], []);
|
|
99
|
+
} else if (PlaceStreamDefs.isRenditions(message)) {
|
|
100
|
+
message = message as PlaceStreamDefs.Renditions;
|
|
101
|
+
state = {
|
|
102
|
+
...state,
|
|
103
|
+
renditions: message.renditions,
|
|
104
|
+
};
|
|
105
|
+
} else if (AppBskyActorDefs.isProfileViewBasic(message)) {
|
|
106
|
+
state = {
|
|
107
|
+
...state,
|
|
108
|
+
profile: message,
|
|
109
|
+
};
|
|
110
|
+
} else if (PlaceStreamChatGate.isRecord(message)) {
|
|
111
|
+
const hideRecord = message as PlaceStreamChatGate.Record;
|
|
112
|
+
const hiddenMessageUri = hideRecord.hiddenMessage;
|
|
113
|
+
const newPendingHides = [...state.pendingHides];
|
|
114
|
+
if (!newPendingHides.includes(hiddenMessageUri)) {
|
|
115
|
+
newPendingHides.push(hiddenMessageUri);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
state = {
|
|
119
|
+
...state,
|
|
120
|
+
pendingHides: newPendingHides,
|
|
121
|
+
};
|
|
122
|
+
state = reduceChat(state, [], [], [hiddenMessageUri]);
|
|
123
|
+
}
|
|
102
124
|
}
|
|
103
125
|
}
|
|
104
126
|
return reduceChat(state, [], [], []);
|