Begin renderer for gemini

This commit is contained in:
Romain de Laage 2022-02-15 14:59:57 +01:00
parent 3af6883c9e
commit 5d6eb8acb6
Signed by: rdelaage
GPG Key ID: 534845FADDF0C329
3 changed files with 83 additions and 2 deletions

View File

@ -3,9 +3,11 @@ package cli
import (
"fmt"
"flag"
"os"
"git.rdelaage.ovh/rdelaage/cyanocorax/version"
"git.rdelaage.ovh/rdelaage/cyanocorax/manage"
"git.rdelaage.ovh/rdelaage/cyanocorax/render/gemini"
)
const (
@ -42,7 +44,18 @@ func Parse() {
if flagSite == "" {
fmt.Println("Flag site must be set")
} else {
fmt.Println(manage.SiteFromFile(flagSite))
os.Exit(1)
}
site, err := manage.SiteFromFile(flagSite)
if err != nil {
fmt.Println("Failed to parse site file", err)
os.Exit(1)
}
err = gemini.Render(site)
if err != nil {
fmt.Println("Failed to render this site", err)
os.Exit(1)
}
}

46
render/archive/archive.go Normal file
View File

@ -0,0 +1,46 @@
package archive
import (
"archive/zip"
"os"
"fmt"
)
type Archive struct {
file *os.File
}
func Create(name string) (Archive, error) {
var archive Archive
file, err := os.Create(name)
if err != nil {
return archive, err
}
archive.setFile(file)
return archive, nil
}
func (a *Archive) AddFile(path, content string) error {
writer := zip.NewWriter(a.file)
defer writer.Close()
file, err := writer.Create(path)
if err != nil {
return err
}
fmt.Fprintf(file, content)
return nil
}
func (a *Archive) Close() error {
return a.file.Close()
}
func (a *Archive) setFile(file *os.File) {
a.file = file
}

22
render/gemini/gemini.go Normal file
View File

@ -0,0 +1,22 @@
package gemini
import (
"git.rdelaage.ovh/rdelaage/cyanocorax/model/site"
"git.rdelaage.ovh/rdelaage/cyanocorax/render/archive"
)
func Render(s site.Site) error {
archive, err := archive.Create("export_gemini.zip")
if err != nil {
return err
}
defer archive.Close()
err = archive.AddFile("index.gmi", s.GetAbstract())
if err != nil {
return err
}
return nil
}