Skip to content

Commit cdbd1eb

Browse files
authored
Settings randomizer
1 parent fbade00 commit cdbd1eb

File tree

4 files changed

+209
-1
lines changed

4 files changed

+209
-1
lines changed

locales/en.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,12 @@
925925
},
926926
"customInvoicePreimageEnabled": {
927927
"title": "Enable custom invoice preimages"
928+
},
929+
"randomizeSettings": {
930+
"title": "Randomize settings"
931+
},
932+
"randomizeSettingsOnStartup": {
933+
"title": "Randomize settings on startup"
928934
}
929935
},
930936
"experimental": {

src/state/Settings.ts

Lines changed: 162 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

@@ -94,6 +95,7 @@ export interface ISettingsModel {
9495
changeLightningBoxAddress: Thunk<ISettingsModel, string>;
9596
changeLightningBoxLnurlPayDesc: Thunk<ISettingsModel, string>;
9697
changeHideAmountsEnabled: Thunk<ISettingsModel, boolean>;
98+
changeRandomizeSettingsOnStartup: Thunk<ISettingsModel, boolean>;
9799

98100
setBitcoinUnit: Action<ISettingsModel, keyof IBitcoinUnits>;
99101
setFiatUnit: Action<ISettingsModel, keyof IFiatRates>;
@@ -143,6 +145,7 @@ export interface ISettingsModel {
143145
setLightningBoxAddress: Action<ISettingsModel, string>;
144146
SetLightningBoxLnurlPayDesc: Action<ISettingsModel, string>;
145147
setHideAmountsEnabled: Action<ISettingsModel, boolean>;
148+
setRandomizeSettingsOnStartup: Action<ISettingsModel, boolean>;
146149

147150
bitcoinUnit: keyof IBitcoinUnits;
148151
fiatUnit: keyof IFiatRates;
@@ -192,11 +195,23 @@ export interface ISettingsModel {
192195
lightningBoxAddress: string;
193196
lightningBoxLnurlPayDesc: string;
194197
hideAmountsEnabled: boolean;
198+
randomizeSettingsOnStartup: boolean;
199+
200+
randomize: Thunk<ISettingsModel, void, any, IStoreModel>;
195201
}
196202

197203
export const settings: ISettingsModel = {
198204
initialize: thunk(async (actions) => {
199205
log.d("Initializing");
206+
const randomizeSettingsOnStartup =
207+
(await getItemObject(StorageItem.randomizeSettingsOnStartup)) ?? false;
208+
if (randomizeSettingsOnStartup) {
209+
actions.setRandomizeSettingsOnStartup(randomizeSettingsOnStartup);
210+
actions.randomize();
211+
return;
212+
}
213+
actions.setRandomizeSettingsOnStartup(randomizeSettingsOnStartup);
214+
200215
actions.setBitcoinUnit((await getItemObject(StorageItem.bitcoinUnit)) || "bitcoin");
201216
actions.setFiatUnit((await getItemObject(StorageItem.fiatUnit)) || "USD");
202217
actions.setName((await getItemObject(StorageItem.name)) || null);
@@ -537,6 +552,11 @@ export const settings: ISettingsModel = {
537552
actions.setHideAmountsEnabled(payload);
538553
}),
539554

555+
changeRandomizeSettingsOnStartup: thunk(async (actions, payload) => {
556+
await setItemObject<boolean>(StorageItem.randomizeSettingsOnStartup, payload);
557+
actions.setRandomizeSettingsOnStartup(payload);
558+
}),
559+
540560
setBitcoinUnit: action((state, payload) => {
541561
state.bitcoinUnit = payload;
542562
}),
@@ -682,6 +702,10 @@ export const settings: ISettingsModel = {
682702
state.hideAmountsEnabled = payload;
683703
}),
684704

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

src/storage/app.ts

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

9596
export const setItem = async (key: StorageItem, value: string) =>
@@ -194,6 +195,7 @@ export const clearApp = async () => {
194195
removeItem(StorageItem.lightningBoxAddress),
195196
removeItem(StorageItem.lightningBoxLnurlPayDesc),
196197
removeItem(StorageItem.hideAmountsEnabled),
198+
removeItem(StorageItem.randomizeSettingsOnStartup),
197199
]);
198200
};
199201

@@ -286,5 +288,6 @@ export const setupApp = async () => {
286288
// setItem(StorageItem.lightningBoxAddress, ""),
287289
setItem(StorageItem.lightningBoxLnurlPayDesc, DEFAULT_LIGHTNINGBOX_LNURLPDESC),
288290
setItemObject<boolean>(StorageItem.hideAmountsEnabled, false),
291+
setItemObject<boolean>(StorageItem.randomizeSettingsOnStartup, false),
289292
]);
290293
};

src/windows/Settings/Settings.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,22 @@ ${t("experimental.tor.disabled.msg2")}`;
15591559
await changeLndChainBackend("neutrino");
15601560
};
15611561

1562+
// Randomize settings
1563+
const randomize = useStoreActions((store) => store.settings.randomize);
1564+
const onPressRandomize = async () => {
1565+
await randomize();
1566+
};
1567+
1568+
const randomizeSettingsOnStartup = useStoreState(
1569+
(store) => store.settings.randomizeSettingsOnStartup,
1570+
);
1571+
const changeRandomizeSettingsOnStartup = useStoreActions(
1572+
(store) => store.settings.changeRandomizeSettingsOnStartup,
1573+
);
1574+
const onToggleRandomizeSettingsOnStartup = async () => {
1575+
await changeRandomizeSettingsOnStartup(!randomizeSettingsOnStartup);
1576+
};
1577+
15621578
return (
15631579
<Container>
15641580
<Content style={{ padding: 10 }}>
@@ -2237,6 +2253,28 @@ ${t("experimental.tor.disabled.msg2")}`;
22372253
/>
22382254
</Right>
22392255
</ListItem>
2256+
<ListItem style={style.listItem} icon={true} onPress={onPressRandomize}>
2257+
<Left>
2258+
<Icon style={style.icon} type="MaterialCommunityIcons" name="emoticon-cool" />
2259+
</Left>
2260+
<Body>
2261+
<Text>{t("miscelaneous.randomizeSettings.title")}</Text>
2262+
</Body>
2263+
</ListItem>
2264+
<ListItem style={style.listItem} icon={true} onPress={onToggleRandomizeSettingsOnStartup}>
2265+
<Left>
2266+
<Icon style={style.icon} type="MaterialCommunityIcons" name="emoticon-cool" />
2267+
</Left>
2268+
<Body>
2269+
<Text>{t("miscelaneous.randomizeSettingsOnStartup.title")}</Text>
2270+
</Body>
2271+
<Right>
2272+
<CheckBox
2273+
checked={randomizeSettingsOnStartup}
2274+
onPress={onToggleRandomizeSettingsOnStartup}
2275+
/>
2276+
</Right>
2277+
</ListItem>
22402278

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

0 commit comments

Comments
 (0)