Move analytics consent to new preferences store
This commit is contained in:
parent
2de4174eca
commit
a725dfdc4d
@ -1,31 +1,50 @@
|
||||
<script lang="ts">
|
||||
import { setTelemetryFalse, setTelemetryTrue } from "$lib/stores/SetTelemetryConsent";
|
||||
import { telemetry } from "$lib/stores/telemetryConsent";
|
||||
import { onMount } from "svelte";
|
||||
import type { Preferences } from "$lib/stores/preferences";
|
||||
import { preferences } from "$lib/stores/preferences";
|
||||
import { onDestroy, onMount } from "svelte";
|
||||
import { browser } from "$app/environment";
|
||||
|
||||
let pref: Preferences
|
||||
|
||||
const unsubscribe = preferences.subscribe((value => {
|
||||
pref = value;
|
||||
}))
|
||||
|
||||
onMount(() => {
|
||||
if (!localStorage.getItem("telemetryRequested")) {
|
||||
const threshold = Date.now() - 30*24*60*60*1000;
|
||||
const lastRequested = pref.telemetryRequested?.getTime() ?? 0;
|
||||
|
||||
if (!pref.telemetry && lastRequested < threshold) {
|
||||
document.querySelector<HTMLDialogElement>("#analytics-consent")?.showModal();
|
||||
}
|
||||
})
|
||||
|
||||
// Setting Function Calls
|
||||
onDestroy(() => {
|
||||
unsubscribe();
|
||||
})
|
||||
|
||||
// Setting Function Calls - Update to call new Store
|
||||
function setAcceptAnalytics() {
|
||||
setTelemetryTrue();
|
||||
localStorage.setItem("telemetryRequested", "yes");
|
||||
preferences.update(current => ({
|
||||
...current,
|
||||
telemetry: true,
|
||||
telemetryRequested: new Date(),
|
||||
}));
|
||||
document.querySelector<HTMLDialogElement>("#analytics-consent")?.close();
|
||||
}
|
||||
function setDenyAnalytics() {
|
||||
setTelemetryFalse();
|
||||
localStorage.setItem("telemetryRequested", "yes");
|
||||
preferences.update(current => ({
|
||||
...current,
|
||||
telemetry: false,
|
||||
telemetryRequested: new Date(),
|
||||
}));
|
||||
document.querySelector<HTMLDialogElement>("#analytics-consent")?.close();
|
||||
}
|
||||
|
||||
// Reactively call telemetry script functions
|
||||
// Reactively call telemetry script functions - Update to call new Store
|
||||
$: {
|
||||
if (browser) {
|
||||
if ($telemetry) {
|
||||
if ($preferences.telemetry) {
|
||||
loadTelemetryScript();
|
||||
} else {
|
||||
removeTelemetryScript();
|
||||
|
@ -57,18 +57,21 @@ function migrateToV1() {
|
||||
const oldQlRaw = localStorage.getItem('ql');
|
||||
const oldLocationRaw = localStorage.getItem('location');
|
||||
const oldTelemetryRaw = localStorage.getItem('telemetry');
|
||||
const oldTelemetryRequestedRaw = localStorage.getItem('telemetryRequested');
|
||||
|
||||
const ql: string[] = safeParseJSON(oldQlRaw, []);
|
||||
const location: boolean = parseBool(oldLocationRaw, false);
|
||||
const telemetry: boolean = parseBool(oldTelemetryRaw, false);
|
||||
const telemetryRequested: Date | null = oldTelemetryRequestedRaw === "yes" ? new Date() : null;
|
||||
|
||||
const migrated: Preferences = { ql, location, telemetry, format: 1 };
|
||||
const migrated: Preferences = { ql, location, telemetry, telemetryRequested, format: 1 };
|
||||
|
||||
preferences.set(migrated);
|
||||
|
||||
localStorage.removeItem('ql');
|
||||
localStorage.removeItem('location');
|
||||
localStorage.removeItem('telemetry');
|
||||
localStorage.removeItem('telemetryRequested');
|
||||
|
||||
console.info('[Migration] Preferences migrated to version 1');
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
import { get } from "svelte/store";
|
||||
import { telemetry } from "./telemetryConsent";
|
||||
|
||||
export function setTelemetryTrue() {
|
||||
telemetry.set(true);
|
||||
}
|
||||
|
||||
export function setTelemetryFalse() {
|
||||
telemetry.set(false);
|
||||
}
|
||||
|
||||
export function getTelemetry(): boolean {
|
||||
return get(telemetry);
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
// src/stores.js
|
||||
import { writable, type Writable } from "svelte/store";
|
||||
import { browser } from "$app/environment";
|
||||
|
||||
// Initialize the store with a boolean value from local storage
|
||||
export const location: Writable<boolean> = writable(fromLocalStorage("location", false));
|
||||
toLocalStorage(location, "location");
|
||||
|
||||
function fromLocalStorage(storageKey: string, fallback: boolean): boolean {
|
||||
if (browser) {
|
||||
const storedValue = localStorage.getItem(storageKey);
|
||||
if (storedValue !== null && storedValue !== "undefined") {
|
||||
return storedValue === "true";
|
||||
}
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
|
||||
function toLocalStorage(store: Writable<boolean>, storageKey: string) {
|
||||
if (browser) {
|
||||
store.subscribe((value: boolean) => {
|
||||
localStorage.setItem(storageKey, String(value));
|
||||
});
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ export interface Preferences {
|
||||
ql: string[];
|
||||
location: boolean;
|
||||
telemetry: boolean;
|
||||
telemetryRequested: Date | null;
|
||||
format: number;
|
||||
}
|
||||
|
||||
@ -16,6 +17,7 @@ const DEFAULT_PREFERENCES: Preferences = {
|
||||
ql: [],
|
||||
location: false,
|
||||
telemetry: false,
|
||||
telemetryRequested: null,
|
||||
format: PREFERENCE_FORMAT_VERSION,
|
||||
};
|
||||
|
||||
|
@ -1,25 +0,0 @@
|
||||
import { writable, type Writable } from "svelte/store";
|
||||
import { browser } from "$app/environment";
|
||||
|
||||
export const ql = writable(fromLocalStorage("ql", []));
|
||||
toLocalStorage(ql, "ql");
|
||||
|
||||
function fromLocalStorage(storageKey: string, fallback: string[]): string[] {
|
||||
if (browser) {
|
||||
const storedValue = localStorage.getItem(storageKey);
|
||||
if (storedValue !== "undefined" && storedValue !== null) {
|
||||
return typeof fallback === "object" ? JSON.parse(storedValue) : storedValue;
|
||||
}
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
|
||||
function toLocalStorage(store: Writable<string[]>, storageKey: string) {
|
||||
if (browser) {
|
||||
store.subscribe((value) => {
|
||||
let storageValue = typeof value === "object" ? JSON.stringify(value.sort()) : value;
|
||||
|
||||
localStorage.setItem(storageKey, storageValue);
|
||||
});
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
// src/stores.js
|
||||
import { writable, type Writable } from "svelte/store";
|
||||
import { browser } from "$app/environment";
|
||||
|
||||
// Initialize the store with a boolean value from local storage
|
||||
export const telemetry: Writable<boolean> = writable(fromLocalStorage("telemetry", false));
|
||||
toLocalStorage(telemetry, "telemetry");
|
||||
|
||||
function fromLocalStorage(storageKey: string, fallback: boolean): boolean {
|
||||
if (browser) {
|
||||
const storedValue = localStorage.getItem(storageKey);
|
||||
if (storedValue !== null && storedValue !== "undefined") {
|
||||
return storedValue === "true";
|
||||
}
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
|
||||
function toLocalStorage(store: Writable<boolean>, storageKey: string) {
|
||||
if (browser) {
|
||||
store.subscribe((value: boolean) => {
|
||||
localStorage.setItem(storageKey, String(value));
|
||||
});
|
||||
}
|
||||
}
|
@ -1,2 +1,2 @@
|
||||
export const version: string = "2025.05.1";
|
||||
export const version: string = "2025.10.1";
|
||||
export const versionTag: string = "";
|
||||
|
Loading…
x
Reference in New Issue
Block a user