git.sophuwu.com > myweb   
              62
            
             package main

import (
	"go.etcd.io/bbolt"
	"mime"
	"net/http"
	"path/filepath"
	"sophuwu.site/myweb/template"
	"strings"
)

type DBFile struct {
	Name string
	Size int
}

func (f *DBFile) Valid() bool {
	if f.Name == "" || strings.HasPrefix(f.Name, ".") || strings.HasPrefix(f.Name, "_") || f.Size == 0 {
		return false
	}
	return true
}
func (f *DBFile) Set(name string, size int) {
	f.Name = name
	f.Size = size
}

func MediaHandler(w http.ResponseWriter, r *http.Request) {
	path := strings.TrimPrefix(r.URL.Path, "/media/")
	var err error
	if path == "" {
		var list []DBFile
		var t DBFile
		err = DB.Bolt.View(func(tx *bbolt.Tx) error {
			b := tx.Bucket([]byte("media"))
			return b.ForEach(func(k, v []byte) error {
				t.Set(string(k), len(v))
				if t.Valid() {
					list = append(list, t)
				}
				return nil
			})
		})
		if CheckHttpErr(err, w, r, 500) {
			return
		}
		d := template.Data("/media/", "Directory listing for /media/")
		d.Set("Files", list)
		d.Set("NoFiles", len(list))
		err = template.Use(w, r, "filelist", d)
		CheckHttpErr(err, w, r, 500)
		return
	}
	var data []byte
	data, err = DB.GetBytes("media", path)
	if CheckHttpErr(err, w, r, 404) {
		return
	}
	w.WriteHeader(200)
	w.Header().Set("content-type", mime.TypeByExtension(filepath.Ext(path)))
	w.Write(data)
}