Skip to content

Commit

Permalink
feat(export): output available fields with - filter flag
Browse files Browse the repository at this point in the history
  • Loading branch information
iyear committed May 22, 2023
1 parent 6c983fb commit d0c9aa2
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 75 deletions.
16 changes: 14 additions & 2 deletions app/chat/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,19 @@ func Export(ctx context.Context, opts *ExportOptions) error {
return err
}

// compile filter
// only output available fields
if opts.Filter == "-" {
fg := texpr.NewFieldsGetter(nil)

fields, err := fg.Walk(&message{})
if err != nil {
return fmt.Errorf("failed to walk fields: %w", err)
}

fmt.Println(fg.Sprint(fields, true))
return nil
}

filter, err := texpr.Compile(opts.Filter)
if err != nil {
return fmt.Errorf("failed to compile filter: %w", err)
Expand Down Expand Up @@ -143,7 +155,7 @@ func Export(ctx context.Context, opts *ExportOptions) error {
continue
}

b, err := texpr.Run(filter, texpr.CovertMessage(m))
b, err := texpr.Run(filter, covertMessage(m))
if err != nil {
return fmt.Errorf("failed to run filter: %w", err)
}
Expand Down
53 changes: 53 additions & 0 deletions app/chat/message.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package chat

import (
"github.com/gotd/td/tg"
"github.com/iyear/tdl/pkg/tmedia"
"github.com/iyear/tdl/pkg/utils"
)

type message struct {
Mentioned bool `comment:"Whether we were mentioned in this message"`
Silent bool `comment:"Whether this is a silent message (no notification triggered)"`
FromScheduled bool `comment:"Whether this is a scheduled message"`
Pinned bool `comment:"Whether this message is pinned"`
ID int `comment:"ID of the message"`
FromID int64 `comment:"ID of the sender of the message"`
Date int `comment:"Date of the message"`
Message string `comment:"The message"`
Media messageMedia `comment:"Media attachment"`
Views int `comment:"View count"`
Forwards int `comment:"Forward count"`
}

type messageMedia struct {
Name string `comment:"File name"`
Size int64 `comment:"File size. Unit: Byte"`
DC int `comment:"DC ID"`
}

func covertMessage(msg *tg.Message) (m *message) {
m = &message{}

m.Mentioned = msg.Mentioned
m.Silent = msg.Silent
m.FromScheduled = msg.FromScheduled
m.Pinned = msg.Pinned
m.ID = msg.ID
m.FromID = utils.Telegram.GetPeerID(msg.FromID)
m.Date = msg.Date
m.Message = msg.Message

if media, ok := tmedia.GetMedia(msg); ok {
m.Media = messageMedia{
Name: media.Name,
Size: media.Size,
DC: media.DC,
}
}

m.Views = msg.Views
m.Forwards = msg.Forwards

return m
}
11 changes: 6 additions & 5 deletions pkg/texpr/expr_test.go → app/chat/message_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package texpr
package chat

import (
"github.com/iyear/tdl/pkg/texpr"
"testing"
)

func TestMessageExpr(t *testing.T) {
msg := &Message{
msg := &message{
Mentioned: true,
Silent: false,
FromScheduled: true,
Expand All @@ -14,7 +15,7 @@ func TestMessageExpr(t *testing.T) {
FromID: 200,
Date: 1684651590,
Message: "Hello World",
Media: MessageMedia{Size: 10240, Name: "foo.zip", DC: 3},
Media: messageMedia{Size: 10240, Name: "foo.zip", DC: 3},
Views: 200,
Forwards: 100,
}
Expand Down Expand Up @@ -68,12 +69,12 @@ func TestMessageExpr(t *testing.T) {

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
expr, err := Compile(test.expr)
expr, err := texpr.Compile(test.expr)
if err != nil {
t.Fatal(err)
}

got, err := Run(expr, msg)
got, err := texpr.Run(expr, msg)
if err != nil {
t.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/chat.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func NewChatExport() *cobra.Command {
cmd.Flags().IntVar(&opts.Thread, "reply", 0, "specify channel post id")

cmd.Flags().IntSliceVarP(&opts.Input, input, "i", []int{}, "input data, depends on export type")
cmd.Flags().StringVarP(&opts.Filter, "filter", "f", "true", "filter messages by expression, see https://expr.medv.io/docs/Language-Definition for grammar")
cmd.Flags().StringVarP(&opts.Filter, "filter", "f", "true", "filter messages by expression, defaults to match all messages. Specify `-` to see available fields")
cmd.Flags().StringVarP(&opts.Output, "output", "o", "tdl-export.json", "output JSON file path")
cmd.Flags().BoolVar(&opts.WithContent, "with-content", false, "export with message content")

Expand Down
67 changes: 0 additions & 67 deletions pkg/texpr/message.go

This file was deleted.

0 comments on commit d0c9aa2

Please sign in to comment.