Search/open-search.go
partisan d3bdc8065d
Some checks failed
Run Integration Tests / test (push) Failing after 1m5s
Fixed opensearch.xml
2025-06-18 13:55:13 +02:00

82 lines
2.1 KiB
Go

package main
import (
"encoding/xml"
"fmt"
"os"
)
type OpenSearchDescription struct {
XMLName xml.Name `xml:"OpenSearchDescription"`
Xmlns string `xml:"xmlns,attr"`
ShortName string `xml:"ShortName"`
LongName string `xml:"LongName"`
Description string `xml:"Description"`
Tags string `xml:"Tags,omitempty"`
InputEncoding string `xml:"InputEncoding"`
OutputEncoding string `xml:"OutputEncoding"`
Image *Image `xml:"Image,omitempty"`
URLs []URL `xml:"Url"`
}
type URL struct {
Type string `xml:"type,attr"`
Method string `xml:"method,attr,omitempty"`
Template string `xml:"template,attr"`
}
type Image struct {
Height int `xml:"height,attr"`
Width int `xml:"width,attr"`
Type string `xml:"type,attr"`
URL string `xml:",chardata"`
}
func generateOpenSearchXML(config Config) {
baseURL := addProtocol(config.Domain)
opensearch := OpenSearchDescription{
Xmlns: "http://a9.com/-/spec/opensearch/1.1/",
ShortName: Translate("site_name"),
LongName: Translate("site_name") + " Search",
Description: Translate("site_description"),
Tags: Translate("site_tags"),
InputEncoding: "UTF-8",
OutputEncoding: "UTF-8",
Image: &Image{
Height: 16,
Width: 16,
Type: "image/x-icon",
URL: fmt.Sprintf("%s/favicon.ico", baseURL),
},
URLs: []URL{
{
Type: "text/html",
Method: "get",
Template: fmt.Sprintf("%s/search?q={searchTerms}", baseURL),
},
{
Type: "application/x-suggestions+json",
Template: fmt.Sprintf("%s/suggestions?q={searchTerms}", baseURL),
},
},
}
file, err := os.Create("static/opensearch.xml")
if err != nil {
printErr("Error creating OpenSearch file: %v", err)
return
}
defer file.Close()
file.WriteString(`<?xml version="1.0" encoding="UTF-8"?>` + "\n")
enc := xml.NewEncoder(file)
enc.Indent(" ", " ")
if err := enc.Encode(opensearch); err != nil {
printErr("Error encoding OpenSearch XML: %v", err)
return
}
printInfo("OpenSearch description file generated successfully.")
}