Begin renderer for gemini
This commit is contained in:
parent
3af6883c9e
commit
5e7eb669c3
17
cli/cli.go
17
cli/cli.go
|
@ -3,9 +3,11 @@ package cli
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"flag"
|
"flag"
|
||||||
|
"os"
|
||||||
|
|
||||||
"git.rdelaage.ovh/rdelaage/cyanocorax/version"
|
"git.rdelaage.ovh/rdelaage/cyanocorax/version"
|
||||||
"git.rdelaage.ovh/rdelaage/cyanocorax/manage"
|
"git.rdelaage.ovh/rdelaage/cyanocorax/manage"
|
||||||
|
"git.rdelaage.ovh/rdelaage/cyanocorax/render/gemini"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -42,7 +44,18 @@ func Parse() {
|
||||||
|
|
||||||
if flagSite == "" {
|
if flagSite == "" {
|
||||||
fmt.Println("Flag site must be set")
|
fmt.Println("Flag site must be set")
|
||||||
} else {
|
os.Exit(1)
|
||||||
fmt.Println(manage.SiteFromFile(flagSite))
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package gemini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path"
|
||||||
|
|
||||||
|
"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.Name + "\n\n" + s.GetAbstract())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = archive.AddFile("favicon.txt", s.Icon)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, serie := range s.Series {
|
||||||
|
err = archive.AddFile(path.Join(serie.Prefix, "index.gmi"), serie.GetAbstract())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, page := range s.Pages {
|
||||||
|
err = archive.AddFile(path.Join(serie.Prefix, ), page.Title + "\n\n" + page.GetContent())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue