fix: disable typing and message request on sogs without `write`

pull/2495/head
Audric Ackermann 3 years ago
parent 336baf6528
commit 179f872679

@ -79,7 +79,7 @@ textarea {
overflow: hidden; overflow: hidden;
outline: none; outline: none;
color: $textAndBorderColor; color: $textAndBorderColor;
border: 2px solid $textAndBorderColor; border: 1px solid $textAndBorderColor;
} }
width: auto; width: auto;

@ -14,7 +14,7 @@ const StyledTypingContainer = styled.div`
const StyledTypingDot = styled.div<{ index: number }>` const StyledTypingDot = styled.div<{ index: number }>`
border-radius: 50%; border-radius: 50%;
background-color: var(--color-text-subtle); // TODO Theming update background-color: var(--color-text-subtle); // TODO Theming update
height: 6px; height: 6px;
width: 6px; width: 6px;

@ -9,6 +9,7 @@ import { PubKey } from '../../../../session/types';
import { openConversationWithMessages } from '../../../../state/ducks/conversations'; import { openConversationWithMessages } from '../../../../state/ducks/conversations';
import { updateUserDetailsModal } from '../../../../state/ducks/modalDialog'; import { updateUserDetailsModal } from '../../../../state/ducks/modalDialog';
import { import {
getIsTypingEnabled,
getMessageAvatarProps, getMessageAvatarProps,
getSelectedConversationKey, getSelectedConversationKey,
} from '../../../../state/selectors/conversations'; } from '../../../../state/selectors/conversations';
@ -37,6 +38,8 @@ export const MessageAvatar = (props: Props) => {
const avatarProps = useSelector(state => getMessageAvatarProps(state as any, messageId)); const avatarProps = useSelector(state => getMessageAvatarProps(state as any, messageId));
const selectedConvoKey = useSelector(getSelectedConversationKey); const selectedConvoKey = useSelector(getSelectedConversationKey);
const isTypingEnabled = useSelector(getIsTypingEnabled);
if (!avatarProps) { if (!avatarProps) {
return null; return null;
} }
@ -75,6 +78,11 @@ export const MessageAvatar = (props: Props) => {
} }
} }
if (isPublic && !isTypingEnabled) {
window.log.info('onMessageAvatarClick: no typing enabled. Dropping...');
return;
}
if (isPublic && selectedConvoKey) { if (isPublic && selectedConvoKey) {
const convoOpen = getConversationController().get(selectedConvoKey); const convoOpen = getConversationController().get(selectedConvoKey);
const room = OpenGroupData.getV2OpenGroupRoom(convoOpen.id); const room = OpenGroupData.getV2OpenGroupRoom(convoOpen.id);

@ -416,6 +416,23 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
toRet.currentNotificationSetting = currentNotificationSetting; toRet.currentNotificationSetting = currentNotificationSetting;
} }
if (this.isOpenGroupV2()) {
const room = OpenGroupData.getV2OpenGroupRoom(this.id);
if (room && isArray(room.capabilities) && room.capabilities.length) {
toRet.capabilities = room.capabilities;
}
if (this.get('writeCapability')) {
toRet.writeCapability = this.get('writeCapability');
}
if (this.get('readCapability')) {
toRet.readCapability = this.get('readCapability');
}
if (this.get('uploadCapability')) {
toRet.uploadCapability = this.get('uploadCapability');
}
}
const lastMessageText = this.get('lastMessage'); const lastMessageText = this.get('lastMessage');
if (lastMessageText && lastMessageText.length) { if (lastMessageText && lastMessageText.length) {
const lastMessageStatus = this.get('lastMessageStatus'); const lastMessageStatus = this.get('lastMessageStatus');

@ -268,8 +268,11 @@ export interface ReduxConversationType {
isApproved?: boolean; isApproved?: boolean;
didApproveMe?: boolean; didApproveMe?: boolean;
/** Should only be present on open groups - the key (stored as hex) that should be used when sending messages to an open group */ // Should only be present on opengroups - the capabilities we have on this room.
blindedPublicKey?: string; capabilities?: Array<string>;
readCapability?: boolean;
writeCapability?: boolean;
uploadCapability?: boolean;
} }
export interface NotificationForConvoOption { export interface NotificationForConvoOption {

@ -85,9 +85,9 @@ export const getIsTypingEnabled = createSelector(
if (!selectedConvo) { if (!selectedConvo) {
return false; return false;
} }
const { isBlocked, isKickedFromGroup, left } = selectedConvo; const { isBlocked, isKickedFromGroup, left, isPublic, writeCapability } = selectedConvo;
return !(isBlocked || isKickedFromGroup || left); return !(isBlocked || isKickedFromGroup || left || (isPublic && !writeCapability));
} }
); );
/** /**

Loading…
Cancel
Save