diff --git a/modules/desktop/electron/electron.ts b/modules/desktop/electron/electron.ts index 422f05a..4fc9b1c 100644 --- a/modules/desktop/electron/electron.ts +++ b/modules/desktop/electron/electron.ts @@ -183,7 +183,7 @@ app.on("open-url", (event, url) => { if (isPackage) { // /packages/github.com/pypa/twine -> /packages/github_com_pypa_twine const packageSlug = nameToSlug(rawPath.replace(packagesPrefix, "")); - rawPath = [packagesPrefix, packageSlug].join(""); + rawPath = [packagesPrefix, packageSlug, "?deeplink=true"].join(""); } setProtocolPath(rawPath); diff --git a/modules/desktop/src/libs/analytics.ts b/modules/desktop/src/libs/analytics.ts index 6bcba78..98a7447 100644 --- a/modules/desktop/src/libs/analytics.ts +++ b/modules/desktop/src/libs/analytics.ts @@ -29,7 +29,8 @@ enum AnalyticsAction { install = "INSTALL_ACTION", install_failed = "INSTALL_ACTION_FAILED", search = "SEARCH_ACTION", - search_failed = "SEARCH_ACTION_FAILED" + search_failed = "SEARCH_ACTION_FAILED", + view_package_page = "VIEW_PACKAGE_PAGE_ACTION" } const trackAction = (action: AnalyticsAction, data?: { [key: string]: any }) => { @@ -78,3 +79,10 @@ export const trackSearch = (search_term: string, result_count: number) => { }); } }; + +export const trackViewPackagePage = (packageFullname: string, deeplink: boolean) => { + trackAction(AnalyticsAction.view_package_page, { + pkg: packageFullname, + deeplink + }); +}; diff --git a/modules/desktop/src/routes/+layout.svelte b/modules/desktop/src/routes/+layout.svelte index 9558662..7277e89 100644 --- a/modules/desktop/src/routes/+layout.svelte +++ b/modules/desktop/src/routes/+layout.svelte @@ -32,6 +32,7 @@ const syncPath = async () => { // used by the tea:// protocol to suggest a path to open const path = await getProtocolPath(); + if (path) goto(path); }; diff --git a/modules/desktop/src/routes/packages/[slug]/+page.svelte b/modules/desktop/src/routes/packages/[slug]/+page.svelte index 5ca6ac0..f4602a4 100644 --- a/modules/desktop/src/routes/packages/[slug]/+page.svelte +++ b/modules/desktop/src/routes/packages/[slug]/+page.svelte @@ -21,6 +21,7 @@ import { packagesStore } from "$libs/stores"; import { onMount } from "svelte"; import NotificationBar from "$components/notification-bar/notification-bar.svelte"; + import { trackViewPackagePage } from "$libs/analytics"; const { packageList } = packagesStore; @@ -49,10 +50,18 @@ const url = $page.url; const tab = url.searchParams.get("tab"); - + const deeplink = url.searchParams.get("deeplink"); onMount(() => { packagesStore.syncPackageData(pkg); }); + + let lastPackage = ""; + $: { + if (lastPackage !== pkg?.full_name && pkg) { + lastPackage = pkg.full_name; + trackViewPackagePage(lastPackage, !!deeplink); + } + }