func (srv *DServ) addTask(rwr http.ResponseWriter, req *http.Request) { srv.oplock.Lock() defer func() { srv.oplock.Unlock() req.Body.Close() }() bodyData, err := ioutil.ReadAll(req.Body) rwr.Header().Set("Access-Control-Allow-Origin", "*") if err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) log.Println(err) return } var nj NewJob if err := json.Unmarshal(bodyData, &nj); err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) log.Println(err) return } dl, err := httpclient.CreateDownloader(nj.Url, nj.FilePath, nj.PartCount) if err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) log.Println(err) return } srv.dls = append(srv.dls, dl) js, _ := json.Marshal("ok") rwr.Write(js) }
func (srv *DServ) progressJson(rwr http.ResponseWriter, req *http.Request) { defer req.Body.Close() rwr.Header().Set("Access-Control-Allow-Origin", "*") jbs := make([]DJob, 0, len(srv.dls)) for ind, i := range srv.dls { prs := i.GetProgress() var d int64 var s int64 for _, p := range prs { d = d + (p.Pos - p.From) s += p.Speed } j := DJob{ Id: ind, FileName: i.Fi.FileName, Size: i.Fi.Size, Progress: (d * 100 / i.Fi.Size), Downloaded: d, Speed: s, } jbs = append(jbs, j) } js, err := json.Marshal(jbs) if err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) return } rwr.Write(js) }
func (srv *DServ) removeTask(rwr http.ResponseWriter, req *http.Request) { srv.oplock.Lock() defer func() { srv.oplock.Unlock() req.Body.Close() }() bodyData, err := ioutil.ReadAll(req.Body) rwr.Header().Set("Access-Control-Allow-Origin", "*") if err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) log.Println(err) return } var ind int if err := json.Unmarshal(bodyData, &ind); err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) log.Println(err) return } if !(len(srv.dls) > ind) { http.Error(rwr, "error: id is out of jobs list", http.StatusInternalServerError) return } log.Printf("try stop segment download %v", srv.dls[ind].StopAll()) srv.dls = append(srv.dls[:ind], srv.dls[ind+1:]...) js, _ := json.Marshal("ok") rwr.Write(js) }
func (srv *DServ) startTask(rwr http.ResponseWriter, req *http.Request) { srv.oplock.Lock() defer func() { srv.oplock.Unlock() req.Body.Close() }() bodyData, err := ioutil.ReadAll(req.Body) rwr.Header().Set("Access-Control-Allow-Origin", "*") if err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) log.Println(err) return } var ind int if err := json.Unmarshal(bodyData, &ind); err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) log.Println(err) return } if !(len(srv.dls) > ind) { http.Error(rwr, "error: id is out of jobs list", http.StatusInternalServerError) return } if errs := srv.dls[ind].StartAll(); len(errs) > 0 { http.Error(rwr, "error: can't start all part", http.StatusInternalServerError) return } js, _ := json.Marshal("ok") rwr.Write(js) }
func (srv *DServ) index(rwr http.ResponseWriter, req *http.Request) { rwr.Header().Set("Content-Type: text/html", "*") content, err := ioutil.ReadFile("index.html") if err != nil { log.Println("warning: start page not found, return included page") val, _ := base64.StdEncoding.DecodeString(htmlData) rwr.Write(val) return } rwr.Write(content) }
func (srv *DServ) stopAllTask(rwr http.ResponseWriter, req *http.Request) { defer func() { req.Body.Close() }() _, err := ioutil.ReadAll(req.Body) rwr.Header().Set("Access-Control-Allow-Origin", "*") if err != nil { http.Error(rwr, err.Error(), http.StatusInternalServerError) log.Println(err) return } srv.StopAllTask() js, _ := json.Marshal("ok") rwr.Write(js) }