stillbox/pkg/talkgroups/xport/export.go

55 lines
1.1 KiB
Go
Raw Normal View History

2024-11-21 13:23:21 -05:00
package xport
import (
"context"
"io"
"dynatron.me/x/stillbox/pkg/talkgroups"
"dynatron.me/x/stillbox/pkg/talkgroups/filter"
"dynatron.me/x/stillbox/pkg/talkgroups/tgstore"
"dynatron.me/x/stillbox/pkg/talkgroups/xport/sdrtrunk"
)
type Exporter interface {
2024-11-21 22:25:25 -05:00
ExportTalkgroups(ctx context.Context, w io.Writer, tgs []*talkgroups.Talkgroup, tmpl []byte) error
2024-11-21 13:23:21 -05:00
}
type ExportJob struct {
Type Format `json:"type"`
SystemID int `json:"systemID"`
2024-11-21 22:25:25 -05:00
Template []byte `json:"template"`
2024-11-21 13:23:21 -05:00
filter.TalkgroupFilter
Exporter
}
func (ej *ExportJob) Export(ctx context.Context, w io.Writer) error {
var tgs []*talkgroups.Talkgroup
var err error
tgst := tgstore.FromCtx(ctx)
if ej.TalkgroupFilter.IsEmpty() {
tgs, err = tgst.SystemTGs(ctx, int32(ej.SystemID))
if err != nil {
return err
}
} else {
ids, err := ej.TalkgroupFilter.TGs(ctx)
if err != nil {
return err
}
tgs, err = tgst.TGs(ctx, ids)
if err != nil {
return err
}
}
switch ej.Type {
case FormatSDRTrunk:
ej.Exporter = sdrtrunk.New()
default:
return ErrBadType
}
2024-11-21 22:25:25 -05:00
return ej.ExportTalkgroups(ctx, w, tgs, ej.Template)
2024-11-21 13:23:21 -05:00
}