annotate cmd_donwload.go @ 22:8d14bbbedf23

genhtml
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 02 Apr 2020 23:39:55 +0900
parents cc568d791a28
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 package lectable
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import (
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
4 "bufio"
4
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 "context"
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
6 "encoding/json"
4
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 "fmt"
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 "io"
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
9 "os"
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
10 "path/filepath"
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
11 "strconv"
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
12 "strings"
5
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
13
11
e7d9f63d969c move repository
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
14 "www.cr.ie.u-ryukyu.ac.jp/hg/Members/anatofuz/lectable/syllabus"
4
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 )
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 type cmdDownload struct{}
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 func (cd *cmdDownload) name() string {
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 return "download"
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 }
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 func (cd *cmdDownload) description() string {
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 return "donwload html from lecture ids"
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 }
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
27 func convertPDFJson(jsonPath string) ([]DumpLectureFPDF, error) {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
28 f, err := os.Open(jsonPath)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
29 if err != nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
30 return nil, err
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
31 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
32 br := bufio.NewReader(f)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
33 dec := json.NewDecoder(br)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
34 var dlf []DumpLectureFPDF
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
35 err = dec.Decode(&dlf)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
36 if err != nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
37 return nil, err
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
38 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
39 return dlf, nil
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
40 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
41
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
42 func strToIntDays(s string) (int, int, error) {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
43 for dayIndex, dow := range days {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
44 if strings.Contains(s, dow) {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
45 d, err := strconv.Atoi(s[kanjiDayLen:])
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
46 if err != nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
47 return 0, 0, err
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
48 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
49 return dayIndex, d, nil
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
50 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
51 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
52 return 0, 0, nil
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
53 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
54
4
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 func (cd *cmdDownload) run(ctx context.Context, argv []string, outStream, errStream io.Writer) error {
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 fmt.Println("download now!!")
5
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
57 dh := syllabus.CreateGetSyllabus()
14
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
58 err := checkAndMkdirBuilddir(dh.Outputdir)
5
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
59 if err != nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
60 return err
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
61 }
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
62
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
63 dlf, err := convertPDFJson(argv[0])
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
64 if err != nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
65 return err
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
66 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
67
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
68 var lecIDS []string
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
69 //var idToLecPDFJ map[string][]Lec
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
70 idToLecPDFJ := make(map[string][]Lec, len(dlf))
5
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
71
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
72 for _, dl := range dlf {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
73 lecIDS = append(lecIDS, dl.Id)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
74 //idToLecPDFJ[dl.Id] = append(idToLecPDFJ[dl.Id], Lec{ID: dl.Id, Grades: dl.Grades, isSelect: dl.IsSelect, Place: dl.Place})
22
8d14bbbedf23 genhtml
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
75 le := Lec{ID: dl.Id, Grades: dl.Grades, IsSelect: dl.IsSelect, Place: dl.Place}
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
76 if dl.Day != "" {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
77 dow, dindex, err := strToIntDays(dl.Day)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
78 if err != nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
79 return err
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
80 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
81 le.DayOfWeek = dow
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
82 le.Day = []int{dindex}
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
83 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
84 idToLecPDFJ[dl.Id] = append(idToLecPDFJ[dl.Id], le)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
85 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
86
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
87 lwps, err := dh.LecIDStoDonwlodSyllabus(ctx, lecIDS, outStream)
10
b6a2d89b06e7 add cmd_pdf
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
88 lectures, err := dh.LectureWPathS2LectureStruct(ctx, lwps, outStream)
b6a2d89b06e7 add cmd_pdf
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
89 if err != nil {
b6a2d89b06e7 add cmd_pdf
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
90 return err
b6a2d89b06e7 add cmd_pdf
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
91 }
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
92
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
93 var lecs []Lec
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
94
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
95 for _, lect := range *lectures {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
96 fpds := idToLecPDFJ[lect.ID]
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
97 for _, fp := range fpds {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
98 for _, day := range lect.Day {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
99 fp.Name = lect.Name
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
100 if fp.Day == nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
101 fp.Day = []int{day.Period}
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
102 if day.LastPeriod != -1 {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
103 fp.Day = append(fp.Day, day.LastPeriod)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
104 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
105 fp.DayOfWeek = day.DayOfWeek
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
106 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
107 fp.Teacher = lect.Teacher
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
108 lecs = append(lecs, fp)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
109 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
110 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
111 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
112 return dumpLecToJson(lecs, dh.Outputdir)
4
8bc574052fcb def cmd
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 }
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
114
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
115 func dumpLecToJson(lec []Lec, outputdir string) error {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
116 bytes, err := json.Marshal(lec)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
117 if err != nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
118 return err
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
119 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
120 fp := filepath.Join(outputdir, "dumpFromPDFWHTML.json")
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
121 file, err := os.Create(fp)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
122 bw := bufio.NewWriter(file)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
123 _, err = bw.Write(bytes)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
124 if err != nil {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
125 return err
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
126 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
127 bw.Flush()
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
128 file.Close()
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
129 return nil
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
130 }
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
131
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
132 type Lec struct {
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
133 ID string `json:id`
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
134 Name string `json:name`
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
135 Day []int `json:day`
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
136 DayOfWeek int `json:dayOfWeek`
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
137 Teacher string `json:teacher`
22
8d14bbbedf23 genhtml
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
138 IsSelect bool `json:isSelect`
16
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
139 Grades []int `json:grades`
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
140 Place string `json:place`
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
141 }