annotate src/gf/gf.go @ 35:a4a54931b6fa

add gf.go.
author pyon@macmini
date Wed, 20 Nov 2019 06:19:13 +0900
parents
children a2e33e922a54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
35
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
1 /*
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
2 Last Change: 2019-11-20 Wed 05:44:47.
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
3
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
4 gf.go: Get Files (ver.0.3)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
5
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
6 ./gf.json: server & file list
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
7 e.g.
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
8 {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
9 "Server": {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
10 "Address": "sdm.sakura.ne.jp",
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
11 "Port": "80"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
12 },
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
13 "Files": [
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
14 "mahjong.html",
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
15 "gammon",
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
16 "gammon/backgammon.html"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
17 ]
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
18 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
19
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
20 TODO:
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
21 * goroutine
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
22 * make dir option [-r]
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
23 * json file option [-j]
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
24 */
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
25 package main
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
26
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
27 import (
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
28 "encoding/json"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
29 "fmt"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
30 "flag"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
31 "io/ioutil"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
32 "log"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
33 "os"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
34 "path"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
35 "net/http"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
36 )
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
37
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
38 const version = "0.3"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
39 const defaultjson = "gf.json"
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
40
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
41 type SV struct {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
42 Address string
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
43 Port string
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
44 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
45
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
46 func (sv SV) String() string {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
47 return sv.Address + ":" + sv.Port
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
48 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
49
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
50 type GF struct {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
51 Server SV
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
52 Files []string
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
53 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
54
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
55 var (
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
56 ver bool
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
57 quiet bool
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
58 jsonfile string
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
59 )
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
60
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
61 func init() {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
62 flag.BoolVar(&ver, "v", false, "version.")
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
63 flag.BoolVar(&quiet, "s", false, "silence.")
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
64 flag.StringVar(&jsonfile, "j", defaultjson, "specify json file.")
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
65 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
66
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
67 func main() {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
68 flag.Parse()
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
69
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
70 if ver {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
71 fmt.Println("gf", version)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
72 os.Exit(0)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
73 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
74
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
75 content, err := ioutil.ReadFile(jsonfile)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
76 if err != nil {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
77 log.Fatal(err)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
78 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
79
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
80 var gf GF
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
81
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
82 err = json.Unmarshal(content, &gf)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
83 if err != nil {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
84 log.Fatal(err)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
85 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
86 n := len(gf.Files)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
87 if n > 1 {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
88 print_msg(fmt.Sprintf("%d files downloading\n", n), quiet)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
89 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
90
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
91 for _, f := range gf.Files {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
92 print_msg(" getting " + f + "...", quiet)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
93 status, err := http_get(gf.Server.String(), f)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
94 if err != nil {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
95 print_msg(fmt.Sprintf(" [ERROR] %s\n", err), quiet)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
96 } else {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
97 print_msg(" [" + status + "]\n", quiet)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
98 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
99 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
100 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
101
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
102 func http_get(server, file string) (string, error) {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
103 url := "http://" + server + "/" + file
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
104 res, err := http.Get(url)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
105 if err != nil {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
106 return "", err
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
107 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
108
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
109 content, err := ioutil.ReadAll(res.Body)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
110 res.Body.Close()
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
111 if err != nil {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
112 return "", err
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
113 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
114 if res.StatusCode != http.StatusOK {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
115 return res.Status, nil
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
116 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
117
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
118 err = ioutil.WriteFile(path.Base(file), content, 0644)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
119 if err != nil {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
120 return "", err
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
121 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
122 return res.Status, nil
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
123 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
124
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
125 func print_msg(msg string, q bool) {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
126 if !q {
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
127 fmt.Print(msg)
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
128 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
129 }
a4a54931b6fa add gf.go.
pyon@macmini
parents:
diff changeset
130