Skip to content

Commit f3fbc56

Browse files
committed
Settings randomizer
1 parent f0678b7 commit f3fbc56

File tree

3 files changed

+200
-1
lines changed

3 files changed

+200
-1
lines changed

src/state/Settings.ts

Lines changed: 160 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@ import {
2323
} from "../storage/app";
2424

2525
import { Chain } from "../utils/build";
26-
import { IBitcoinUnits } from "../utils/bitcoin-units";
26+
import { BitcoinUnits, IBitcoinUnits } from "../utils/bitcoin-units";
2727
import { IFiatRates } from "./Fiat";
2828
import { IStoreModel } from "./index";
2929
import { MapStyle } from "../utils/google-maps";
3030
import { i18n } from "../i18n/i18n";
3131
import logger from "./../utils/log";
32+
import { languages } from "../i18n/i18n.constants";
3233

3334
const log = logger("Settings");
3435

@@ -93,6 +94,7 @@ export interface ISettingsModel {
9394
changeLightningBoxServer: Thunk<ISettingsModel, string>;
9495
changeLightningBoxAddress: Thunk<ISettingsModel, string>;
9596
changeLightningBoxLnurlPayDesc: Thunk<ISettingsModel, string>;
97+
changeRandomizeSettingsOnStartup: Thunk<ISettingsModel, boolean>;
9698

9799
setBitcoinUnit: Action<ISettingsModel, keyof IBitcoinUnits>;
98100
setFiatUnit: Action<ISettingsModel, keyof IFiatRates>;
@@ -141,6 +143,7 @@ export interface ISettingsModel {
141143
setLightningBoxServer: Action<ISettingsModel, string>;
142144
setLightningBoxAddress: Action<ISettingsModel, string>;
143145
SetLightningBoxLnurlPayDesc: Action<ISettingsModel, string>;
146+
setRandomizeSettingsOnStartup: Action<ISettingsModel, boolean>;
144147

145148
bitcoinUnit: keyof IBitcoinUnits;
146149
fiatUnit: keyof IFiatRates;
@@ -189,11 +192,23 @@ export interface ISettingsModel {
189192
lightningBoxServer: string;
190193
lightningBoxAddress: string;
191194
lightningBoxLnurlPayDesc: string;
195+
randomizeSettingsOnStartup: boolean;
196+
197+
randomize: Thunk<ISettingsModel, void, any, IStoreModel>;
192198
}
193199

194200
export const settings: ISettingsModel = {
195201
initialize: thunk(async (actions) => {
196202
log.d("Initializing");
203+
const randomizeSettingsOnStartup = await getItemObject(
204+
StorageItem.randomizeSettingsOnStartup || false,
205+
);
206+
if (randomizeSettingsOnStartup) {
207+
actions.randomize();
208+
return;
209+
}
210+
actions.setRandomizeSettingsOnStartup(randomizeSettingsOnStartup);
211+
197212
actions.setBitcoinUnit((await getItemObject(StorageItem.bitcoinUnit)) || "bitcoin");
198213
actions.setFiatUnit((await getItemObject(StorageItem.fiatUnit)) || "USD");
199214
actions.setName((await getItemObject(StorageItem.name)) || null);
@@ -526,6 +541,11 @@ export const settings: ISettingsModel = {
526541
actions.SetLightningBoxLnurlPayDesc(payload);
527542
}),
528543

544+
changeRandomizeSettingsOnStartup: thunk(async (actions, payload) => {
545+
await setItemObject<boolean>(StorageItem.randomizeSettingsOnStartup, payload);
546+
actions.setRandomizeSettingsOnStartup(payload);
547+
}),
548+
529549
setBitcoinUnit: action((state, payload) => {
530550
state.bitcoinUnit = payload;
531551
}),
@@ -667,6 +687,9 @@ export const settings: ISettingsModel = {
667687
SetLightningBoxLnurlPayDesc: action((state, payload) => {
668688
state.lightningBoxLnurlPayDesc = payload;
669689
}),
690+
setRandomizeSettingsOnStartup: action((state, payload) => {
691+
state.randomizeSettingsOnStartup = payload;
692+
}),
670693

671694
bitcoinUnit: "bitcoin",
672695
fiatUnit: "USD",
@@ -715,4 +738,140 @@ export const settings: ISettingsModel = {
715738
lightningBoxServer: DEFAULT_LIGHTNINGBOX_SERVER,
716739
lightningBoxAddress: "",
717740
lightningBoxLnurlPayDesc: DEFAULT_LIGHTNINGBOX_LNURLPDESC,
741+
randomizeSettingsOnStartup: false,
742+
743+
randomize: thunk((state, _, { getStoreState, dispatch }) => {
744+
const bitcoinUnits = Object.keys(BitcoinUnits);
745+
state.setBitcoinUnit(getRandomFromArray(bitcoinUnits));
746+
747+
const fiatUnits = Object.keys(getStoreState().fiat.fiatRates);
748+
state.setFiatUnit(getRandomFromArray(fiatUnits));
749+
750+
state.setName(getRandomFromArray(funnyNames));
751+
752+
const language = getRandomFromArray(Object.keys(languages));
753+
state.setLanguage(getRandomFromArray(language));
754+
i18n.changeLanguage(language);
755+
756+
const autopilotEnabled = rand(0, 1) === 1;
757+
state.setAutopilotEnabled(autopilotEnabled);
758+
dispatch.lightning.setupAutopilot(autopilotEnabled);
759+
760+
state.setPushNotificationsEnabled(rand(0, 1) === 1);
761+
state.setClipboardInvoiceCheckInvoicesEnabled(rand(0, 1) === 1);
762+
// state.scheduledSyncEnabled;
763+
// state.scheduledGossipSyncEnabled;
764+
state.setDebugShowStartupInfo(rand(0, 1) === 1);
765+
// state.googleDriveBackupEnabled;
766+
state.setPreferFiat(rand(0, 1) === 1);
767+
// state.transactionGeolocationEnabled;
768+
// state.transactionGeolocationMapStyle;
769+
const onchainExplorers = Object.keys(OnchainExplorer);
770+
state.setOnchainExplorer(getRandomFromArray(onchainExplorers));
771+
state.setMultiPathPaymentsEnabled(rand(0, 1) === 1);
772+
// state.torEnabled;
773+
state.setHideExpiredInvoices(rand(0, 1) === 1);
774+
state.setScreenTransitionsEnabled(rand(0, 1) === 1);
775+
// state.iCloudBackupEnabled;
776+
// state.lndChainBackend;
777+
// state.neutrinoPeers;
778+
// state.bitcoindRpcHost;
779+
// state.bitcoindRpcUser;
780+
// state.bitcoindRpcPassword;
781+
// state.bitcoindPubRawBlock;
782+
// state.bitcoindPubRawTx;
783+
// state.dunderServer;
784+
state.setRequireGraphSync(rand(0, 1) === 1);
785+
state.setDunderEnabled(rand(0, 1) === 1);
786+
// state.lndNoGraphCache;
787+
state.setInvoiceExpiry(rand(0, 1000)); // TODO
788+
// state.rescanWallet;
789+
// state.strictGraphPruningEnabled;
790+
// state.lndPathfindingAlgorithm;
791+
state.setMaxLNFeePercentage(rand(0, 100) / 10);
792+
// state.lndLogLevel;
793+
// state.lndCompactDb;
794+
// state.zeroConfPeers;
795+
// state.enforceSpeedloaderOnStartup;
796+
// state.persistentServicesEnabled;
797+
// state.persistentServicesWarningShown;
798+
// state.customInvoicePreimageEnabled;
799+
state.setCustomInvoicePreimageEnabled(rand(0, 1) === 1);
800+
// state.speedloaderServer;
801+
// state.lightningBoxServer;
802+
// state.lightningBoxAddress;
803+
state.SetLightningBoxLnurlPayDesc(generateGarbageText());
804+
}),
718805
};
806+
807+
function rand(min: number, max: number): number {
808+
return Math.floor(Math.random() * (max - min + 1)) + min;
809+
}
810+
811+
function getRandomFromArray(arr: any[]) {
812+
return arr[rand(0, arr.length - 1)];
813+
}
814+
815+
function generateGarbageText(): string {
816+
// Add any weird characters you want to this string
817+
const characters =
818+
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~`!@#$%^&*()_-+={[}]|\\:;"<,>.?/⊙△ΩβφÇ';
819+
const length = Math.floor(Math.random() * 13) + 4; // This will give a random number between 4 and 16
820+
821+
return [...Array(length)]
822+
.map(() => characters[Math.floor(Math.random() * characters.length)])
823+
.join("");
824+
}
825+
826+
const funnyNames = [
827+
"Binky",
828+
"Fido",
829+
"Peaches",
830+
"Puddles",
831+
"Snickers",
832+
"Wiggles",
833+
"Twinkle",
834+
"Pickles",
835+
"Muffin",
836+
"Giggles",
837+
"Bubbles",
838+
"Ziggy",
839+
"Noodle",
840+
"Doodle",
841+
"Pookie",
842+
"Fluffy",
843+
"Sprinkles",
844+
"Jingles",
845+
"Boogie",
846+
"Winky",
847+
"Tootsie",
848+
"Fuzzy",
849+
"Spunky",
850+
"Goober",
851+
"Snuggles",
852+
"Scrappy",
853+
"Puddin'",
854+
"Biscuit",
855+
"Doogie",
856+
"Waffle",
857+
"Zippy",
858+
"Jolly",
859+
"Sassy",
860+
"Rascal",
861+
"Boppy",
862+
"Cuddles",
863+
"Dinky",
864+
"Fiddle",
865+
"Gadget",
866+
"Hopper",
867+
"Jester",
868+
"Kiki",
869+
"Lollipop",
870+
"Mimi",
871+
"Nibbles",
872+
"Oreo",
873+
"Peppy",
874+
"Quirky",
875+
"Roo",
876+
"Sprout",
877+
];

src/storage/app.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ export enum StorageItem { // const enums not supported in Babel 7...
8989
lightningBoxServer = "lightningBoxServer",
9090
lightningBoxAddress = "lightningBoxAddress",
9191
lightningBoxLnurlPayDesc = "lightningBoxLnurlPayDesc",
92+
randomizeSettingsOnStartup = "randomizeSettingsOnStartup",
9293
}
9394

9495
export const setItem = async (key: StorageItem, value: string) =>
@@ -192,6 +193,7 @@ export const clearApp = async () => {
192193
removeItem(StorageItem.lightningBoxServer),
193194
removeItem(StorageItem.lightningBoxAddress),
194195
removeItem(StorageItem.lightningBoxLnurlPayDesc),
196+
removeItem(StorageItem.randomizeSettingsOnStartup),
195197
]);
196198
};
197199

@@ -283,5 +285,6 @@ export const setupApp = async () => {
283285
setItem(StorageItem.lightningBoxServer, DEFAULT_LIGHTNINGBOX_SERVER),
284286
// setItem(StorageItem.lightningBoxAddress, ""),
285287
setItem(StorageItem.lightningBoxLnurlPayDesc, DEFAULT_LIGHTNINGBOX_LNURLPDESC),
288+
setItemObject<boolean>(StorageItem.randomizeSettingsOnStartup, false),
286289
]);
287290
};

src/windows/Settings/Settings.tsx

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,6 +1517,21 @@ ${t("experimental.tor.disabled.msg2")}`;
15171517
);
15181518
};
15191519

1520+
const randomize = useStoreActions((store) => store.settings.randomize);
1521+
const onPressRandomize = async () => {
1522+
await randomize();
1523+
};
1524+
1525+
const randomizeSettingsOnStartup = useStoreState(
1526+
(store) => store.settings.randomizeSettingsOnStartup,
1527+
);
1528+
const changeRandomizeSettingsOnStartup = useStoreActions(
1529+
(store) => store.settings.changeRandomizeSettingsOnStartup,
1530+
);
1531+
const onToggleRandomizeSettingsOnStartup = async () => {
1532+
await changeRandomizeSettingsOnStartup(!randomizeSettingsOnStartup);
1533+
};
1534+
15201535
return (
15211536
<Container>
15221537
<Content style={{ padding: 10 }}>
@@ -2181,6 +2196,28 @@ ${t("experimental.tor.disabled.msg2")}`;
21812196
/>
21822197
</Right>
21832198
</ListItem>
2199+
<ListItem style={style.listItem} icon={true} onPress={onPressRandomize}>
2200+
<Left>
2201+
<Icon style={style.icon} type="MaterialCommunityIcons" name="emoticon-cool" />
2202+
</Left>
2203+
<Body>
2204+
<Text>{t("miscelaneous.randomizeSettings.title")}</Text>
2205+
</Body>
2206+
</ListItem>
2207+
<ListItem style={style.listItem} icon={true} onPress={onToggleRandomizeSettingsOnStartup}>
2208+
<Left>
2209+
<Icon style={style.icon} type="MaterialCommunityIcons" name="emoticon-cool" />
2210+
</Left>
2211+
<Body>
2212+
<Text>{t("miscelaneous.randomizeSettingsOnStartup.title")}</Text>
2213+
</Body>
2214+
<Right>
2215+
<CheckBox
2216+
checked={randomizeSettingsOnStartup}
2217+
onPress={onToggleRandomizeSettingsOnStartup}
2218+
/>
2219+
</Right>
2220+
</ListItem>
21842221

21852222
{/* <ListItem style={style.listItem} icon={true} onPress={onPressDeleteWallet}>
21862223
<Left><Icon style={style.icon} type="FontAwesome5" name="file-signature" /></Left>

0 commit comments

Comments
 (0)