From 682f08ab84571009be8afe0ff033e39361680211 Mon Sep 17 00:00:00 2001 From: vxclutch Date: Mon, 25 May 2026 16:11:20 -0400 Subject: [PATCH] Ramblings --- internal/config/conf.sh | 10 +++-- internal/config/config.go | 5 ++- internal/config/wrapper.sh | 2 +- internal/ramblings/ramblings.go | 74 +++++++++++++++++++++++++++++++++ main.go | 16 +++++-- templates/main.html | 6 ++- 6 files changed, 102 insertions(+), 11 deletions(-) create mode 100644 internal/ramblings/ramblings.go diff --git a/internal/config/conf.sh b/internal/config/conf.sh index d97d72c..d80b6eb 100644 --- a/internal/config/conf.sh +++ b/internal/config/conf.sh @@ -1,7 +1,11 @@ #!/bin/sh -news=true -quote=true -ramblings=true +# Section toggels +news=true # enables the news section +quote=true # enables the quotes section +ramblings=false #enables the ramblings section +# set the path where wire looks for ramblings, this is mostly for server use. ramblings_path=${XDG_DOCUMENTS_DIR}/wire/ + +article_path="https://rss.nytimes.com/services/xml/rss/nyt/US.xml" diff --git a/internal/config/config.go b/internal/config/config.go index 71896e2..aa20fe2 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -18,14 +18,15 @@ var wrapper string type Config struct { News bool `json:"news"` Quotes bool `json:"quote"` - Ramblings bool `json:"ramblings"` + Ramble bool `json:"ramblings"` Ramblings_Path string `json:"ramblings_path"` + Articles_Path string `json:"article_path"` } func NewConfig() (c Config) { c.News = true c.Quotes = true - c.Ramblings = true + c.Ramble = true ramblingsDir := os.Getenv("XDG_DOCUMENTS_DIR") if ramblingsDir == "" { ramblingsDir = filepath.Join(os.Getenv("HOME"), "Documents") diff --git a/internal/config/wrapper.sh b/internal/config/wrapper.sh index 793d06c..915f37f 100644 --- a/internal/config/wrapper.sh +++ b/internal/config/wrapper.sh @@ -1,3 +1,3 @@ #!/bin/sh . $1 -printf '{"news":%s,"quote":%s,"ramblings":%s,"ramblings_path":"%s"}\n' "$news" "$quote" "$ramblings" "$ramblings_path" +printf '{"news":%s,"quote":%s,"ramblings":%s,"ramblings_path":"%s","article_path":"%s"}\n' "$news" "$quote" "$ramblings" "$ramblings_path" "$article_path" diff --git a/internal/ramblings/ramblings.go b/internal/ramblings/ramblings.go new file mode 100644 index 0000000..ef37f18 --- /dev/null +++ b/internal/ramblings/ramblings.go @@ -0,0 +1,74 @@ +package ramblings + +import ( + "html/template" + "log" + "net/http" + "os" + "path/filepath" + "strings" + + "golang.org/x/text/cases" + "golang.org/x/text/language" +) + +type Ramblings []Rambles + +type Rambles struct { + Title string + Link string + Content template.HTML +} + +type RamblingsParser struct { + path string +} + +func NewParser(path string) *RamblingsParser { + rp := RamblingsParser{ + path: path, + } + return &rp +} + +func (rp *RamblingsParser) GetRamblings() (rs Ramblings) { + entries, err := os.ReadDir(rp.path) + if err != nil { + log.Fatal(err) + } + + for _, ent := range entries { + if ent.IsDir() { + continue + } + + title := ent.Name() + title = strings.ReplaceAll(title, "_", " ") + title = strings.ReplaceAll(title, "-", " ") + ext := filepath.Ext(ent.Name()) + title = strings.TrimSuffix(title ,ext) + + caser := cases.Title(language.AmericanEnglish) + title = caser.String(title) + + fp := filepath.Join(rp.path, ent.Name()) + contents, err := os.ReadFile(fp) + if err != nil { + log.Fatal(err) + } + + rs = append(rs, Rambles{ + Title: title, + Link: template.HTMLEscapeString(ent.Name()), + Content: template.HTML(string(contents)), + }) + } + + return +} + +func NewHandler(ramble Rambles) func(w http.ResponseWriter, r *http.Request) { + return func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte(ramble.Content)) + } +} diff --git a/main.go b/main.go index a520200..19f5eb2 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,7 @@ import ( "wire/internal/api" "wire/internal/articles" "wire/internal/config" + "wire/internal/ramblings" ) //go:embed version @@ -20,7 +21,7 @@ var verboseFlag = flag.Bool("verbose", false, "Enable verbose logging") type Data struct { Version string Quote template.HTML - Ramblings string + Ramblings ramblings.Ramblings Articles articles.Articles Config config.Config } @@ -42,22 +43,29 @@ func main() { cfg.ReadConfig() data.Config = cfg - ap := articles.NewParser("https://rss.nytimes.com/services/xml/rss/nyt/US.xml") + ap := articles.NewParser(cfg.Articles_Path) data.Articles = ap.GetArticles() + rp := ramblings.NewParser(cfg.Ramblings_Path) + data.Ramblings = rp.GetRamblings() + + for _, ramble := range rp.GetRamblings() { + http.HandleFunc("/" + ramble.Link, ramblings.NewHandler(ramble)) + } + quote, err := api.FetchJSON[[]Quote]("https://zenquotes.io/api/today") if err != nil { log.Fatal(err) } data.Quote = template.HTML(quote[0].H) - http.HandleFunc("/", newsHandler) + http.HandleFunc("/", mainHandler) fmt.Println("wire: starting server at http://127.0.0.1:1337") log.Fatal(http.ListenAndServe("127.0.0.1:1337", nil)) } -func newsHandler(w http.ResponseWriter, r *http.Request) { +func mainHandler(w http.ResponseWriter, r *http.Request) { tmpl := template.Must(template.ParseFiles("templates/main.html")) tmpl.ExecuteTemplate(w, "main.html", data) diff --git a/templates/main.html b/templates/main.html index 444a5d1..c7730ec 100644 --- a/templates/main.html +++ b/templates/main.html @@ -23,7 +23,11 @@ {{if .Config.Ramble}}

Schizo Ramblings

-{{.Ramblings}} + {{end}}