Passed
Branch master (f6e4d0)
by Abouzar
02:50
created
Severity
1
package main
2
3
import (
4
	"encoding/json"
5
	"io/ioutil"
6
	"os"
7
	"path/filepath"
8
)
9
10
var dataFolder = ".hget/"
11
var stateFileName = "state.json"
12
13
type State struct {
0 ignored issues
show
exported type State should have comment or be unexported
Loading history...
14
	URL   string
15
	Parts []Part
16
}
17
18
type Part struct {
0 ignored issues
show
exported type Part should have comment or be unexported
Loading history...
19
	Index     int64
20
	URL       string
21
	Path      string
22
	RangeFrom int64
23
	RangeTo   int64
24
}
25
26
func (s *State) Save() error {
0 ignored issues
show
exported method State.Save should have comment or be unexported
Loading history...
27
	//make temp folder
28
	//only working in unix with env HOME
29
	folder := FolderOf(s.URL)
30
	Printf("Saving current download data in %s\n", folder)
31
	if err := MkdirIfNotExist(folder); err != nil {
32
		return err
33
	}
34
35
	//move current downloading file to data folder
36
	for _, part := range s.Parts {
37
		os.Rename(part.Path, filepath.Join(folder, filepath.Base(part.Path)))
38
	}
39
40
	//save state file
41
	j, err := json.Marshal(s)
42
	if err != nil {
43
		return err
44
	}
45
	return ioutil.WriteFile(filepath.Join(folder, stateFileName), j, 0644)
46
}
47
48
func Read(task string) (*State, error) {
0 ignored issues
show
exported function Read should have comment or be unexported
Loading history...
49
	file := filepath.Join(os.Getenv("HOME"), dataFolder, task, stateFileName)
50
	Printf("Getting data from %s\n", file)
51
	bytes, err := ioutil.ReadFile(file)
52
	if err != nil {
53
		return nil, err
54
	}
55
56
	s := new(State)
57
	err = json.Unmarshal(bytes, s)
58
	return s, err
59
}
60