/
callbacks.go
52 lines (42 loc) · 933 Bytes
/
callbacks.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
package main
import (
"io"
"mime/multipart"
"sync"
)
type callbackData struct {
dlCallback func(io.Writer) error
statusCallback func() string
called bool
}
var callbacks = make(map[string]*callbackData)
func makeCallback(uuid string, wg *sync.WaitGroup, h *multipart.FileHeader) *callbackData {
status := "Not connected"
statusFn := func() string {
return status
}
callbacks[uuid] = &callbackData{
dlCallback: func(w io.Writer) error {
defer wg.Done()
status = "Reading uploaded file"
f, err := h.Open()
if err != nil {
status = "Error: " + err.Error()
return err
}
status = "Copying from upload to download"
_, err = io.Copy(w, f)
if err != nil {
status = "Error: " + err.Error()
return err
}
delete(callbacks, uuid)
f.Close()
status = "Done"
return nil
},
statusCallback: statusFn,
called: false,
}
return callbacks[uuid]
}