Как удалить диалог из списка диалогов, используя QMServicesManager в случае группового и публичного чата?

Этот вопрос является дополнением к моему предыдущему вопросу с новыми требованиями. Это мой предыдущий вопрос.

Итак, моё новое требование :

Теперь, если я хочу удалить групповой чат, как я должен справиться с этим? Если я использую тот же метод внутри него, мы передаем forAllUsers как "NO", который жестко запрограммирован. написано внутри QMChatServices.m

- (void)deleteDialogWithID:(NSString *)dialogId completion:(void (^)(QBResponse *))completion {

    NSParameterAssert(dialogId);

    __weak __typeof(self)weakSelf = self;

    [QBRequest deleteDialogsWithIDs:[NSSet setWithObject:dialogId] forAllUsers:NO successBlock:^(QBResponse *response, NSArray *deletedObjectsIDs, NSArray *notFoundObjectsIDs, NSArray *wrongPermissionsObjectsIDs) {
        //
        [weakSelf.dialogsMemoryStorage deleteChatDialogWithID:dialogId];
        [weakSelf.messagesMemoryStorage deleteMessagesWithDialogID:dialogId];

        if ([weakSelf.multicastDelegate respondsToSelector:@selector(chatService:didDeleteChatDialogWithIDFromMemoryStorage:)]) {
            [weakSelf.multicastDelegate chatService:weakSelf didDeleteChatDialogWithIDFromMemoryStorage:dialogId];
        }

        [weakSelf.loadedAllMessages removeObjectsForKeys:deletedObjectsIDs];

        if (completion) {
            completion(response);
        }
    } errorBlock:^(QBResponse *response) {
        //
        if (response.status == QBResponseStatusCodeNotFound || response.status == 403) {
            [weakSelf.dialogsMemoryStorage deleteChatDialogWithID:dialogId];

            if ([weakSelf.multicastDelegate respondsToSelector:@selector(chatService:didDeleteChatDialogWithIDFromMemoryStorage:)]) {
                [weakSelf.multicastDelegate chatService:weakSelf didDeleteChatDialogWithIDFromMemoryStorage:dialogId];
            }
        }
        else {

            [weakSelf.serviceManager handleErrorResponse:response];
        }

        if (completion) {
            completion(response);
        }
    }];
}

Так что теперь мое сомнение..

Вопрос 1: Что делать, если мы хотим удалить диалог для всех пользователей. Вопрос 2: Допустим, есть 3 пользователя. Пользователь1, Пользователь2 и Пользователь3. Теперь User1 создал группу с User2 и User3.

Так как этот метод полезен для всех трех разных пользователей. Я имею в виду, что произойдет, если User1 использует

[ServicesManager.instance.chatService deleteDialogWithID:dialog.ID completion:nil];

и что происходит, если User2 и User3 используют один и тот же метод.

Погода это работает как выход из диалога или удаление диалога. Меня немного смущает, как этот метод работает для разных пользователей в случае группового и публичного чата.

Вопрос 3: Есть ли другой способ выйти из группового чата? Надеюсь понятно!!

1 ответ

Решение
  1. Вы правы, сейчас нет интерфейса для удаления диалога для всех пользователей. Но имейте в виду, что только владелец диалогового окна группы (его создатель) может удалить его. И владелец не может быть изменен, даже если он покинет диалоговое окно. Мы рассмотрим возможность добавления такого метода в ближайшем будущем, но сейчас вы можете легко изменить его для своих нужд (добро пожаловать в наш репозиторий сервисов).

  2. Если кто-либо из пользователей использует этот метод - он будет вне этой группы (по серверу), но сама группа все еще будет существовать с другими членами. Но другие участники будут знать о оставленных пользователях только тогда, когда они снова загрузят диалог из REST. Таким образом, чтобы уведомить их в прямом эфире, мы отправляем уведомления XMPP перед отъездом, как этот

  3. Почти то, что я сказал в 2. Уведомление пользователей в прямом эфире о нашем выходе и удалении диалога с помощью запроса REST (QBRequest).

Другие вопросы по тегам