Versions in this module Expand all Collapse all v0 v0.11.0 Feb 17, 2024 Changes in this version + const CPaudio + const CPbooks + const CPhome + const CPimage + const CPlocal + const CPmap + const CPmedia + const CPremote + const CPshares + const CPtexts + const CPvideo + const ExifDate + const FGnum + const FPAadmin + const FPAnone + const FPAshare + const OrientAcw + const OrientAcwHorzReversed + const OrientCw + const OrientCwHorzReversed + const OrientFlipHorzReversed + const OrientFlipped + const OrientHorzReversed + const OrientNormal + const SEC_auth_absent + const SEC_auth_scheme + const SEC_badenc + const SEC_basic_decode + const SEC_basic_deny + const SEC_basic_noacc + const SEC_cldadd_badacc + const SEC_cldadd_badhost + const SEC_cldadd_davdial + const SEC_cldadd_deny + const SEC_cldadd_ftpcred + const SEC_cldadd_ftpdial + const SEC_cldadd_ftproot + const SEC_cldadd_noacc + const SEC_cldadd_nobind + const SEC_cldadd_sftpcli + const SEC_cldadd_sftpdial + const SEC_cldadd_sftppwd + const SEC_cldadd_sftproot + const SEC_clddel_badacc + const SEC_clddel_deny + const SEC_clddel_noacc + const SEC_clddel_nobind + const SEC_clddel_nopath + const SEC_drvadd_badacc + const SEC_drvadd_badpath + const SEC_drvadd_deny + const SEC_drvadd_hidden + const SEC_drvadd_miss + const SEC_drvadd_noacc + const SEC_drvadd_nobind + const SEC_drvdel_badacc + const SEC_drvdel_deny + const SEC_drvdel_noacc + const SEC_drvdel_nobind + const SEC_drvdel_nopath + const SEC_edtcopy_badacc + const SEC_edtcopy_copy + const SEC_edtcopy_deny + const SEC_edtcopy_mkdir + const SEC_edtcopy_noacc + const SEC_edtcopy_nobind + const SEC_edtcopy_nodest + const SEC_edtcopy_nopath + const SEC_edtcopy_opdst + const SEC_edtcopy_opsrc + const SEC_edtcopy_over + const SEC_edtcopy_rd + const SEC_edtcopy_statfile + const SEC_edtcopy_statsrc + const SEC_edtdel_badacc + const SEC_edtdel_deny + const SEC_edtdel_noacc + const SEC_edtdel_nobind + const SEC_edtdel_nopath + const SEC_edtdel_remove + const SEC_edtren_badacc + const SEC_edtren_deny + const SEC_edtren_move + const SEC_edtren_noacc + const SEC_edtren_nobind + const SEC_edtren_nodest + const SEC_edtren_nopath + const SEC_edtren_over + const SEC_edtren_stat + const SEC_etmb_access + const SEC_etmb_badacc + const SEC_etmb_badcnt + const SEC_etmb_hidden + const SEC_etmb_noacc + const SEC_etmb_nopath + const SEC_etmb_nopuid + const SEC_etmb_notmb + const SEC_folder_absent + const SEC_folder_access + const SEC_folder_asx + const SEC_folder_badacc + const SEC_folder_badpath + const SEC_folder_drives + const SEC_folder_fail + const SEC_folder_format + const SEC_folder_hidden + const SEC_folder_home + const SEC_folder_m3u + const SEC_folder_map + const SEC_folder_media + const SEC_folder_noacc + const SEC_folder_nobind + const SEC_folder_nocat + const SEC_folder_noshr + const SEC_folder_open + const SEC_folder_pls + const SEC_folder_remote + const SEC_folder_shares + const SEC_folder_stat + const SEC_folder_tracks + const SEC_folder_wpl + const SEC_folder_xspf + const SEC_getlog_nobind + const SEC_gpsrange_badacc + const SEC_gpsrange_list + const SEC_gpsrange_noacc + const SEC_gpsrange_nobind + const SEC_gpsrange_shpbad + const SEC_gpsrange_shpcirc + const SEC_gpsrange_shppoly + const SEC_gpsrange_shprect + const SEC_gpsscan_badacc + const SEC_gpsscan_noacc + const SEC_gpsscan_nobind + const SEC_ispath_badacc + const SEC_ispath_deny + const SEC_ispath_noacc + const SEC_ispath_nobind + const SEC_media_access + const SEC_media_badacc + const SEC_media_badhd + const SEC_media_badmedia + const SEC_media_badpath + const SEC_media_filegone + const SEC_media_fileopen + const SEC_media_hdfail + const SEC_media_hdgone + const SEC_media_hdnocnt + const SEC_media_hidden + const SEC_media_medfail + const SEC_media_medgone + const SEC_media_mednocnt + const SEC_media_noacc + const SEC_mtmb_absent + const SEC_mtmb_access + const SEC_mtmb_badacc + const SEC_mtmb_badcnt + const SEC_mtmb_hidden + const SEC_mtmb_noacc + const SEC_mtmb_nopath + const SEC_mtmb_nopuid + const SEC_nourl + const SEC_null + const SEC_page_absent + const SEC_panic + const SEC_param_noacc + const SEC_reload_load + const SEC_reload_tmpl + const SEC_shradd_access + const SEC_shradd_badacc + const SEC_shradd_deny + const SEC_shradd_noacc + const SEC_shradd_nobind + const SEC_shradd_nopath + const SEC_shrdel_access + const SEC_shrdel_badacc + const SEC_shrdel_deny + const SEC_shrdel_noacc + const SEC_shrdel_nobind + const SEC_shrdel_nopath + const SEC_signin_denyhash + const SEC_signin_denypass + const SEC_signin_hs256 + const SEC_signin_nobind + const SEC_signin_nosecret + const SEC_signin_nouser + const SEC_signin_sigtime + const SEC_signin_smallsec + const SEC_signin_timeout + const SEC_tags_access + const SEC_tags_badacc + const SEC_tags_badpath + const SEC_tags_extract + const SEC_tags_hidden + const SEC_tags_noacc + const SEC_tags_nobind + const SEC_tagsbreak_nobind + const SEC_tagschk_badacc + const SEC_tagschk_noacc + const SEC_tagschk_nobind + const SEC_tagsstart_nobind + const SEC_tile_absent + const SEC_tile_access + const SEC_tile_badacc + const SEC_tile_badcnt + const SEC_tile_badhgt + const SEC_tile_badwdh + const SEC_tile_hidden + const SEC_tile_noacc + const SEC_tile_nopath + const SEC_tile_nopuid + const SEC_tile_twodim + const SEC_tile_zero + const SEC_tilebreak_nobind + const SEC_tilechk_badacc + const SEC_tilechk_noacc + const SEC_tilechk_nobind + const SEC_tilestart_nobind + const SEC_token_badaid + const SEC_token_badclaims + const SEC_token_error + const SEC_token_expired + const SEC_token_issuer + const SEC_token_malform + const SEC_token_noacc + const SEC_token_notsign + const SEC_token_notyet + const SEC_usrlst_asts + const SEC_usrlst_fost + const SEC_usrlst_nobind + const SEC_usrlst_post + var AuthGetters = []AuthGetter + var B2S = wpk.B2S + var CatKeyPath = map[Puid_t]string + var CatNames = map[string]string + var CatPathKey = map[string]Puid_t + var Cfg = cfg.Cfg + var Err404 = errors.New("page not found") + var ErrArgNoDim = errors.New("bad tiles dimensions") + var ErrArgNoHD = errors.New("'hd' parameter not recognized") + var ErrArgZDim = errors.New("dimensions can not be zero") + var ErrBadHash = errors.New("hash cannot be decoded in hexadecimal") + var ErrBadJwtID = errors.New("jwt-token id does not refer to registered user") + var ErrBadMedia = errors.New("media content is corrupted") + var ErrBadType = errors.New("type does not supported to insert into database") + var ErrDeny = errors.New("access denied for specified authorization") + var ErrEmptyExif = errors.New("EXIF metadata is empty") + var ErrEmptyID3 = errors.New("ID3 metadata is empty") + var ErrFileOver = errors.New("to many files with same names contains") + var ErrHidden = errors.New("access to specified file path is disabled") + var ErrImgNil = errors.New("can not allocate image") + var ErrM3USign = errors.New("file does not starts with M3U signature") + var ErrNoAcc = errors.New("profile is absent") + var ErrNoAccess = errors.New("profile has no access to specified file path") + var ErrNoAuth = errors.New("authorization is absent") + var ErrNoCat = errors.New("specified category does not found") + var ErrNoCred = errors.New("profile with given credentials does not registered") + var ErrNoJwtID = errors.New("jwt-token does not have user id") + var ErrNoMTime = errors.New("modify time tag does not found") + var ErrNoMime = errors.New("MIME tag does not found") + var ErrNoPUID = errors.New("file with given puid not found") + var ErrNoPath = errors.New("path is not found") + var ErrNoScheme = errors.New("authorization does not have expected scheme") + var ErrNoSecret = errors.New("expected password or SHA25 hash on it and current time as a nonce") + var ErrNoThumb = errors.New("embedded thumbnail is not found") + var ErrNotDir = errors.New("path is not directory") + var ErrNotDisk = errors.New("file is not image of supported format") + var ErrNotFile = errors.New("property is not file") + var ErrNotHD = errors.New("image dimensions does not fit to full HD") + var ErrNotImg = errors.New("file is not image") + var ErrNotPass = errors.New("password is incorrect") + var ErrNotPlay = errors.New("file can not be read as playlist") + var ErrNotShared = errors.New("access to specified resource does not shared") + var ErrNotSys = errors.New("root PUID does not refers to file system path") + var ErrPathOut = errors.New("path cannot refers outside root PUID") + var ErrShapeBad = errors.New("shape is not recognized") + var ErrShapeCirc = errors.New("circle must contains 1 coordinates point") + var ErrShapePoly = errors.New("polygon must contains 3 coordinates points at least") + var ErrShapeRect = errors.New("rectangle must contains 4 coordinates points") + var ErrSigOut = errors.New("nonce is expired") + var ErrSigTime = errors.New("signing time can not been recognized (time in RFC3339 expected)") + var ErrSmallKey = errors.New("password too small") + var ErrTooBig = errors.New("file is too big") + var ErrUncacheable = errors.New("file format is uncacheable") + var GpsCache = NewCache[Puid_t, GpsInfo]() + var Hidden = FileMask + var ImgScanner scanner + var JP = jnt.NewJointPool() + var JoinPath = wpk.JoinPath + var Log = cfg.Log + var MimeExt = map[string]Mime_t + var MimeStr = map[Mime_t]string + var MimeVal = map[string]Mime_t + var Offered = []string + var Passlist []net.IPNet + var PathCache = NewBimap[Puid_t, string]() + var ResFS wpk.Union + var S2B = wpk.S2B + var ToKey = wpk.ToKey + var ToLower = wpk.ToLower + var ToSlash = wpk.ToSlash + var UaMap = map[uint64]uint64 + var UserOnline = map[uint64]time.Time + var XormStorage *xorm.Engine + var XormUserlog *xorm.Engine + func AddOrientFilter(flt []gift.Filter, orientation int) []gift.Filter + func ApiWrap(c *gin.Context) + func Auth(required bool) gin.HandlerFunc + func CacheSize[K comparable, T Sizer](cache *Cache[K, T]) (size int64) + func CalcUAID(addr, ua string) uint64 + func CfgReadYaml(fname string) (err error) + func CfgWriteYaml(fname string) error + func ClosePackages() (err error) + func DirStoreSet(session *Session, puid Puid_t, dp DirProp) (err error) + func DrawThumb(src image.Image, wdh, hgt int, orientation int) (data []byte, err error) + func DrawTile(src image.Image, wdh, hgt int, orientation int) (data []byte, err error) + func ExifStoreSet(session *Session, puid Puid_t, tp ExifProp) (err error) + func ExtStoreSet(session *Session, puid Puid_t, xp ExtProp) (err error) + func FromHHMMSS(dur string) int64 + func GetAID(c *gin.Context) (id uint64, err error) + func GetFileExt(fname string) string + func GetScanThreadsNum() int + func GetUAID(r *http.Request) (uaid uint64, err error) + func GetUID(c *gin.Context) uint64 + func GpsCachePut(puid Puid_t, tp ExifProp) + func Handle404(c *gin.Context) + func HasRangeBegin(r *http.Request) bool + func Id3StoreSet(session *Session, puid Puid_t, tp Id3Prop) (err error) + func ImgCacheTrim() + func InPasslist(ip net.IP) bool + func InitPackages() (err error) + func IsRemote(syspath string) bool + func IsStatic(fi fs.FileInfo) (static bool) + func IsTypeDecoded(ext string) bool + func IsTypeEXIF(ext string) bool + func IsTypeID3(ext string) bool + func IsTypeISO(ext string) bool + func IsTypeImage(ext string) bool + func IsTypeJPEG(ext string) bool + func IsTypeMp3(ext string) bool + func IsTypeNativeImg(ext string) bool + func IsTypePlaylist(ext string) bool + func IsTypeTileImg(ext string) bool + func JoinUrl(elem ...string) string + func LoadTemplates() (err error) + func LoadUaMap() (err error) + func Mp3Scan(r io.Reader) (length time.Duration, bitrate int, err error) + func Negotiate(c *gin.Context, code int, data any) + func OpenPackage() (err error) + func PackInfo(fname string, pkg *wpk.Package, d time.Duration) + func PathStarts(fpath, prefix string) bool + func PathStorePath(session *Session, puid Puid_t) (fpath string, ok bool) + func PrfReadYaml(fname string) (err error) + func PrfUpdate() + func PrfWriteYaml(fname string) error + func RatFloat32(t *tiff.Tag) float32 + func RatFloat64(t *tiff.Tag) float64 + func ReadWhiteList(fname string) (err error) + func ReadYaml(fname string, data ...any) (err error) + func RequestUAID(c *gin.Context) uint64 + func Ret400(c *gin.Context, code int, err error) + func Ret401(c *gin.Context, code int, err error) + func Ret403(c *gin.Context, code int, err error) + func Ret404(c *gin.Context, code int, err error) + func Ret500(c *gin.Context, code int, err error) + func RetErr(c *gin.Context, status, code int, err error) + func RetOk(c *gin.Context, data any) + func Router(r *gin.Engine) + func ScanCat(prf *Profile, session *Session, puid Puid_t, cat string, percent float64, ...) (ret []any, err error) + func ScanDir(prf *Profile, session *Session, dir string, isadmin bool, scanembed bool) (ret []any, skipped int, err error) + func SpiCachesInfo(c *gin.Context) + func SpiCloudAdd(c *gin.Context) + func SpiCloudDel(c *gin.Context) + func SpiDriveAdd(c *gin.Context) + func SpiDriveDel(c *gin.Context) + func SpiEditCopy(c *gin.Context) + func SpiEditDelete(c *gin.Context) + func SpiEditRename(c *gin.Context) + func SpiEtmb(c *gin.Context) + func SpiFile(c *gin.Context) + func SpiFolder(c *gin.Context) + func SpiGetLog(c *gin.Context) + func SpiGpsRange(c *gin.Context) + func SpiGpsScan(c *gin.Context) + func SpiHasPath(c *gin.Context) + func SpiMemUsage(c *gin.Context) + func SpiMtmb(c *gin.Context) + func SpiPage(pref, fname string) gin.HandlerFunc + func SpiPing(c *gin.Context) + func SpiRefresh(c *gin.Context) + func SpiReload(c *gin.Context) + func SpiServInfo(c *gin.Context) + func SpiShareAdd(c *gin.Context) + func SpiShareDel(c *gin.Context) + func SpiSignin(c *gin.Context) + func SpiTags(c *gin.Context) + func SpiTagsBreak(c *gin.Context) + func SpiTagsCheck(c *gin.Context) + func SpiTagsStart(c *gin.Context) + func SpiTile(c *gin.Context) + func SpiTileBreak(c *gin.Context) + func SpiTileCheck(c *gin.Context) + func SpiTileStart(c *gin.Context) + func SpiUserList(c *gin.Context) + func SqlSession(f func(*Session) (any, error)) (any, error) + func StripPort(addrport string) string + func ThumbCacheTrim() + func ToHHMMSS(dur int64) string + func UpsertBuffer[T any](session *Session, table any, buf *[]Store[T]) (err error) + func WaitHandlers() + func WriteYaml(fname string, data ...any) (err error) + type AgentStore struct + Addr string + CID uint64 + Lang string + Time time.Time + UA string + UAID uint64 + type Asx struct + Entry []AsxEntry + Param []AsxParam + Text string + Title string + Version string + XMLName xml.Name + type AsxEntry struct + Author string + Copyright string + Duration struct{ ... } + Param []AsxParam + Ref struct{ ... } + Text string + Title string + type AsxParam struct + Name string + Text string + Value string + type AuthGetter func(c *gin.Context) (*Profile, int, error) + type AuthResp struct + Access string + Expire string + Living string + Refrsh string + UID uint64 + XMLName xml.Name + func (r *AuthResp) Setup(user *Profile) + type Bimap struct + func NewBimap[K comparable, T comparable]() *Bimap[K, T] + func (m *Bimap[K, T]) DeleteDir(key K) (val T, ok bool) + func (m *Bimap[K, T]) DeleteRev(val T) (key K, ok bool) + func (m *Bimap[K, T]) GetDir(key K) (val T, ok bool) + func (m *Bimap[K, T]) GetRev(val T) (key K, ok bool) + func (m *Bimap[K, T]) Len() int + func (m *Bimap[K, T]) Set(key K, val T) + type Cache struct + func NewCache[K comparable, T any]() *Cache[K, T] + func (c *Cache[K, T]) Free(n int) + func (c *Cache[K, T]) Get(key K) (ret T, ok bool) + func (c *Cache[K, T]) Has(key K) (ok bool) + func (c *Cache[K, T]) Len() int + func (c *Cache[K, T]) OnRemove(efn func(K, T)) + func (c *Cache[K, T]) Peek(key K) (ret T, ok bool) + func (c *Cache[K, T]) Poke(key K, val T) + func (c *Cache[K, T]) Range(f func(K, T) bool) + func (c *Cache[K, T]) Remove(key K) (ok bool) + func (c *Cache[K, T]) Set(key K, val T) + func (c *Cache[K, T]) ToLimit(limit int) + func (c *Cache[K, T]) Until(f func(K, T) bool) + type Cacher interface + Cache func() + type CatGrp [FGnum]bool + func (cg *CatGrp) IsZero() bool + func (cg *CatGrp) SetAll(v bool) + type Claims struct + UID uint64 + func (c *Claims) Validate() error + type DirKit struct + type DirProp struct + FGrp FileGroup + Latency int + Scan time.Time + func ScanFileInfoList(prf *Profile, session *Session, vfiles []fs.FileInfo, vpaths []DiskPath, ...) (ret []any, lstp DirProp, err error) + func ScanFileNameList(prf *Profile, session *Session, vpaths []DiskPath, scanembed bool) (ret []any, lstp DirProp, err error) + type DirStore Store[DirProp] + type DiskPath struct + Name string + Path string + func MakeFilePath(syspath string) DiskPath + type EmbedPath Puid_t + func (puid EmbedPath) Cache() + type ExifKit struct + type ExifProp struct + Altitude float32 + Aperture float32 + DateTime time.Time + DigitalZoom float32 + ExposureBias float32 + ExposureProg int + ExposureTime string + FNumber float32 + Flash int + Focal float32 + Focal35mm int + ISOSpeed int + ImgHgt int + ImgWdh int + Latitude float64 + LightSource int + Longitude float64 + Make string + Model string + Orientation int + Satellites string + ShutterSpeed float32 + Software string + ThumbJpegLen int + UniqueID string + func ExifExtract(session *Session, file io.Reader, puid Puid_t) (tp ExifProp, err error) + func ExifStoreGet(session *Session, puid Puid_t) (tp ExifProp, ok bool) + func (tp *ExifProp) IsZero() bool + func (tp *ExifProp) Setup(x *exif.Exif) + type ExifStore Store[ExifProp] + type ExtProp struct + BitRate int + ETmb Mime_t + Height int + PBLen time.Duration + Tags ExtTag + Width int + func ExtStoreGet(session *Session, puid Puid_t) (xp ExtProp, ok bool) + func TagsExtract(fpath string, session *Session, buf *StoreBuf, es *ExtStat, gettmb bool) (p any, xp ExtProp, err error) + type ExtStat struct + ErrCount uint64 + ExifCount uint64 + ExtCount uint64 + FileCount uint64 + Id3Count uint64 + ImgCount uint64 + Mp3Count uint64 + TmbCount uint64 + type ExtStore Store[ExtProp] + type ExtTag int + const TagDis + const TagExif + const TagID3 + const TagImg + const TagNil + type FG_t int + const FGaudio + const FGbooks + const FGgroup + const FGimage + const FGother + const FGpacks + const FGtexts + const FGvideo + func GetFileGroup(fpath string) FG_t + type FT_t int + const FTcld + const FTctgr + const FTdir + const FTdrv + const FTfile + const FTunk + type FileCache struct + var ThumbPkg *FileCache + var TilesPkg *FileCache + func InitCacheWriter(fpath string) (fc *FileCache, d time.Duration, err error) + func (fc *FileCache) Close() (err error) + func (fc *FileCache) GetData(fpath string) (md MediaData, err error) + func (fc *FileCache) GetFile(fpath string) (file wpk.RFile, mime string, t time.Time, err error) + func (fc *FileCache) PutFile(fpath string, md MediaData) (err error) + func (fc *FileCache) Sync() error + type FileGroup struct + FGaudio uint + FGbooks uint + FGgroup uint + FGimage uint + FGother uint + FGpacks uint + FGtexts uint + FGvideo uint + func (fg *FileGroup) Field(id FG_t) *uint + func (fg *FileGroup) IsZero() bool + func (fg *FileGroup) Sum() uint + type FileKit struct + type FileMask struct + Exts []string + Names []string + Paths []string + func (fm *FileMask) Fits(fpath string) bool + type FileProp struct + Name string + Size int64 + Time time.Time + Type FT_t + func (fp *FileProp) Setup(fi fs.FileInfo) + type GpsInfo struct + Altitude float32 + DateTime time.Time + Latitude float64 + Longitude float64 + func (gi *GpsInfo) FromProp(tp *ExifProp) + type HdrRange struct + End int64 + Start int64 + func GetHdrRange(r *http.Request) (ret []HdrRange) + type Id3Kit struct + type Id3Prop struct + Album string + Artist string + Comment string + Composer string + DiscNum int + DiscSum int + Genre string + Lyrics string + ThumbLen int + Title string + TmbMime Mime_t + TrackNum int + TrackSum int + Year int + func Id3Extract(session *Session, file io.ReadSeeker, puid Puid_t) (tp Id3Prop, err error) + func Id3StoreGet(session *Session, puid Puid_t) (tp Id3Prop, ok bool) + func (tp *Id3Prop) IsZero() bool + func (tp *Id3Prop) Setup(m tag.Metadata) + type Id3Store Store[Id3Prop] + type MapPath struct + Coord []Point + Eject bool + Radius float64 + Shape Shape + func (mp *MapPath) Contains(lat, lon float64) bool + type MediaData struct + Data []byte + Mime Mime_t + Time time.Time + func CacheThumb(session *Session, syspath string) (md MediaData, err error) + func CacheTile(session *Session, syspath string, wdh, hgt int) (md MediaData, err error) + func ExtractThmub(syspath string) (md MediaData, err error) + func ExtractThumbEXIF(syspath string) (md MediaData, err error) + func HdCacheGet(session *Session, puid Puid_t) (md MediaData, err error) + func Id3ExtractThumb(syspath string) (md MediaData, err error) + func MediaCacheGet(session *Session, puid Puid_t) (md MediaData, err error) + func (md MediaData) Size() int64 + type Mime_t int16 + const MimeDis + const MimeGif + const MimeJpeg + const MimeNil + const MimePng + const MimeUnk + const MimeWebp + func CachedThumbMime(syspath string) Mime_t + func CachedTileMime(syspath string, tm TM_t) Mime_t + func GetMimeVal(mime, ext string) Mime_t + type OpenStore struct + AID uint64 + Latency int + Path string + Time time.Time + UAID uint64 + UID uint64 + type PathStore struct + Path string + Puid Puid_t + type Playlist struct + Album string + Artist string + Dest string + Genre string + Group string + Image string + Title string + Tracks []Track + func (pl *Playlist) AbsPath(fpath string) string + func (pl *Playlist) ReadASX(r io.Reader) (num int64, err error) + func (pl *Playlist) ReadFrom(r io.Reader) (num int64, err error) + func (pl *Playlist) ReadM3U(r io.Reader) (num int64, err error) + func (pl *Playlist) ReadPLS(r io.Reader) (num int64, err error) + func (pl *Playlist) ReadWPL(r io.Reader) (num int64, err error) + func (pl *Playlist) ReadXSPF(r io.Reader) (num int64, err error) + func (pl *Playlist) WriteASX(w io.Writer) (num int64, err error) + func (pl *Playlist) WriteM3U(w io.Writer) (num int64, err error) + func (pl *Playlist) WriteM3U8(w io.Writer) (num int64, err error) + func (pl *Playlist) WritePLS(w io.Writer) (num int64, err error) + func (pl *Playlist) WriteTo(w io.Writer) (num int64, err error) + func (pl *Playlist) WriteWPL(w io.Writer) (num int64, err error) + func (pl *Playlist) WriteXSPF(w io.Writer) (num int64, err error) + type Point struct + Latitude float64 + Longitude float64 + type Profile struct + ID uint64 + Local []DiskPath + Login string + Password string + Remote []DiskPath + Shares []DiskPath + func GetBasicAuth(credentials string) (user *Profile, code int, err error) + func GetBearerAuth(tokenstr string) (prf *Profile, code int, err error) + func GetUser(c *gin.Context) *Profile + func NewProfile(login, password string) *Profile + func UserFromCookie(c *gin.Context) (*Profile, int, error) + func UserFromForm(c *gin.Context) (*Profile, int, error) + func UserFromHeader(c *gin.Context) (*Profile, int, error) + func UserFromQuery(c *gin.Context) (*Profile, int, error) + func (prf *Profile) AddCloud(syspath, name string) bool + func (prf *Profile) AddLocal(syspath, name string) bool + func (prf *Profile) AddShare(syspath string) bool + func (prf *Profile) DelCloud(syspath string) bool + func (prf *Profile) DelLocal(syspath string) bool + func (prf *Profile) DelShare(syspath string) bool + func (prf *Profile) FindLocal() + func (prf *Profile) GetPathGroup(fpath string, fi fs.FileInfo) (grp FG_t) + func (prf *Profile) GetRootPath(session *Session, syspath string) (rootpath, rootname string) + func (prf *Profile) GetSharePath(session *Session, syspath string) (shrpath, shrname string) + func (prf *Profile) IsCloud(syspath string) bool + func (prf *Profile) IsLocal(syspath string) bool + func (prf *Profile) IsShared(syspath string) bool + func (prf *Profile) PathAccess(syspath string, isadmin bool) bool + func (prf *Profile) PathAdmin(syspath string) bool + func (prf *Profile) PathType(fpath string, fi fs.FileInfo) FT_t + func (prf *Profile) ScanLocal(session *Session, scanembed bool) (ret []any, err error) + func (prf *Profile) ScanRemote(session *Session, scanembed bool) (ret []any, err error) + func (prf *Profile) ScanShares(session *Session, scanembed bool) (ret []any, err error) + type PuidProp struct + Free bool + PUID Puid_t + Shared bool + Static bool + func (pp *PuidProp) Setup(session *Session, syspath string) + type Puid_t uint64 + const PUIDaudio + const PUIDbooks + const PUIDcache + const PUIDhome + const PUIDimage + const PUIDlocal + const PUIDmap + const PUIDmedia + const PUIDremote + const PUIDshares + const PUIDtexts + const PUIDvideo + const PuidHD + const PuidImg + const PuidTmb + func PathStoreCache(session *Session, fpath string) (puid Puid_t) + func PathStorePUID(session *Session, fpath string) (puid Puid_t, ok bool) + func UnfoldPath(session *Session, shrpath string) (syspath string, puid Puid_t, err error) + func (pt *Puid_t) Rand(bits int) + func (pt *Puid_t) Set(puid string) error + func (pt *Puid_t) UnmarshalJSON(b []byte) error + func (pt *Puid_t) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error + func (pt *Puid_t) UnmarshalYAML(value *yaml.Node) error + func (pt Puid_t) MarshalJSON() ([]byte, error) + func (pt Puid_t) MarshalXML(e *xml.Encoder, start xml.StartElement) error + func (pt Puid_t) MarshalYAML() (any, error) + func (pt Puid_t) String() string + type RFile = jnt.RFile + func OpenFile(fpath string) (file RFile, err error) + type RWList struct + func (rwl *RWList[T]) Copy() []T + func (rwl *RWList[T]) Find(val T, from int) int + func (rwl *RWList[T]) Init(capacity int) + func (rwl *RWList[T]) Insert(val T, i int) + func (rwl *RWList[T]) Pop() (val T, ok bool) + func (rwl *RWList[T]) Push(val T) + func (rwl *RWList[T]) Remove(i int) + type RWMap struct + var Profiles RWMap[uint64, *Profile] + func (rwm *RWMap[K, T]) Delete(key K) + func (rwm *RWMap[K, T]) Get(key K) (ret T, ok bool) + func (rwm *RWMap[K, T]) GetAndDelete(key K) (ret T, ok bool) + func (rwm *RWMap[K, T]) Has(key K) (ok bool) + func (rwm *RWMap[K, T]) Init(capacity int) + func (rwm *RWMap[K, T]) Len() int + func (rwm *RWMap[K, T]) Range(f func(K, T) bool) + func (rwm *RWMap[K, T]) Set(key K, val T) + type Session = xorm.Session + type Shape string + const Circle + const Polygon + const Rectangle + type Sizer interface + Size func() int64 + type Store struct + Prop T + Puid Puid_t + type StoreBuf struct + func (sb *StoreBuf) Flush(session *Session) (err error) + func (sb *StoreBuf) Init(limit int) + func (sb *StoreBuf) Push(session *Session, val any) (err error) + type TM_t int + type TempCell struct + Data *T + Wait *time.Timer + type ThumbPath Puid_t + func (puid ThumbPath) Cache() + type TilePath struct + Hgt int + Puid Puid_t + Wdh int + func (tile TilePath) Cache() + type TileProp struct + MT02Val Mime_t + MT03Val Mime_t + MT04Val Mime_t + MT06Val Mime_t + MT08Val Mime_t + MT09Val Mime_t + MT10Val Mime_t + MT12Val Mime_t + MT15Val Mime_t + MT16Val Mime_t + MT18Val Mime_t + MT20Val Mime_t + MT24Val Mime_t + MT30Val Mime_t + MT36Val Mime_t + MTmbVal Mime_t + func (tp *TileProp) SetTile(tm TM_t, mime Mime_t) (ok bool) + func (tp *TileProp) Tile(tm TM_t) (mime Mime_t, ok bool) + type Track struct + Duration int64 + Location string + Title string + type Unix_t uint64 + func UnixJS(u time.Time) Unix_t + func UnixJSNow() Unix_t + func (ut *Unix_t) FromDB(b []byte) (err error) + func (ut *Unix_t) UnmarshalJSON(b []byte) (err error) + func (ut *Unix_t) UnmarshalXML(d *xml.Decoder, start xml.StartElement) (err error) + func (ut *Unix_t) UnmarshalYAML(value *yaml.Node) (err error) + func (ut Unix_t) MarshalJSON() ([]byte, error) + func (ut Unix_t) MarshalXML(e *xml.Encoder, start xml.StartElement) error + func (ut Unix_t) MarshalYAML() (any, error) + func (ut Unix_t) String() string + func (ut Unix_t) Time() time.Time + func (ut Unix_t) ToDB() ([]byte, error) + type Wpl struct + Body struct{ ... } + Head struct{ ... } + Text string + XMLName xml.Name + type WplMedia struct + Src string + Text string + Tid string + type WplMeta struct + Content string + Name string + Text string + type Xspf struct + Text string + Title string + Track []XspfTrack + Version string + XMLName xml.Name + Xmlns string + type XspfTrack struct + Duration int64 + Location string + Text string + Title string + type YamlReadWriter interface + ReadYaml func(string) error + WriteYaml func(string) error