diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/helsinki.at/rhimport/importer.go | 33 | ||||
-rw-r--r-- | src/helsinki.at/rhimport/rddb.go | 61 |
2 files changed, 74 insertions, 20 deletions
diff --git a/src/helsinki.at/rhimport/importer.go b/src/helsinki.at/rhimport/importer.go index 95f61f7..8206082 100644 --- a/src/helsinki.at/rhimport/importer.go +++ b/src/helsinki.at/rhimport/importer.go @@ -97,7 +97,13 @@ func (ctx *ImportContext) SanityCheck() error { return nil } if ctx.GroupName != "" { - // TODO: check if GroupName is a music pool -> Error if not + ismusic, err := ctx.checkMusicGroup() + if err != nil { + return err + } + if !ismusic { + return fmt.Errorf("supplied GroupName is not a music pool") + } return nil } if ctx.Cart == 0 { @@ -118,14 +124,13 @@ func (ctx *ImportContext) getPassword(cached bool) (err error) { res := <-req.response if res.err != nil { - err = res.err - return + return res.err } ctx.Password = res.password - return + return nil } -func (ctx *ImportContext) getGroupOfCart() (err error) { +func (ctx *ImportContext) getGroupOfCart() error { req := getGroupOfCartRequest{} req.cart = ctx.Cart req.response = make(chan getGroupOfCartResult) @@ -133,11 +138,10 @@ func (ctx *ImportContext) getGroupOfCart() (err error) { res := <-req.response if res.err != nil { - err = res.err - return + return res.err } ctx.GroupName = res.group - return + return nil } func (ctx *ImportContext) getShowInfo() (err error) { @@ -155,6 +159,19 @@ func (ctx *ImportContext) getShowInfo() (err error) { return } +func (ctx *ImportContext) checkMusicGroup() (bool, error) { + req := checkMusicGroupRequest{} + req.group = ctx.GroupName + req.response = make(chan checkMusicGroupResult) + ctx.RdDb.checkMusicGroupChan <- req + + res := <-req.response + if res.err != nil { + return false, res.err + } + return res.ismusic, nil +} + type ImportResult struct { ResponseCode int ErrorString string diff --git a/src/helsinki.at/rhimport/rddb.go b/src/helsinki.at/rhimport/rddb.go index 85a3177..52d6e18 100644 --- a/src/helsinki.at/rhimport/rddb.go +++ b/src/helsinki.at/rhimport/rddb.go @@ -62,17 +62,29 @@ type getShowInfoRequest struct { response chan getShowInfoResult } +type checkMusicGroupResult struct { + ismusic bool + err error +} + +type checkMusicGroupRequest struct { + group string + response chan checkMusicGroupResult +} + type RdDb struct { - 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 + 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 + checkMusicGroupChan chan checkMusicGroupRequest + checkMusicGroupStmt *sql.Stmt + quit chan bool + done chan bool } func (self *RdDb) init(conf *Config) (err error) { @@ -89,6 +101,9 @@ func (self *RdDb) init(conf *Config) (err error) { if self.getShowInfoStmt, err = self.dbh.Prepare("select TITLE,MACROS from CART where NUMBER = ?;"); err != nil { return } + if self.checkMusicGroupStmt, err = self.dbh.Prepare("select count(*) from DROPBOXES where GROUP_NAME = ? and SET_USER_DEFINED like \"M;%\";"); err != nil { + return + } return } @@ -152,11 +167,25 @@ func (self *RdDb) getShowInfo(showid int) (title string, carts map[int]int, err } rhdl.Printf("RdDb: macros for showid '%d' are set to '%s'", showid, macros) - // TODO: also fetch cart list + // TODO: also fetch cart list and import params (norm_level, ...) carts = make(map[int]int) return } +func (self *RdDb) checkMusicGroup(group string) (ismusic bool, err error) { + var cnt int + err = self.checkMusicGroupStmt.QueryRow(group).Scan(&cnt) + if err != nil { + if err == sql.ErrNoRows { + err = nil + ismusic = false + } + return + } + ismusic = cnt > 0 + return +} + func (self *RdDb) dispatchRequests() { defer func() { self.done <- true }() for { @@ -179,6 +208,10 @@ func (self *RdDb) dispatchRequests() { rhdl.Println("RdDb: got getShowInfo request for", req.showid) title, carts, err := self.getShowInfo(req.showid) req.response <- getShowInfoResult{title, carts, err} + case req := <-self.checkMusicGroupChan: + rhdl.Println("RdDb: got checkMusicGroup request for", req.group) + ismusic, err := self.checkMusicGroup(req.group) + req.response <- checkMusicGroupResult{ismusic, err} } } } @@ -199,7 +232,10 @@ func (self *RdDb) Cleanup() { self.getGroupOfCartStmt.Close() } if self.getShowInfoStmt != nil { - self.getPasswordStmt.Close() + self.getShowInfoStmt.Close() + } + if self.checkMusicGroupStmt != nil { + self.checkMusicGroupStmt.Close() } } @@ -212,6 +248,7 @@ func NewRdDb(conf *Config) (db *RdDb, err error) { db.getPasswordChan = make(chan getPasswordRequest) db.getGroupOfCartChan = make(chan getGroupOfCartRequest) db.getShowInfoChan = make(chan getShowInfoRequest) + db.checkMusicGroupChan = make(chan checkMusicGroupRequest) if err = db.init(conf); err != nil { return |