76 lines
1.4 KiB
Go
76 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"net/url"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
var predirs map[string]*url.URL
|
|
|
|
func populatePRedirs() error {
|
|
file, err := os.OpenFile(filepath.Join(xdgDataHome(), "konbata", "predirs"), os.O_RDONLY|os.O_CREATE, 0600)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
scanner := bufio.NewScanner(file)
|
|
predirs = make(map[string]*url.URL)
|
|
for scanner.Scan() {
|
|
urls := strings.Split(scanner.Text(), " ")
|
|
if len(urls) != 2 {
|
|
continue
|
|
}
|
|
url0, err := url.Parse(urls[0])
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if url0.Scheme != "gemini" {
|
|
continue
|
|
}
|
|
url1, err := url.Parse(urls[1])
|
|
if err != nil {
|
|
continue
|
|
}
|
|
if url1.Scheme != "gemini" {
|
|
continue
|
|
}
|
|
predirs[url0.String()] = url1
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func savePRedirs() error {
|
|
file, err := os.OpenFile(filepath.Join(xdgDataHome(), "konbata", "predirs"), os.O_WRONLY|os.O_CREATE, 0600)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
err = file.Truncate(0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
writer := bufio.NewWriter(file)
|
|
for url0, url1 := range predirs {
|
|
_, err = writer.WriteString(url0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = writer.WriteRune(' ')
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = writer.WriteString(url1.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = writer.WriteRune('\n')
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return writer.Flush()
|
|
}
|