Skip to content

Commit fefd536

Browse files
Merge pull request robbiehanson#943 from pwetrifork/muc-light-members-fetching-fix
MUC Light members list in-module storage
2 parents 35a90cf + bfd18bc commit fefd536

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

Extensions/XMPPMUCLight/XMPPRoomLight.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
- (nonnull NSString *)roomname;
2626
- (nonnull NSString *)subject;
27+
- (nonnull NSArray<NSXMLElement*> *)knownMembersList;
2728

2829
- (nonnull instancetype)initWithJID:(nonnull XMPPJID *)roomJID roomname:(nonnull NSString *) roomname;
2930
- (nonnull instancetype)initWithRoomLightStorage:(nullable id <XMPPRoomLightStorage>)storage jid:(nonnull XMPPJID *)aRoomJID roomname:(nonnull NSString *)aRoomname dispatchQueue:(nullable dispatch_queue_t)queue;
@@ -63,7 +64,7 @@
6364
- (void)xmppRoomLight:(nonnull XMPPRoomLight *)sender didAddUsers:(nonnull XMPPIQ*) iqResult;
6465
- (void)xmppRoomLight:(nonnull XMPPRoomLight *)sender didFailToAddUsers:(nonnull XMPPIQ*)iq;
6566

66-
- (void)xmppRoomLight:(nonnull XMPPRoomLight *)sender didFetchMembersList:(nonnull NSArray<NSXMLElement*> *)items;
67+
- (void)xmppRoomLight:(nonnull XMPPRoomLight *)sender didFetchMembersList:(nonnull XMPPIQ *)iqResult;
6768
- (void)xmppRoomLight:(nonnull XMPPRoomLight *)sender didFailToFetchMembersList:(nonnull XMPPIQ *)iq;
6869

6970
- (void)xmppRoomLight:(nonnull XMPPRoomLight *)sender didDestroyRoomLight:(nonnull XMPPIQ*) iqResult;

Extensions/XMPPMUCLight/XMPPRoomLight.m

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
@interface XMPPRoomLight() {
1717
NSString *roomname;
1818
NSString *subject;
19+
NSArray<NSXMLElement*> *knownMembersList;
1920
NSString *configVersion;
2021
NSString *memberListVersion;
2122
}
@@ -41,6 +42,7 @@ - (nonnull instancetype)initWithRoomLightStorage:(nullable id <XMPPRoomLightStor
4142
_domain = aRoomJID.domain;
4243
_roomJID = aRoomJID;
4344
roomname = aRoomname;
45+
knownMembersList = @[];
4446
configVersion = @"";
4547
memberListVersion = @"";
4648
}
@@ -87,6 +89,20 @@ - (nonnull NSString *)subject {
8789
}
8890
}
8991

92+
- (NSArray<NSXMLElement *> *)knownMembersList {
93+
__block NSArray<NSXMLElement *> *result;
94+
dispatch_block_t block = ^{ @autoreleasepool {
95+
result = knownMembersList;
96+
}};
97+
98+
if (dispatch_get_specific(moduleQueueTag))
99+
block();
100+
else
101+
dispatch_sync(moduleQueue, block);
102+
103+
return result;
104+
}
105+
90106
- (nonnull NSString *)configVersion {
91107
@synchronized(subject) {
92108
return [configVersion copy];
@@ -131,6 +147,17 @@ - (void)setSubject:(NSString *)aSubject{
131147
dispatch_async(moduleQueue, block);
132148
}
133149

150+
- (void)setKnownMembersList:(NSArray<NSXMLElement *> *)aMembersList {
151+
dispatch_block_t block = ^{ @autoreleasepool {
152+
knownMembersList = [aMembersList copy];
153+
}};
154+
155+
if (dispatch_get_specific(moduleQueueTag))
156+
block();
157+
else
158+
dispatch_async(moduleQueue, block);
159+
}
160+
134161
- (void)setMemberListVersion:(NSString *)aVersion{
135162
dispatch_block_t block = ^{ @autoreleasepool {
136163
memberListVersion = aVersion;
@@ -368,9 +395,11 @@ - (void)handleFetchMembersListResponse:(XMPPIQ *)iq withInfo:(id <XMPPTrackingIn
368395
}
369396

370397
NSArray *items = [query elementsForName:@"user"];
371-
if (!items) { items = @[]; }
398+
if (items) {
399+
[self setKnownMembersList:items];
400+
}
372401

373-
[multicastDelegate xmppRoomLight:self didFetchMembersList:items];
402+
[multicastDelegate xmppRoomLight:self didFetchMembersList:iq];
374403
}else{
375404
[multicastDelegate xmppRoomLight:self didFailToFetchMembersList:iq];
376405
}

Xcode/Testing-Shared/XMPPRoomLightTests.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,9 @@ - (void)testFetchMemberList{
294294
}];
295295
}
296296

297-
- (void)xmppRoomLight:(XMPPRoomLight *)sender didFetchMembersList:(NSArray *)items {
298-
NSXMLElement *user1 = [items firstObject];
299-
NSXMLElement *user3 = [items lastObject];
297+
- (void)xmppRoomLight:(XMPPRoomLight *)sender didFetchMembersList:(XMPPIQ *)iqResult {
298+
NSXMLElement *user1 = [[sender knownMembersList] firstObject];
299+
NSXMLElement *user3 = [[sender knownMembersList] lastObject];
300300
XCTAssertEqualObjects([user1 attributeForName:@"affiliation"].stringValue, @"owner");
301301
XCTAssertEqualObjects(user1.stringValue, @"[email protected]");
302302
XCTAssertEqualObjects([user3 attributeForName:@"affiliation"].stringValue, @"member");

0 commit comments

Comments
 (0)