Browse Source

Merge pull request 'Convert images to images instead of links' (#5) from f/gmitohtml:image-output into master

Reviewed-on: #5
master
tslocum 1 year ago
parent
commit
8e8eef57e2
  1. 12
      main.go
  2. 22
      pkg/gmitohtml/config.go
  3. 27
      pkg/gmitohtml/convert.go

12
main.go

@ -46,7 +46,7 @@ func main() {
// TODO option to include response header in page
flag.Parse()
defaultConfig := defaultConfigPath()
defaultConfig := gmitohtml.DefaultConfigPath()
if configFile == "" {
configFile = defaultConfig
}
@ -58,18 +58,18 @@ func main() {
}
if configExists || configFile != defaultConfig {
err := readconfig(configFile)
err := gmitohtml.ReadConfig(configFile)
if err != nil {
log.Fatalf("failed to read configuration file at %s: %v\nSee CONFIGURATION.md for information on configuring gmitohtml", configFile, err)
}
for u, label := range config.Bookmarks {
for u, label := range gmitohtml.Config.Bookmarks {
gmitohtml.AddBookmark(u, label)
}
}
}
for domain, cc := range config.Certs {
for domain, cc := range gmitohtml.Config.Certs {
certData, err := ioutil.ReadFile(cc.Cert)
if err != nil {
log.Fatalf("failed to load client certificate for domain %s: %s", domain, err)
@ -88,9 +88,9 @@ func main() {
if daemon != "" {
gmitohtml.SetOnBookmarksChanged(func() {
config.Bookmarks = gmitohtml.GetBookmarks()
gmitohtml.Config.Bookmarks = gmitohtml.GetBookmarks()
err := saveConfig(configFile)
err := gmitohtml.SaveConfig(configFile)
if err != nil {
log.Fatal(err)
}

22
config.go → pkg/gmitohtml/config.go

@ -1,4 +1,4 @@
package main
package gmitohtml
import (
"crypto/tls"
@ -8,7 +8,6 @@ import (
"os"
"path"
"code.rocketnine.space/tslocum/gmitohtml/pkg/gmitohtml"
"gopkg.in/yaml.v3"
)
@ -22,16 +21,21 @@ type certConfig struct {
type appConfig struct {
Bookmarks map[string]string
// Convert image links to images instead of normal links
ConvertImages bool
Certs map[string]*certConfig
}
var config = &appConfig{
var Config = &appConfig{
Bookmarks: make(map[string]string),
ConvertImages: false,
Certs: make(map[string]*certConfig),
}
func defaultConfigPath() string {
func DefaultConfigPath() string {
homedir, err := os.UserHomeDir()
if err == nil && homedir != "" {
return path.Join(homedir, ".config", "gmitohtml", "config.yaml")
@ -39,7 +43,7 @@ func defaultConfigPath() string {
return ""
}
func readconfig(configPath string) error {
func ReadConfig(configPath string) error {
if configPath == "" {
return errors.New("file unspecified")
}
@ -54,15 +58,15 @@ func readconfig(configPath string) error {
if err != nil {
return err
}
config = newConfig
Config = newConfig
return nil
}
func saveConfig(configPath string) error {
config.Bookmarks = gmitohtml.GetBookmarks()
func SaveConfig(configPath string) error {
Config.Bookmarks = GetBookmarks()
out, err := yaml.Marshal(config)
out, err := yaml.Marshal(Config)
if err != nil {
return fmt.Errorf("failed to marshal configuration: %s", err)
}

27
pkg/gmitohtml/convert.go

@ -19,6 +19,8 @@ var daemonAddress string
var assetLock sync.Mutex
var imageExtensions = []string{"png", "jpg", "jpeg", "gif", "svg", "webp"}
func rewriteURL(u string, loc *url.URL) string {
if daemonAddress != "" {
scheme := "gemini"
@ -126,12 +128,25 @@ func Convert(page []byte, u string) []byte {
linkLabel = line[splitStart:]
}
link := append([]byte(`<a href="`), html.EscapeString(rewriteURL(string(linkURL), parsedURL))...)
link = append(link, []byte(`">`)...)
link = append(link, html.EscapeString(string(linkLabel))...)
link = append(link, []byte(`</a>`)...)
result = append(result, link...)
result = append(result, []byte("<br>")...)
parts := strings.Split(string(linkURL), ".")
extension := parts[len(parts)-1]
isImage := false
for _, ext := range imageExtensions {
if extension == ext {
isImage = true
}
}
uri := html.EscapeString(rewriteURL(string(linkURL), parsedURL))
title := html.EscapeString(string(linkLabel))
// If link ends with gif/png/jpg, add a image instead of a link
if isImage && Config.ConvertImages {
result = append(result, []byte("<img src=\"" + uri + "\" alt=\"" + title + "\">")...)
} else {
result = append(result, []byte("<a href=\"" + uri + "\">" + title + "</a><br>")...)
}
continue
}

Loading…
Cancel
Save