This repository has been archived by the owner on Mar 7, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
travel.go
109 lines (95 loc) · 2.02 KB
/
travel.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package travel
import (
"net/http"
"time"
"git.fractalqb.de/fractalqb/c4hgol"
"git.fractalqb.de/fractalqb/goxic"
"git.fractalqb.de/fractalqb/qbsllm"
"github.com/CmdrVasquess/bcplus/internal/wapp"
"github.com/CmdrVasquess/goedx"
)
const Key = "travel"
var (
log = qbsllm.New(qbsllm.Lnormal, Key, nil, nil)
LogCfg = c4hgol.Config(qbsllm.NewConfig(log))
)
func init() {
wapp.AddScreen(&screen, LogCfg)
tmpl.BCpScreen = &screen
}
var (
tmpl template
screen = wapp.Screen{
Key: Key,
Handler: &tmpl,
}
)
type template struct {
wapp.ScreenTmpl
}
type Jump struct {
Name string
Time time.Time
Coos *goedx.SysCoos
}
type screenData struct {
JumpHist []Jump
}
func (data *screenData) Set(ed *goedx.EDState) {
if cmdr := screen.Ext.EDState.Cmdr; cmdr != nil {
gxy := screen.Ext.Galaxy
for _, jump := range cmdr.JumpHist {
sys, _ := gxy.EdgxSystem(jump.SysAddr, "", nil, time.Time{})
data.JumpHist = append(data.JumpHist, Jump{
Name: sys.Name,
Time: jump.Arrive,
Coos: &sys.Coos,
})
}
} else {
data.JumpHist = []Jump{}
}
}
type jumpData struct {
Jump Jump
}
func (jd *jumpData) Set(ed *goedx.EDState) {
cmdr := screen.Ext.EDState.Cmdr
if cmdr == nil {
return
}
if len(cmdr.JumpHist) == 0 {
return
}
gxy := screen.Ext.Galaxy
jump := &cmdr.JumpHist[cmdr.LastJump]
sys, _ := gxy.EdgxSystem(jump.SysAddr, "", nil, time.Time{})
jd.Jump.Name = sys.Name
jd.Jump.Coos = &sys.Coos
jd.Jump.Time = jump.Arrive
}
func (tmpl *template) Data(chg goedx.Change) interface{} {
switch {
case chg.All(goedx.ChgSystem):
cmdr := screen.Ext.EDState.Cmdr
if cmdr == nil {
return nil
}
data := new(jumpData)
data.Set(screen.Ext.EDState)
return data
case chg == 0 || chg.All(goedx.ChgCommander):
data := new(screenData)
data.Set(screen.Ext.EDState)
return data
}
return nil
}
func (tmpl *template) ServeHTTP(wr http.ResponseWriter, rq *http.Request) {
var bt goxic.BounT
tmpl.PrepareScreen(&bt)
screen.Ext.EDState.Read(func() error {
goxic.Must(bt.WriteTo(wr))
return nil
})
}