diff --git a/mothball.go b/mothball.go new file mode 100644 index 0000000..845d861 --- /dev/null +++ b/mothball.go @@ -0,0 +1,52 @@ +package mothball + +import ( + "archive/zip" + "os" + "time" +) + +type Mothball struct { + zf *zipfile.File, + filename string, + mtime time.Time, +} + +func Open(filename string) (*Mothball, error) { + var m Mothball + + m.filename = filename + + err := m.Refresh() + if err != nil { + return err + } + + return &m +} + +func (m Mothball) Close() (error) { + return m.zf.Close() +} + +func (m Mothball) Refresh() (error) { + mtime, err := os.Stat(m.filename) + if err != nil { + return err + } + + if mtime == m.mtime { + return nil + } + + zf, err := zip.OpenReader(m.filename) + if err != nil { + return err + } + + m.zf.Close() + m.zf = zf + m.mtime = mtime +} + +func (m Mothball) \ No newline at end of file