...
1 package utils
2
3
4 type ProgressEventType int
5
6 const (
7
8 TransferStartedEvent ProgressEventType = 1 + iota
9
10 TransferDataEvent
11
12 TransferCompletedEvent
13
14 TransferFailedEvent
15 )
16
17
18 type ProgressEvent struct {
19 ConsumedBytes int64
20 TotalBytes int64
21 RwBytes int64
22 EventType ProgressEventType
23 }
24
25
26 type ProgressListener interface {
27 ProgressChanged(event *ProgressEvent)
28 }
29
30
31
32 func NewProgressEvent(eventType ProgressEventType, consumed, total int64, rwBytes int64) *ProgressEvent {
33 return &ProgressEvent{
34 ConsumedBytes: consumed,
35 TotalBytes: total,
36 RwBytes: rwBytes,
37 EventType: eventType}
38 }
39
40
41 func PublishProgress(listener ProgressListener, event *ProgressEvent) {
42 if listener != nil && event != nil {
43 listener.ProgressChanged(event)
44 }
45 }
46
47 func GetProgressListener(obj interface{}) ProgressListener {
48 if obj == nil {
49 return nil
50 }
51 listener, ok := obj.(ProgressListener)
52 if !ok {
53 return nil
54 }
55 return listener
56 }
57
58 type ReaderTracker struct {
59 CompletedBytes int64
60 }
61
View as plain text