@@ -1282,21 +1282,80 @@ func (s *SignalClient) QuitGroup(number string, groupId string) error {
12821282 return err
12831283}
12841284
1285- func (s * SignalClient ) UpdateGroup (number string , groupId string ) error {
1285+ func (s * SignalClient ) UpdateGroup (number string , groupId string , base64Avatar * string , groupDescription * string ) error {
12861286 var err error
1287+ var avatarTmpPath string = ""
1288+ if base64Avatar != nil {
1289+ u , err := uuid .NewV4 ()
1290+ if err != nil {
1291+ return err
1292+ }
1293+
1294+ avatarBytes , err := base64 .StdEncoding .DecodeString (* base64Avatar )
1295+ if err != nil {
1296+ return errors .New ("Couldn't decode base64 encoded avatar: " + err .Error ())
1297+ }
1298+
1299+ fType , err := filetype .Get (avatarBytes )
1300+ if err != nil {
1301+ return err
1302+ }
1303+
1304+ avatarTmpPath = s .avatarTmpDir + u .String () + "." + fType .Extension
1305+
1306+ f , err := os .Create (avatarTmpPath )
1307+ if err != nil {
1308+ return err
1309+ }
1310+ defer f .Close ()
1311+
1312+ if _ , err := f .Write (avatarBytes ); err != nil {
1313+ cleanupTmpFiles ([]string {avatarTmpPath })
1314+ return err
1315+ }
1316+ if err := f .Sync (); err != nil {
1317+ cleanupTmpFiles ([]string {avatarTmpPath })
1318+ return err
1319+ }
1320+ f .Close ()
1321+ }
1322+
12871323 if s .signalCliMode == JsonRpc {
12881324 type Request struct {
1289- GroupId string `json:"groupId"`
1325+ GroupId string `json:"groupId"`
1326+ Avatar string `json:"avatar,omitempty"`
1327+ Description * string `json:"description,omitempty"`
12901328 }
12911329 request := Request {GroupId : groupId }
1330+
1331+ if base64Avatar != nil {
1332+ request .Avatar = avatarTmpPath
1333+ }
1334+
1335+ request .Description = groupDescription
1336+
1337+
12921338 jsonRpc2Client , err := s .getJsonRpc2Client (number )
12931339 if err != nil {
12941340 return err
12951341 }
12961342 _ , err = jsonRpc2Client .getRaw ("updateGroup" , request )
12971343 } else {
1298- _ , err = s .cliClient .Execute (true , []string {"--config" , s .signalCliConfig , "-a" , number , "updateGroup" , "-g" , groupId }, "" )
1344+ cmd := []string {"--config" , s .signalCliConfig , "-a" , number , "updateGroup" , "-g" , groupId }
1345+ if base64Avatar != nil {
1346+ cmd = append (cmd , []string {"-a" , avatarTmpPath }... )
1347+ }
1348+
1349+ if groupDescription != nil {
1350+ cmd = append (cmd , []string {"-d" , * groupDescription }... )
1351+ }
1352+ _ , err = s .cliClient .Execute (true , cmd , "" )
12991353 }
1354+
1355+ if avatarTmpPath != "" {
1356+ cleanupTmpFiles ([]string {avatarTmpPath })
1357+ }
1358+
13001359 return err
13011360}
13021361
0 commit comments