Skip to content

Commit f0411b4

Browse files
authored
Merge pull request #33 from PoglyApp/0.1.1-release
0.1.1 release
2 parents 2ee32df + 07c000d commit f0411b4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1528
-356
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
 
2424
<a href="https://github.com/clockworklabs/spacetimedb"><img src="https://img.shields.io/badge/powered_by-SpacetimeDB-000000.svg?style=flat-square" /></a>
2525
&nbsp;
26-
<img src="https://img.shields.io/badge/version-v0.1.0_beta-9f9f9f.svg?style=flat-square" />
26+
<img src="https://img.shields.io/badge/version-v0.1.1_beta-9f9f9f.svg?style=flat-square" />
2727
&nbsp;
2828
<a href="https://github.com/PoglyApp/pogly-standalone/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-50C878.svg?style=flat-square" /></a>
2929
</p>
@@ -33,7 +33,7 @@
3333
&nbsp;
3434
<a href="https://www.twitch.tv/poglygg"><img height="25" src="./images/social/twitch.svg" alt="Twitch" /></a>
3535
&nbsp;
36-
<a href="https://www.youtube.com/watch?v=c19tKRKa2ik"><img height="25" src="./images/social/youtube.svg" alt="YouTube" /></a>
36+
<a href="https://www.youtube.com/@PoglyApp"><img height="25" src="./images/social/youtube.svg" alt="YouTube" /></a>
3737
&nbsp;
3838
<a href="https://x.com/PoglyApp"><img height="25" src="./images/social/twitter.svg" alt="Twitter" /></a>
3939
</p>

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pogly-standalone",
3-
"version": "0.1.0",
3+
"version": "0.1.1",
44
"private": true,
55
"dependencies": {
66
"@clockworklabs/spacetimedb-sdk": "^0.11.0",

server/Config/ConfigTables.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public partial struct ZIndex
5959
public int Ceiling;
6060
}
6161

62-
private const string SEVEN_TV_REGEX = @"^https?:\/\/(www\.)?cdn\.7tv\.app(?:\/.*)?$";
62+
private const string SEVEN_TV_TENOR_REGEX = @"^https?:\/\/(www\.)?cdn\.7tv\.app(?:\/.*)?$|^https?:\/\/(www\.)?media\.tenor\.com(?:\/.*)?$";
6363

6464
private const string HTML_TAG_REGEX = @"<[^>]*>";
6565
}

