created gemini service and comunication with text-push service
This commit is contained in:
parent
efac20ad2a
commit
a00078d332
7 changed files with 250 additions and 0 deletions
57
formatter.go
Normal file
57
formatter.go
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
zord_tree "g.arns.lt/zordsdavini/zord-tree"
|
||||||
|
"sort"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FSummery struct {
|
||||||
|
Name string
|
||||||
|
Category []string
|
||||||
|
Description string
|
||||||
|
Id string
|
||||||
|
Lang string
|
||||||
|
Created string
|
||||||
|
Copyright string
|
||||||
|
Tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type TSummery struct {
|
||||||
|
Files []FSummery
|
||||||
|
Tags map[string]int
|
||||||
|
Categories map[string]int
|
||||||
|
}
|
||||||
|
|
||||||
|
type FileContent struct {
|
||||||
|
File zord_tree.File
|
||||||
|
Content string
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetLastFiles(files []FSummery) []FSummery {
|
||||||
|
sortingFiles := make(map[string]FSummery)
|
||||||
|
for _, f := range files {
|
||||||
|
sortingFiles[f.Created+f.Id] = f
|
||||||
|
}
|
||||||
|
|
||||||
|
keys := make([]string, 0, len(sortingFiles))
|
||||||
|
for k := range sortingFiles {
|
||||||
|
keys = append(keys, k)
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
sort.Reverse(sort.StringSlice(keys))
|
||||||
|
|
||||||
|
length := 10
|
||||||
|
if len(keys) < 10 {
|
||||||
|
length = len(keys)
|
||||||
|
}
|
||||||
|
lastFiles := make([]FSummery, 0, length)
|
||||||
|
for i, k := range keys {
|
||||||
|
if i == length {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
lastFiles = append(lastFiles, sortingFiles[k])
|
||||||
|
}
|
||||||
|
|
||||||
|
return lastFiles
|
||||||
|
}
|
16
go.mod
Normal file
16
go.mod
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
module g.arns.lt/zordsdavini/arns-lt-gemini
|
||||||
|
|
||||||
|
go 1.18
|
||||||
|
|
||||||
|
require (
|
||||||
|
g.arns.lt/zordsdavini/arns-lt-tree-push-service v0.0.0-20220802051611-cf99eecc6e60
|
||||||
|
git.sr.ht/~adnano/go-gemini v0.2.3
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
g.arns.lt/zordsdavini/abcex v1.0.0 // indirect
|
||||||
|
g.arns.lt/zordsdavini/zord-tree v0.2.1 // indirect
|
||||||
|
github.com/otiai10/copy v1.6.0 // indirect
|
||||||
|
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect
|
||||||
|
golang.org/x/text v0.3.3 // indirect
|
||||||
|
)
|
22
go.sum
Normal file
22
go.sum
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
g.arns.lt/zordsdavini/abcex v1.0.0 h1:qQqlZ4DMfethCGK4I6yGaLqMrTzKNIshqpINd1l3t0E=
|
||||||
|
g.arns.lt/zordsdavini/abcex v1.0.0/go.mod h1:YRcJgts3XZwI+LEkngpfUab3DkUAW387Irpr43hIym8=
|
||||||
|
g.arns.lt/zordsdavini/arns-lt-tree-push-service v0.0.0-20220802051611-cf99eecc6e60 h1:+b2wWaQUzFWE3RjbRR9luPadCrocw7QeTvQNCKT5hS0=
|
||||||
|
g.arns.lt/zordsdavini/arns-lt-tree-push-service v0.0.0-20220802051611-cf99eecc6e60/go.mod h1:vwR/TAStVkP8ZHofrpqdg8b/qlBbLNS8KVFp1tsKHtE=
|
||||||
|
g.arns.lt/zordsdavini/zord-tree v0.2.1 h1:GYbwojTqCTcr/e4oYNxTUCP7V/2cD8xn/AYOecYGnxo=
|
||||||
|
g.arns.lt/zordsdavini/zord-tree v0.2.1/go.mod h1:R9VMBwVwW6pu8yFIIgsMUv7YuWa48dj6DglkyXeTPik=
|
||||||
|
git.sr.ht/~adnano/go-gemini v0.2.3 h1:oJ+Y0/mheZ4Vg0ABjtf5dlmvq1yoONStiaQvmWWkofc=
|
||||||
|
git.sr.ht/~adnano/go-gemini v0.2.3/go.mod h1:hQ75Y0i5jSFL+FQ7AzWVAYr5LQsaFC7v3ZviNyj46dY=
|
||||||
|
github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ=
|
||||||
|
github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E=
|
||||||
|
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
|
||||||
|
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
|
||||||
|
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
|
||||||
|
github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E=
|
||||||
|
github.com/otiai10/mint v1.3.2/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
|
||||||
|
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=
|
||||||
|
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
85
main.go
Normal file
85
main.go
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.sr.ht/~adnano/go-gemini"
|
||||||
|
"git.sr.ht/~adnano/go-gemini/certificate"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
certificates := &certificate.Store{}
|
||||||
|
certificates.Register("localhost")
|
||||||
|
if err := certificates.Load("/home/arnas/out/gemcert/a"); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
mux := &gemini.Mux{}
|
||||||
|
mux.HandleFunc("/", process)
|
||||||
|
|
||||||
|
server := &gemini.Server{
|
||||||
|
Handler: mux,
|
||||||
|
ReadTimeout: 30 * time.Second,
|
||||||
|
WriteTimeout: 1 * time.Minute,
|
||||||
|
GetCertificate: certificates.Get,
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
if err := server.ListenAndServe(ctx); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func process(ctx context.Context, w gemini.ResponseWriter, r *gemini.Request) {
|
||||||
|
fmt.Println(ctx, r, r.URL, r.Host)
|
||||||
|
renderIndex("en", w)
|
||||||
|
}
|
||||||
|
|
||||||
|
func renderIndex(lang string, w gemini.ResponseWriter) {
|
||||||
|
langPath := lang + "/"
|
||||||
|
if lang == "sgs" {
|
||||||
|
langPath = ""
|
||||||
|
}
|
||||||
|
w.SetMediaType("text/gemini")
|
||||||
|
content, err := os.ReadFile(fmt.Sprintf("templates/%s/index.gmi", lang))
|
||||||
|
if err != nil {
|
||||||
|
w.WriteHeader(gemini.StatusTemporaryFailure, "Internal server error")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
page := string(content)
|
||||||
|
|
||||||
|
summery := GetSummery()
|
||||||
|
fmt.Println(summery)
|
||||||
|
tree := TSummery{}
|
||||||
|
json.Unmarshal([]byte(summery), &tree)
|
||||||
|
fmt.Println(tree)
|
||||||
|
|
||||||
|
categories := ""
|
||||||
|
for c, count := range tree.Categories {
|
||||||
|
fmt.Println(c, count)
|
||||||
|
categories = categories + fmt.Sprintf("=> /%s%s/%s %s (%d)\n", langPath, "tree/path", c, c, count)
|
||||||
|
}
|
||||||
|
fmt.Println(page, categories)
|
||||||
|
page = strings.Replace(page, "{{categories}}", categories, 1)
|
||||||
|
fmt.Println(page)
|
||||||
|
|
||||||
|
tags := ""
|
||||||
|
for t, count := range tree.Tags {
|
||||||
|
tags = tags + fmt.Sprintf("=> /t/%s %s (%d)\n", t, t, count)
|
||||||
|
}
|
||||||
|
page = strings.Replace(page, "{{tags}}", tags, 1)
|
||||||
|
|
||||||
|
lastFiles := ""
|
||||||
|
for _, f := range GetLastFiles(tree.Files) {
|
||||||
|
lastFiles = lastFiles + fmt.Sprintf("=> /%s/%s %s (%s)\n", strings.Join(f.Category, "/"), f.Id, f.Description, f.Created)
|
||||||
|
}
|
||||||
|
page = strings.Replace(page, "{{last_posts}}", lastFiles, 1)
|
||||||
|
|
||||||
|
fmt.Fprintf(w, page)
|
||||||
|
}
|
26
templates/en/index.gmi
Normal file
26
templates/en/index.gmi
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# Arns' capsule
|
||||||
|
|
||||||
|
Welcome to my capsule in Gemini space.
|
||||||
|
|
||||||
|
> Če turietom būtė mon pruotinga cėtata :-P
|
||||||
|
|
||||||
|
=> / Žemaitėška versėjė
|
||||||
|
=> https://arns.lt http version
|
||||||
|
|
||||||
|
Main themes are spreaded by categories. Each file may have tags what can filter the tree.
|
||||||
|
|
||||||
|
=> /en/s search
|
||||||
|
=> /en/a about
|
||||||
|
|
||||||
|
### Categories
|
||||||
|
|
||||||
|
{{categories}}
|
||||||
|
|
||||||
|
### Tags
|
||||||
|
|
||||||
|
{{tags}}
|
||||||
|
|
||||||
|
### Last posts
|
||||||
|
|
||||||
|
{{last_posts}}
|
||||||
|
|
26
templates/sgs/index.gmi
Normal file
26
templates/sgs/index.gmi
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# Arna alkierios
|
||||||
|
|
||||||
|
Sveikė atvīkėn i mona kapsolė Gemini ertie.
|
||||||
|
|
||||||
|
> Če turietom būtė mon pruotinga cėtata :-P
|
||||||
|
|
||||||
|
=> /en English version
|
||||||
|
=> https://arns.lt http versėjė
|
||||||
|
|
||||||
|
Pagrindėnės temas paskėrstītas par kateguorėjės. Kuožnos fails gal turietė žīmas, katruos gal atsėjuotė miedi.
|
||||||
|
|
||||||
|
=> /s ėiškuok
|
||||||
|
=> /a aple
|
||||||
|
|
||||||
|
### Kateguorėjės
|
||||||
|
|
||||||
|
{{categories}}
|
||||||
|
|
||||||
|
### Žīmas
|
||||||
|
|
||||||
|
{{tags}}
|
||||||
|
|
||||||
|
### Paskotėnē īrašā
|
||||||
|
|
||||||
|
{{last_posts}}
|
||||||
|
|
18
text_server.go
Normal file
18
text_server.go
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSummery() string {
|
||||||
|
conn, err := net.Dial("tcp", "127.0.0.1:8001")
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
|
}
|
||||||
|
fmt.Fprintf(conn, "\n")
|
||||||
|
message, err := bufio.NewReader(conn).ReadString('\n')
|
||||||
|
conn.Close()
|
||||||
|
return message
|
||||||
|
}
|
Loading…
Reference in a new issue