package routes import ( "fmt" "git.readonly.ch/bouzoure/gpx-downloader/helpers" "git.readonly.ch/bouzoure/gpx-downloader/providers" "git.readonly.ch/bouzoure/gpx-downloader/templates" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/log" "github.com/tkrajina/gpxgo/gpx" ) func Fetch(c *fiber.Ctx) error { // In case of error baseParams := templates.BaseTemplateParams{ Title: "Error - GPX downloader", } var indexParams templates.IndexParams sourceUrl := c.FormValue("url") if len(sourceUrl) <= 0 { indexParams.Error = "Error: URL is empty" return helpers.TemplRender(c, templates.Index(baseParams, indexParams)) } var gpxFile gpx.GPX var err error var filename string // Check if link is Suisse Mobile suisseMobileId := providers.SuisseMobileCheckURL(sourceUrl) if suisseMobileId > 0 { filename = fmt.Sprintf( "suisse_mobile_%d", suisseMobileId, ) gpxFile, err = providers.SuisseMobileFetch(suisseMobileId) if err != nil { log.Error(err) indexParams.Error = "An error occured" return helpers.TemplRender(c, templates.Index(baseParams, indexParams)) } } if len(filename) <= 0 { indexParams.Error = "Error: URL is not supported" return helpers.TemplRender(c, templates.Index(baseParams, indexParams)) } xml, err := gpxFile.ToXml(gpx.ToXmlParams{}) if err != nil { log.Error(err) indexParams.Error = "An error occured" return helpers.TemplRender(c, templates.Index(baseParams, indexParams)) } c.Set("Content-Type", "octet-stream") c.Set("Content-Disposition", fmt.Sprintf( "attechment,filename=%s.gpx", filename, )) return c.Send(xml) }