Added publishing of uploads to built site
This commit is contained in:
parent
48f39133d7
commit
d0cebe6564
13 changed files with 145 additions and 20 deletions
|
|
@ -2,6 +2,7 @@ package publisher
|
|||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
|
|
@ -16,15 +17,18 @@ import (
|
|||
"lmika.dev/lmika/weiro/providers/db"
|
||||
"lmika.dev/lmika/weiro/providers/sitebuilder"
|
||||
"lmika.dev/lmika/weiro/providers/siteexporter"
|
||||
"lmika.dev/lmika/weiro/providers/uploadfiles"
|
||||
)
|
||||
|
||||
type Publisher struct {
|
||||
db *db.Provider
|
||||
up *uploadfiles.Provider
|
||||
}
|
||||
|
||||
func New(db *db.Provider) *Publisher {
|
||||
func New(db *db.Provider, up *uploadfiles.Provider) *Publisher {
|
||||
return &Publisher{
|
||||
db: db,
|
||||
up: up,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -40,6 +44,12 @@ func (p *Publisher) Publish(ctx context.Context, site models.Site) error {
|
|||
return err
|
||||
}
|
||||
|
||||
// Fetch all uploads of site
|
||||
uploads, err := p.db.SelectUploadsOfSite(ctx, site.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, target := range targets {
|
||||
if !target.Enabled {
|
||||
continue
|
||||
|
|
@ -49,6 +59,10 @@ func (p *Publisher) Publish(ctx context.Context, site models.Site) error {
|
|||
Site: site,
|
||||
Posts: posts,
|
||||
BaseURL: target.BaseURL,
|
||||
Uploads: uploads,
|
||||
OpenUpload: func(u models.Upload) (io.ReadCloser, error) {
|
||||
return p.up.OpenUpload(site, u)
|
||||
},
|
||||
}
|
||||
|
||||
if err := p.publishSite(ctx, pubSite, target); err != nil {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ func New(cfg config.Config) (*Services, error) {
|
|||
ufp := uploadfiles.New(filepath.Join(cfg.DataDir, "uploads"))
|
||||
|
||||
authSvc := auth.New(dbp)
|
||||
publisherSvc := publisher.New(dbp)
|
||||
publisherSvc := publisher.New(dbp, ufp)
|
||||
publisherQueue := publisher.NewQueue(publisherSvc)
|
||||
postService := posts.New(dbp, publisherQueue)
|
||||
siteService := sites.New(dbp)
|
||||
|
|
|
|||
|
|
@ -3,14 +3,22 @@ package uploads
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
)
|
||||
|
||||
var (
|
||||
uploadCopyTemplate = template.Must(template.New("upload-copy").Parse(`<img src="/uploads/{{.Slug}}" alt="{{.Alt}}">`))
|
||||
)
|
||||
|
||||
type UploadWithURL struct {
|
||||
Upload models.Upload
|
||||
URL string
|
||||
Upload models.Upload
|
||||
CopyTemplate string
|
||||
URL string
|
||||
}
|
||||
|
||||
func (s *Service) FetchUpload(ctx context.Context, uploadID int64) (res UploadWithURL, _ error) {
|
||||
|
|
@ -25,11 +33,22 @@ func (s *Service) FetchUpload(ctx context.Context, uploadID int64) (res UploadWi
|
|||
}
|
||||
|
||||
return UploadWithURL{
|
||||
Upload: upload,
|
||||
URL: fmt.Sprintf("/sites/%v/uploads/%v/raw", site.ID, upload.ID),
|
||||
Upload: upload,
|
||||
CopyTemplate: s.renderCopyTemplate(upload),
|
||||
URL: fmt.Sprintf("/sites/%v/uploads/%v/raw", site.ID, upload.ID),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Service) renderCopyTemplate(upload models.Upload) string {
|
||||
var sb strings.Builder
|
||||
|
||||
if err := uploadCopyTemplate.Execute(&sb, upload); err != nil {
|
||||
log.Printf("error rendering upload copy template: %v", err)
|
||||
return ""
|
||||
}
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
func (s *Service) ListUploads(ctx context.Context) (res []UploadWithURL, _ error) {
|
||||
site, _, err := s.fetchSiteAndUser(ctx)
|
||||
if err != nil {
|
||||
|
|
@ -44,8 +63,9 @@ func (s *Service) ListUploads(ctx context.Context) (res []UploadWithURL, _ error
|
|||
res = make([]UploadWithURL, len(uploads))
|
||||
for i, upload := range uploads {
|
||||
res[i] = UploadWithURL{
|
||||
Upload: upload,
|
||||
URL: fmt.Sprintf("/sites/%v/uploads/%v/raw", site.ID, upload.ID),
|
||||
Upload: upload,
|
||||
CopyTemplate: s.renderCopyTemplate(upload),
|
||||
URL: fmt.Sprintf("/sites/%v/uploads/%v/raw", site.ID, upload.ID),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue