Repository navigation
Expand file tree
/
Copy pathtasks.go
More file actions
78 lines (72 loc) · 1.62 KB
/
Copy pathtasks.go
File metadata and controls
78 lines (72 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"errors"
"fmt"
"log/slog"
"strings"
"github.com/ASMfreaK/pages-server/pages-server/database"
"github.com/ASMfreaK/pages-server/pages-server/types"
)
var (
ErrVersionNotFound = errors.New("version not found")
ErrFileNotFound = errors.New("file not found")
)
func requestPageData(r *types.RepoFileAtVersion, rt types.RepoType, db *database.Database, q *database.Queue) (data []byte, fetched bool, err error) {
slog.Info("requesting page data", "repo", r)
repoInfo, ok, err := db.RepoPages().Get(r.Repo)
if err != nil {
err = fmt.Errorf("failed to get repo info %w", err)
return nil, false, err
}
if !ok {
err = fetchRepo(r.Repo, rt, q)
if err != nil {
slog.Error("failed to enqueue fetch repo", "err", err)
}
return nil, false, nil
}
var version types.Version
if r.Version == "" {
version = repoInfo.Latest
} else {
fetched = false
for _, v := range repoInfo.Versions {
if v.Version == r.Version {
version = v
fetched = true
break
}
}
if !fetched {
return nil, false, ErrVersionNotFound
}
}
if version.SHA == "" {
return nil, false, nil
}
pages, ok, err := db.PagesMetadata().Get(version.SHA)
if err != nil {
return nil, false, err
}
if !ok {
err = fetchVersion(r.Repo, version, rt, q)
return nil, false, err
}
if r.File == "" {
r.File = "index.html"
}
if strings.HasSuffix(r.File, "/") {
r.File += "index.html"
}
var fileSha types.PageSHA256
for _, file := range pages {
if file.Name == r.File {
fileSha = file.SHA
break
}
}
if fileSha == "" {
return nil, false, ErrFileNotFound
}
return db.PagesData().Get(fileSha)
}