@@ -163,6 +163,10 @@ type SendResponse struct {
163
163
Timestamp int64 `json:"timestamp"`
164
164
}
165
165
166
+ type RemoteDeleteResponse struct {
167
+ Timestamp int64 `json:"timestamp"`
168
+ }
169
+
166
170
type About struct {
167
171
SupportedApiVersions []string `json:"versions"`
168
172
BuildNr int `json:"build"`
@@ -2530,3 +2534,78 @@ func (s *SignalClient) RemovePin(number string) error {
2530
2534
}
2531
2535
return nil
2532
2536
}
2537
+
2538
+ func (s * SignalClient ) RemoteDelete (number string , recipient string , timestamp int64 ) (RemoteDeleteResponse , error ) {
2539
+ // see https://github.com/AsamK/signal-cli/blob/master/man/signal-cli.1.adoc#remotedelete
2540
+ var err error
2541
+ var resp RemoteDeleteResponse
2542
+ var rawData string
2543
+
2544
+ recp := recipient
2545
+ isGroup := false
2546
+
2547
+ recipientType , err := getRecipientType (recipient )
2548
+ if err != nil {
2549
+ return resp , err
2550
+ }
2551
+
2552
+ if recipientType == ds .Group {
2553
+ isGroup = true
2554
+ recp , err = ConvertGroupIdToInternalGroupId (recipient )
2555
+ if err != nil {
2556
+ return resp , errors .New ("Invalid group id" )
2557
+ }
2558
+ } else if recipientType != ds .Number && recipientType != ds .Username {
2559
+ return resp , errors .New ("Invalid recipient type" )
2560
+ }
2561
+
2562
+ if s .signalCliMode == JsonRpc {
2563
+ type Request struct {
2564
+ Recipient string `json:"recipient,omitempty"`
2565
+ GroupId string `json:"group-id,omitempty"`
2566
+ Timestamp int64 `json:"target-timestamp"`
2567
+ }
2568
+ request := Request {}
2569
+ if ! isGroup {
2570
+ request .Recipient = recp
2571
+ } else {
2572
+ request .GroupId = recp
2573
+ }
2574
+ request .Timestamp = timestamp
2575
+
2576
+ jsonRpc2Client , err := s .getJsonRpc2Client ()
2577
+ if err != nil {
2578
+ return resp , err
2579
+ }
2580
+ rawData , err = jsonRpc2Client .getRaw ("remoteDelete" , & number , request )
2581
+ if err != nil {
2582
+ return resp , err
2583
+ }
2584
+
2585
+ err = json .Unmarshal ([]byte (rawData ), & resp )
2586
+ if err != nil {
2587
+ return resp , errors .New ("Couldn't process request - invalid signal-cli response" )
2588
+ }
2589
+
2590
+ return resp , err
2591
+ } else {
2592
+ cmd := []string {
2593
+ "--config" , s .signalCliConfig ,
2594
+ "-a" , number ,
2595
+ "remoteDelete" ,
2596
+ }
2597
+ if ! isGroup {
2598
+ cmd = append (cmd , recp )
2599
+ } else {
2600
+ cmd = append (cmd , []string {"-g" , recp }... )
2601
+ }
2602
+ cmd = append (cmd , []string {"-t" , strconv .FormatInt (timestamp , 10 )}... )
2603
+ rawData , err = s .cliClient .Execute (true , cmd , "" )
2604
+ if err != nil {
2605
+ return resp , err
2606
+ }
2607
+
2608
+ resp .Timestamp , err = strconv .ParseInt (strings .TrimSuffix (rawData , "\n " ), 10 , 64 )
2609
+ return resp , err
2610
+ }
2611
+ }
0 commit comments