summaryrefslogtreecommitdiff
path: root/rddb
diff options
context:
space:
mode:
Diffstat (limited to 'rddb')
-rw-r--r--rddb/rddb.go72
1 files changed, 71 insertions, 1 deletions
diff --git a/rddb/rddb.go b/rddb/rddb.go
index 74cef83..29a87af 100644
--- a/rddb/rddb.go
+++ b/rddb/rddb.go
@@ -39,7 +39,8 @@ var (
)
const (
- DB_VERSION = 245
+ DB_VERSION = 245
+ dropboxPseudoStation = "import-dropbox"
)
type getPasswordResult struct {
@@ -98,6 +99,22 @@ type getMusicInfoRequest struct {
response chan<- getMusicInfoResult
}
+type ShowListEntry struct {
+ ID uint
+ Title string
+ Carts []uint
+}
+
+type getShowListResult struct {
+ shows []ShowListEntry
+ err error
+}
+
+type getShowListRequest struct {
+ username string
+ response chan<- getShowListResult
+}
+
type DB struct {
conf *config
dbh *sql.DB
@@ -112,6 +129,8 @@ type DB struct {
checkMusicGroupStmt *sql.Stmt
getMusicInfoChan chan getMusicInfoRequest
getMusicInfoStmt *sql.Stmt
+ getShowListChan chan getShowListRequest
+ getShowListStmt *sql.Stmt
quit chan bool
done chan bool
}
@@ -150,6 +169,10 @@ func (db *DB) init() (err error) {
if db.getMusicInfoStmt, err = db.dbh.Prepare("select NORMALIZATION_LEVEL,AUTOTRIM_LEVEL from DROPBOXES where DROPBOXES.GROUP_NAME = ?;"); err != nil {
return
}
+ if db.getShowListStmt, err = db.dbh.Prepare("select CART.TITLE,CART.MACROS,DROPBOXES.TO_CART,DROPBOXES.SET_USER_DEFINED,GROUPS.DEFAULT_LOW_CART,GROUPS.DEFAULT_HIGH_CART,GROUPS.DESCRIPTION from CART, USER_PERMS, DROPBOXES, GROUPS where CART.NUMBER = DROPBOXES.TO_CART and USER_PERMS.USER_NAME = ? and DROPBOXES.GROUP_NAME = USER_PERMS.GROUP_NAME and DROPBOXES.GROUP_NAME = GROUPS.NAME and DROPBOXES.STATION_NAME = ?;"); err != nil {
+ return
+ }
+
return
}
@@ -271,6 +294,31 @@ func (db *DB) getMusicInfo(group string) (result getMusicInfoResult) {
return
}
+func (db *DB) getShowList(username string) (result getShowListResult) {
+ var rows *sql.Rows
+ if rows, result.err = db.getShowListStmt.Query(username, dropboxPseudoStation); result.err != nil {
+ return
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ var show ShowListEntry
+ var macros, params, desc string
+ var lowCart, highCart int
+
+ if result.err = rows.Scan(&show.Title, &macros, &show.ID, &params, &lowCart, &highCart, &desc); result.err != nil {
+ return
+ }
+
+ show.Carts, result.err = db.getShowCarts(showMacroRe.FindStringSubmatch(macros)[1], lowCart, highCart)
+
+ result.shows = append(result.shows, show)
+ }
+ result.err = rows.Err()
+ return
+
+}
+
func (db *DB) dispatchRequests() {
defer func() { db.done <- true }()
for {
@@ -287,6 +335,8 @@ func (db *DB) dispatchRequests() {
req.response <- db.checkMusicGroup(req.group)
case req := <-db.getMusicInfoChan:
req.response <- db.getMusicInfo(req.group)
+ case req := <-db.getShowListChan:
+ req.response <- db.getShowList(req.username)
}
}
}
@@ -300,6 +350,7 @@ type DBChan struct {
getShowInfoChan chan<- getShowInfoRequest
checkMusicGroupChan chan<- checkMusicGroupRequest
getMusicInfoChan chan<- getMusicInfoRequest
+ getShowListChan chan<- getShowListRequest
}
func (db *DBChan) GetPassword(username string, cached bool) (string, error) {
@@ -400,6 +451,20 @@ func (db *DBChan) GetMusicInfo(groupname string) (int, int, error) {
return res.normLvl, res.trimLvl, nil
}
+func (db *DBChan) GetShowList(username string) ([]ShowListEntry, error) {
+ resCh := make(chan getShowListResult)
+ req := getShowListRequest{}
+ req.username = username
+ req.response = resCh
+ db.getShowListChan <- req
+
+ res := <-resCh
+ if res.err != nil {
+ return nil, res.err
+ }
+ return res.shows, nil
+}
+
func (db *DB) GetInterface() *DBChan {
ch := &DBChan{}
ch.getPasswordChan = db.getPasswordChan
@@ -407,6 +472,7 @@ func (db *DB) GetInterface() *DBChan {
ch.getShowInfoChan = db.getShowInfoChan
ch.checkMusicGroupChan = db.checkMusicGroupChan
ch.getMusicInfoChan = db.getMusicInfoChan
+ ch.getShowListChan = db.getShowListChan
return ch
}
@@ -434,6 +500,9 @@ func (db *DB) Cleanup() {
if db.getMusicInfoStmt != nil {
db.getMusicInfoStmt.Close()
}
+ if db.getShowListStmt != nil {
+ db.getShowListStmt.Close()
+ }
}
func NewDB(configfile string) (db *DB, err error) {
@@ -449,6 +518,7 @@ func NewDB(configfile string) (db *DB, err error) {
db.getShowInfoChan = make(chan getShowInfoRequest, 10)
db.checkMusicGroupChan = make(chan checkMusicGroupRequest, 10)
db.getMusicInfoChan = make(chan getMusicInfoRequest, 10)
+ db.getShowListChan = make(chan getShowListRequest, 10)
if err = db.init(); err != nil {
return