intake/core/channel.go

79 lines
1.7 KiB
Go
Raw Normal View History

2025-02-01 01:23:41 +00:00
package core
import "time"
2025-02-01 01:23:41 +00:00
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
union
select '' as name, sources.name as source
from sources
left outer join channels on channels.source = sources.name
where channels.name is null
2025-02-01 01:23:41 +00:00
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
}
2025-02-01 02:03:30 +00:00
func GetChannelsAndActiveCounts(db DB) (map[string]int, error) {
now := int(time.Now().Unix()) // TODO pass this value in
2025-02-01 02:03:30 +00:00
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 <> 0
and (i.tts = 0 or i.created + i.tts < ?)
2025-02-01 02:03:30 +00:00
group by c.name
`, now)
2025-02-01 02:03:30 +00:00
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
}