diff --git a/config.go b/config.go
index ab9104b..aa8ca70 100644
--- a/config.go
+++ b/config.go
@@ -1,4 +1,4 @@
-package main
+package gmitohtml
import (
"crypto/tls"
@@ -22,12 +22,17 @@ 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{
Bookmarks: make(map[string]string),
+ ConvertImages: false,
+
Certs: make(map[string]*certConfig),
}
diff --git a/main.go b/main.go
index 1b3685f..191a634 100644
--- a/main.go
+++ b/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)
}
diff --git a/pkg/gmitohtml/convert.go b/pkg/gmitohtml/convert.go
index 549df8e..59588be 100644
--- a/pkg/gmitohtml/convert.go
+++ b/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,31 @@ func Convert(page []byte, u string) []byte {
linkLabel = line[splitStart:]
}
- link := append([]byte(``)...)
- link = append(link, html.EscapeString(string(linkLabel))...)
- link = append(link, []byte(``)...)
- result = append(result, link...)
- result = append(result, []byte("
")...)
+ // If link ends with gif/png/jpg, add a image instead of a link
+ parts := strings.Split(string(linkURL), ".")
+ extension := parts[len(parts)-1]
+ isImage := false
+ for _, ext := range imageExtensions {
+ if extension == ext {
+ isImage = true
+ }
+ }
+
+ if isImage && Config.ConvertImages {
+ img := append([]byte(`
`)...)
+ result = append(result, img...)
+ } else {
+ link := append([]byte(``)...)
+ link = append(link, html.EscapeString(string(linkLabel))...)
+ link = append(link, []byte(``)...)
+ result = append(result, link...)
+ result = append(result, []byte("
")...)
+ }
+
continue
}