Skip to content

Commit 8b54e6b

Browse files
committed
add compat. with discord activities
1 parent fa71c43 commit 8b54e6b

File tree

8 files changed

+109
-56
lines changed

8 files changed

+109
-56
lines changed

Synergism.css

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1834,7 +1834,6 @@ p#reincarnatehotkeys {
18341834
display: flex;
18351835
flex-direction: row;
18361836
justify-content: center;
1837-
flex-flow: wrap;
18381837
gap: 10px 15px;
18391838
margin: 15px 0;
18401839
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"description": "",
55
"main": "dist/bundle.js",
66
"dependencies": {
7+
"@discord/embedded-app-sdk": "^1.4.3",
78
"@ungap/custom-elements": "^1.3.0",
89
"break_infinity.js": "^2.0.0",
910
"clipboard": "^2.0.11",

src/EventListeners.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import {
5353
promocodesPrompt,
5454
reloadDeleteGame,
5555
resetGame,
56+
safeLocalStorage,
5657
updateSaveString
5758
} from './ImportExport'
5859
import { buyPlatonicUpgrades, createPlatonicDescription } from './Platonic'
@@ -1108,7 +1109,7 @@ TODO: Fix this entire tab it's utter shit
11081109
const element = event.target as HTMLInputElement
11091110

11101111
if (!element.checked) {
1111-
localStorage.removeItem('copyToClipboard')
1112+
safeLocalStorage.removeItem('copyToClipboard')
11121113
event.stopPropagation()
11131114
return
11141115
}
@@ -1119,9 +1120,9 @@ TODO: Fix this entire tab it's utter shit
11191120

11201121
if (confirmed) {
11211122
element.checked = !element.checked
1122-
localStorage.setItem('copyToClipboard', '')
1123+
safeLocalStorage.setItem('copyToClipboard', '')
11231124
} else {
1124-
localStorage.removeItem('copyToClipboard')
1125+
safeLocalStorage.removeItem('copyToClipboard')
11251126
}
11261127
})
11271128

src/ImportExport.ts

