@@ -90,19 +90,9 @@ func (s *Sharing) RevokeGroup(inst *instance.Instance, index int) error {
9090 if ! inGroup {
9191 continue
9292 }
93- if len (m .Groups ) == 1 {
94- s .Members [i ].Groups = nil
95- } else {
96- var groups []int
97- for _ , idx := range m .Groups {
98- if idx != index {
99- groups = append (groups , idx )
100- }
101- }
102- s .Members [i ].Groups = groups
103- }
93+ removeGroupFromMember (& s .Members [i ], index )
10494 if m .OnlyInGroups && len (s .Members [i ].Groups ) == 0 {
105- if err := s .RevokeRecipient (inst , i ); err != nil {
95+ if err := s .revokeRecipientAfterRemovingGroup (inst , i , index ); err != nil {
10696 errm = multierror .Append (errm , err )
10797 }
10898 }
@@ -304,6 +294,16 @@ func addGroupToMember(member *Member, groupIndex int) bool {
304294 return true
305295}
306296
297+ func removeGroupFromMember (member * Member , groupIndex int ) {
298+ var groups []int
299+ for _ , index := range member .Groups {
300+ if index != groupIndex {
301+ groups = append (groups , index )
302+ }
303+ }
304+ member .Groups = groups
305+ }
306+
307307func (s * Sharing ) contactIsMemberOfGroup (groupIndex int , c * contact.Contact ) bool {
308308 var email string
309309 if addr , err := c .ToMailAddress (); err == nil {
@@ -354,16 +354,10 @@ func (s *Sharing) RemoveMemberFromGroup(inst *instance.Instance, groupIndex int,
354354 continue
355355 }
356356
357- var groups []int
358- for _ , idx := range m .Groups {
359- if idx != groupIndex {
360- groups = append (groups , idx )
361- }
362- }
363- s .Members [i ].Groups = groups
357+ removeGroupFromMember (& s .Members [i ], groupIndex )
364358
365359 if m .OnlyInGroups && len (s .Members [i ].Groups ) == 0 {
366- return s .RevokeRecipient (inst , i )
360+ return s .revokeRecipientAfterRemovingGroup (inst , i , groupIndex )
367361 } else {
368362 return couchdb .UpdateDoc (inst , s )
369363 }
@@ -425,16 +419,10 @@ func (s *Sharing) SendRemoveMemberFromGroup(inst *instance.Instance, groupIndex,
425419}
426420
427421func (s * Sharing ) DelegatedRemoveMemberFromGroup (inst * instance.Instance , groupIndex , memberIndex int ) error {
428- var groups []int
429- for _ , idx := range s .Members [memberIndex ].Groups {
430- if idx != groupIndex {
431- groups = append (groups , idx )
432- }
433- }
434- s .Members [memberIndex ].Groups = groups
422+ removeGroupFromMember (& s .Members [memberIndex ], groupIndex )
435423
436424 if s .Members [memberIndex ].OnlyInGroups && len (s .Members [memberIndex ].Groups ) == 0 {
437- return s .RevokeRecipient (inst , memberIndex )
425+ return s .revokeRecipientAfterRemovingGroup (inst , memberIndex , groupIndex )
438426 } else {
439427 return couchdb .UpdateDoc (inst , s )
440428 }
0 commit comments