summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@helsinki.at>2015-12-13 01:19:19 (GMT)
committerChristian Pointner <equinox@helsinki.at>2015-12-13 01:19:19 (GMT)
commit2a2d9d2a574da4e21414698e8b9ed1d273f237bc (patch)
treeef82afb2b4dcd2ee862ffc43f84f78c58ab4c98b
parentc1bff94567a3f1bbfe631795608a24fa44394e76 (diff)
importer can now fetch group of cart
-rw-r--r--importer.go21
-rw-r--r--rddb.go70
2 files changed, 79 insertions, 12 deletions
diff --git a/importer.go b/importer.go
index 0fc5ecf..95f61f7 100644
--- a/importer.go
+++ b/importer.go
@@ -125,6 +125,21 @@ func (ctx *ImportContext) getPassword(cached bool) (err error) {
return
}
+func (ctx *ImportContext) getGroupOfCart() (err error) {
+ req := getGroupOfCartRequest{}
+ req.cart = ctx.Cart
+ req.response = make(chan getGroupOfCartResult)
+ ctx.RdDb.getGroupOfCartChan <- req
+
+ res := <-req.response
+ if res.err != nil {
+ err = res.err
+ return
+ }
+ ctx.GroupName = res.group
+ return
+}
+
func (ctx *ImportContext) getShowInfo() (err error) {
req := getShowInfoRequest{}
req.showid = ctx.ShowId
@@ -434,7 +449,7 @@ func ImportFile(ctx *ImportContext) (res *ImportResult, err error) {
return
} else if ctx.GroupName != "" {
res.ResponseCode = 500
- res.ErrorString = "Importing to music pools using the group name is not yet implemented"
+ res.ErrorString = "Importing to music pools is not yet implemented"
// TODO: fetch info from dropboxes (import-params)
// - add_cart(ctx, res) [200 -> OK]
// - add_cut(ctx, res) [200 -> OK]
@@ -443,7 +458,7 @@ func ImportFile(ctx *ImportContext) (res *ImportResult, err error) {
res.ResponseCode = 500
res.ErrorString = "Importing to a Cart which might not exist is not yet implemented"
// TODO: (everything except Cut, GroupName and ShowId must be in context)
- // - ctx.GetGroupOfCart(ctx.Cart)
+ // - ctx.getGroupOfCart(ctx.Cart)
// - remove_cart(ctx, res) [200 || 404 -> OK]
// - add_cart(ctx, res) [200 -> OK]
// - add_cut(ctx, res) [200 -> OK]
@@ -456,7 +471,7 @@ func ImportFile(ctx *ImportContext) (res *ImportResult, err error) {
res.Cut = ctx.Cut
} else {
res.ResponseCode = http.StatusBadRequest
- res.ErrorString = "The request doesn't contain enough Information to be processed"
+ res.ErrorString = "The request doesn't contain enough information to be processed"
}
rhdl.Printf("ImportResult: %+v\n", res)
diff --git a/rddb.go b/rddb.go
index dd1dfec..85a3177 100644
--- a/rddb.go
+++ b/rddb.go
@@ -41,6 +41,16 @@ type getPasswordRequest struct {
response chan getPasswordResult
}
+type getGroupOfCartResult struct {
+ group string
+ err error
+}
+
+type getGroupOfCartRequest struct {
+ cart uint
+ response chan getGroupOfCartResult
+}
+
type getShowInfoResult struct {
title string
carts map[int]int
@@ -53,14 +63,16 @@ type getShowInfoRequest struct {
}
type RdDb struct {
- dbh *sql.DB
- password_cache map[string]string
- getPasswordChan chan getPasswordRequest
- getPasswordStmt *sql.Stmt
- getShowInfoChan chan getShowInfoRequest
- getShowInfoStmt *sql.Stmt
- quit chan bool
- done chan bool
+ dbh *sql.DB
+ password_cache map[string]string
+ getPasswordChan chan getPasswordRequest
+ getPasswordStmt *sql.Stmt
+ getGroupOfCartChan chan getGroupOfCartRequest
+ getGroupOfCartStmt *sql.Stmt
+ getShowInfoChan chan getShowInfoRequest
+ getShowInfoStmt *sql.Stmt
+ quit chan bool
+ done chan bool
}
func (self *RdDb) init(conf *Config) (err error) {
@@ -71,6 +83,9 @@ func (self *RdDb) init(conf *Config) (err error) {
if self.getPasswordStmt, err = self.dbh.Prepare("select PASSWORD from USERS where LOGIN_NAME = ?;"); err != nil {
return
}
+ if self.getGroupOfCartStmt, err = self.dbh.Prepare("select NAME,DEFAULT_LOW_CART,DEFAULT_HIGH_CART from GROUPS where DEFAULT_LOW_CART <= ? and DEFAULT_HIGH_CART >= ?;"); err != nil {
+ return
+ }
if self.getShowInfoStmt, err = self.dbh.Prepare("select TITLE,MACROS from CART where NUMBER = ?;"); err != nil {
return
}
@@ -78,7 +93,6 @@ func (self *RdDb) init(conf *Config) (err error) {
}
func (self *RdDb) getPassword(username string, cached bool) (pwd string, err error) {
-
if cached {
pwd = self.password_cache[username]
}
@@ -97,6 +111,36 @@ func (self *RdDb) getPassword(username string, cached bool) (pwd string, err err
return
}
+func (self *RdDb) getGroupOfCart(cart uint) (group string, err error) {
+ var rows *sql.Rows
+ if rows, err = self.getGroupOfCartStmt.Query(cart, cart); err != nil {
+ return
+ }
+ defer rows.Close()
+ size_min := ^uint(0)
+ for rows.Next() {
+ var name string
+ var low_cart, high_cart uint
+ if err = rows.Scan(&name, &low_cart, &high_cart); err != nil {
+ return
+ }
+ if high_cart >= low_cart {
+ size := (high_cart - low_cart) + 1
+ if size_min > size {
+ group = name
+ size_min = size
+ }
+ }
+ }
+ if err = rows.Err(); err != nil {
+ return
+ }
+ if group == "" {
+ err = fmt.Errorf("cart is outside of all group cart ranges")
+ }
+ return
+}
+
func (self *RdDb) getShowInfo(showid int) (title string, carts map[int]int, err error) {
var macros string
err = self.getShowInfoStmt.QueryRow(showid).Scan(&title, &macros)
@@ -127,6 +171,10 @@ func (self *RdDb) dispatchRequests() {
}
pwd, err := self.getPassword(req.username, req.cached)
req.response <- getPasswordResult{pwd, err}
+ case req := <-self.getGroupOfCartChan:
+ rhdl.Println("RdDb: got getGroupOfCart request for", req.cart)
+ group, err := self.getGroupOfCart(req.cart)
+ req.response <- getGroupOfCartResult{group, err}
case req := <-self.getShowInfoChan:
rhdl.Println("RdDb: got getShowInfo request for", req.showid)
title, carts, err := self.getShowInfo(req.showid)
@@ -147,6 +195,9 @@ func (self *RdDb) Cleanup() {
if self.getPasswordStmt != nil {
self.getPasswordStmt.Close()
}
+ if self.getGroupOfCartStmt != nil {
+ self.getGroupOfCartStmt.Close()
+ }
if self.getShowInfoStmt != nil {
self.getPasswordStmt.Close()
}
@@ -159,6 +210,7 @@ func NewRdDb(conf *Config) (db *RdDb, err error) {
db.done = make(chan bool)
db.password_cache = make(map[string]string)
db.getPasswordChan = make(chan getPasswordRequest)
+ db.getGroupOfCartChan = make(chan getGroupOfCartRequest)
db.getShowInfoChan = make(chan getShowInfoRequest)
if err = db.init(conf); err != nil {