mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-12 19:33:41 +00:00
feat: support use server time for file creation (#359)
This commit is contained in:
20 files changed
+192
-75
No files matched your search
@@ -9,6 +9,7 @@ import (
|
||||
"github.com/GopeedLab/gopeed/internal/fetcher"
|
||||
"github.com/GopeedLab/gopeed/pkg/base"
|
||||
fhttp "github.com/GopeedLab/gopeed/pkg/protocol/http"
|
||||
"github.com/xiaoqidun/setft"
|
||||
"golang.org/x/sync/errgroup"
|
||||
"io"
|
||||
"mime"
|
||||
@@ -131,8 +132,17 @@ func (f *Fetcher) Resolve(req *base.Request) error {
|
||||
} else {
|
||||
return NewRequestError(httpResp.StatusCode, httpResp.Status)
|
||||
}
|
||||
// Parse last modified time
|
||||
var lastModifiedTime *time.Time
|
||||
lastModified := httpResp.Header.Get(base.HttpHeaderLastModified)
|
||||
if lastModified != "" {
|
||||
// ignore parse error
|
||||
t, _ := time.Parse(time.RFC1123, lastModified)
|
||||
lastModifiedTime = &t
|
||||
}
|
||||
file := &base.FileInfo{
|
||||
Size: res.Size,
|
||||
Size: res.Size,
|
||||
Ctime: lastModifiedTime,
|
||||
}
|
||||
contentDisposition := httpResp.Header.Get(base.HttpHeaderContentDisposition)
|
||||
if contentDisposition != "" {
|
||||
@@ -258,6 +268,10 @@ func (f *Fetcher) fetch() {
|
||||
return
|
||||
}
|
||||
f.file.Close()
|
||||
// Update file last modified time
|
||||
if f.config.UseServerCtime && f.meta.Res.Files[0].Ctime != nil {
|
||||
setft.SetFileTime(f.file.Name(), time.Now(), *f.meta.Res.Files[0].Ctime, *f.meta.Res.Files[0].Ctime)
|
||||
}
|
||||
f.doneCh <- err
|
||||
}()
|
||||
}
|
||||
@@ -276,7 +290,7 @@ func (f *Fetcher) fetchChunk(index int, ctx context.Context) (err error) {
|
||||
maxRetries = 3
|
||||
)
|
||||
// retry until all remain chunks failed
|
||||
for true {
|
||||
for {
|
||||
// if chunk is completed, return
|
||||
if f.meta.Res.Range && chunk.Downloaded >= chunk.End-chunk.Begin+1 {
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user