navidrome/static/bindata.go

354 lines
255 KiB
Go
Raw Normal View History

// Package static Code generated by go-bindata. (@generated) DO NOT EDIT.
// sources:
2020-01-25 05:42:47 +01:00
// banner.txt
// default_cover.jpg
// itunes.png
package static
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"os"
"path/filepath"
"strings"
"time"
)
type asset struct {
bytes []byte
info os.FileInfo
}
type bindataFileInfo struct {
name string
size int64
mode os.FileMode
modTime time.Time
}
// Name return file name
func (fi bindataFileInfo) Name() string {
return fi.name
}
// Size return file size
func (fi bindataFileInfo) Size() int64 {
return fi.size
}
// Mode return file mode
func (fi bindataFileInfo) Mode() os.FileMode {
return fi.mode
}
// ModTime return file modify time
func (fi bindataFileInfo) ModTime() time.Time {
return fi.modTime
}
// IsDir return file whether a directory
func (fi bindataFileInfo) IsDir() bool {
return fi.mode&os.ModeDir != 0
}
// Sys return file is sys mode
func (fi bindataFileInfo) Sys() interface{} {
return nil
}
type assetFile struct {
*bytes.Reader
name string
childInfos []os.FileInfo
childInfoOffset int
}
type assetOperator struct{}
// Open implement http.FileSystem interface
func (f *assetOperator) Open(name string) (http.File, error) {
var err error
if len(name) > 0 && name[0] == '/' {
name = name[1:]
}
content, err := Asset(name)
if err == nil {
return &assetFile{name: name, Reader: bytes.NewReader(content)}, nil
}
children, err := AssetDir(name)
if err == nil {
childInfos := make([]os.FileInfo, 0, len(children))
for _, child := range children {
childPath := filepath.Join(name, child)
info, errInfo := AssetInfo(filepath.Join(name, child))
if errInfo == nil {
childInfos = append(childInfos, info)
} else {
childInfos = append(childInfos, newDirFileInfo(childPath))
}
}
return &assetFile{name: name, childInfos: childInfos}, nil
} else {
// If the error is not found, return an error that will
// result in a 404 error. Otherwise the server returns
// a 500 error for files not found.
if strings.Contains(err.Error(), "not found") {
return nil, os.ErrNotExist
}
return nil, err
}
}
// Close no need do anything
func (f *assetFile) Close() error {
return nil
}
// Readdir read dir's children file info
func (f *assetFile) Readdir(count int) ([]os.FileInfo, error) {
if len(f.childInfos) == 0 {
return nil, os.ErrNotExist
}
if count <= 0 {
return f.childInfos, nil
}
if f.childInfoOffset+count > len(f.childInfos) {
count = len(f.childInfos) - f.childInfoOffset
}
offset := f.childInfoOffset
f.childInfoOffset += count
return f.childInfos[offset : offset+count], nil
}
// Stat read file info from asset item
func (f *assetFile) Stat() (os.FileInfo, error) {
if len(f.childInfos) != 0 {
return newDirFileInfo(f.name), nil
}
return AssetInfo(f.name)
}
// newDirFileInfo return default dir file info
func newDirFileInfo(name string) os.FileInfo {
return &bindataFileInfo{
name: name,
size: 0,
mode: os.FileMode(2147484068), // equal os.FileMode(0644)|os.ModeDir
modTime: time.Time{}}
}
// AssetFile return a http.FileSystem instance that data backend by asset
func AssetFile() http.FileSystem {
return &assetOperator{}
}
2020-01-25 05:42:47 +01:00
var _bannerTxt = []byte(` _ _ _ _
| \ | | (_) | |
| \| | __ ___ ___ __| |_ __ ___ _ __ ___ ___
| . ` + "`" + ` |/ _` + "`" + ` \ \ / / |/ _` + "`" + ` | '__/ _ \| '_ ` + "`" + ` _ \ / _ \
| |\ | (_| |\ V /| | (_| | | | (_) | | | | | | __/
\_| \_/\__,_| \_/ |_|\__,_|_| \___/|_| |_| |_|\___|
`)
func bannerTxtBytes() ([]byte, error) {
return _bannerTxt, nil
}
func bannerTxt() (*asset, error) {
bytes, err := bannerTxtBytes()
if err != nil {
return nil, err
}
2020-01-25 17:06:04 +01:00
info := bindataFileInfo{name: "banner.txt", size: 267, mode: os.FileMode(420), modTime: time.Unix(1579965459, 0)}
2020-01-25 05:42:47 +01:00
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _default_coverJpg = []byte("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x0e\x00\x00\x01\x0e\b\x02\x00\x00\x00\xf7\xd3n\xf2\x00\x00\x00\x19tEXtSoftware\x00Adobe ImageReadyq\xc9e<\x00\x00W\xe3IDATx\xda\xec}y\xb0mYY\xdf\xda\xc3}\xef5o\xec\xd7M\xa31\f\xdd4\xa0\"4\"\xdd\u0400\f\xcddB\x83h\xa21\u0454b\xa2\xa9\xb2*e*\xf9#\u007f\xa4ReU*&U\x89IID\v\x055A\x19dtf\x12\x88`\xa5\r\x04hh\xa0er(\x81\xa6\xfb\xf5\xeb\xe9u\xbf\xf7\xee\xd9C\xd6\xd9\xeb\x9cu\xbe\xbd\xbea}k\xed}\uef6d\xef\u052d[\xe7\x9e{\xce>{\xaf\xbd~\xeb\xf7\xfd\xbei\x15\xef\xfd\xe8'\xbb\xbe/\x8b\xc2\x18SV\xa5\x19\x1euQ4}_\x97\xcb?\xab\xaaj\xdb\xd6\xfe^\xfd\xab,\x9b\xae\xab\xab\xaa,\x97\x1f1\x85\xe9\u06be\xaa\x8a\u0798\x9d\xaaj\xba~xOQ\x14e\xdfw\xf6w]\x99\xa65\xab\xcf\xd6\xeb\x83\xd8c\xf6\xfdp\xf0\u00ac\x1f\xe5\xea_u\xdbw\xeb\xb7-_\xeb\x97_R\xfa\xf7t\xebw\x96E\xe9?[\u056b\xe7\xd5p\xcee\xb9y\xb7\xfdU\xda\xffv\xc3\a\xcb\xcdG\xe0\x97\xaeO\x0f\xfe\xb5:U\xff\x89\xb2\xb2W\xbay\x1e<*\x13\x1e9\xfc\x82\xce\xec\xecTF\xfdX\xb4\xad\xff \xf9h\x87\u007f\xd8\xebm\xbb\xd5;\xfc\xe9\x05\x8f\xf5\xff7\xffn\x9a\xce_\xaf}\u0785\xef\xef\xfcY\xbb\u007f\xda_v\x1c\xdc\xfbZ\xf8\xf6\xaek\xd7_>\xdc\xf9\xd5\u0256\xc3\xe9\u067b\xd6\x0f/\xb4\xed\xe6#\xbd?[\u007f!m?|d\xf9%\xee\xbf\xcdz\xc6\xd8\t\u0434vzv\xeb\x93\xe9W\a\xb1Sk\x98\x18\xc3\x1f\xcb\xefnZ\xfa\xe2\xdb\xe1\xf5\xe5\x8cu\xf3v\x98\xd8\xf6\xa4\xfd\xe5\u0623\xc3+\xea\xc0 \xb6\xcdz\xe0\xba>\x98*\x97\x1e\xdb|\xa4\x8c\xf4\x82\xb9\xf1\x97\x1e\x0f\x93\x1bx\xe91atw\xaa\x04J\x19\xbd\xf9\xd2-\xba\x04\x95\x83\xf0\x18\x1b]3<Z\xce`\xba\xf4\xb8\x04\x95K\x8fK\x8fKP\xf9\x9b\xffh\x9a\x99I\xa0\xba\xb4\xfa\\\x82\u02a5G\xf2\xa3\xcbT\xea\xa37_2\xe8\x0e\x88\xad~i\b\xf6\x0e6U\"H.=\x0e\x14\xabtC|c\xf5\xbb%V0\x18T\xd9\xd8-\xeb;\u06b5\xfd\xe6\xc5n\xf3|\xe3\v\xa7n}\xdb\xf7UQ\xb8\xa0J\xb9\xfe\xb1\x8f\xa2\xb4\xefo\x96fLQV\xc5*\xa8\x12\xcc7\x92\a\xabu\xf8c\xec\xf5\x0f\x9ft\xab(A\x97\xb1d\vA\x15\xa7\xe6#\x82\xbe\\\xc2 \x8a\x84\x9d\xaar?\xb2\xe7\xc0\u007fW;\x0e\x8a\xd8ss?\x9b\xd3\xee$\xe3\x13\aUF\x97L\xfd\xd3\r\xf52\x9e\xd3l\u62ff\xf3\xf0\xee\xf4\xcb\u040a)\xe0g\x8bU0\xac\x037}x\xbd\xf0A\x95\xf14\v_\xa9\u02e2.\x8bph\xed\x8bU\xb5\xfc\x01q\xb3vx\x80\xb3Y\x9e\xa2\v\xaa\xf8aq\u04de\xb5\xa57\xc1\xba\xe2\x12\xab\xec\x95\rV\xf2(\x97Y%\xcb\xfa\xea\xfe\xd60\x93]\xa9\xcb5r\xec\xf2]\x97[\x14\x14\xfb\xa9U\u06b6\x97\xdf\u040b\x13\xa5\x13\xff-\xac\x96%3\xa0c\x89\xdfF\x8fC\xae\xf7\u0451\x16\xb8e\nNb\xf0h\x95\x9e\f\x92I\xf43P>\xe5\xb6o\x1eF8l\xc7\x03\xb5N\x18)\x8a\x19\xbf\x03& \xcc2\u010a\xab\u02bf\a\xfb\"\x9b\x03Thl\xb38\x1a\xb7\xb1l\xa3ok\xd1K]\xff\xb7\xc2\xf3\xf0\xf00\xc0\x06\xab\xb7\x9cp\xbf\xbb\r\x93\xb8|\xa6\xc4\xe9\xc2}\u00ae\xe5e\xa5\x83#:\xc2b\xd1J\xbc\xdeM\x9d\xe2>\xcdi\x16\xc0d\x9b6{\x83\xa3f\x9b\xee\x10:\a\x8cT\xf6\xdaAI\x1f\x95\xa8\r\xb6\xc7$@\xda`$B\x9c\xc1SV)\xe7\u074d\u03fedp\xd2M\xba\xc8\u0549\x95q\xeb\xab\x13I\xc4Yb\x1cB\xa6\xd0\xf8\x8cBe/\xbf\xee\x00\xc5U\xba\x18\xb1\x1c\x9cS\x15\x10\x127\x90d$t\a\xc8\xfa\x8a\x9a^\u007f\x83\x1f-Rt\a\xce\x00\u04c5\x1f\x0e\x88\xfb\x85u\x1c\xc7c\xf6\u0776N\xe9\xc0.v\x0f\xf7\xc7\xd2\u0576*V)\x87\x9f\xaa\x04\xea|\xed\xbc\a\x86\xa0\u007f\xb1\xb3j\xce\xcbw\x8f<\xe7\x81.\v\u01bci\xd7\xf6\xeb\xea UUt\xc0\xa1\xdaw\uede5\xd6\xf5\x0fe\x10v@P\xda\xf3\xb5?\xf0]v\xf1[y\u037b\xcd\"\u07a02\t\xee\x1e+m\xb0\xbd^\xe4P\xdc\xc6\x1b\x81\xee\x89\am\xd7%\b\x8c\x8e\x1bXD~\xf6h\xae6\xc6-\xb7\xed\xf2OS\x95\xb4\x89\xd2ml\x01\xd3\xf6\xb0Xe\xf9\u04c1\xaf\x90-pl\xd27]\xef\xfc\x1f\xfd\xe6\xc46\xf3\x10F\x89`0pY\xac\x82\"\x87BP\xc5\"b\x19\xa3\x19\xa2{f\x88\xabTE\xb1u\x03L\x160\xed\x96\xcd\xcdq\x19R7\xcfq\xda\xf8*\x1e\xcc\uc246\x13\xf9q\x17j\xc4'\xe0\xe0A^kD\xa8(\xae\x1d\x1b'\xd0\xfd5\xe5\"\xfb\xb9\xad\xbbvn\xa1\xbf\x15\xa8\xc0\xb0\xfd\x9e\xd1w\xabN|\x8cb&)\x87\u04af\xee[\x92\x16\xc2A:\xa5{9gi\x98\xe0\u0741k\x04U\xff\xb8\xf7\x8ff\xdaWo<`\x90\x89\xa6x\xc0\u0316}vY\xf6\xe5fQ,Es\xa4\x8bM5\x8eX4\x86S^\xba1\x99,\xc3V\x05\xb7\x12\x0f\xcc(\xeb\xabz\xef\\A\xd0\xea\xc9[\u007f\xb3q\x82W\u07bd\xb8\xec\f\x1b\x8c\\\x81H'\x18t\u02c0b\xe8\xae\xed:l\x80u\x1b\xa1\x95C,{\xb9,rd\xb2\xd1$\xad\xc6\xe6T\xbb\x89\xc1\x98\x8cr\xe4\u0517\xdcma\xce\xe0\x99\xd3\xef_\xb8S\v\x95v\xff\xe8\xa2\xd5\x11]
func default_coverJpgBytes() ([]byte, error) {
return _default_coverJpg, nil
}
func default_coverJpg() (*asset, error) {
bytes, err := default_coverJpgBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "default_cover.jpg", size: 22593, mode: os.FileMode(420), modTime: time.Unix(1578188772, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _itunesPng = []byte("\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x00\x00\x00\x01\x00\b\x06\x00\x00\x00\\r\xa8f\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\x00\x00\tpHYs\x00\x00\v\x13\x00\x00\v\x13\x01\x00\x9a\x9c\x18\x00\x00\n\xd2zTXtRaw profile type icc\x00\x00x\u06adxK\x0e(I\x8a\xe4>NQG0\xfep\x1c\x1c\u01e5\x96F\x9aQ\xdf\u007f\u044b\xf7^fVU\xd6o\u053e\vs\f\b\xdc\xc0C\xf1\xfd\xbf\xff\xfe\xbf\xef\xbf\xfe\xcf~\u007f\xf9\xcb_\xfe\"\xa4\xfa\x01\x00FS\xc7\xcb\xd7\x1f\x98\x00\x00~}C\x83\x8d5\x94\x19\x96V\xd6\f\xc4,\x00\x06P\x00\x1c\x10\x02\x80\xcf\xc9%$\xa0\xd7D\xdd\x14?\x97\x96\x9a\n#\xe4\x87+\xfc\xf9\"\x00x~\xfd\xfb\xf5\x00\x00W\xf8j\x1a\x18\xff\x88\xf7\x8f\xd7\xf7\x9f\x99\x13\xb9\x04\x82\xe3G\xe6d?q\x91\xcf\xd5-\xc4\xe5\xc7F\xfe|5\x9f\x88\xd0\xc0/\xc2\xfb\xe5H\x9d\xfd\xfc\x863\xf4\x17\xfe\x05\xff(\xe3\x8f\r\xca\xdf\b\xf1G\x9c\xe7wG\u007f\xc4\xf5\xb7\x00\x9f\xab__\xff\x19\xe1W\xb1\x03\xae~]\u007f\xe1\xf3\x13\xcf\f\x0fs\xfb\x89\x8b\xfe\f\x90\xfe\x85{\xb9E\xfc\u0638?\t\xac>a~\xbd~\xe0\xef\xf7L\xaf\x9bS\xfc(\x85b~\xd9\u007f\xa1n.\xfe\xc3P\xe5WU'\xd8\xd4\xf8'\xa0\xf2\x83\x90\x18\x8f?\xc7?\xff\a\x84P\xb7\xc8\xf8]W\xe2/\x10\x15\xec\xe5\xe1\x19\xca\xe0t\xe1b\bI}R\x92\fM\xb7\b\x1f\xb7\xd0P\xbe\x06'\x17?N\xc1\xae\f\x15\u007f~\x03N\xbeQ\x00\xf0W\xa7\xfd\xbb\x8e\x88\u007f)\x98\u007fjZ\\HJ\\\x9c\xaf0\xaf\xfc&\u06ffQ\xd6O\xe6\xf7\x9fS\xffW\x94\xfd\xfb\xfa\xad\x89\xff\xe8\xe8\x89\x11~\xef9\"\x9f\xf9[\xc3\u007f\xe5\xf0\xaf2\xf2\xf7\x83)\xf9~4\x91\x14\xfe\u0321s\x15\x00\x9cH\x03\x00\xca\xdb\u07df\x19\xb2\xfe\xe8\x00\xbc\x1f\xbdw|\xde\u07de\xd2\xcf\xe4\xfd\u05f8\xf9<CC\x03\xd2\xfc\xf8EDD\xf0z\xb9\xb9\xf0\xfe&\u057f?\xad\xdf\\\xfc\xf0\xf0\xfd\xe7.\xfe\x97N\xed\xcf_\x91\xf7\xfb\x95\xe0\u07eb\x88\xa1\xea\xe6\xee\x14\xe6\x13\xca\xf8%Y\x17\u007f>\xfe\u0082\x19!\x01\xa7\xcf\u014d\xc1\xf7_Mg\xde\u007f\x1e\xf2\xfb\xf7c\xfe\xf3\x90\xff\xb2F\xff\xa0&c\xec\xe6\xee\x16\xec\xe6\xeb\xf2\xb91\xec\xe7p\xf3\xf2\xf5\xf8\xd9\xeb\xeb\xea\x15\xea\xe5\u03d7\xe1\xe5\xfb\u03fa\xf2O3\xfa\xfbx\xff:\xdc\xf7\xef\xc5\xfb\xff\xd0\xd1_\xcd\xf0\x1f\x1a\x96\u05b7\x00\xa9=^\x800\x8f\x14\x80\xec\x9d\x01\xa0$8\x1f\x00\xb1\xa9\xfd\xc5\xfa\xfb\xde\xd3A\x99\x03\xbf.C\vz\x1b\u007fu\t\xfc!\xa3\u007fo\x88q\xfe\xba)9\xc4\xcb\xe3\x0f\xf3H\xc5\u0614\xe1\x12\x16\x1c\xfeW\xc4\xdfF?\f@\x03x\x00)@\x05\xd0\x02,\x00'\xc0\xf7\x03\x84\x01\t@\xce\x0f\xa6\x1a\xa0\r\xe8\x03L\x01+\xc0\x16p\x01<\x01\xbf@0\x10\x01\xc4\x00I@\xfa\a\xe4\xf9\xf1\xa9S\x06T\x03\xf5\x80V\xa0\v\xe8\x05\x0e\x03'\x803\xc0\x100\x0e\xcc\x01.\x80k\xc0=\xc0\xe2\x03\u0580=\xc0\x03\xf0\x1cx\a\x04\x02!@\xb8 \x12\x10\x15\x88\x1e\x88\r\xc4\a$\f\x92\x04\u0242\xd4@:\x1f\xc8\x18d\x05r\x80<@\xbe\xa00P\f(\x05\x94\aT\f\xaa\x065\x81\xba@\x87@\xa7@C\xa0)\u0425\x0ft\v\xb4\x04\xda\x02=\x06\xbd\x06C\xc0\x180)\x98.\x98\x1d\xcc\x0f,\tV\x02\xeb\x01\x9b\x82\xed\x82=\xc0A\x1f8\x1a\x9c\n\xce\x05W\x82\x9b\xc1=\xe0\xe3\xe0!\xf0\x1c\xf05\xf0\x02\xbc\a\xfc\f\x02@p \xe4\x10&\b\xdf\x0f\"\tQ\x81\xe8\x83XC\xdc!\xc1\x90XH6\xa4\x1c\xd2\f\u915c\x86L@\xae@\x16\x90\x1d\xc8+(\xfc\x83\x92@\x19P\xbeP9PM\xa8\x19\xd4\x05\x1a\x04\x8d\x85\xe6@\xab\xa1\x9d\xd0\xe3\xd0Q\xe8\x15\xe8\x12\xf4\x01\xfa\xf6\x83\xe1\xc2h`|`\xd20-\x98%\xcc\x03\x16\x01K\x87\x95\xc3\xdaa\xc7`c\xb0k\xb05\xd8s8\x1cN\xfe\xc19\xe0\x12pM\xb8\x15\xdc\x1b\x1e\a\x9e\x03\xaf\v\xef\a\x1f\xc0/\xc1W\xe0\xcf\x10\b\x04\x15\x82\x0fB.B\u07c7pB\x84\"\xd2\x11U\x88\x1e\xc4y\x88\u02c85\xc4K$\x0e\x92\x1eR\x18\xa9\x8e\xb4F\xfa\"\x93\x91\xe5\xc8\xee\x0fy\x16y\x19\xb9\x81|\aE@\xb1\xa1\xa4Q\xfaP\xae\xa8(T>T+\xea4j\x1ej\r\xf5\x0e\x9a\b\xcd\xf1\xa1\xe5\xa2M\xd1\xde\xe8$t%\xba\x17=\x86\xbe\x83~\x82\x83\x83\u00cc#\x85c\x84\u3153\xc0\xa9\xc49\xc0\x99\xfcp\x96p^a\x881\xdc\x18\x15\x8c\r&\f\x93\x8b\xe9\xc0\f0\xb70Opqq\xd9q\x15\xb8\u05b8\xa1\xb8\xb9\x1fn\x17\xee\b\xee]\u0717X\x12,/V\v\ub28d\x87\xad\x83=\x8e\xbd\x8c\xdd\xc5C\xe1\xb1\xe1)\xe1\xd9\xe2E\u007fx\xe5xG\xf0\xe6\xe1\xed\x10P\x04v\x82\n\xc1\x89\x10K\xa8C8E\xb8AxFDB$D\xa4\x8f\xc8/Q\xceG\xd4M4E\xb4I\x8c f'V#v%N%n!\x1e
func itunesPngBytes() ([]byte, error) {
return _itunesPng, nil
}
func itunesPng() (*asset, error) {
bytes, err := itunesPngBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "itunes.png", size: 68129, mode: os.FileMode(420), modTime: time.Unix(1579916731, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
// Asset loads and returns the asset for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func Asset(name string) ([]byte, error) {
cannonicalName := strings.Replace(name, "\\", "/", -1)
if f, ok := _bindata[cannonicalName]; ok {
a, err := f()
if err != nil {
return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
}
return a.bytes, nil
}
return nil, fmt.Errorf("Asset %s not found", name)
}
// MustAsset is like Asset but panics when Asset would return an error.
// It simplifies safe initialization of global variables.
func MustAsset(name string) []byte {
a, err := Asset(name)
if err != nil {
panic("asset: Asset(" + name + "): " + err.Error())
}
return a
}
// AssetInfo loads and returns the asset info for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func AssetInfo(name string) (os.FileInfo, error) {
cannonicalName := strings.Replace(name, "\\", "/", -1)
if f, ok := _bindata[cannonicalName]; ok {
a, err := f()
if err != nil {
return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
}
return a.info, nil
}
return nil, fmt.Errorf("AssetInfo %s not found", name)
}
// AssetNames returns the names of the assets.
func AssetNames() []string {
names := make([]string, 0, len(_bindata))
for name := range _bindata {
names = append(names, name)
}
return names
}
// _bindata is a table, holding each asset generator, mapped to its name.
var _bindata = map[string]func() (*asset, error){
2020-01-25 05:42:47 +01:00
"banner.txt": bannerTxt,
"default_cover.jpg": default_coverJpg,
"itunes.png": itunesPng,
}
// AssetDir returns the file names below a certain
// directory embedded in the file by go-bindata.
// For example if you run go-bindata on data/... and data contains the
// following hierarchy:
// data/
// foo.txt
// img/
// a.png
// b.png
// then AssetDir("data") would return []string{"foo.txt", "img"}
// AssetDir("data/img") would return []string{"a.png", "b.png"}
// AssetDir("foo.txt") and AssetDir("notexist") would return an error
// AssetDir("") will return []string{"data"}.
func AssetDir(name string) ([]string, error) {
node := _bintree
if len(name) != 0 {
cannonicalName := strings.Replace(name, "\\", "/", -1)
pathList := strings.Split(cannonicalName, "/")
for _, p := range pathList {
node = node.Children[p]
if node == nil {
return nil, fmt.Errorf("Asset %s not found", name)
}
}
}
if node.Func != nil {
return nil, fmt.Errorf("Asset %s not found", name)
}
rv := make([]string, 0, len(node.Children))
for childName := range node.Children {
rv = append(rv, childName)
}
return rv, nil
}
type bintree struct {
Func func() (*asset, error)
Children map[string]*bintree
}
var _bintree = &bintree{nil, map[string]*bintree{
2020-01-25 05:42:47 +01:00
"banner.txt": &bintree{bannerTxt, map[string]*bintree{}},
"default_cover.jpg": &bintree{default_coverJpg, map[string]*bintree{}},
"itunes.png": &bintree{itunesPng, map[string]*bintree{}},
}}
// RestoreAsset restores an asset under the given directory
func RestoreAsset(dir, name string) error {
data, err := Asset(name)
if err != nil {
return err
}
info, err := AssetInfo(name)
if err != nil {
return err
}
err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
if err != nil {
return err
}
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
if err != nil {
return err
}
err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
if err != nil {
return err
}
return nil
}
// RestoreAssets restores an asset under the given directory recursively
func RestoreAssets(dir, name string) error {
children, err := AssetDir(name)
// File
if err != nil {
return RestoreAsset(dir, name)
}
// Dir
for _, child := range children {
err = RestoreAssets(dir, filepath.Join(name, child))
if err != nil {
return err
}
}
return nil
}
func _filePath(dir, name string) string {
cannonicalName := strings.Replace(name, "\\", "/", -1)
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
}