// // rhimportd // // The Radio Helsinki Rivendell Import Daemon // // // Copyright (C) 2015 Christian Pointner // // This file is part of rhimportd. // // rhimportd is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // rhimportd is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with rhimportd. If not, see . // package rhimport import ( "fmt" "net/url" "path" ) func FetchFileHttp(ctx *ImportContext, uri *url.URL) (err error) { rhl.Printf("HTTP/HTTPS fetcher called for '%s'", ctx.SourceUri) ctx.SourceFile = ctx.Config.TempDir + "/" + path.Base(uri.Path) ctx.DeleteSourceFile = true return } func FetchFileLocal(ctx *ImportContext, uri *url.URL) (err error) { rhl.Printf("Local fetcher called for '%s'", ctx.SourceUri) ctx.SourceFile = uri.Path ctx.DeleteSourceFile = false return } type FetchFunc func(*ImportContext, *url.URL) (err error) var ( fetchers = map[string]FetchFunc{ "http": FetchFileHttp, "https": FetchFileHttp, "local": FetchFileLocal, } ) func FetchFile(ctx *ImportContext) (err error) { var uri *url.URL if uri, err = url.Parse(ctx.SourceUri); err != nil { return } if fetcher, ok := fetchers[uri.Scheme]; ok { err = fetcher(ctx, uri) } else { err = fmt.Errorf("No fetcher for uri scheme '%s' found.", uri.Scheme) } return }