2025-02-01 01:23:41 +00:00
|
|
|
package core
|
|
|
|
|
2025-02-10 21:54:48 +00:00
|
|
|
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
|
2025-02-21 15:37:18 +00:00
|
|
|
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) {
|
2025-02-10 21:54:48 +00:00
|
|
|
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
|
2025-02-10 21:54:48 +00:00
|
|
|
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
|
2025-02-10 21:54:48 +00:00
|
|
|
`, 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
|
|
|
|
}
|