From 2d3e54463bb1c17aeac455a648c2dd87d0345f2a Mon Sep 17 00:00:00 2001 From: ylecollen Date: Tue, 23 Dec 2014 18:51:49 +0100 Subject: [PATCH] First implementation (incomplete) --- .../matrixConsole.xcodeproj/project.pbxproj | 12 + .../matrixConsole/Base.lproj/Main.storyboard | 104 +++++ .../matrixConsole/View/MemberActionsCell.h | 27 ++ .../matrixConsole/View/MemberActionsCell.m | 42 +++ .../ViewController/MemberViewController.h | 42 +++ .../ViewController/MemberViewController.m | 356 ++++++++++++++++++ .../ViewController/RoomViewController.m | 60 +-- 7 files changed, 598 insertions(+), 45 deletions(-) create mode 100644 matrixConsole/matrixConsole/View/MemberActionsCell.h create mode 100644 matrixConsole/matrixConsole/View/MemberActionsCell.m create mode 100644 matrixConsole/matrixConsole/ViewController/MemberViewController.h create mode 100644 matrixConsole/matrixConsole/ViewController/MemberViewController.m diff --git a/matrixConsole/matrixConsole.xcodeproj/project.pbxproj b/matrixConsole/matrixConsole.xcodeproj/project.pbxproj index 91ca460d1..ebf86e1e7 100644 --- a/matrixConsole/matrixConsole.xcodeproj/project.pbxproj +++ b/matrixConsole/matrixConsole.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 71D2E4EC1A49814B000DE015 /* MemberActionsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 71D2E4EB1A49814B000DE015 /* MemberActionsCell.m */; }; + 71DB9DC11A495B6400504A09 /* MemberViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71DB9DC01A495B6400504A09 /* MemberViewController.m */; }; D648B86A591308736E2D4078 /* libPods-matrixConsole.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8141B1E2401FFCC3C5B99234 /* libPods-matrixConsole.a */; }; F00B5DB91A1B9BCE00EA1C8D /* CustomImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = F00B5DB81A1B9BCE00EA1C8D /* CustomImageView.m */; }; F013EEEC1A40D437002BB093 /* matrixConsole-Defaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = F013EEEB1A40D437002BB093 /* matrixConsole-Defaults.plist */; }; @@ -62,6 +64,10 @@ /* Begin PBXFileReference section */ 13057A57E74FD5504196F47F /* Pods-matrixConsole.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-matrixConsole.release.xcconfig"; path = "Pods/Target Support Files/Pods-matrixConsole/Pods-matrixConsole.release.xcconfig"; sourceTree = ""; }; + 71D2E4EA1A49814B000DE015 /* MemberActionsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemberActionsCell.h; sourceTree = ""; }; + 71D2E4EB1A49814B000DE015 /* MemberActionsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MemberActionsCell.m; sourceTree = ""; }; + 71DB9DBF1A495B6400504A09 /* MemberViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemberViewController.h; sourceTree = ""; }; + 71DB9DC01A495B6400504A09 /* MemberViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MemberViewController.m; sourceTree = ""; }; 8141B1E2401FFCC3C5B99234 /* libPods-matrixConsole.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-matrixConsole.a"; sourceTree = BUILT_PRODUCTS_DIR; }; B7EC7E45C718BF2BBCE0CF48 /* Pods-matrixConsole.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-matrixConsole.debug.xcconfig"; path = "Pods/Target Support Files/Pods-matrixConsole/Pods-matrixConsole.debug.xcconfig"; sourceTree = ""; }; F00B5DB71A1B9BCE00EA1C8D /* CustomImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomImageView.h; sourceTree = ""; }; @@ -197,6 +203,8 @@ F03EF5ED19F171EB00A0EE52 /* LoginViewController.m */, F03EF5EE19F171EB00A0EE52 /* MasterTabBarController.h */, F03EF5EF19F171EB00A0EE52 /* MasterTabBarController.m */, + 71DB9DBF1A495B6400504A09 /* MemberViewController.h */, + 71DB9DC01A495B6400504A09 /* MemberViewController.m */, F03EF5F019F171EB00A0EE52 /* RecentsViewController.h */, F03EF5F119F171EB00A0EE52 /* RecentsViewController.m */, F03EF5F219F171EB00A0EE52 /* RoomViewController.h */, @@ -212,6 +220,8 @@ children = ( F00B5DB71A1B9BCE00EA1C8D /* CustomImageView.h */, F00B5DB81A1B9BCE00EA1C8D /* CustomImageView.m */, + 71D2E4EA1A49814B000DE015 /* MemberActionsCell.h */, + 71D2E4EB1A49814B000DE015 /* MemberActionsCell.m */, F0E84D3E1A1F9AEC005F2E42 /* RecentsTableViewCell.h */, F0E84D3F1A1F9AEC005F2E42 /* RecentsTableViewCell.m */, F02D707419F1DC9E007B47D3 /* RoomMemberTableCell.h */, @@ -471,6 +481,7 @@ F03EF5FA19F171EB00A0EE52 /* RoomViewController.m in Sources */, F03EF5F819F171EB00A0EE52 /* MasterTabBarController.m in Sources */, F03EF5F619F171EB00A0EE52 /* HomeViewController.m in Sources */, + 71DB9DC11A495B6400504A09 /* MemberViewController.m in Sources */, F0D942F61A31F3A300826CC1 /* RecentRoom.m in Sources */, F03EF60219F19E7C00A0EE52 /* MediaManager.m in Sources */, F03EF5F919F171EB00A0EE52 /* RecentsViewController.m in Sources */, @@ -483,6 +494,7 @@ F0D3C30C1A011EF10000D49E /* AppSettings.m in Sources */, F03EF5F719F171EB00A0EE52 /* LoginViewController.m in Sources */, F0D3C30F1A01330F0000D49E /* SettingsTableViewCell.m in Sources */, + 71D2E4EC1A49814B000DE015 /* MemberActionsCell.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/matrixConsole/matrixConsole/Base.lproj/Main.storyboard b/matrixConsole/matrixConsole/Base.lproj/Main.storyboard index 0d246afba..82c250b5f 100644 --- a/matrixConsole/matrixConsole/Base.lproj/Main.storyboard +++ b/matrixConsole/matrixConsole/Base.lproj/Main.storyboard @@ -5,6 +5,7 @@ + @@ -345,6 +346,7 @@ + @@ -445,6 +447,108 @@ + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/matrixConsole/matrixConsole/View/MemberActionsCell.h b/matrixConsole/matrixConsole/View/MemberActionsCell.h new file mode 100644 index 000000000..6d173b8b2 --- /dev/null +++ b/matrixConsole/matrixConsole/View/MemberActionsCell.h @@ -0,0 +1,27 @@ +/* + Copyright 2014 OpenMarket Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +@interface MemberActionsCell : UITableViewCell +@property (weak, nonatomic) IBOutlet UIButton *rightButton; +@property (weak, nonatomic) IBOutlet UIButton *leftButton; + + +-(void) setLeftButtonText:(NSString*)text; +-(void) setRightButtonText:(NSString*)text; +@end + diff --git a/matrixConsole/matrixConsole/View/MemberActionsCell.m b/matrixConsole/matrixConsole/View/MemberActionsCell.m new file mode 100644 index 000000000..1e4fc1763 --- /dev/null +++ b/matrixConsole/matrixConsole/View/MemberActionsCell.m @@ -0,0 +1,42 @@ +/* + Copyright 2014 OpenMarket Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "MemberActionsCell.h" + +@implementation MemberActionsCell + +- (void)initButton:(UIButton*)button withText:(NSString*)text { + + button.hidden = (text.length == 0); + + button.layer.borderColor = [UIColor blackColor].CGColor; + button.layer.borderWidth = 1; + button.layer.cornerRadius = 5; + + [button setTitle:text forState:UIControlStateNormal]; + [button setTitle:text forState:UIControlStateHighlighted]; + +} + +- (void) setLeftButtonText:(NSString*)text { + [self initButton:self.leftButton withText:text]; +} + +- (void) setRightButtonText:(NSString*)text { + [self initButton:self.rightButton withText:text]; +} + +@end diff --git a/matrixConsole/matrixConsole/ViewController/MemberViewController.h b/matrixConsole/matrixConsole/ViewController/MemberViewController.h new file mode 100644 index 000000000..cb275fe7d --- /dev/null +++ b/matrixConsole/matrixConsole/ViewController/MemberViewController.h @@ -0,0 +1,42 @@ +/* + Copyright 2014 OpenMarket Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +#import "MatrixHandler.h" + +@interface MemberViewController : UITableViewController { + NSMutableArray* buttonsTitles; + + UIView* pendingRequestMask; +} + + +@property (strong, nonatomic) IBOutlet UITableView *tableView; + +@property (weak, nonatomic) IBOutlet UIButton *memberThumbnailButton; +@property (weak, nonatomic) IBOutlet UITextView *roomMemberMID; + +- (IBAction)onButtonToggle:(id)sender; + + +@property (strong, nonatomic) MXRoomMember *roomMember; +@property (strong, nonatomic) MXRoom *mxRoom; + + + +@end + diff --git a/matrixConsole/matrixConsole/ViewController/MemberViewController.m b/matrixConsole/matrixConsole/ViewController/MemberViewController.m new file mode 100644 index 000000000..68b516e43 --- /dev/null +++ b/matrixConsole/matrixConsole/ViewController/MemberViewController.m @@ -0,0 +1,356 @@ +/* + Copyright 2014 OpenMarket Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "MemberViewController.h" + +#import "AppDelegate.h" +#import "MemberActionsCell.h" +#import "MediaManager.h" + +@interface MemberViewController () { + id imageLoader; + id membersListener; +} + +@property (strong, nonatomic) CustomAlert *actionMenu; + +@end + +@implementation MemberViewController +@synthesize mxRoom; + +- (void)viewDidLoad { + [super viewDidLoad]; + + // remove the line separator color + self.tableView.separatorColor = [UIColor clearColor]; + self.tableView.rowHeight = 44; + self.tableView.allowsSelection = NO; + + buttonsTitles = [[NSMutableArray alloc] init]; + + // ignore useless update + if (_roomMember) { + [self updateMemberInfo]; + } +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + MatrixHandler *mxHandler = [MatrixHandler sharedHandler]; + + NSArray *mxMembersEvents = @[ + kMXEventTypeStringRoomMember, + kMXEventTypeStringRoomPowerLevels + ]; + + membersListener = [mxHandler.mxSession listenToEventsOfTypes:mxMembersEvents onEvent:^(MXEvent *event, MXEventDirection direction, id customObject) { + // consider only live event + if (direction == MXEventDirectionForwards) { + // Check the room Id (if any) + if (event.roomId && [event.roomId isEqualToString:mxRoom.state.roomId] == NO) { + // This event does not concern the current room members + return; + } + + // Hide potential action sheet + if (self.actionMenu) { + [self.actionMenu dismiss:NO]; + self.actionMenu = nil; + } + // Refresh members list + [self updateMemberInfo]; + [self.tableView reloadData]; + } + }]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + + if (imageLoader) { + [MediaManager cancel:imageLoader]; + imageLoader = nil; + } + + if (membersListener) { + MatrixHandler *mxHandler = [MatrixHandler sharedHandler]; + [mxHandler.mxSession removeListener:membersListener]; + membersListener = nil; + } +} + +- (void) updateMemberInfo { + self.title = _roomMember.displayname; + + // set the thumbnail info + [[self.memberThumbnailButton imageView] setContentMode: UIViewContentModeScaleAspectFill]; + [[self.memberThumbnailButton imageView] setClipsToBounds:YES]; + + + imageLoader = [MediaManager loadPicture:_roomMember.avatarUrl + success:^(UIImage *image) { + [self.memberThumbnailButton setImage:image forState:UIControlStateNormal]; + [self.memberThumbnailButton setImage:image forState:UIControlStateHighlighted]; + } + failure:^(NSError *error) { + NSLog(@"Failed to download image (%@): %@", _roomMember.avatarUrl, error); + }]; + + self.roomMemberMID.text = _roomMember.userId; +} + +- (void)setRoomMember:(MXRoomMember*) aRoomMember { + // ignore useless update + if (![self.roomMember.userId isEqualToString:aRoomMember.userId]) { + _roomMember = aRoomMember; + } +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + MatrixHandler *mxHandler = [MatrixHandler sharedHandler]; + + // Check user's power level before allowing an action (kick, ban, ...) + MXRoomPowerLevels *powerLevels = [mxRoom.state powerLevels]; + NSUInteger memberPowerLevel = [powerLevels powerLevelOfUserWithUserID:_roomMember.userId]; + NSUInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:mxHandler.userId]; + + [buttonsTitles removeAllObjects]; + + // Consider the case of the user himself + if ([_roomMember.userId isEqualToString:mxHandler.userId]) { + + [buttonsTitles addObject:@"Leave"]; + + if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomPowerLevels]) { + [buttonsTitles addObject:@"Set power level"]; + } + } else { + // Consider membership of the selected member + switch (_roomMember.membership) { + case MXMembershipInvite: + case MXMembershipJoin: { + // Check conditions to be able to kick someone + if (oneSelfPowerLevel >= [powerLevels kick] && oneSelfPowerLevel >= memberPowerLevel) { + [buttonsTitles addObject:@"Kick"]; + } + // Check conditions to be able to ban someone + if (oneSelfPowerLevel >= [powerLevels ban] && oneSelfPowerLevel >= memberPowerLevel) { + [buttonsTitles addObject:@"Ban"]; + } + break; + } + case MXMembershipLeave: { + // Check conditions to be able to invite someone + if (oneSelfPowerLevel >= [powerLevels invite]) { + [buttonsTitles addObject:@"Invite"]; + } + // Check conditions to be able to ban someone + if (oneSelfPowerLevel >= [powerLevels ban] && oneSelfPowerLevel >= memberPowerLevel) { + [buttonsTitles addObject:@"Ban"]; + } + break; + } + case MXMembershipBan: { + // Check conditions to be able to unban someone + if (oneSelfPowerLevel >= [powerLevels ban] && oneSelfPowerLevel >= memberPowerLevel) { + [buttonsTitles addObject:@"Ban"]; + } + break; + } + default: { + break; + } + } + + // update power level + if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomPowerLevels]) { + [buttonsTitles addObject:@"Set power level"]; + } + + [buttonsTitles addObject:@"Start chat"]; + } + + return (buttonsTitles.count + 1) / 2; +} + +- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + + if (self.tableView == aTableView) { + NSInteger row = indexPath.row; + MemberActionsCell* memberActionsCell = (MemberActionsCell*)[aTableView dequeueReusableCellWithIdentifier:@"MemberActionsCell" forIndexPath:indexPath]; + + NSString* leftTitle = nil; + NSString* rightTitle = nil; + + if ((row * 2) < buttonsTitles.count) { + leftTitle = [buttonsTitles objectAtIndex:row * 2]; + } + + if (((row * 2) + 1) < buttonsTitles.count) { + rightTitle = [buttonsTitles objectAtIndex:(row * 2) + 1]; + } + + [memberActionsCell setLeftButtonText:leftTitle]; + [memberActionsCell setRightButtonText:rightTitle]; + + return memberActionsCell; + } + + return nil; +} + + +#pragma mark - button management + +- (void) updateUserPowerLevel:(MXRoomMember*)roomMember +{ + MatrixHandler *mxHandler = [MatrixHandler sharedHandler]; + __weak typeof(self) weakSelf = self; + + // Ask for userId to invite + self.actionMenu = [[CustomAlert alloc] initWithTitle:@"Power Level" message:nil style:CustomAlertStyleAlert]; + + if (![mxHandler.userId isEqualToString:roomMember.userId]) { + self.actionMenu.cancelButtonIndex = [self.actionMenu addActionWithTitle:@"Reset to default" style:CustomAlertActionStyleDefault handler:^(CustomAlert *alert) { + weakSelf.actionMenu = nil; + + // Reset user power level + [weakSelf.mxRoom setPowerLevelOfUserWithUserID:roomMember.userId powerLevel:0 success:^{ + } failure:^(NSError *error) { + NSLog(@"Reset user power (%@) failed: %@", roomMember.userId, error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + + }]; + } + [self.actionMenu addTextFieldWithConfigurationHandler:^(UITextField *textField) { + textField.secureTextEntry = NO; + textField.text = [NSString stringWithFormat:@"%d", (int)([mxHandler getPowerLevel:roomMember inRoom:weakSelf.mxRoom] * 100)]; + textField.placeholder = nil; + textField.keyboardType = UIKeyboardTypeDecimalPad; + }]; + [self.actionMenu addActionWithTitle:@"OK" style:CustomAlertActionStyleDefault handler:^(CustomAlert *alert) { + UITextField *textField = [alert textFieldAtIndex:0]; + weakSelf.actionMenu = nil; + + // Set user power level + [weakSelf.mxRoom setPowerLevelOfUserWithUserID:roomMember.userId powerLevel:[textField.text integerValue] success:^{ + } failure:^(NSError *error) { + NSLog(@"Set user power (%@) failed: %@", roomMember.userId, error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + + }]; + [self.actionMenu showInViewController:self]; +} + +- (IBAction)onButtonToggle:(id)sender { + if ([sender isKindOfClass:[UIButton class]]) { + NSString* text = ((UIButton*)sender).titleLabel.text; + + if ([text isEqualToString:@"Leave"]) { + + [self.mxRoom leave:^{ + // Back to recents + [[AppDelegate theDelegate].masterTabBarController popRoomViewControllerAnimated:YES]; + } failure:^(NSError *error) { + NSLog(@"Leave room %@ failed: %@", mxRoom.state.roomId, error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + + } else if ([text isEqualToString:@"Set power level"]) { + [self updateUserPowerLevel:_roomMember]; + } else if ([text isEqualToString:@"Kick"]) { + [mxRoom kickUser:_roomMember.userId + reason:nil + success:^{ + } + failure:^(NSError *error) { + NSLog(@"Kick %@ failed: %@", _roomMember.userId, error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + } else if ([text isEqualToString:@"Ban"]) { + [mxRoom banUser:_roomMember.userId + reason:nil + success:^{ + } + failure:^(NSError *error) { + NSLog(@"Ban %@ failed: %@", _roomMember.userId, error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + } else if ([text isEqualToString:@"Invite"]) { + [mxRoom inviteUser:_roomMember.userId + success:^{ + } + failure:^(NSError *error) { + NSLog(@"Invite %@ failed: %@", _roomMember.userId, error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + } else if ([text isEqualToString:@"Unban"]) { + [mxRoom unbanUser:_roomMember.userId + success:^{ + } + failure:^(NSError *error) { + NSLog(@"Unban %@ failed: %@", _roomMember.userId, error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + + } else if ([text isEqualToString:@"Start chat"]) { + MatrixHandler *mxHandler = [MatrixHandler sharedHandler]; + + // Create new room + [mxHandler.mxRestClient createRoom:(_roomMember.displayname) ? _roomMember.displayname : _roomMember.userId + visibility:kMXRoomVisibilityPrivate + roomAlias:nil + topic:nil + success:^(MXCreateRoomResponse *response) { + // add the user + [mxHandler.mxRestClient inviteUser:_roomMember.userId toRoom:response.roomId success:^{ + //NSLog(@"%@ has been invited (roomId: %@)", roomMember.userId, response.roomId); + } failure:^(NSError *error) { + NSLog(@"%@ invitation failed (roomId: %@): %@", _roomMember.userId, response.roomId, error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + + // Open created room + [[AppDelegate theDelegate].masterTabBarController showRoom:response.roomId]; + + } failure:^(NSError *error) { + NSLog(@"Create room failed: %@", error); + //Alert user + [[AppDelegate theDelegate] showErrorAsAlert:error]; + }]; + } + } +} + +@end diff --git a/matrixConsole/matrixConsole/ViewController/RoomViewController.m b/matrixConsole/matrixConsole/ViewController/RoomViewController.m index 8f535c239..30f6ad261 100644 --- a/matrixConsole/matrixConsole/ViewController/RoomViewController.m +++ b/matrixConsole/matrixConsole/ViewController/RoomViewController.m @@ -18,6 +18,7 @@ #import #import "RoomViewController.h" +#import "MemberViewController.h" #import "RoomMessage.h" #import "RoomMessageTableCell.h" #import "RoomMemberTableCell.h" @@ -1426,53 +1427,10 @@ NSString *const kCmdResetUserPowerLevel = @"/deop"; #pragma mark - UITableView delegate -- (void) updateUserPowerLevel:(MXRoomMember*)roomMember -{ - MatrixHandler *mxHandler = [MatrixHandler sharedHandler]; - __weak typeof(self) weakSelf = self; - - // Ask for userId to invite - self.actionMenu = [[CustomAlert alloc] initWithTitle:@"Power Level" message:nil style:CustomAlertStyleAlert]; - - if (![mxHandler.userId isEqualToString:roomMember.userId]) { - self.actionMenu.cancelButtonIndex = [self.actionMenu addActionWithTitle:@"Reset to default" style:CustomAlertActionStyleDefault handler:^(CustomAlert *alert) { - weakSelf.actionMenu = nil; - - // Reset user power level - [weakSelf.mxRoom setPowerLevelOfUserWithUserID:roomMember.userId powerLevel:0 success:^{ - } failure:^(NSError *error) { - NSLog(@"Reset user power (%@) failed: %@", roomMember.userId, error); - //Alert user - [[AppDelegate theDelegate] showErrorAsAlert:error]; - }]; - - }]; - } - [self.actionMenu addTextFieldWithConfigurationHandler:^(UITextField *textField) { - textField.secureTextEntry = NO; - textField.text = [NSString stringWithFormat:@"%d", (int)([mxHandler getPowerLevel:roomMember inRoom:weakSelf.mxRoom] * 100)]; - textField.placeholder = nil; - textField.keyboardType = UIKeyboardTypeDecimalPad; - }]; - [self.actionMenu addActionWithTitle:@"OK" style:CustomAlertActionStyleDefault handler:^(CustomAlert *alert) { - UITextField *textField = [alert textFieldAtIndex:0]; - weakSelf.actionMenu = nil; - - // Set user power level - [weakSelf.mxRoom setPowerLevelOfUserWithUserID:roomMember.userId powerLevel:[textField.text integerValue] success:^{ - } failure:^(NSError *error) { - NSLog(@"Set user power (%@) failed: %@", roomMember.userId, error); - //Alert user - [[AppDelegate theDelegate] showErrorAsAlert:error]; - }]; - - }]; - [self.actionMenu showInViewController:self]; -} - - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Check table view members vs messages if (tableView == self.membersTableView) { + /* // List action(s) available on this member __block MXRoomMember *roomMember = [members objectAtIndex:indexPath.row]; @@ -1679,7 +1637,7 @@ NSString *const kCmdResetUserPowerLevel = @"/deop"; weakSelf.actionMenu = nil; }]; [self.actionMenu showInViewController:self]; - } + }*/ [tableView deselectRowAtIndexPath:indexPath animated:YES]; } else if (tableView == self.messagesTableView) { // Dismiss keyboard when user taps on messages table view content @@ -2525,6 +2483,18 @@ NSString *const kCmdResetUserPowerLevel = @"/deop"; - (void)dismissMediaPicker { [[AppDelegate theDelegate].masterTabBarController dismissMediaPicker]; } + +#pragma mark - Segues + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + if ([[segue identifier] isEqualToString:@"showMemberSheet"]) { + NSIndexPath *indexPath = [self.membersTableView indexPathForSelectedRow]; + + MemberViewController* controller = [segue destinationViewController]; + controller.roomMember = [members objectAtIndex:indexPath.row]; + } +} + @end