@@ -2,8 +2,11 @@ use std::{
22 sync:: { OnceLock , PoisonError , RwLock } ,
33 time:: Duration ,
44} ;
5+ use tauri:: AppHandle ;
56use tracing:: error;
67
8+ use crate :: auth:: AuthStore ;
9+
710#[ derive( Debug ) ]
811pub enum PostHogEvent {
912 MultipartUploadComplete {
@@ -22,36 +25,42 @@ pub enum PostHogEvent {
2225 } ,
2326}
2427
25- impl From < PostHogEvent > for posthog_rs:: Event {
26- fn from ( event : PostHogEvent ) -> Self {
27- match event {
28- PostHogEvent :: MultipartUploadComplete {
29- duration,
30- length,
31- size,
32- } => {
33- let mut e = posthog_rs:: Event :: new_anon ( "multipart_upload_complete" ) ;
34- e. insert_prop ( "duration" , duration. as_secs ( ) )
35- . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
36- . ok ( ) ;
37- e. insert_prop ( "length" , length. as_secs ( ) )
38- . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
39- . ok ( ) ;
40- e. insert_prop ( "size" , size)
41- . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
42- . ok ( ) ;
43- e
44- }
45- PostHogEvent :: MultipartUploadFailed { duration, error } => {
46- let mut e = posthog_rs:: Event :: new_anon ( "multipart_upload_failed" ) ;
47- e. insert_prop ( "duration" , duration. as_secs ( ) )
48- . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
49- . ok ( ) ;
50- e. insert_prop ( "error" , error)
51- . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
52- . ok ( ) ;
53- e
54- }
28+ fn posthog_event ( event : PostHogEvent , distinct_id : Option < & str > ) -> posthog_rs:: Event {
29+ match event {
30+ PostHogEvent :: MultipartUploadComplete {
31+ duration,
32+ length,
33+ size,
34+ } => {
35+ let mut e = match distinct_id {
36+ Some ( distinct_id) => {
37+ posthog_rs:: Event :: new ( "multipart_upload_complete" , distinct_id)
38+ }
39+ None => posthog_rs:: Event :: new_anon ( "multipart_upload_complete" ) ,
40+ } ;
41+ e. insert_prop ( "duration" , duration. as_secs ( ) )
42+ . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
43+ . ok ( ) ;
44+ e. insert_prop ( "length" , length. as_secs ( ) )
45+ . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
46+ . ok ( ) ;
47+ e. insert_prop ( "size" , size)
48+ . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
49+ . ok ( ) ;
50+ e
51+ }
52+ PostHogEvent :: MultipartUploadFailed { duration, error } => {
53+ let mut e = match distinct_id {
54+ Some ( distinct_id) => posthog_rs:: Event :: new ( "multipart_upload_failed" , distinct_id) ,
55+ None => posthog_rs:: Event :: new_anon ( "multipart_upload_failed" ) ,
56+ } ;
57+ e. insert_prop ( "duration" , duration. as_secs ( ) )
58+ . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
59+ . ok ( ) ;
60+ e. insert_prop ( "error" , error)
61+ . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
62+ . ok ( ) ;
63+ e
5564 }
5665 }
5766}
@@ -76,10 +85,14 @@ pub fn set_server_url(url: &str) {
7685
7786static API_SERVER_IS_CAP_CLOUD : OnceLock < RwLock < Option < bool > > > = OnceLock :: new ( ) ;
7887
79- pub fn async_capture_event ( event : PostHogEvent ) {
88+ pub fn async_capture_event ( app : & AppHandle , event : PostHogEvent ) {
8089 if option_env ! ( "VITE_POSTHOG_KEY" ) . is_some ( ) {
90+ let distinct_id = AuthStore :: get ( app)
91+ . ok ( )
92+ . flatten ( )
93+ . and_then ( |auth| auth. user_id ) ;
8194 tokio:: spawn ( async move {
82- let mut e: posthog_rs :: Event = event. into ( ) ;
95+ let mut e = posthog_event ( event, distinct_id . as_deref ( ) ) ;
8396
8497 e. insert_prop ( "cap_version" , env ! ( "CARGO_PKG_VERSION" ) )
8598 . map_err ( |err| error ! ( "Error adding PostHog property: {err:?}" ) )
0 commit comments