Make moderation permission both group and server specific

Also fix dependence on self and app delegate issue
pull/43/head
Niels Andriesse 6 years ago
parent a1c0db61ec
commit 9283012988

@ -70,7 +70,6 @@ static NSTimeInterval launchStartedAt;
@property (nonatomic) LKGroupChatPoller *lokiPublicChatPoller;
@property (nonatomic) LKRSSFeedPoller *lokiNewsFeedPoller;
@property (nonatomic) LKRSSFeedPoller *lokiMessengerUpdatesFeedPoller;
@property (nonatomic) LKGroupChatModPoller *lokiModPoller;
@end
@ -1571,7 +1570,6 @@ static NSTimeInterval launchStartedAt;
- (void)createGroupChatPollersIfNeeded
{
if (self.lokiPublicChatPoller == nil) { self.lokiPublicChatPoller = [[LKGroupChatPoller alloc] initForGroup:self.lokiPublicChat]; }
if (self.lokiModPoller == nil) { self.lokiModPoller = [[LKGroupChatModPoller alloc] initForGroup:self.lokiPublicChat]; }
}
- (void)createRSSFeedPollersIfNeeded
@ -1584,7 +1582,6 @@ static NSTimeInterval launchStartedAt;
{
[self createGroupChatPollersIfNeeded];
[self.lokiPublicChatPoller startIfNeeded];
[self.lokiModPoller startIfNeeded];
}
- (void)startRSSFeedPollersIfNeeded

@ -127,10 +127,9 @@ public final class LokiGroupChatPoller : NSObject {
private func pollForModerationPermission() {
let group = self.group
let _ = LokiGroupChatAPI.isCurrentUserMod(on: group.server).done { [weak self] isModerator in
guard let self = self else { return }
self.storage.dbReadWriteConnection.readWrite { transaction in
self.storage.setIsModerator(isModerator, for: group.server, transaction: transaction)
let _ = LokiGroupChatAPI.isCurrentUserMod(on: group.server).done { [storage] isModerator in
storage.dbReadWriteConnection.readWrite { transaction in
storage.setIsModerator(isModerator, for: UInt(group.serverID), on: group.server, in: transaction)
}
}
}

@ -1255,7 +1255,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
if (interationType == OWSInteractionType_IncomingMessage) {
__block BOOL isModerator;
[[self primaryStorage].dbReadWriteConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
isModerator = [[self primaryStorage] getIsModeratorForServer:LKGroupChatAPI.publicChatServer transaction:transaction];
isModerator = [[self primaryStorage] isModeratorForGroup:LKGroupChatAPI.publicChatServerID onServer:LKGroupChatAPI.publicChatServer in:transaction];
}];
if (!isModerator) return false;
}

@ -99,11 +99,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)setIDForMessageWithServerID:(NSUInteger)serverID to:(NSString *)messageID in:(YapDatabaseReadWriteTransaction *)transaction;
- (NSString *_Nullable)getIDForMessageWithServerID:(NSUInteger)serverID in:(YapDatabaseReadTransaction *)transaction;
- (void)setIsModerator:(BOOL)isModerator forServer:(NSString *)server transaction:(YapDatabaseReadWriteTransaction *)transaction
NS_SWIFT_NAME(setIsModerator(_:for:transaction:));
- (BOOL)getIsModeratorForServer:(NSString *)server transaction:(YapDatabaseReadTransaction *)transaction
NS_SWIFT_NAME(getIsModerator(forServer:transaction:));
- (void)setIsModerator:(BOOL)isModerator forGroup:(NSUInteger)group onServer:(NSString *)server in:(YapDatabaseReadWriteTransaction *)transaction NS_SWIFT_NAME(setIsModerator(_:for:on:in:));
- (BOOL)isModeratorForGroup:(NSUInteger)group onServer:(NSString *)server in:(YapDatabaseReadTransaction *)transaction NS_SWIFT_NAME(isModerator(for:on:in:));
@end

@ -19,7 +19,7 @@
#define LKReceivedMessageHashesKey @"LKReceivedMessageHashesKey"
#define LKReceivedMessageHashesCollection @"LKReceivedMessageHashesCollection"
#define LKMessageIDCollection @"LKMessageIDCollection"
#define LKModeratorCollection @"LKModerationCollection"
#define LKModerationPermissionCollection @"LKModerationPermissionCollection"
@implementation OWSPrimaryStorage (Loki)
@ -174,12 +174,14 @@
return [transaction objectForKey:key inCollection:LKMessageIDCollection];
}
- (void)setIsModerator:(BOOL)isModerator forServer:(NSString *)server transaction:(YapDatabaseReadWriteTransaction *)transaction {
[transaction setBool:isModerator forKey:server inCollection:LKModeratorCollection];
- (void)setIsModerator:(BOOL)isModerator forGroup:(NSUInteger)group onServer:(NSString *)server in:(YapDatabaseReadWriteTransaction *)transaction {
NSString *key = [NSString stringWithFormat:@"%@.%@", server, @(group)];
[transaction setBool:isModerator forKey:key inCollection:LKModerationPermissionCollection];
}
- (BOOL)getIsModeratorForServer:(NSString *)server transaction:(YapDatabaseReadTransaction *)transaction {
return [transaction boolForKey:server inCollection:LKModeratorCollection defaultValue:false];
- (BOOL)isModeratorForGroup:(NSUInteger)group onServer:(NSString *)server in:(YapDatabaseReadTransaction *)transaction NS_SWIFT_NAME(isModerator(for:on:in:)) {
NSString *key = [NSString stringWithFormat:@"%@.%@", server, @(group)];
return [transaction boolForKey:key inCollection:LKModerationPermissionCollection defaultValue:false];
}
@end

Loading…
Cancel
Save