Analytics ID

This commit is contained in:
Gregory Schier
2024-02-28 07:26:02 -08:00
parent 597664d6f9
commit 796ceb56c4

View File

@@ -1,11 +1,13 @@
use std::fmt::Display; use std::fmt::Display;
use log::{debug, warn}; use log::{debug, warn};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::json; use serde_json::json;
use sqlx::types::JsonValue; use sqlx::types::JsonValue;
use tauri::{AppHandle, Manager}; use tauri::{AppHandle, Manager};
use crate::{is_dev, models}; use crate::is_dev;
use crate::models::{generate_id, get_key_value_int, get_key_value_string, set_key_value_int, set_key_value_string};
// serializable // serializable
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
@@ -34,7 +36,11 @@ impl AnalyticsResource {
impl Display for AnalyticsResource { impl Display for AnalyticsResource {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", serde_json::to_string(self).unwrap().replace("\"", "")) write!(
f,
"{}",
serde_json::to_string(self).unwrap().replace("\"", "")
)
} }
} }
@@ -67,7 +73,11 @@ impl AnalyticsAction {
impl Display for AnalyticsAction { impl Display for AnalyticsAction {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", serde_json::to_string(self).unwrap().replace("\"", "")) write!(
f,
"{}",
serde_json::to_string(self).unwrap().replace("\"", "")
)
} }
} }
@@ -85,10 +95,9 @@ pub async fn track_launch_event(app_handle: &AppHandle) -> LaunchEventInfo {
let mut info = LaunchEventInfo::default(); let mut info = LaunchEventInfo::default();
info.num_launches = info.num_launches = get_key_value_int(app_handle, namespace, "num_launches", 0).await + 1;
models::get_key_value_int(app_handle, namespace, "num_launches", 0).await + 1;
info.previous_version = info.previous_version =
models::get_key_value_string(app_handle, namespace, last_tracked_version_key, "").await; get_key_value_string(app_handle, namespace, last_tracked_version_key, "").await;
info.current_version = app_handle.package_info().version.to_string(); info.current_version = app_handle.package_info().version.to_string();
if info.previous_version.is_empty() { if info.previous_version.is_empty() {
@@ -123,14 +132,14 @@ pub async fn track_launch_event(app_handle: &AppHandle) -> LaunchEventInfo {
// Update key values // Update key values
models::set_key_value_string( set_key_value_string(
app_handle, app_handle,
namespace, namespace,
last_tracked_version_key, last_tracked_version_key,
info.current_version.as_str(), info.current_version.as_str(),
) )
.await; .await;
models::set_key_value_int(app_handle, namespace, "num_launches", info.num_launches).await; set_key_value_int(app_handle, namespace, "num_launches", info.num_launches).await;
info info
} }
@@ -141,6 +150,7 @@ pub async fn track_event(
action: AnalyticsAction, action: AnalyticsAction,
attributes: Option<JsonValue>, attributes: Option<JsonValue>,
) { ) {
let id = get_id(app_handle).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();
let info = app_handle.package_info(); let info = app_handle.package_info();
@@ -154,6 +164,7 @@ pub async fn track_event(
false => "https://t.yaak.app", false => "https://t.yaak.app",
}; };
let params = vec![ let params = vec![
("u", id),
("e", event.clone()), ("e", event.clone()),
("a", attributes_json.clone()), ("a", attributes_json.clone()),
("id", site.to_string()), ("id", site.to_string()),
@@ -216,3 +227,14 @@ fn get_window_size(app_handle: &AppHandle) -> String {
(height / 100.0).round() * 100.0 (height / 100.0).round() * 100.0
) )
} }
async fn get_id(app_handle: &AppHandle) -> String {
let id = get_key_value_string(app_handle, "analytics", "id", "").await;
if id.is_empty() {
let new_id = generate_id(None);
set_key_value_string(app_handle, "analytics", "id", new_id.as_str()).await;
new_id
} else {
id
}
}