/
transfer.go
106 lines (92 loc) · 1.92 KB
/
transfer.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
package module
import (
"github.com/shimmerglass/bar3x/ui"
"github.com/shimmerglass/bar3x/ui/base"
"github.com/shimmerglass/bar3x/ui/markup"
)
type transfer struct {
moduleBase
RxTxt *TextUnit
TxTxt *TextUnit
RxGraph *base.Graph
TxGraph *base.Graph
TxtRow *base.Row
mk *markup.Markup
maxRX, maxTX int
rxData, txData []int
}
func newTransfer(p ui.ParentDrawable, mk *markup.Markup) *transfer {
return &transfer{
mk: mk,
moduleBase: newBase(p),
}
}
func (b *transfer) Init() error {
_, err := b.mk.Parse(b, b, `
<Layers ref="Root">
<Col>
<Graph
ref="RxGraph"
Color="{neutral_color}"
Height="{bar_height / 2 - v_padding}"
Width="{$TxtRow.Width}"
Direction="up"
/>
<Graph
ref="TxGraph"
Color="{neutral_color}"
Height="{bar_height / 2 - v_padding}"
Width="{$TxtRow.Width}"
Direction="down"
/>
</Col>
<Row ref="TxtRow">
<Sizer Width="50" HAlign="left">
<TxtUnit ref="RxTxt" />
</Sizer>
<Icon>{icons.transfer}</Icon>
<Sizer Width="50" HAlign="right">
<TxtUnit ref="TxTxt" />
</Sizer>
</Row>
</Layers>
`)
return err
}
func (b *transfer) Set(rx, tx int) {
b.RxTxt.Set(humanateBytes(uint64(rx)))
b.TxTxt.Set(humanateBytes(uint64(tx)))
if rx > b.maxRX {
b.maxRX = rx
}
if tx > b.maxTX {
b.maxTX = tx
}
b.rxData = append(b.rxData, rx)
b.txData = append(b.txData, tx)
w := b.RxGraph.Width()
if len(b.rxData) > w {
b.rxData = b.rxData[len(b.rxData)-w:]
}
if len(b.txData) > w {
b.txData = b.txData[len(b.txData)-w:]
}
rxdr := make([]float64, len(b.rxData))
for i, v := range b.rxData {
if b.maxRX > 0 {
rxdr[i] = float64(v) / float64(b.maxRX)
} else {
rxdr[i] = 0
}
}
txdr := make([]float64, len(b.txData))
for i, v := range b.txData {
if b.maxTX > 0 {
txdr[i] = float64(v) / float64(b.maxTX)
} else {
txdr[i] = 0
}
}
b.RxGraph.SetData(rxdr)
b.TxGraph.SetData(txdr)
}