package core func AddSourceToChannel(db DB, channel string, source string) error { _, err := db.Exec(` insert into channels (name, source) values (?, ?) `, channel, source) return err } func DeleteSourceFromChannel(db DB, channel string, source string) error { _, err := db.Exec(` delete from channels where name = ? and source = ? `, channel, source) return err } func GetSourcesInChannel(db DB) (map[string][]string, error) { rows, err := db.Query(` select name, source from channels order by name, source `) if err != nil { return nil, err } defer rows.Close() channelSources := make(map[string][]string) for rows.Next() { var name, source string if err := rows.Scan(&name, &source); err != nil { return nil, err } channelSources[name] = append(channelSources[name], source) } if err := rows.Err(); err != nil { return nil, err } return channelSources, nil } func GetChannelsAndActiveCounts(db DB) (map[string]int, error) { rows, err := db.Query(` select c.name, count(i.id) as count from channels c left outer join items i on c.source = i.source and i.active = 1 group by c.name `) if err != nil { return nil, err } defer rows.Close() channelCounts := make(map[string]int) for rows.Next() { var name string var count int if err := rows.Scan(&name, &count); err != nil { return nil, err } channelCounts[name] = count } if err := rows.Err(); err != nil { return nil, err } return channelCounts, nil }