Move analytics consent to new preferences store
This commit is contained in:
parent
2de4174eca
commit
a725dfdc4d
@ -1,31 +1,50 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { setTelemetryFalse, setTelemetryTrue } from "$lib/stores/SetTelemetryConsent";
|
import type { Preferences } from "$lib/stores/preferences";
|
||||||
import { telemetry } from "$lib/stores/telemetryConsent";
|
import { preferences } from "$lib/stores/preferences";
|
||||||
import { onMount } from "svelte";
|
import { onDestroy, onMount } from "svelte";
|
||||||
import { browser } from "$app/environment";
|
import { browser } from "$app/environment";
|
||||||
|
|
||||||
|
let pref: Preferences
|
||||||
|
|
||||||
|
const unsubscribe = preferences.subscribe((value => {
|
||||||
|
pref = value;
|
||||||
|
}))
|
||||||
|
|
||||||
onMount(() => {
|
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();
|
document.querySelector<HTMLDialogElement>("#analytics-consent")?.showModal();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Setting Function Calls
|
onDestroy(() => {
|
||||||
|
unsubscribe();
|
||||||
|
})
|
||||||
|
|
||||||
|
// Setting Function Calls - Update to call new Store
|
||||||
function setAcceptAnalytics() {
|
function setAcceptAnalytics() {
|
||||||
setTelemetryTrue();
|
preferences.update(current => ({
|
||||||
localStorage.setItem("telemetryRequested", "yes");
|
...current,
|
||||||
|
telemetry: true,
|
||||||
|
telemetryRequested: new Date(),
|
||||||
|
}));
|
||||||
document.querySelector<HTMLDialogElement>("#analytics-consent")?.close();
|
document.querySelector<HTMLDialogElement>("#analytics-consent")?.close();
|
||||||
}
|
}
|
||||||
function setDenyAnalytics() {
|
function setDenyAnalytics() {
|
||||||
setTelemetryFalse();
|
preferences.update(current => ({
|
||||||
localStorage.setItem("telemetryRequested", "yes");
|
...current,
|
||||||
|
telemetry: false,
|
||||||
|
telemetryRequested: new Date(),
|
||||||
|
}));
|
||||||
document.querySelector<HTMLDialogElement>("#analytics-consent")?.close();
|
document.querySelector<HTMLDialogElement>("#analytics-consent")?.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reactively call telemetry script functions
|
// Reactively call telemetry script functions - Update to call new Store
|
||||||
$: {
|
$: {
|
||||||
if (browser) {
|
if (browser) {
|
||||||
if ($telemetry) {
|
if ($preferences.telemetry) {
|
||||||
loadTelemetryScript();
|
loadTelemetryScript();
|
||||||
} else {
|
} else {
|
||||||
removeTelemetryScript();
|
removeTelemetryScript();
|
||||||
|
@ -57,18 +57,21 @@ function migrateToV1() {
|
|||||||
const oldQlRaw = localStorage.getItem('ql');
|
const oldQlRaw = localStorage.getItem('ql');
|
||||||
const oldLocationRaw = localStorage.getItem('location');
|
const oldLocationRaw = localStorage.getItem('location');
|
||||||
const oldTelemetryRaw = localStorage.getItem('telemetry');
|
const oldTelemetryRaw = localStorage.getItem('telemetry');
|
||||||
|
const oldTelemetryRequestedRaw = localStorage.getItem('telemetryRequested');
|
||||||
|
|
||||||
const ql: string[] = safeParseJSON(oldQlRaw, []);
|
const ql: string[] = safeParseJSON(oldQlRaw, []);
|
||||||
const location: boolean = parseBool(oldLocationRaw, false);
|
const location: boolean = parseBool(oldLocationRaw, false);
|
||||||
const telemetry: boolean = parseBool(oldTelemetryRaw, 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);
|
preferences.set(migrated);
|
||||||
|
|
||||||
localStorage.removeItem('ql');
|
localStorage.removeItem('ql');
|
||||||
localStorage.removeItem('location');
|
localStorage.removeItem('location');
|
||||||
localStorage.removeItem('telemetry');
|
localStorage.removeItem('telemetry');
|
||||||
|
localStorage.removeItem('telemetryRequested');
|
||||||
|
|
||||||
console.info('[Migration] Preferences migrated to version 1');
|
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[];
|
ql: string[];
|
||||||
location: boolean;
|
location: boolean;
|
||||||
telemetry: boolean;
|
telemetry: boolean;
|
||||||
|
telemetryRequested: Date | null;
|
||||||
format: number;
|
format: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,6 +17,7 @@ const DEFAULT_PREFERENCES: Preferences = {
|
|||||||
ql: [],
|
ql: [],
|
||||||
location: false,
|
location: false,
|
||||||
telemetry: false,
|
telemetry: false,
|
||||||
|
telemetryRequested: null,
|
||||||
format: PREFERENCE_FORMAT_VERSION,
|
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 = "";
|
export const versionTag: string = "";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user