1package feeder 2 3type databaseHandler struct { 4 db *database 5 itemhandler ItemHandler 6 chanhandler ChannelHandler 7} 8 9func (d *databaseHandler) ProcessItems(f *Feed, ch *Channel, items []*Item) { 10 var newitems []*Item 11 for _, item := range items { 12 if d.db.request <- item.Key(); !<-d.db.response { 13 newitems = append(newitems, item) 14 } 15 } 16 if len(newitems) > 0 && d.itemhandler != nil { 17 d.itemhandler.ProcessItems(f, ch, newitems) 18 } 19} 20 21func (d *databaseHandler) ProcessChannels(f *Feed, ch []*Channel) { 22 var newchannels []*Channel 23 for _, channel := range ch { 24 if d.db.request <- channel.Key(); !<-d.db.response { 25 newchannels = append(newchannels, channel) 26 } 27 } 28 if len(newchannels) > 0 && d.chanhandler != nil { 29 d.chanhandler.ProcessChannels(f, newchannels) 30 } 31} 32 33func NewDatabaseItemHandler(db *database, itemhandler ItemHandler) ItemHandler { 34 database := new(databaseHandler) 35 database.db = db 36 database.itemhandler = itemhandler 37 return database 38} 39 40func NewDatabaseChannelHandler(db *database, chanhandler ChannelHandler) ChannelHandler { 41 database := new(databaseHandler) 42 database.db = db 43 database.chanhandler = chanhandler 44 return database 45} 46