mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-24 01:28:35 +02:00
Option to disable telemetry
This commit is contained in:
8
package-lock.json
generated
8
package-lock.json
generated
@@ -27,7 +27,7 @@
|
|||||||
"@tauri-apps/plugin-log": "^2.0.0-rc.0",
|
"@tauri-apps/plugin-log": "^2.0.0-rc.0",
|
||||||
"@tauri-apps/plugin-os": "^2.0.0-rc.0",
|
"@tauri-apps/plugin-os": "^2.0.0-rc.0",
|
||||||
"@tauri-apps/plugin-shell": "^2.0.0-rc.0",
|
"@tauri-apps/plugin-shell": "^2.0.0-rc.0",
|
||||||
"@yaakapp/api": "^0.1.12",
|
"@yaakapp/api": "^0.1.13",
|
||||||
"buffer": "^6.0.3",
|
"buffer": "^6.0.3",
|
||||||
"classnames": "^2.3.2",
|
"classnames": "^2.3.2",
|
||||||
"cm6-graphql": "^0.0.9",
|
"cm6-graphql": "^0.0.9",
|
||||||
@@ -2990,9 +2990,9 @@
|
|||||||
"integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ=="
|
"integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ=="
|
||||||
},
|
},
|
||||||
"node_modules/@yaakapp/api": {
|
"node_modules/@yaakapp/api": {
|
||||||
"version": "0.1.12",
|
"version": "0.1.13",
|
||||||
"resolved": "https://registry.npmjs.org/@yaakapp/api/-/api-0.1.12.tgz",
|
"resolved": "https://registry.npmjs.org/@yaakapp/api/-/api-0.1.13.tgz",
|
||||||
"integrity": "sha512-qA+2BBZz1LGTi0wsOmlwaw6xJbE3elPIUMt/BkiRT+DqQC5spZtISsyoPXjtsM0xZc2orjoRJd0LesXH7xkD0g==",
|
"integrity": "sha512-FSYPHZV0mP967w63VXi9zYP81hPo3vjSW3/UElJLuF/8ig6WmG4p1q2oYos4Ik267Z3qSQAGN5dPMfuk3DAnBA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "^22.0.0"
|
"@types/node": "^22.0.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
"@tauri-apps/plugin-log": "^2.0.0-rc.0",
|
"@tauri-apps/plugin-log": "^2.0.0-rc.0",
|
||||||
"@tauri-apps/plugin-os": "^2.0.0-rc.0",
|
"@tauri-apps/plugin-os": "^2.0.0-rc.0",
|
||||||
"@tauri-apps/plugin-shell": "^2.0.0-rc.0",
|
"@tauri-apps/plugin-shell": "^2.0.0-rc.0",
|
||||||
"@yaakapp/api": "^0.1.12",
|
"@yaakapp/api": "^0.1.13",
|
||||||
"buffer": "^6.0.3",
|
"buffer": "^6.0.3",
|
||||||
"classnames": "^2.3.2",
|
"classnames": "^2.3.2",
|
||||||
"cm6-graphql": "^0.0.9",
|
"cm6-graphql": "^0.0.9",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@yaakapp/api",
|
"name": "@yaakapp/api",
|
||||||
"version": "0.1.12",
|
"version": "0.1.13",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"typings": "./lib/index.d.ts",
|
"typings": "./lib/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
|
||||||
export type Settings = { id: string, model: "settings", createdAt: string, updatedAt: string, theme: string, appearance: string, themeDark: string, themeLight: string, updateChannel: string, interfaceFontSize: number, interfaceScale: number, editorFontSize: number, editorSoftWrap: boolean, openWorkspaceNewWindow: boolean | null, };
|
export type Settings = { id: string, model: "settings", createdAt: string, updatedAt: string, theme: string, appearance: string, themeDark: string, themeLight: string, updateChannel: string, interfaceFontSize: number, interfaceScale: number, editorFontSize: number, editorSoftWrap: boolean, telemetry: boolean, openWorkspaceNewWindow: boolean | null, };
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE settings ADD COLUMN telemetry BOOLEAN DEFAULT TRUE;
|
||||||
@@ -5,9 +5,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use serde_json::{json, Value};
|
use serde_json::{json, Value};
|
||||||
use tauri::{Manager, Runtime, WebviewWindow};
|
use tauri::{Manager, Runtime, WebviewWindow};
|
||||||
|
|
||||||
use yaak_models::queries::{
|
use yaak_models::queries::{generate_id, get_key_value_int, get_key_value_string, get_or_create_settings, set_key_value_int, set_key_value_string};
|
||||||
generate_id, get_key_value_int, get_key_value_string, set_key_value_int, set_key_value_string,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::is_dev;
|
use crate::is_dev;
|
||||||
|
|
||||||
@@ -157,6 +155,7 @@ pub async fn track_event<R: Runtime>(
|
|||||||
action: AnalyticsAction,
|
action: AnalyticsAction,
|
||||||
attributes: Option<Value>,
|
attributes: Option<Value>,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
let id = get_id(w).await;
|
let id = get_id(w).await;
|
||||||
let event = format!("{}.{}", resource, action);
|
let event = format!("{}.{}", resource, action);
|
||||||
let attributes_json = attributes.unwrap_or("{}".to_string().into()).to_string();
|
let attributes_json = attributes.unwrap_or("{}".to_string().into()).to_string();
|
||||||
@@ -186,9 +185,15 @@ pub async fn track_event<R: Runtime>(
|
|||||||
.get(format!("{base_url}/t/e"))
|
.get(format!("{base_url}/t/e"))
|
||||||
.query(¶ms);
|
.query(¶ms);
|
||||||
|
|
||||||
|
let settings = get_or_create_settings(w).await;
|
||||||
|
if !settings.telemetry {
|
||||||
|
info!("Track event (disabled): {}", event);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Disable analytics actual sending in dev
|
// Disable analytics actual sending in dev
|
||||||
if is_dev() {
|
if is_dev() {
|
||||||
debug!("track: {} {}", event, attributes_json);
|
debug!("Track event: {} {}", event, attributes_json);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ pub struct Settings {
|
|||||||
pub interface_scale: i32,
|
pub interface_scale: i32,
|
||||||
pub editor_font_size: i32,
|
pub editor_font_size: i32,
|
||||||
pub editor_soft_wrap: bool,
|
pub editor_soft_wrap: bool,
|
||||||
|
pub telemetry: bool,
|
||||||
pub open_workspace_new_window: Option<bool>,
|
pub open_workspace_new_window: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,6 +44,7 @@ pub enum SettingsIden {
|
|||||||
InterfaceScale,
|
InterfaceScale,
|
||||||
EditorFontSize,
|
EditorFontSize,
|
||||||
EditorSoftWrap,
|
EditorSoftWrap,
|
||||||
|
Telemetry,
|
||||||
OpenWorkspaceNewWindow,
|
OpenWorkspaceNewWindow,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,6 +66,7 @@ impl<'s> TryFrom<&Row<'s>> for Settings {
|
|||||||
interface_scale: r.get("interface_scale")?,
|
interface_scale: r.get("interface_scale")?,
|
||||||
editor_font_size: r.get("editor_font_size")?,
|
editor_font_size: r.get("editor_font_size")?,
|
||||||
editor_soft_wrap: r.get("editor_soft_wrap")?,
|
editor_soft_wrap: r.get("editor_soft_wrap")?,
|
||||||
|
telemetry: r.get("telemetry")?,
|
||||||
open_workspace_new_window: r.get("open_workspace_new_window")?,
|
open_workspace_new_window: r.get("open_workspace_new_window")?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -799,6 +799,10 @@ pub async fn update_settings<R: Runtime>(
|
|||||||
SettingsIden::EditorSoftWrap,
|
SettingsIden::EditorSoftWrap,
|
||||||
settings.editor_soft_wrap.into(),
|
settings.editor_soft_wrap.into(),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
SettingsIden::Telemetry,
|
||||||
|
settings.telemetry.into(),
|
||||||
|
),
|
||||||
(
|
(
|
||||||
SettingsIden::OpenWorkspaceNewWindow,
|
SettingsIden::OpenWorkspaceNewWindow,
|
||||||
settings.open_workspace_new_window.into(),
|
settings.open_workspace_new_window.into(),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import type { Cookie } from '@yaakapp/api';
|
||||||
import { useCookieJars } from '../hooks/useCookieJars';
|
import { useCookieJars } from '../hooks/useCookieJars';
|
||||||
import { useUpdateCookieJar } from '../hooks/useUpdateCookieJar';
|
import { useUpdateCookieJar } from '../hooks/useUpdateCookieJar';
|
||||||
import type { Cookie } from '../lib/models/Cookie';
|
|
||||||
import { cookieDomain } from '../lib/models';
|
import { cookieDomain } from '../lib/models';
|
||||||
import { Banner } from './core/Banner';
|
import { Banner } from './core/Banner';
|
||||||
import { IconButton } from './core/IconButton';
|
import { IconButton } from './core/IconButton';
|
||||||
|
|||||||
@@ -77,6 +77,12 @@ export function SettingsGeneral() {
|
|||||||
{ label: 'New Window', value: 'new' },
|
{ label: 'New Window', value: 'new' },
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
<Checkbox
|
||||||
|
checked={settings.telemetry}
|
||||||
|
title="Send Usage Statistics"
|
||||||
|
onChange={(telemetry) => updateSettings.mutate({ telemetry })}
|
||||||
|
/>
|
||||||
|
|
||||||
<Separator className="my-4" />
|
<Separator className="my-4" />
|
||||||
|
|
||||||
<Heading size={2}>
|
<Heading size={2}>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import type { CookieJar } from '../lib/models';
|
import type { CookieJar } from '@yaakapp/api';
|
||||||
import { invokeCmd } from '../lib/tauri';
|
import { invokeCmd } from '../lib/tauri';
|
||||||
import { useActiveWorkspace } from './useActiveWorkspace';
|
import { useActiveWorkspace } from './useActiveWorkspace';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { useMutation } from '@tanstack/react-query';
|
import { useMutation } from '@tanstack/react-query';
|
||||||
|
import type { CookieJar } from '@yaakapp/api';
|
||||||
import { trackEvent } from '../lib/analytics';
|
import { trackEvent } from '../lib/analytics';
|
||||||
import type { CookieJar } from '../lib/models';
|
|
||||||
import { invokeCmd } from '../lib/tauri';
|
import { invokeCmd } from '../lib/tauri';
|
||||||
import { useActiveWorkspace } from './useActiveWorkspace';
|
import { useActiveWorkspace } from './useActiveWorkspace';
|
||||||
import { usePrompt } from './usePrompt';
|
import { usePrompt } from './usePrompt';
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { useMutation } from '@tanstack/react-query';
|
import { useMutation } from '@tanstack/react-query';
|
||||||
|
import type { CookieJar } from '@yaakapp/api';
|
||||||
import { InlineCode } from '../components/core/InlineCode';
|
import { InlineCode } from '../components/core/InlineCode';
|
||||||
import { trackEvent } from '../lib/analytics';
|
import { trackEvent } from '../lib/analytics';
|
||||||
import type { CookieJar } from '../lib/models';
|
|
||||||
import { invokeCmd } from '../lib/tauri';
|
import { invokeCmd } from '../lib/tauri';
|
||||||
import { useConfirm } from './useConfirm';
|
import { useConfirm } from './useConfirm';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import type { Settings } from '@yaakapp/api';
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
import { atom } from 'jotai/index';
|
import { atom } from 'jotai/index';
|
||||||
import type { Settings } from '../lib/models/Settings';
|
|
||||||
import { getSettings } from '../lib/store';
|
import { getSettings } from '../lib/store';
|
||||||
|
|
||||||
const settings = await getSettings();
|
const settings = await getSettings();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useMutation } from '@tanstack/react-query';
|
import { useMutation } from '@tanstack/react-query';
|
||||||
import type { CookieJar } from '../lib/models';
|
import type { CookieJar } from '@yaakapp/api';
|
||||||
import { getCookieJar } from '../lib/store';
|
import { getCookieJar } from '../lib/store';
|
||||||
import { invokeCmd } from '../lib/tauri';
|
import { invokeCmd } from '../lib/tauri';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useMutation } from '@tanstack/react-query';
|
import { useMutation } from '@tanstack/react-query';
|
||||||
import type { Settings } from '../lib/models';
|
import type { Settings } from '@yaakapp/api';
|
||||||
import { getSettings } from '../lib/store';
|
import { getSettings } from '../lib/store';
|
||||||
import { invokeCmd } from '../lib/tauri';
|
import { invokeCmd } from '../lib/tauri';
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
import type { GrpcConnection, HttpResponse, HttpResponseHeader, Model } from '@yaakapp/api';
|
import type { Cookie, GrpcConnection, HttpResponse, HttpResponseHeader, Model } from '@yaakapp/api';
|
||||||
import type { Cookie } from './models/Cookie';
|
|
||||||
import type { CookieJar } from './models/CookieJar';
|
|
||||||
import type { Settings } from './models/Settings';
|
|
||||||
|
|
||||||
export type { CookieJar, Cookie, Settings };
|
|
||||||
|
|
||||||
export const BODY_TYPE_NONE = null;
|
export const BODY_TYPE_NONE = null;
|
||||||
export const BODY_TYPE_GRAPHQL = 'graphql';
|
export const BODY_TYPE_GRAPHQL = 'graphql';
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
|
||||||
import type { CookieDomain } from "./CookieDomain";
|
|
||||||
import type { CookieExpires } from "./CookieExpires";
|
|
||||||
|
|
||||||
export type Cookie = { raw_cookie: string, domain: CookieDomain, expires: CookieExpires, path: [string, boolean], };
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
|
||||||
|
|
||||||
export type CookieDomain = { "HostOnly": string } | { "Suffix": string } | "NotPresent" | "Empty";
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
|
||||||
|
|
||||||
export type CookieExpires = { "AtUtc": string } | "SessionEnd";
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
|
||||||
import type { Cookie } from "./Cookie";
|
|
||||||
|
|
||||||
export type CookieJar = { id: string, model: "cookie_jar", createdAt: string, updatedAt: string, workspaceId: string, name: string, cookies: Array<Cookie>, };
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
|
||||||
|
|
||||||
export type Settings = { id: string, model: "settings", createdAt: string, updatedAt: string, theme: string, appearance: string, themeDark: string, themeLight: string, updateChannel: string, interfaceFontSize: number, interfaceScale: number, editorFontSize: number, editorSoftWrap: boolean, openWorkspaceNewWindow: boolean | null, };
|
|
||||||
@@ -1,6 +1,12 @@
|
|||||||
import type { Environment, Folder, GrpcRequest, HttpRequest, Workspace } from '@yaakapp/api';
|
import type {
|
||||||
import type { CookieJar } from './models/CookieJar';
|
CookieJar,
|
||||||
import type { Settings } from './models/Settings';
|
Environment,
|
||||||
|
Folder,
|
||||||
|
GrpcRequest,
|
||||||
|
HttpRequest,
|
||||||
|
Settings,
|
||||||
|
Workspace,
|
||||||
|
} from '@yaakapp/api';
|
||||||
import { invokeCmd } from './tauri';
|
import { invokeCmd } from './tauri';
|
||||||
|
|
||||||
export async function getSettings(): Promise<Settings> {
|
export async function getSettings(): Promise<Settings> {
|
||||||
|
|||||||
Reference in New Issue
Block a user