diff --git a/cli/cli.go b/cli/cli.go index 6149d97..da91949 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -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) } } diff --git a/render/archive/archive.go b/render/archive/archive.go new file mode 100644 index 0000000..7411657 --- /dev/null +++ b/render/archive/archive.go @@ -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 +} diff --git a/render/gemini/gemini.go b/render/gemini/gemini.go new file mode 100644 index 0000000..ce9a13d --- /dev/null +++ b/render/gemini/gemini.go @@ -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 +}