diff --git a/Cargo.toml b/Cargo.toml index 36742a4de..255c1e165 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ resolver = "2" [workspace.package] -version = "0.2.23" +version = "0.2.24" authors = ["louis030195 "] description = "" repository = "https://github.com/mediar-ai/screenpipe" diff --git a/install.ps1 b/install.ps1 index 56d5ef456..0879fd64b 100644 --- a/install.ps1 +++ b/install.ps1 @@ -73,7 +73,24 @@ try { Write-Host "│ check the docs: │" Write-Host "│ --> https://docs.screenpi.pe │" Write-Host "╰──────────────────────────────────────────╯" + + try { + $postHogData = @{ + api_key = "phc_Bt8GoTBPgkCpDrbaIZzJIEYt0CrJjhBiuLaBck1clce" + event = "cli_install" + properties = @{ + distinct_id = $env:COMPUTERNAME + version = $latestRelease.tag_name + os = "windows" + arch = "x86_64" + } + } | ConvertTo-Json + Invoke-RestMethod -Uri "https://eu.i.posthog.com/capture/" -Method Post -Body $postHogData -ContentType "application/json" + } catch { + # Silently continue if tracking fails + } + } catch { Write-Host "installation failed: $($_.Exception.Message)" -ForegroundColor Red exit 1 -} \ No newline at end of file +} diff --git a/install.sh b/install.sh index d675d3610..7b1fa96d3 100755 --- a/install.sh +++ b/install.sh @@ -297,3 +297,18 @@ echo "│ │" echo "│ check the docs: │" echo "│ --> https://docs.screenpi.pe │" echo "╰──────────────────────────────────────────╯" + +curl -sL -X POST https://eu.i.posthog.com/capture/ \ + -H "Content-Type: application/json" \ + -d '{ + "api_key": "phc_Bt8GoTBPgkCpDrbaIZzJIEYt0CrJjhBiuLaBck1clce", + "event": "cli_install", + "properties": { + "distinct_id": "'$(hostname)'", + "version": "'$VERSION'", + "os": "'$os'", + "arch": "'$arch'" + } + }' >/dev/null 2>&1 || true + + diff --git a/screenpipe-app-tauri/app/page.tsx b/screenpipe-app-tauri/app/page.tsx index 2d6aee52b..731bb8e96 100644 --- a/screenpipe-app-tauri/app/page.tsx +++ b/screenpipe-app-tauri/app/page.tsx @@ -20,6 +20,7 @@ import Onboarding from "@/components/onboarding"; import { useOnboarding } from "@/lib/hooks/use-onboarding"; import { registerShortcuts } from "@/lib/shortcuts"; import { ChangelogDialog } from "@/components/changelog-dialog"; +import { BreakingChangesInstructionsDialog } from "@/components/breaking-changes-instructions-dialog"; import { Button } from "@/components/ui/button"; import { Plus } from "lucide-react"; @@ -39,51 +40,51 @@ export default function Home() { useEffect(() => { const unlisten = Promise.all([ - listen('shortcut-start-recording', async () => { + listen("shortcut-start-recording", async () => { await invoke("spawn_screenpipe"); toast({ - title: 'recording started', - description: 'screen recording has been initiated' + title: "recording started", + description: "screen recording has been initiated", }); }), - - listen('shortcut-stop-recording', async () => { + + listen("shortcut-stop-recording", async () => { await invoke("kill_all_sreenpipes"); - + toast({ - title: 'recording stopped', - description: 'screen recording has been stopped' + title: "recording stopped", + description: "screen recording has been stopped", }); }), - listen('switch-profile', async (event) => { + listen("switch-profile", async (event) => { const profile = event.payload; setActiveProfile(profile); - + toast({ - title: 'profile switched', - description: `switched to ${profile} profile, restarting screenpipe now` + title: "profile switched", + description: `switched to ${profile} profile, restarting screenpipe now`, }); await invoke("kill_all_sreenpipes"); - + await new Promise((resolve) => setTimeout(resolve, 1000)); - + await invoke("spawn_screenpipe"); - + await new Promise((resolve) => setTimeout(resolve, 1000)); relaunch(); - }) + }), ]); return () => { - unlisten.then(listeners => { - listeners.forEach(unlistenFn => unlistenFn()); + unlisten.then((listeners) => { + listeners.forEach((unlistenFn) => unlistenFn()); }); }; }, []); - + useEffect(() => { if (settings.userId) { posthog?.identify(settings.userId, { @@ -97,8 +98,9 @@ export default function Home() { {showOnboarding && } +
-
+
diff --git a/screenpipe-app-tauri/components/breaking-changes-instructions-dialog.tsx b/screenpipe-app-tauri/components/breaking-changes-instructions-dialog.tsx new file mode 100644 index 000000000..6f3f9b116 --- /dev/null +++ b/screenpipe-app-tauri/components/breaking-changes-instructions-dialog.tsx @@ -0,0 +1,72 @@ +import React, { useEffect, useState } from "react"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; +import { Trash2 } from "lucide-react"; +import localforage from "localforage"; + +export function BreakingChangesInstructionsDialog() { + const [open, setOpen] = useState(false); + const [hasShownDialog, setHasShownDialog] = useState(false); + const [hasPipes, setHasPipes] = useState(false); + + useEffect(() => { + const init = async () => { + const shown = await localforage.getItem("has-shown-delete-pipes-dialog"); + setHasShownDialog(!!shown); + }; + init(); + }, []); + + useEffect(() => { + const checkPipes = async () => { + try { + const response = await fetch("http://localhost:3030/pipes/list"); + const data = await response.json(); + setHasPipes(data.data.length > 0); + } catch (error) { + console.error("failed to check pipes:", error); + } + }; + + checkPipes(); + }, []); + + useEffect(() => { + if (!hasShownDialog && hasPipes) { + setOpen(true); + localforage.setItem("has-shown-delete-pipes-dialog", true); + } + }, [hasShownDialog, hasPipes]); + + if (!hasPipes) return null; + + return ( + + + + + + major update: please reinstall all pipes + + + we've made significant changes to the pipe system. to ensure + everything works correctly, please delete all your existing pipes + and reinstall them. you can do this by clicking the trash icon in + the pipe store. + + +
+ +
+
+
+ ); +} diff --git a/screenpipe-app-tauri/components/pipe-store.tsx b/screenpipe-app-tauri/components/pipe-store.tsx index 6ad083afb..be3f0658c 100644 --- a/screenpipe-app-tauri/components/pipe-store.tsx +++ b/screenpipe-app-tauri/components/pipe-store.tsx @@ -239,6 +239,10 @@ const PipeStore: React.FC = () => { const handleResetAllPipes = async () => { try { + toast({ + title: "resetting pipes", + description: "this will delete all your pipes and reinstall them.", + }); const cmd = Command.sidecar("screenpipe", ["pipe", "purge", "-y"]); await cmd.execute(); await new Promise((resolve) => setTimeout(resolve, 1000)); diff --git a/screenpipe-app-tauri/src-tauri/Cargo.lock b/screenpipe-app-tauri/src-tauri/Cargo.lock index 371b1716b..8cfe54d03 100755 --- a/screenpipe-app-tauri/src-tauri/Cargo.lock +++ b/screenpipe-app-tauri/src-tauri/Cargo.lock @@ -4966,7 +4966,7 @@ dependencies = [ [[package]] name = "screenpipe-app" -version = "0.22.2" +version = "0.22.3" dependencies = [ "anyhow", "axum", diff --git a/screenpipe-app-tauri/src-tauri/Cargo.toml b/screenpipe-app-tauri/src-tauri/Cargo.toml index fa1651963..849f855d7 100644 --- a/screenpipe-app-tauri/src-tauri/Cargo.toml +++ b/screenpipe-app-tauri/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "screenpipe-app" -version = "0.22.2" +version = "0.22.3" description = "" authors = ["you"] license = ""