mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-30 21:26:57 +02:00
Share extension mxstore rework
- Create the MXRoom instance only when the room is selected.
This commit is contained in:
@@ -23,8 +23,6 @@
|
||||
#import "MXKPieChartView.h"
|
||||
#import "MXKPieChartHUD.h"
|
||||
|
||||
|
||||
|
||||
@interface RoomsListViewController () <ShareExtensionManagerDelegate>
|
||||
|
||||
@property (nonatomic) MXKPieChartHUD *hudView;
|
||||
@@ -35,7 +33,6 @@
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation RoomsListViewController
|
||||
|
||||
#pragma mark - Class methods
|
||||
@@ -130,36 +127,78 @@
|
||||
|
||||
- (void)showShareAlertForRoomPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
// @TODO: the room should be instanciated here (only the room summary should be available from dataSource).
|
||||
NSString *receipantName = [self.dataSource getRoomAtIndexPath:indexPath].summary.displayname;
|
||||
if (!receipantName.length)
|
||||
MXKRecentCellData *recentCellData = [self.dataSource cellDataAtIndexPath:indexPath];
|
||||
NSString *roomName = recentCellData.roomSummary.displayname;
|
||||
if (!roomName.length)
|
||||
{
|
||||
receipantName = NSLocalizedStringFromTable(@"room_displayname_no_title", @"Vector", nil);
|
||||
roomName = NSLocalizedStringFromTable(@"room_displayname_no_title", @"Vector", nil);
|
||||
}
|
||||
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:[NSString stringWithFormat:NSLocalizedStringFromTable(@"send_to", @"Vector", nil), receipantName] message:nil preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:[NSString stringWithFormat:NSLocalizedStringFromTable(@"send_to", @"Vector", nil), roomName] message:nil preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"cancel"] style:UIAlertActionStyleCancel handler:nil];
|
||||
[alertController addAction:cancelAction];
|
||||
|
||||
UIAlertAction *sendAction = [UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"send"] style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
|
||||
|
||||
MXRoom *selectedRoom = [self.dataSource getRoomAtIndexPath:indexPath];
|
||||
|
||||
[ShareExtensionManager sharedManager].delegate = self;
|
||||
|
||||
[[ShareExtensionManager sharedManager] sendContentToRoom:selectedRoom failureBlock:^{
|
||||
[self showFailureAlert];
|
||||
// The selected room is instanciated here.
|
||||
[[ShareExtensionManager sharedManager].fileStore asyncAccountDataOfRoom:recentCellData.roomSummary.roomId success:^(MXRoomAccountData * _Nonnull accountData) {
|
||||
|
||||
[[ShareExtensionManager sharedManager].fileStore asyncStateEventsOfRoom:recentCellData.roomSummary.roomId success:^(NSArray<MXEvent *> * _Nonnull roomStateEvents) {
|
||||
|
||||
MXSession *session = [[MXSession alloc] initWithMatrixRestClient:[[MXRestClient alloc] initWithCredentials:[ShareExtensionManager sharedManager].userAccount.mxCredentials andOnUnrecognizedCertificateBlock:nil]];
|
||||
|
||||
// To handle correctly the crypto, we have to set a store (use a fake store)
|
||||
__weak MXSession *weakSession = session;
|
||||
[session setStore:[[MXNoStore alloc] init] success:^{
|
||||
|
||||
if (weakSession)
|
||||
{
|
||||
__strong MXSession *session = weakSession;
|
||||
|
||||
MXRoom *selectedRoom = [[MXRoom alloc] initWithRoomId:recentCellData.roomSummary.roomId andMatrixSession:session andStateEvents:roomStateEvents andAccountData:accountData];
|
||||
|
||||
[ShareExtensionManager sharedManager].delegate = self;
|
||||
|
||||
[[ShareExtensionManager sharedManager] sendContentToRoom:selectedRoom failureBlock:^(NSError* error) {
|
||||
|
||||
NSString *title;
|
||||
if ([error.domain isEqualToString:MXEncryptingErrorDomain])
|
||||
{
|
||||
title = NSLocalizedStringFromTable(@"share_extension_failed_to_encrypt", @"Vector", nil);
|
||||
}
|
||||
|
||||
[self showFailureAlert:title];
|
||||
}];
|
||||
}
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
NSLog(@"[RoomsListViewController] failed to prepare matrix session]");
|
||||
|
||||
}];
|
||||
|
||||
} failure:^(NSError * _Nonnull error) {
|
||||
|
||||
NSLog(@"[RoomsListViewController] failed to get state events");
|
||||
|
||||
}];
|
||||
|
||||
} failure:^(NSError * _Nonnull error) {
|
||||
|
||||
NSLog(@"[RoomsListViewController] failed to get account data");
|
||||
|
||||
}];
|
||||
}];
|
||||
|
||||
[alertController addAction:sendAction];
|
||||
|
||||
[self presentViewController:alertController animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)showFailureAlert
|
||||
- (void)showFailureAlert:(NSString *)title
|
||||
{
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"room_event_failed_to_send", @"Vector", nil) message:nil preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title.length ? title : NSLocalizedStringFromTable(@"room_event_failed_to_send", @"Vector", nil) message:nil preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction *okAction = [UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"ok"] style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
|
||||
if (self.failureBlock)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user