Skip to content

Commit d0e70d0

Browse files
author
xeals
committed
Support CSV MMS output
Closes #5. Closes #8. Also clean up types/raw a fair bit because it ended up not being used.
1 parent 9561bbd commit d0e70d0

2 files changed

Lines changed: 330 additions & 201 deletions

File tree

cmd/format.go

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ var Format = cli.Command{
3333
Name: "log, l",
3434
Usage: "write logging output to `FILE`",
3535
},
36+
cli.StringFlag{
37+
Name: "message, m",
38+
Usage: "format `TYPE` messages",
39+
Value: "sms",
40+
},
3641
cli.StringFlag{
3742
Name: "password, p",
3843
Usage: "use `PASS` as password for backup file",
@@ -64,7 +69,7 @@ var Format = cli.Command{
6469

6570
switch strings.ToLower(c.String("format")) {
6671
case "csv":
67-
err = CSV(bf, out)
72+
err = CSV(bf, strings.ToLower(c.String("message")), out)
6873
case "xml":
6974
err = XML(bf, out)
7075
case "json":
@@ -86,8 +91,8 @@ func JSON(bf *types.BackupFile, out io.Writer) error {
8691
return nil
8792
}
8893

89-
// CSV <undefined>
90-
func CSV(bf *types.BackupFile, out io.Writer) error {
94+
// CSV dumps the raw backup data into a comma-separated value format.
95+
func CSV(bf *types.BackupFile, message string, out io.Writer) error {
9196
ss := make([][]string, 0)
9297
for {
9398
f, err := bf.Frame()
@@ -104,38 +109,21 @@ func CSV(bf *types.BackupFile, out io.Writer) error {
104109
}
105110

106111
if stmt := f.GetStatement(); stmt != nil {
107-
if strings.HasPrefix(*stmt.Statement, "INSERT INTO sms") {
112+
if (*stmt.Statement)[:15] == "INSERT INTO "+message {
108113
ss = append(ss, types.StatementToStringArray(stmt))
109114
}
110115
}
111116
}
112117

113118
w := csv.NewWriter(out)
119+
var headers []string
120+
if message == "mms" {
121+
headers = types.MMSCSVHeaders
122+
} else {
123+
headers = types.SMSCSVHeaders
124+
}
114125

115-
if err := w.Write([]string{
116-
"ID",
117-
"THREAD_ID",
118-
"ADDRESS",
119-
"ADDRESS_DEVICE_ID",
120-
"PERSON",
121-
"DATE_RECEIVED",
122-
"DATE_SENT",
123-
"PROTOCOL",
124-
"READ",
125-
"STATUS",
126-
"TYPE",
127-
"REPLY_PATH_PRESENT",
128-
"DELIVERY_RECEIPT_COUNT",
129-
"SUBJECT",
130-
"BODY",
131-
"MISMATCHED_IDENTITIES",
132-
"SERVICE_CENTER",
133-
"SUBSCRIPTION_ID",
134-
"EXPIRES_IN",
135-
"EXPIRE_STARTED",
136-
"NOTIFIED",
137-
"READ_RECEIPT_COUNT",
138-
}); err != nil {
126+
if err := w.Write(headers); err != nil {
139127
return errors.Wrap(err, "unable to write CSV headers")
140128
}
141129

0 commit comments

Comments
 (0)