Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions src/pages/GamePage.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import {
} from "../game";
import useFirebaseRef from "../hooks/useFirebaseRef";
import useKeydown, { getModifierState } from "../hooks/useKeydown";
import { formatANoun } from "../util";
import { formatANoun, sleep } from "../util";
import LoadingPage from "./LoadingPage";
import NotFoundPage from "./NotFoundPage";

Expand Down Expand Up @@ -93,6 +93,22 @@ function getNextGameId(gameId) {
return `${id}-${num + 1}`;
}

function ensureConnected() {
return new Promise((resolve) => {
const ref = firebase.database().ref(".info/connected");
let wasConnected = true;
const update = (snap) => {
if (snap.val() === true) {
ref.off("value", update);
resolve(wasConnected);
} else {
wasConnected = false;
}
};
ref.on("value", update);
});
}

function GamePage({ match }) {
const user = useContext(UserContext);
const { volume, notifications } = useContext(SettingsContext);
Expand Down Expand Up @@ -133,17 +149,16 @@ function GamePage({ match }) {
if (finished.gameId === gameId) {
// Attempt to finish the game a few times before giving up
(async () => {
const numRetries = 8;
const numRetries = 10;
for (let i = 0; i < numRetries; i++) {
try {
await finishGame({ gameId });
break;
} catch (error) {
if (i === numRetries - 1) {
setFinished({ gameId, error: error + "" });
} else {
const delay = 100 * Math.pow(2, i);
await new Promise((resolve) => setTimeout(resolve, delay));
} else if (await ensureConnected()) {
await sleep(100 * Math.pow(1.5, i));
}
}
}
Expand Down
45 changes: 26 additions & 19 deletions src/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,26 @@ function isPunctuation(charCode) {
);
}

const fixedDataset = englishDataset.addPhrase((phrase) =>
phrase
.setMetadata({ originalWord: "brainrot" })
.addPattern(pattern`skibidi`)
.addPattern(pattern`|riz`)
.addPattern(pattern`gyat`)
.addPattern(pattern`sigma`)
.addPattern(pattern`xook`)
.addPattern(pattern`xoink`)
.addPattern(pattern`xiooix`)
.addPattern(pattern`admits`)
.addPattern(pattern`orz`)
.addPattern(pattern`otz`)
.addPattern(pattern`ozr`)
.addPattern(pattern`lebron`)
);
const fixedDataset = englishDataset
.addPhrase((phrase) =>
phrase.setMetadata({ originalWord: "ass" }).addWhitelistedTerm("45s")
)
.addPhrase((phrase) =>
phrase
.setMetadata({ originalWord: "brainrot" })
.addPattern(pattern`skibidi`)
.addPattern(pattern`|riz`)
.addPattern(pattern`gyat`)
.addPattern(pattern`sigma`)
.addPattern(pattern`xook`)
.addPattern(pattern`xoink`)
.addPattern(pattern`xiooix`)
.addPattern(pattern`admits`)
.addPattern(pattern`orz`)
.addPattern(pattern`otz`)
.addPattern(pattern`ozr`)
.addPattern(pattern`lebron`)
);
// Work-around for:
// https://github.com/jo3-l/obscenity/issues/100
// https://github.com/jo3-l/obscenity/pull/101
Expand Down Expand Up @@ -165,11 +169,10 @@ export function formatDateTime(timestamp) {
return d.toLocaleString(undefined, opts);
}

const trimRegex =
/^[\p{White_Space}\p{Default_Ignorable_Code_Point}]+|[\p{White_Space}\p{Default_Ignorable_Code_Point}]+$/gu;
const trimRegex = /\p{Default_Ignorable_Code_Point}+/gu;

export function unicodeTrim(str) {
return str.replace(trimRegex, "");
return str.replace(trimRegex, "").trim();
}

export function parseDuration(spec) {
Expand All @@ -183,3 +186,7 @@ export function parseDuration(spec) {
.map((v, i) => (m[i + 1] ? parseFloat(m[i + 1]) * v : 0))
.reduce((a, c) => a + c);
}

export function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
1 change: 1 addition & 0 deletions src/util.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ describe("bad words filter", () => {
expect(badWords.hasMatch("fick")).toBe(false);
expect(badWords.hasMatch("fickle")).toBe(false);
expect(badWords.hasMatch("a\u200dsshole")).toBe(true);
expect(badWords.hasMatch("45s")).toBe(false);
});
});

Expand Down