diff --git a/db_fileutil.go b/dbutil/dbutil.go similarity index 53% rename from db_fileutil.go rename to dbutil/dbutil.go index 897312b..f7d909d 100644 --- a/db_fileutil.go +++ b/dbutil/dbutil.go @@ -1,4 +1,4 @@ -package main +package dbutil import ( "github.com/vbatts/imgsrv/hash" @@ -7,24 +7,26 @@ import ( "labix.org/v2/mgo/bson" ) -/* gfs is a *mgo.GridFS defined in imgsrv.go */ +type Util struct { + Gfs *mgo.GridFS +} -func GetFileByFilename(filename string) (this_file types.File, err error) { - err = gfs.Find(bson.M{"filename": filename}).One(&this_file) +func (u Util) GetFileByFilename(filename string) (this_file types.File, err error) { + err = u.Gfs.Find(bson.M{"filename": filename}).One(&this_file) if err != nil { return this_file, err } return this_file, nil } -func GetFileRandom() (this_file types.File, err error) { +func (u Util) GetFileRandom() (this_file types.File, err error) { r := hash.Rand64() - err = gfs.Find(bson.M{"random": bson.M{"$gt": r}}).One(&this_file) + err = u.Gfs.Find(bson.M{"random": bson.M{"$gt": r}}).One(&this_file) if err != nil { return this_file, err } if len(this_file.Md5) == 0 { - err = gfs.Find(bson.M{"random": bson.M{"$lt": r}}).One(&this_file) + err = u.Gfs.Find(bson.M{"random": bson.M{"$lt": r}}).One(&this_file) } if err != nil { return this_file, err @@ -33,8 +35,8 @@ func GetFileRandom() (this_file types.File, err error) { } /* Check whether this types.File filename is on Mongo */ -func HasFileByFilename(filename string) (exists bool, err error) { - c, err := gfs.Find(bson.M{"filename": filename}).Count() +func (u Util) HasFileByFilename(filename string) (exists bool, err error) { + c, err := u.Gfs.Find(bson.M{"filename": filename}).Count() if err != nil { return false, err } @@ -42,8 +44,8 @@ func HasFileByFilename(filename string) (exists bool, err error) { return exists, nil } -func HasFileByMd5(md5 string) (exists bool, err error) { - c, err := gfs.Find(bson.M{"md5": md5}).Count() +func (u Util) HasFileByMd5(md5 string) (exists bool, err error) { + c, err := u.Gfs.Find(bson.M{"md5": md5}).Count() if err != nil { return false, err } @@ -51,8 +53,8 @@ func HasFileByMd5(md5 string) (exists bool, err error) { return exists, nil } -func HasFileByKeyword(keyword string) (exists bool, err error) { - c, err := gfs.Find(bson.M{"metadata": bson.M{"keywords": keyword}}).Count() +func (u Util) HasFileByKeyword(keyword string) (exists bool, err error) { + c, err := u.Gfs.Find(bson.M{"metadata": bson.M{"keywords": keyword}}).Count() if err != nil { return false, err } @@ -60,7 +62,10 @@ func HasFileByKeyword(keyword string) (exists bool, err error) { return exists, nil } -func GetKeywords() (kp []types.KeywordCount, err error) { +/* +get a list of keywords and their frequency count +*/ +func (u Util) GetKeywords() (kp []types.KeywordCount, err error) { job := &mgo.MapReduce{ Map: ` function() { @@ -85,7 +90,7 @@ func GetKeywords() (kp []types.KeywordCount, err error) { } `, } - if _, err := gfs.Find(nil).MapReduce(job, &kp); err != nil { + if _, err := u.Gfs.Find(nil).MapReduce(job, &kp); err != nil { return kp, err } return kp, nil diff --git a/imgsrv.go b/imgsrv.go index 74aa5ed..211975c 100644 --- a/imgsrv.go +++ b/imgsrv.go @@ -69,7 +69,7 @@ func main() { log.Println(file) } else { - // we're pushing up a file + // we're pushing up a file if len(DefaultConfig.RemoteHost) == 0 { log.Println("Please provide a remotehost!") diff --git a/layouts.go b/layouts.go index 0127c60..8586ba7 100644 --- a/layouts.go +++ b/layouts.go @@ -45,10 +45,20 @@ var navbarTemplateHTML = `
  • URLie
  • All
  • - - - - + + + + + + ` var containerBeginTemplate = template.Must(template.New("containerBegin").Parse(containerBeginTemplateHTML)) @@ -84,9 +94,9 @@ var formDeleteFileTemplateHTML = `
    -no! +no!
    -yes! delete! +yes! delete! diff --git a/server.go b/server.go index 61085f2..fb75a3f 100644 --- a/server.go +++ b/server.go @@ -13,29 +13,30 @@ import ( "github.com/vbatts/go-httplog" "github.com/vbatts/imgsrv/assets" + "github.com/vbatts/imgsrv/config" + "github.com/vbatts/imgsrv/dbutil" "github.com/vbatts/imgsrv/hash" "github.com/vbatts/imgsrv/types" "github.com/vbatts/imgsrv/util" - "github.com/vbatts/imgsrv/config" "labix.org/v2/mgo" "labix.org/v2/mgo/bson" ) var ( - defaultPageLimit int = 25 - serverConfig config.Config + defaultPageLimit int = 25 + serverConfig config.Config mongo_session *mgo.Session // FIXME make this not global images_db *mgo.Database // FIXME make this not global gfs *mgo.GridFS // FIXME make this not global - + du dbutil.Util ) /* Run as the file/image server */ func runServer(c *config.Config) { - serverConfig = *c + serverConfig = *c initMongo() defer mongo_session.Close() @@ -55,7 +56,7 @@ func runServer(c *config.Config) { http.HandleFunc("/ext/", routeExt) http.HandleFunc("/md5/", routeMD5s) - addr := fmt.Sprintf("%s:%s", c.Ip, c.Port) + addr := fmt.Sprintf("%s:%s", c.Ip, c.Port) log.Printf("Serving on %s ...", addr) log.Fatal(http.ListenAndServe(addr, nil)) } @@ -73,6 +74,7 @@ func initMongo() { } } gfs = images_db.GridFS("fs") + du.Gfs = gfs } func serverErr(w http.ResponseWriter, r *http.Request, e error) { @@ -266,7 +268,7 @@ func routeFilesPOST(w http.ResponseWriter, r *http.Request) { } } - exists, err := HasFileByFilename(filename) + exists, err := du.HasFileByFilename(filename) if err == nil && !exists { file, err := gfs.Create(filename) defer file.Close() @@ -340,7 +342,7 @@ func routeFilesDELETE(w http.ResponseWriter, r *http.Request) { return } - exists, err := HasFileByFilename(uriChunks[1]) + exists, err := du.HasFileByFilename(uriChunks[1]) if err != nil { serverErr(w, r, err) return @@ -455,7 +457,7 @@ func routeKeywords(w http.ResponseWriter, r *http.Request) { } else if len(uriChunks) == 1 || (len(uriChunks) == 2 && len(uriChunks[1]) == 0) { // Path: /k/ // show a tag cloud! - kc, err := GetKeywords() + kc, err := du.GetKeywords() if err != nil { serverErr(w, r, err) return @@ -602,7 +604,7 @@ func routeGetFromUrl(w http.ResponseWriter, r *http.Request) { log.Printf("WARN: not sure what to do with param [%s = %s]", k, v) } } - exists, err := HasFileByFilename(filepath.Base(local_filename)) + exists, err := du.HasFileByFilename(filepath.Base(local_filename)) if err != nil { serverErr(w, r, err) return @@ -691,7 +693,7 @@ func routeUpload(w http.ResponseWriter, r *http.Request) { filehdr := r.MultipartForm.File["filename"][0] filename := filehdr.Filename - exists, err := HasFileByFilename(filename) + exists, err := du.HasFileByFilename(filename) if err != nil { serverErr(w, r, err) return