@@ -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