Lines changed: 71 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,7 @@ export const exportSynergism = async (
246246
: 1
247247
if (+player.singularityUpgrades.goldenQuarks3.getEffect().bonus > 0) {
248248
player.goldenQuarks += Math.floor(
249-
player.goldenQuarksTimer
250-
/ (3600 / +player.singularityUpgrades.goldenQuarks3.getEffect().bonus)
249+
player.goldenQuarksTimer / (3600 / +player.singularityUpgrades.goldenQuarks3.getEffect().bonus)
251250
) * bonusGQMultiplier
252251
player.goldenQuarksTimer = player.goldenQuarksTimer
253252
% (3600 / +player.singularityUpgrades.goldenQuarks3.getEffect().bonus)
@@ -264,11 +263,9 @@ export const exportSynergism = async (
264263
return
265264
}
266265

267-
const save = (await localforage.getItem<Blob>('Synergysave2'))
268-
?? localStorage.getItem('Synergysave2')
269-
const saveString = typeof save === 'string' ? save : await save?.text()
266+
const saveString = await getSaveString()
270267

271-
if (saveString === undefined) {
268+
if (saveString === null) {
272269
return Alert('How?')
273270
}
274271

@@ -357,11 +354,8 @@ export const importSynergism = async (input: string | null, reset = false) => {
357354
}
358355

359356
saveCheck.canSave = false
360-
const item = new Blob([saveString], { type: 'text/plain' })
361-
localStorage.setItem('Synergysave2', saveString)
362-
await localforage.setItem<Blob>('Synergysave2', item)
363-
364-
localStorage.setItem('saveScumIsCheating', Date.now().toString())
357+
await setSave(saveString)
358+
safeLocalStorage.setItem('saveScumIsCheating', Date.now().toString())
365359

366360
await reloadShit(reset)
367361
saveCheck.canSave = true
@@ -852,11 +846,11 @@ export const promocodes = async (input: string | null, amount?: number) => {
852846
} else if (input === 'gamble') {
853847
if (
854848
typeof player.skillCode === 'number'
855-
|| typeof localStorage.getItem('saveScumIsCheating') === 'string'
849+
|| typeof safeLocalStorage.getItem('saveScumIsCheating') === 'string'
856850
) {
857851
if (
858852
(Date.now() - player.skillCode!) / 1000 < 3600
859-
|| (Date.now() - Number(localStorage.getItem('saveScumIsCheating')))
853+
|| (Date.now() - Number(safeLocalStorage.getItem('saveScumIsCheating')))
860854
/ 1000
861855
< 3600
862856
) {
@@ -890,7 +884,7 @@ export const promocodes = async (input: string | null, amount?: number) => {
890884
))
891885
}
892886

893-
localStorage.setItem('saveScumIsCheating', Date.now().toString())
887+
safeLocalStorage.setItem('saveScumIsCheating', Date.now().toString())
894888
const dice = (window.crypto.getRandomValues(new Uint8Array(1))[0] % 6) + 1 // [1, 6]
895889

896890
if (dice === 1) {
@@ -1236,11 +1230,11 @@ const dailyCodeReward = () => {
12361230
}
12371231

12381232
export const handleLastModified = (lastModified: number) => {
1239-
const localStorageFirstPlayed = localStorage.getItem('firstPlayed')
1233+
const localStorageFirstPlayed = safeLocalStorage.getItem('firstPlayed')
12401234
const lastModifiedDate = new Date(lastModified)
12411235

12421236
if (localStorageFirstPlayed === null) {
1243-
localStorage.setItem('firstPlayed', lastModifiedDate.toISOString())
1237+
safeLocalStorage.setItem('firstPlayed', lastModifiedDate.toISOString())
12441238
return
12451239
}
12461240

@@ -1251,6 +1245,66 @@ export const handleLastModified = (lastModified: number) => {
12511245
// for the new file, set the oldest date to the last modified.
12521246
if (localFirstPlayedDate.getTime() > lastModifiedDate.getTime()) {
12531247
player.firstPlayed = lastModifiedDate.toISOString()
1254-
localStorage.setItem('firstPlayed', player.firstPlayed)
1248+
safeLocalStorage.setItem('firstPlayed', player.firstPlayed)
1249+
}
1250+
}
1251+
1252+
export const getSaveString = async () => {
1253+
try {
1254+
const save = (await localforage.getItem<Blob>('Synergysave2'))
1255+
?? localStorage.getItem('Synergysave2')
1256+
1257+
return typeof save === 'string' ? save : await save?.text() ?? null
1258+
} catch (e) {
1259+
const p = playerJsonSchema.parse(player)
1260+
return btoa(JSON.stringify(p))
1261+
}
1262+
}
1263+
1264+
export const setSave = async (saveString: string) => {
1265+
try {
1266+
const item = new Blob([saveString], { type: 'text/plain' })
1267+
localStorage.setItem('Synergysave2', saveString)
1268+
await localforage.setItem<Blob>('Synergysave2', item)
1269+
} catch {}
1270+
}
1271+
1272+
export const safeLocalStorage = {
1273+
/**
1274+
* Same as localStorage.setItem, but errors are swallowed
1275+
*/
1276+
setItem (key: string, value: string) {
1277+
try {
1278+
localStorage.setItem(key, value)
1279+
} catch {}
1280+
},
1281+
1282+
/**
1283+
* Same as localStorage.removeItem, but errors are swallowed
1284+
*/
1285+
removeItem (key: string) {
1286+
try {
1287+
localStorage.removeItem(key)
1288+
} catch {}
1289+
},
1290+
1291+
/**
1292+
* Same as localStorage.getItem, but errors are swallowed
1293+
*/
1294+
getItem (key: string) {
1295+
try {
1296+
return localStorage.getItem(key)
1297+
} catch {
1298+
return null
1299+
}
1300+
},
1301+
1302+
/**
1303+
* Same as localStorage.clear, but errors are swallowed
1304+
*/
1305+
clear () {
1306+
try {
1307+
localStorage.clear()
1308+
} catch {}
12551309
}
12561310
}

src/Login.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import i18next from 'i18next'
2-
import localforage from 'localforage'
32
import { DOMCacheGetOrSet } from './Cache/DOM'
4-
import { importSynergism } from './ImportExport'
3+
import { getSaveString, importSynergism } from './ImportExport'
54
import { QuarkHandler, setQuarkBonus } from './Quark'
65
import { player } from './Synergism'
76
import { Alert } from './UpdateHTML'
@@ -218,11 +217,9 @@ async function logout () {
218217
}
219218

220219
async function saveToCloud () {
221-
const save = (await localforage.getItem<Blob>('Synergysave2')
222-
.then((b) => b?.text())
223-
.catch(() => null)) ?? localStorage.getItem('Synergysave2')
220+
const save = await getSaveString()
224221

225-
if (typeof save !== 'string') {
222+
if (save === null) {
226223
console.log('Yeah, no save here.')
227224
return
228225
}

src/Synergism.ts

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ import {
135135
// import { LegacyShopUpgrades } from './types/LegacySynergism';
136136

137137
import i18next from 'i18next'
138-
import localforage from 'localforage'
139138
import { BlueberryUpgrade, blueberryUpgradeData, updateLoadoutHoverClasses } from './BlueberryUpgrades'
140139
import { DOMCacheGetOrSet } from './Cache/DOM'
141140
import { lastUpdated, prod, testing, version } from './Config'
@@ -174,6 +173,8 @@ import { changeSubTab, changeTab, Tabs } from './Tabs'
174173
import { settingAnnotation, toggleIconSet, toggleTheme } from './Themes'
175174
import { clearTimeout, clearTimers, setInterval, setTimeout } from './Timers'
176175
import type { PlayerSave } from './types/LegacySynergism'
176+
import { getSaveString, safeLocalStorage, setSave } from './ImportExport'
177+
import { patchUrlMappings } from '@discord/embedded-app-sdk'
177178

178179
export const player: Player = {
179180
firstPlayed: new Date().toISOString(),
@@ -1515,15 +1516,12 @@ export const saveSynergy = async (button?: boolean): Promise<boolean> => {
15151516
const save = btoa(JSON.stringify(p))
15161517

15171518
if (save !== null) {
1518-
const saveBlob = new Blob([save], { type: 'text/plain' })
1519-
15201519
// Should prevent overwritting of localforage that is currently used
15211520
if (!saveCheck.canSave) {
15221521
return false
15231522
}
15241523

1525-
localStorage.setItem('Synergysave2', save)
1526-
await localforage.setItem<Blob>('Synergysave2', saveBlob)
1524+
await setSave(save)
15271525
} else {
15281526
await Alert(i18next.t('testing.errorSaving'))
15291527
return false
@@ -1539,10 +1537,7 @@ export const saveSynergy = async (button?: boolean): Promise<boolean> => {
15391537
}
15401538

15411539
const loadSynergy = async () => {
1542-
const save = (await localforage.getItem<Blob>('Synergysave2'))
1543-
?? localStorage.getItem('Synergysave2')
1544-
1545-
const saveString = typeof save === 'string' ? save : await save?.text()
1540+
const saveString = await getSaveString()
15461541
const data = saveString
15471542
? (JSON.parse(atob(saveString)) as PlayerSave & Record<string, unknown>)
15481543
: null
@@ -6194,13 +6189,10 @@ export const reloadShit = async (reset = false) => {
61946189
setTimeout(res, 0)
61956190
})
61966191

6197-
const save = (await localforage.getItem<Blob>('Synergysave2'))
6198-
?? localStorage.getItem('Synergysave2')
6192+
const saveString = await getSaveString()
61996193

6200-
const saveObject = typeof save === 'string' ? save : await save?.text()
6201-
6202-
if (saveObject) {
6203-
const dec = LZString.decompressFromBase64(saveObject)
6194+
if (saveString) {
6195+
const dec = LZString.decompressFromBase64(saveString)
62046196
const isLZString = dec !== ''
62056197

62066198
if (isLZString) {
@@ -6214,10 +6206,8 @@ export const reloadShit = async (reset = false) => {
62146206
return Alert(i18next.t('save.loadFailed'))
62156207
}
62166208

6217-
localStorage.clear()
6218-
const blob = new Blob([saveString], { type: 'text/plain' })
6219-
localStorage.setItem('Synergysave2', saveString)
6220-
await localforage.setItem<Blob>('Synergysave2', blob)
6209+
safeLocalStorage.clear()
6210+
await setSave(saveString)
62216211
await Alert(i18next.t('main.transferredFromLZ'))
62226212
}
62236213

@@ -6284,9 +6274,9 @@ export const reloadShit = async (reset = false) => {
62846274

62856275
setInterval(cacheReinitialize, 15000)
62866276

6287-
if (localStorage.getItem('pleaseStar') === null) {
6277+
if (safeLocalStorage.getItem('pleaseStar') === null) {
62886278
void Alert(i18next.t('main.starRepo'))
6289-
localStorage.setItem('pleaseStar', '')
6279+
safeLocalStorage.setItem('pleaseStar', '')
62906280
}
62916281

62926282
// All versions of Chrome and Firefox supported by the game have this API,
@@ -6309,7 +6299,7 @@ export const reloadShit = async (reset = false) => {
63096299
}
63106300

63116301
const saveType = DOMCacheGetOrSet('saveType') as HTMLInputElement
6312-
saveType.checked = localStorage.getItem('copyToClipboard') !== null
6302+
saveType.checked = safeLocalStorage.getItem('copyToClipboard') !== null
63136303
}
63146304

63156305
function playerNeedsReminderToExport () {
@@ -6319,7 +6309,16 @@ function playerNeedsReminderToExport () {
63196309
}
63206310

63216311
window.addEventListener('load', async () => {
6322-
await i18nInit()
6312+
if (location.host.endsWith('.discordsays.com')) {
6313+
patchUrlMappings([
6314+
{
6315+
prefix: '/',
6316+
target: 'discord-activities-suck.synergism-cus.pages.dev/'
6317+
}
6318+
])
6319+
}
6320+
6321+
await i18nInit().catch((e) => console.error('error caught', e))
63236322

63246323
const ver = DOMCacheGetOrSet('versionnumber')
63256324
const addZero = (n: number) => `${n}`.padStart(2, '0')
@@ -6349,7 +6348,7 @@ window.addEventListener('load', async () => {
63496348
corruptionButtonsAdd()
63506349
corruptionLoadoutTableCreate()
63516350

6352-
handleLogin().catch(console.error)
6351+
handleLogin().catch((e) => console.error('caught error', e))
63536352
})
63546353

63556354
window.addEventListener('unload', () => {

src/Themes.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
import i18next from 'i18next'
22
import { DOMCacheGetOrSet } from './Cache/DOM'
3+
import { safeLocalStorage } from './ImportExport'
34
import { player } from './Synergism'
45

56
export const toggleTheme = (initial = false, themeNumber = 1, change = false) => {
67
const themeButton = DOMCacheGetOrSet('theme')
78
const body = document.body
89

910
if (change) {
10-
localStorage.setItem('theme', `${themeNumber}`)
11+
safeLocalStorage.setItem('theme', `${themeNumber}`)
1112
body.style.setProperty('--transition', '750ms')
1213
body.style.setProperty('--transition-extra', '600ms')
1314
} else {
14-
themeNumber = Number(localStorage.getItem('theme') ?? 1)
15+
themeNumber = Number(safeLocalStorage.getItem('theme') ?? 1)
1516
}
1617

1718
/* Full reset for easy out of order change */
@@ -107,7 +108,7 @@ export const toggleTheme = (initial = false, themeNumber = 1, change = false) =>
107108
}
108109

109110
if (themeNumber === 1) {
110-
localStorage.removeItem('theme')
111+
safeLocalStorage.removeItem('theme')
111112
themeButton.textContent = 'Dark Mode'
112113
} else if (themeNumber === 2) { // 'Darker Mode'
113114
body.style.setProperty('--header-color', 'black')

src/i18n.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import i18next, { type Resource } from 'i18next'
22
import { DOMCacheGetOrSet } from './Cache/DOM'
33
import { prod } from './Config'
4+
import { safeLocalStorage } from './ImportExport'
45
import ColorTextPlugin from './Plugins/ColorText'
56
import { Confirm } from './UpdateHTML'
67

@@ -21,7 +22,7 @@ const languageCache = new Map<string, { translation: Resource }>()
2122

2223
export const init = async (): Promise<void> => {
2324
const resources: Record<string, Resource> = {}
24-
const language = localStorage.getItem('language') ?? 'en'
25+
const language = safeLocalStorage.getItem('language') ?? 'en'
2526

2627
const response = await fetch(`./translations/${language}.json`)
2728
const file = await response.json() as Resource
@@ -71,7 +72,7 @@ function buildLanguageButton (langID: string, name: string, flag: string) {
7172

7273
// i18next.addResourceBundle
7374
await i18next.changeLanguage(langID)
74-
localStorage.setItem('language', langID)
75+
safeLocalStorage.setItem('language', langID)
7576

7677
const shouldReload = await Confirm(i18next.t('general.languageChange'))
7778

0 commit comments

Comments
 (0)