MCPcopy
hub / github.com/iuroc/bilidown / DownloadMedia

Function DownloadMedia

server/task/task.go:309–354  ·  view source on GitHub ↗
(client *bilibili.BiliClient, _url string, task *Task, mediaType string)

Source from the content-addressed store, hash-verified

307}
308
309func DownloadMedia(client *bilibili.BiliClient, _url string, task *Task, mediaType string) error {
310 var resp *http.Response
311 var err error
312 for i := 0; i < 5; i++ {
313 resp, err = client.SimpleGET(_url, nil)
314 if err == nil {
315 break
316 }
317 }
318
319 if err != nil {
320 return err
321 }
322
323 filename := strconv.FormatInt(task.ID, 10) + "." + mediaType
324 filepath := filepath.Join(task.Folder, filename)
325
326 progress := newProgressBar(resp.ContentLength)
327
328 file, err := os.Create(filepath)
329 if err != nil {
330 return err
331 }
332 defer file.Close()
333 reader := io.TeeReader(resp.Body, file)
334 buf := make([]byte, 1024)
335 for {
336 n, err := reader.Read(buf)
337 if err != nil && err != io.EOF {
338 return err
339 }
340 if n == 0 {
341 break
342 }
343
344 progress.add(n)
345 GlobalTaskMux.Lock()
346 if mediaType == "video" {
347 task.VideoProgress = progress.percent()
348 } else {
349 task.AudioProgress = progress.percent()
350 }
351 GlobalTaskMux.Unlock()
352 }
353 return nil
354}
355
356type progressBar struct {
357 total int64

Callers 1

StartMethod · 0.85

Calls 5

newProgressBarFunction · 0.85
SimpleGETMethod · 0.80
CreateMethod · 0.80
addMethod · 0.80
percentMethod · 0.80

Tested by

no test coverage detected