blob: 16fa9406bce93f5b1a670806e7e598bce4fcb948 [file] [log] [blame]
giolekva313ee2b2021-12-15 15:17:29 +04001package main
2
3import (
4 "flag"
5 "fmt"
6
7 "gioui.org/app"
8 "gioui.org/io/system"
9 "gioui.org/layout"
10 "gioui.org/op"
11 "gioui.org/unit"
12)
13
14var vpnApiAddr = flag.String("vpn-api-addr", "https://vpn.lekva.me", "VPN API server address")
15
16func processUIEvents(a App, events []UIEvent) error {
17 for _, e := range events {
18 switch e.(type) {
19 case EventScanBarcode:
20 return a.LaunchBarcodeScanner()
21 default:
22 return fmt.Errorf("Unhandled event: %#v", e)
23 }
24 }
25 return nil
26}
27
28func run() error {
29 a := createApp()
30 vc := NewDirectVPNClient(*vpnApiAddr)
31 ui := NewUI(vc)
32 w := app.NewWindow(
33 app.Size(unit.Px(1500), unit.Px(1500)),
34 app.Title("PCloud"),
35 )
36 var ops op.Ops
37 for {
38 select {
39 case e := <-w.Events():
40 switch e := e.(type) {
41 case app.ViewEvent:
42 if err := a.OnView(e); err != nil {
43 return err
44 } else {
45 w.Invalidate()
46 }
47 case *system.CommandEvent:
48 if e.Type == system.CommandBack {
49 if ui.OnBack() {
50 e.Cancel = true
51 w.Invalidate()
52 }
53 }
54 case system.FrameEvent:
55 gtx := layout.NewContext(&ops, e)
56 events := ui.Layout(gtx)
57 e.Frame(&ops)
58 if err := processUIEvents(a, events); err != nil {
59 return err
60 }
61 }
62 }
63 }
64 return nil
65}
66
67func main() {
68 flag.Parse()
69 go func() {
70 if err := run(); err != nil {
71 panic(err)
72 }
73 }()
74 app.Main()
75}