server/Elements/ElementReducers.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public static void AddElement(ReducerContext ctx, ElementStruct element, int tra
1919
if (element is ElementStruct.ImageElement {ImageElement_.ImageElementData: ImageElementData.RawData data})
2020
{
2121
if (Config.FindByVersion(0)!.Value.StrictMode)
22-
if (!Regex.Match(data.RawData_, SEVEN_TV_REGEX, RegexOptions.IgnoreCase).Success)
22+
if (!Regex.Match(data.RawData_, SEVEN_TV_TENOR_REGEX, RegexOptions.IgnoreCase).Success)
2323
if (!IsGuestModerator(func, ctx.Sender)) return;
2424
}
2525

@@ -66,7 +66,7 @@ public static void AddElementToLayout(ReducerContext ctx, ElementStruct element,
6666
if (element is ElementStruct.ImageElement {ImageElement_.ImageElementData: ImageElementData.RawData data})
6767
{
6868
if (Config.FindByVersion(0)!.Value.StrictMode)
69-
if (!Regex.Match(data.RawData_, SEVEN_TV_REGEX, RegexOptions.IgnoreCase).Success)
69+
if (!Regex.Match(data.RawData_, SEVEN_TV_TENOR_REGEX, RegexOptions.IgnoreCase).Success)
7070
if (!IsGuestModerator(func, ctx.Sender)) return;
7171
}
7272

@@ -112,7 +112,7 @@ public static void UpdateElement(ReducerContext ctx, uint elementId, ElementStru
112112
if (element is ElementStruct.ImageElement {ImageElement_.ImageElementData: ImageElementData.RawData data})
113113
{
114114
if (Config.FindByVersion(0)!.Value.StrictMode)
115-
if (!Regex.Match(data.RawData_, SEVEN_TV_REGEX, RegexOptions.IgnoreCase).Success)
115+
if (!Regex.Match(data.RawData_, SEVEN_TV_TENOR_REGEX, RegexOptions.IgnoreCase).Success)
116116
if (!IsGuestModerator(func, ctx.Sender)) return;
117117
}
118118

@@ -155,7 +155,7 @@ public static void UpdateElementStruct(ReducerContext ctx, uint elementId, Eleme
155155
if (elementStruct is ElementStruct.ImageElement {ImageElement_.ImageElementData: ImageElementData.RawData data})
156156
{
157157
if (Config.FindByVersion(0)!.Value.StrictMode)
158-
if (!Regex.Match(data.RawData_, SEVEN_TV_REGEX, RegexOptions.IgnoreCase).Success)
158+
if (!Regex.Match(data.RawData_, SEVEN_TV_TENOR_REGEX, RegexOptions.IgnoreCase).Success)
159159
if (!IsGuestModerator(func, ctx.Sender)) return;
160160
}
161161

server/Layouts/LayoutReducers.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public static void SetLayoutActive(ReducerContext ctx, uint layoutId)
9999
}
100100

101101
[SpacetimeDB.Reducer]
102-
public static void DeleteLayout(ReducerContext ctx, uint layoutId, bool preserveElements = false)
102+
public static void DeleteLayout(ReducerContext ctx, uint layoutId, bool preserveElements = false, uint preserveLayoutId = 1)
103103
{
104104
string func = "DeleteLayout";
105105

@@ -127,7 +127,7 @@ public static void DeleteLayout(ReducerContext ctx, uint layoutId, bool preserve
127127
if (preserveElements)
128128
{
129129
var newE = e;
130-
newE.LayoutId = 1;
130+
newE.LayoutId = preserveLayoutId;
131131
Elements.UpdateById(e.Id, newE);
132132
}
133133
else

server/Utility/GuestUtility.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ private static bool GetGuest(string reducerContext, Identity ctx, out Guests gue
99
var g = Guests.FindByIdentity(ctx);
1010
if (g is null)
1111
{
12-
Log($"[{reducerContext}] Unable to GetGuest: {ctx} does not have Guest entry.",LogLevel.Error);
12+
Log($"[{reducerContext}] Unable to GetGuest: {ctx} does not have Guest entry.",LogLevel.Warn);
1313
guest = new Guests();
1414
return false;
1515
}
@@ -35,7 +35,7 @@ private static bool GetPermission(string reducerContext, Identity ctx, out Permi
3535
var p = Permissions.FindByIdentity(ctx);
3636
if (p is null)
3737
{
38-
Log($"[{reducerContext}] Unable to GetPermission: {ctx} does not have Permission entry.",LogLevel.Error);
38+
Log($"[{reducerContext}] Unable to GetPermission: {ctx} does not have Permission entry.",LogLevel.Warn);
3939
permissions = new Permissions();
4040
return false;
4141
}

src/App.tsx

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,17 @@ import { Loading } from "./Components/General/Loading";
2020
import Guests from "./module_bindings/guests";
2121
import { ErrorRefreshModal } from "./Components/Modals/ErrorRefreshModal";
2222
import { SetSubscriptions } from "./Utility/SetSubscriptions";
23-
import { IdentityContext } from "./Contexts/IdentityContext";
23+
import { SpacetimeContext } from "./Contexts/SpacetimeContext";
2424
import { ConfigContext } from "./Contexts/ConfigContext";
2525
import { SettingsContext } from "./Contexts/SettingsContext";
2626
import { ModalContext } from "./Contexts/ModalContext";
2727
import { CanvasInitializedType } from "./Types/General/CanvasInitializedType";
2828
import UpdateGuestNicknameReducer from "./module_bindings/update_guest_nickname_reducer";
2929
import { NotFound } from "./Pages/NotFound";
30+
import { SpacetimeContextType } from "./Types/General/SpacetimeContextType";
31+
import { Identity } from "@clockworklabs/spacetimedb-sdk";
32+
import Layouts from "./module_bindings/layouts";
33+
import { LayoutContext } from "./Contexts/LayoutContext";
3034

3135
export const App: React.FC = () => {
3236
const { closeModal } = useContext(ModalContext);
@@ -55,6 +59,9 @@ export const App: React.FC = () => {
5559
// GENERAL
5660
const [nickname, setNickname] = useState<string | null>(null);
5761
const [modals, setModals] = useState<ReactNode[]>([]);
62+
const [activeLayout, setActiveLayout] = useState<Layouts | undefined>(undefined);
63+
64+
const [spacetimeContext, setSpacetimeContext] = useState<SpacetimeContextType>();
5865

5966
useGetVersionNumber(setVersionNumber);
6067
useGetConnectionConfig(setConnectionConfig);
@@ -71,7 +78,24 @@ export const App: React.FC = () => {
7178

7279
setNickname(nickname);
7380
}
74-
}, [stdbInitialized]);
81+
82+
// Local cache has not updated with the nickname at this point yet, hence the guestWithNickname
83+
const guest = Guests.findByIdentity(spacetime.Identity!);
84+
const guestWithNickname: Guests = { ...guest, nickname: nickname } as Guests;
85+
86+
setSpacetimeContext({
87+
Client: spacetime.Client!,
88+
Identity: guestWithNickname,
89+
Elements: [],
90+
ElementData: [],
91+
Guests: [],
92+
});
93+
}, [stdbInitialized, spacetime.Identity, spacetime.Client]);
94+
95+
useEffect(() => {
96+
if (!stdbInitialized) return;
97+
if (!activeLayout) setActiveLayout(Layouts.filterByActive(true).next().value);
98+
}, [activeLayout, stdbInitialized]);
7599

76100
const router = createBrowserRouter(
77101
createRoutesFromElements(
@@ -109,6 +133,7 @@ export const App: React.FC = () => {
109133
buttonText="Reload"
110134
titleText="Error connecting to Pogly instance!"
111135
contentText="This means that either the domain or module name selected are invalid. Please try again!"
136+
clearSettings={true}
112137
/>
113138
);
114139
}
@@ -127,6 +152,7 @@ export const App: React.FC = () => {
127152
titleText="Authentication Required"
128153
contentText="This Pogly Standalone instance requires authentication.
129154
You either did not provide an authentication key, or it was incorrect."
155+
clearSettings={true}
130156
/>
131157
);
132158
}
@@ -161,20 +187,20 @@ export const App: React.FC = () => {
161187

162188
// Step 8) Load Pogly
163189
return (
164-
<>
165-
<IdentityContext.Provider value={{ identity: spacetime.Identity, nickname: nickname }}>
166-
<ConfigContext.Provider value={spacetime.InstanceConfig}>
167-
<SettingsContext.Provider value={{ settings, setSettings }}>
190+
<SpacetimeContext.Provider value={spacetimeContext}>
191+
<ConfigContext.Provider value={spacetime.InstanceConfig}>
192+
<SettingsContext.Provider value={{ settings, setSettings }}>
193+
<LayoutContext.Provider value={{ activeLayout: activeLayout, setActiveLayout: setActiveLayout }}>
168194
<ModalContext.Provider value={{ modals, setModals, closeModal }}>
169195
{modals.map((modal) => {
170196
return modal;
171197
})}
172198
<RouterProvider router={router} />
173199
<ToastContainer />
174200
</ModalContext.Provider>
175-
</SettingsContext.Provider>
176-
</ConfigContext.Provider>
177-
</IdentityContext.Provider>
178-
</>
201+
</LayoutContext.Provider>
202+
</SettingsContext.Provider>
203+
</ConfigContext.Provider>
204+
</SpacetimeContext.Provider>
179205
);
180206
};

src/Components/Containers/ContextMenus/GuestListContextMenu.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { Menu, MenuItem, Paper } from "@mui/material";
22
import Guests from "../../../module_bindings/guests";
3-
import { useContext } from "react";
4-
import { IdentityContext } from "../../../Contexts/IdentityContext";
3+
import { useSpacetimeContext } from "../../../Contexts/SpacetimeContext";
54
import PermissionLevel from "../../../module_bindings/permission_level";
65
import Permissions from "../../../module_bindings/permissions";
76
import styled from "styled-components";
@@ -14,8 +13,8 @@ interface IProps {
1413
}
1514

1615
export const GuestListContextMenu = (props: IProps) => {
17-
const identity = useContext(IdentityContext);
18-
const identityPermission = Permissions.findByIdentity(identity.identity)?.permissionLevel;
16+
const { Identity } = useSpacetimeContext();
17+
const identityPermission = Permissions.findByIdentity(Identity.identity)?.permissionLevel;
1918

2019
const selectedGuest: Guests | null = props.contextMenu ? props.contextMenu.guest : null;
2120
let selectedGuestPermission: PermissionLevel | undefined;
@@ -51,7 +50,7 @@ export const GuestListContextMenu = (props: IProps) => {
5150
{selectedGuestPermission?.tag === undefined ? "User" : selectedGuestPermission?.tag}
5251
</Paper>
5352

54-
{!selectedGuest.identity.isEqual(identity.identity) && identityPermission?.tag === "Owner" ? (
53+
{!selectedGuest.identity.isEqual(Identity.identity) && identityPermission?.tag === "Owner" ? (
5554
selectedGuestPermission?.tag === "Moderator" ? (
5655
<StyledMenuItem
5756
onClick={() => {

src/Components/Containers/CursorsContainer.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@ import { useAppSelector } from "../../Store/Features/store";
33
import Guests from "../../module_bindings/guests";
44
import { CursorComponent } from "../General/CursorComponent";
55
import Config from "../../module_bindings/config";
6-
import { IdentityContext } from "../../Contexts/IdentityContext";
6+
import { useSpacetimeContext } from "../../Contexts/SpacetimeContext";
77
import { ConfigContext } from "../../Contexts/ConfigContext";
88

99
export const CursorsContainer = () => {
10-
const identity = useContext(IdentityContext);
10+
const { Identity } = useSpacetimeContext();
1111
const config: Config = useContext(ConfigContext);
12+
1213
const guests = useAppSelector((state: any) => state.guests.guests);
1314

1415
return (
1516
<>
1617
{guests
1718
.filter(
18-
(guest: Guests) => guest.identity.toHexString() !== identity.identity.toHexString() && guest.nickname !== ""
19+
(guest: Guests) => guest.identity.toHexString() !== Identity.identity.toHexString() && guest.nickname !== ""
1920
)
2021
.map((guest: Guests) => {
2122
if (config.authentication && !guest.authenticated) return <></>;

src/Components/ElementSelectionMenu/Categories/ImageCategory.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { StyledInput } from "../../StyledComponents/StyledInput";
1414
import { HandleElementSelectionContextMenu } from "../../../Utility/HandleContextMenu";
1515
import { ModalContext } from "../../../Contexts/ModalContext";
1616
import PermissionLevel from "../../../module_bindings/permission_level";
17+
import { LayoutContext } from "../../../Contexts/LayoutContext";
1718

1819
interface IProps {
1920
elementData: ElementData[];
@@ -24,6 +25,7 @@ interface IProps {
2425

2526
export const ImageCategory = (props: IProps) => {
2627
const { setModals } = useContext(ModalContext);
28+
const layoutContext = useContext(LayoutContext);
2729

2830
const [searchimage, setSearchImage] = useState<string>("");
2931

@@ -37,7 +39,8 @@ export const ImageCategory = (props: IProps) => {
3739
imageElementData: ImageElementData.ElementDataId(elementData.id),
3840
width: elementData.dataWidth,
3941
height: elementData.dataHeight,
40-
})
42+
}),
43+
layoutContext?.activeLayout!
4144
);
4245
};
4346

@@ -78,6 +81,8 @@ export const ImageCategory = (props: IProps) => {
7881
sx={{
7982
color: "#ffffffa6",
8083
textTransform: "initial",
84+
justifyContent: "left",
85+
width: "100%",
8186
}}
8287
onClick={showImageUploadModal}
8388
>
@@ -104,6 +109,8 @@ export const ImageCategory = (props: IProps) => {
104109
sx={{
105110
color: "#ffffffa6",
106111
textTransform: "initial",
112+
justifyContent: "left",
113+
width: "100%",
107114
}}
108115
onClick={() => AddElementToCanvas(elementData)}
109116
>

0 commit comments

Comments
 (0)