view dumphtml.go @ 21:1aa824c6b319

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 02 Apr 2020 21:24:24 +0900
parents
children 8d14bbbedf23
line wrap: on
line source

package lectable

import (
	"bufio"
	"encoding/json"
	"io"
	"os"
	"strings"
)

/*
<td class="required"><a href="http://ie.u-ryukyu.ac.jp/syllabus/2019/early/617009001.html">プロジェクトデザイン</a>
<a href="http://ie.u-ryukyu.ac.jp/%7koji/pw/" target="_blank" rel="noopener noreferrer">山田 孝治</a>
<span style="font-size: 8pt;">工1-321</span></td>

<td class="select"><a href="http://ie.u-ryukyu.ac.jp/syllabus/2019/early/617016001.html">情報処理技術概論</a>
<a>宮里 智樹</a>
<span style="font-size: 8pt;">工1-322</span></td>
*/

type teacherSTR struct {
	name string
	url  string
}

type TeacherFromJSON struct {
	Teacher []string `json:"teacher"`
}

type dumpHTMLSTR struct {
	ID       string
	Name     string
	Teacher  teacherSTR
	Place    string
	IsSelect bool
	NextTerm *dumpHTMLSTR
}

type teacherNameToURL map[string]string

func convertStaticTeacherToMap(jsonPath string) (*teacherNameToURL, error) {
	f, err := os.Open(jsonPath)
	if err != nil {
		return nil, err
	}
	br := bufio.NewReader(f)
	dec := json.NewDecoder(br)
	var teacherFJson []TeacherFromJSON
	err = dec.Decode(&teacherFJson)
	if err != nil {
		return nil, err
	}

	tnametoURL := make(teacherNameToURL, len(teacherFJson))

	for _, tcfj := range teacherFJson {
		tnametoURL[tcfj.Teacher[0]] = tcfj.Teacher[1]
	}
	return &tnametoURL, nil
}

func convertLec(jsonPath string) ([]Lec, error) {
	f, err := os.Open(jsonPath)
	if err != nil {
		return nil, err
	}
	br := bufio.NewReader(f)
	dec := json.NewDecoder(br)
	var lecs []Lec
	err = dec.Decode(&lecs)
	if err != nil {
		return nil, err
	}
	return lecs, nil
}

/*
 */
/*
type dumpHTMLSTR struct {
	ID       string
	Name     string
	Teacher  teacherSTR
	Place    string
	IsSelect bool
	NextTerm *DumpLectureFPDF
}
*/

type GradeLecturesArray [6][5][5]*dumpHTMLSTR

type GradeLectures struct {
	B1  *[5][5]*dumpHTMLSTR //[ day of week ] [period]
	B2  *[5][5]*dumpHTMLSTR //[ day of week ] [period]
	B3  *[5][5]*dumpHTMLSTR //[ day of week ] [period]
	B4  *[5][5]*dumpHTMLSTR //[ day of week ] [period]
	M   *[5][5]*dumpHTMLSTR //[ day of week ] [period]
	OLD *[5][5]*dumpHTMLSTR //[ day of week ] [period]
}

func convertdumpHTMLSTR(lecs []Lec, teacherToJSON teacherNameToURL) (*GradeLectures, error) {
	glecturesArray := new(GradeLecturesArray)
	for _, lec := range lecs {
		grade := lec.Grades[0] //NOTE: now, grade elements is always one
		grade--

		teacherURL := teacherToJSON[lec.Teacher]

		lTeacher := teacherSTR{
			name: lec.Teacher,
			url:  teacherURL,
		}
		for _, day := range lec.Day {
			dhstr := dumpHTMLSTR{
				ID:       lec.ID,
				Name:     lec.Name,
				Teacher:  lTeacher,
				Place:    lec.Place,
				IsSelect: lec.isSelect,
				NextTerm: nil,
			}
			day--
			if glecturesArray[grade][lec.DayOfWeek][day] != nil {
				if strings.Contains(glecturesArray[grade][lec.DayOfWeek][day].Name, "大学英語") {
					var strBuilder strings.Builder
					strBuilder.WriteString(dhstr.Teacher.name)
					strBuilder.WriteString("/")
					strBuilder.WriteString(glecturesArray[grade][lec.DayOfWeek][day].Teacher.name)
					glecturesArray[grade][lec.DayOfWeek][day].Teacher.name = strBuilder.String()
					strBuilder.Reset()

					strBuilder.WriteString(dhstr.Place)
					strBuilder.WriteString("/")
					strBuilder.WriteString(glecturesArray[grade][lec.DayOfWeek][day].Place)
					glecturesArray[grade][lec.DayOfWeek][day].Place = strBuilder.String()
					continue
				}
				glecturesArray[grade][lec.DayOfWeek][day].NextTerm = &dhstr
				continue
			}
			glecturesArray[grade][lec.DayOfWeek][day] = &dhstr
		}
	}
	glectures := new(GradeLectures)
	glectures.B1 = &glecturesArray[0]
	glectures.B2 = &glecturesArray[1]
	glectures.B3 = &glecturesArray[2]
	glectures.B4 = &glecturesArray[3]
	glectures.M = &glecturesArray[4]

	return glectures, nil
}

func dumpHTML(grlectures *GradeLectures, writer io.Writer) error {
	return nil
}