12345678910111213141516171819202122232425262728293031323334353637383940 |
- package ipfs_api
- import (
- "github.com/ipfs/go-ipfs-api"
- . "github.com/kpmy/ypk/tc"
- "github.com/mattetti/filebuffer"
- "io"
- )
- func (sh *MyShell) FileList(hash string) (ret *shell.UnixLsObject, err error) {
- if x, ok := sh.cache.Get(hash); !ok {
- if ret, err = sh.Shell.FileList(hash); err == nil {
- sh.cache.Set(hash, ret)
- }
- } else {
- ret = x.(*shell.UnixLsObject)
- }
- return
- }
- const BufferLimit = 2048
- func (sh *MyShell) CacheCat(hash string) (ret io.ReadCloser, err error) {
- if x, ok := sh.cache.Get(hash); !ok {
- var old io.ReadCloser
- if old, err = sh.Shell.Cat(hash); err == nil {
- buf := filebuffer.New(nil)
- io.CopyN(buf, old, BufferLimit+1)
- Assert(buf.Buff.Len() <= BufferLimit, 40, "buffer too large")
- buf.Seek(0, io.SeekStart)
- sh.cache.Set(hash, buf)
- ret = buf
- }
- } else {
- buf := x.(*filebuffer.Buffer)
- buf.Seek(0, io.SeekStart)
- ret = buf
- }
- return
- }
|