One-click backups for AT Protocol
1import { useState } from "react";
2import { Button } from "@/components/ui/button";
3import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
4import { invoke } from "@tauri-apps/api/core";
5import { listen } from "@tauri-apps/api/event";
6import { toast } from "sonner";
7
8export function BackgroundTest() {
9 const [isListening, setIsListening] = useState(false);
10
11 const startListening = async () => {
12 try {
13 await listen("perform-backup", () => {
14 toast("🎯 Background backup event received!");
15 console.log("Background backup event received");
16 });
17 setIsListening(true);
18 toast("🎯 Listening for background backup events");
19 } catch (error) {
20 console.error("Failed to start listening:", error);
21 toast("Failed to start listening");
22 }
23 };
24
25 const testBackgroundScheduler = async () => {
26 try {
27 await invoke("start_background_scheduler");
28 toast("🎯 Background scheduler started");
29 } catch (error) {
30 console.error("Failed to start background scheduler:", error);
31 toast("Failed to start background scheduler");
32 }
33 };
34
35 const testEmitEvent = async () => {
36 try {
37 // This will trigger the background backup
38 await invoke("emit", { event: "perform-backup", payload: null });
39 toast("🎯 Test backup event emitted");
40 } catch (error) {
41 console.error("Failed to emit event:", error);
42 toast("Failed to emit event");
43 }
44 };
45
46 return (
47 <Card className="bg-card border-white/10 mb-4">
48 <CardHeader>
49 <CardTitle className="text-white">🎯 Background Backup Test</CardTitle>
50 </CardHeader>
51 <CardContent className="space-y-4">
52 <div className="flex gap-2">
53 <Button
54 onClick={startListening}
55 disabled={isListening}
56 variant="outline"
57 className="cursor-pointer"
58 >
59 {isListening ? "Listening..." : "Start Listening"}
60 </Button>
61
62 <Button
63 onClick={testBackgroundScheduler}
64 variant="outline"
65 className="cursor-pointer"
66 >
67 Start Scheduler
68 </Button>
69
70 <Button
71 onClick={testEmitEvent}
72 variant="outline"
73 className="cursor-pointer"
74 >
75 Test Event
76 </Button>
77 </div>
78
79 <div className="text-xs text-white/60">
80 <p>• Click "Start Listening" to listen for backup events</p>
81 <p>• Click "Start Scheduler" to start background scheduler</p>
82 <p>• Click "Test Event" to manually trigger a backup event</p>
83 <p>• Check browser console for detailed logs</p>
84 </div>
85 </CardContent>
86 </Card>
87 );
88}