Adds status 1 support to gemini, fixes bug in url where gophertypes were getting thrown out of nongopher addresses, and fixes up relative linking in gemini maps
This commit is contained in:
parent
2f14011a48
commit
ff209c4ae3
23
client.go
23
client.go
|
@ -280,7 +280,7 @@ func (c *client) simpleCommand(action string) {
|
||||||
c.BookMarks.ToggleOpen()
|
c.BookMarks.ToggleOpen()
|
||||||
c.Draw()
|
c.Draw()
|
||||||
case "SEARCH":
|
case "SEARCH":
|
||||||
c.search("")
|
c.search("", "", "?")
|
||||||
case "HELP", "?":
|
case "HELP", "?":
|
||||||
go c.Visit(helplocation)
|
go c.Visit(helplocation)
|
||||||
default:
|
default:
|
||||||
|
@ -300,7 +300,7 @@ func (c *client) doCommand(action string, values []string) {
|
||||||
case "CHECK", "C":
|
case "CHECK", "C":
|
||||||
c.displayConfigValue(values[0])
|
c.displayConfigValue(values[0])
|
||||||
case "SEARCH":
|
case "SEARCH":
|
||||||
c.search(strings.Join(values, " "))
|
c.search(strings.Join(values, " "), "", "")
|
||||||
case "WRITE", "W":
|
case "WRITE", "W":
|
||||||
if values[0] == "." {
|
if values[0] == "." {
|
||||||
values[0] = c.PageState.History[c.PageState.Position].Location.Full
|
values[0] = c.PageState.History[c.PageState.Position].Location.Full
|
||||||
|
@ -590,16 +590,16 @@ func (c *client) doLinkCommand(action, target string) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *client) search(q string) {
|
func (c *client) search(query, url, question string) {
|
||||||
var entry string
|
var entry string
|
||||||
var err error
|
var err error
|
||||||
if q == "" {
|
if query == "" {
|
||||||
c.ClearMessage()
|
c.ClearMessage()
|
||||||
c.ClearMessageLine()
|
c.ClearMessageLine()
|
||||||
if c.Options["theme"] == "normal" {
|
if c.Options["theme"] == "normal" {
|
||||||
fmt.Printf("\033[7m%*.*s\r", c.Width, c.Width, "")
|
fmt.Printf("\033[7m%*.*s\r", c.Width, c.Width, "")
|
||||||
}
|
}
|
||||||
fmt.Print("?")
|
fmt.Print(question)
|
||||||
entry, err = cui.GetLine()
|
entry, err = cui.GetLine()
|
||||||
c.ClearMessageLine()
|
c.ClearMessageLine()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -610,11 +610,14 @@ func (c *client) search(q string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
entry = q
|
entry = query
|
||||||
}
|
}
|
||||||
u, err := MakeUrl(c.Options["searchengine"])
|
if url == "" {
|
||||||
|
url = c.Options["searchengine"]
|
||||||
|
}
|
||||||
|
u, err := MakeUrl(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.SetMessage("'searchengine' is not set to a valid url", true)
|
c.SetMessage("The search url is not a valid url", true)
|
||||||
c.DrawMessage()
|
c.DrawMessage()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -811,6 +814,8 @@ func (c *client) Visit(url string) {
|
||||||
filename = "gopherfile"
|
filename = "gopherfile"
|
||||||
}
|
}
|
||||||
c.saveFile(u, filename)
|
c.saveFile(u, filename)
|
||||||
|
} else if u.Mime == "7" {
|
||||||
|
c.search("", u.Full, "?")
|
||||||
} else {
|
} else {
|
||||||
content, links, err := gopher.Visit(u.Mime, u.Host, u.Port, u.Resource)
|
content, links, err := gopher.Visit(u.Mime, u.Host, u.Port, u.Resource)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -834,6 +839,8 @@ func (c *client) Visit(url string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch capsule.Status {
|
switch capsule.Status {
|
||||||
|
case 1:
|
||||||
|
c.search("", u.Full, capsule.Content)
|
||||||
case 2:
|
case 2:
|
||||||
if capsule.MimeMaj == "text" {
|
if capsule.MimeMaj == "text" {
|
||||||
pg := MakePage(u, capsule.Content, capsule.Links)
|
pg := MakePage(u, capsule.Content, capsule.Links)
|
||||||
|
|
|
@ -137,8 +137,8 @@ func Visit(host, port, resource string) (Capsule, error) {
|
||||||
|
|
||||||
switch capsule.Status {
|
switch capsule.Status {
|
||||||
case 1:
|
case 1:
|
||||||
// handle search
|
capsule.Content = header[1]
|
||||||
return capsule, fmt.Errorf("Gemini input not yet supported")
|
return capsule, nil
|
||||||
case 2:
|
case 2:
|
||||||
mimeAndCharset := strings.Split(header[1], ";")
|
mimeAndCharset := strings.Split(header[1], ";")
|
||||||
meta = mimeAndCharset[0]
|
meta = mimeAndCharset[0]
|
||||||
|
@ -149,7 +149,10 @@ func Visit(host, port, resource string) (Capsule, error) {
|
||||||
capsule.MimeMaj = minMajMime[0]
|
capsule.MimeMaj = minMajMime[0]
|
||||||
capsule.MimeMin = minMajMime[1]
|
capsule.MimeMin = minMajMime[1]
|
||||||
if capsule.MimeMaj == "text" && capsule.MimeMin == "gemini" {
|
if capsule.MimeMaj == "text" && capsule.MimeMin == "gemini" {
|
||||||
rootUrl := fmt.Sprintf("gemini://%s:%s", host, port)
|
if len(resource) > 0 && resource[0] != '/' {
|
||||||
|
resource = fmt.Sprintf("/%s", resource)
|
||||||
|
}
|
||||||
|
rootUrl := fmt.Sprintf("gemini://%s:%s%s", host, port, resource)
|
||||||
capsule.Content, capsule.Links = parseGemini(body, rootUrl)
|
capsule.Content, capsule.Links = parseGemini(body, rootUrl)
|
||||||
} else {
|
} else {
|
||||||
capsule.Content = body
|
capsule.Content = body
|
||||||
|
@ -190,10 +193,8 @@ func parseGemini(b, rootUrl string) (string, []string) {
|
||||||
decorator = strings.Trim(subLn[splitPoint:], "\t\n\r \a")
|
decorator = strings.Trim(subLn[splitPoint:], "\t\n\r \a")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(link) > 0 && link[0] == '/' {
|
if strings.Index(link, "://") < 0 {
|
||||||
link = fmt.Sprintf("%s%s", rootUrl, link)
|
link = fmt.Sprintf("%s%s", rootUrl, link)
|
||||||
} else if len(link) > 0 && strings.Index(link, "://") < 0 {
|
|
||||||
link = fmt.Sprintf("%s/%s", rootUrl, link)
|
|
||||||
}
|
}
|
||||||
links = append(links, link)
|
links = append(links, link)
|
||||||
linknum := fmt.Sprintf("[%d]", len(links))
|
linknum := fmt.Sprintf("[%d]", len(links))
|
||||||
|
|
2
url.go
2
url.go
|
@ -97,8 +97,8 @@ func MakeUrl(u string) (Url, error) {
|
||||||
out.DownloadOnly = true
|
out.DownloadOnly = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
out.Mime = ""
|
|
||||||
out.Resource = fmt.Sprintf("%s%s", out.Mime, out.Resource)
|
out.Resource = fmt.Sprintf("%s%s", out.Mime, out.Resource)
|
||||||
|
out.Mime = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if out.Scheme == "http" || out.Scheme == "https" {
|
if out.Scheme == "http" || out.Scheme == "https" {
|
||||||
|
|
Loading…
Reference in New Issue