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 {
|
2024-11-24 21:48:47 -05:00
|
|
|
Type Format `json:"type" form:"type"`
|
|
|
|
SystemID int `json:"systemID" form:"systemID"`
|
|
|
|
Template []byte `json:"template" form:"template" filenameField:"TemplateFileName"`
|
2024-11-24 21:00:34 -05:00
|
|
|
TemplateFileName string
|
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
|
|
|
}
|