Disabled selecting outgoing messages
Fix polls
This commit is contained in:
parent
987653c905
commit
6e57d69a5a
@ -1948,7 +1948,7 @@ export default class ChatBubbles {
|
||||
chat: this.chat
|
||||
});
|
||||
} else {
|
||||
const withTail = !isAndroid && !isApple && doc.type != 'round' && !message.message && withReplies;
|
||||
const withTail = !isAndroid && !isApple && doc.type != 'round' && !message.message && !withReplies;
|
||||
if(withTail) bubble.classList.add('with-media-tail');
|
||||
wrapVideo({
|
||||
doc,
|
||||
|
@ -17,6 +17,7 @@ export default class ChatContextMenu {
|
||||
private buttons: (ButtonMenuItemOptions & {verify: () => boolean, notDirect?: () => boolean, withSelection?: true})[];
|
||||
private element: HTMLElement;
|
||||
|
||||
private isSelectable: boolean;
|
||||
private target: HTMLElement;
|
||||
private isTargetAGroupedItem: boolean;
|
||||
public peerId: number;
|
||||
@ -60,6 +61,7 @@ export default class ChatContextMenu {
|
||||
}
|
||||
}
|
||||
|
||||
this.isSelectable = this.chat.selection.canSelectBubble(bubble);
|
||||
this.peerId = this.chat.peerId;
|
||||
//this.msgID = msgID;
|
||||
this.target = e.target as HTMLElement;
|
||||
@ -145,7 +147,7 @@ export default class ChatContextMenu {
|
||||
icon: 'send2',
|
||||
text: 'Send Now',
|
||||
onClick: this.onSendScheduledClick,
|
||||
verify: () => this.chat.type === 'scheduled'
|
||||
verify: () => this.chat.type === 'scheduled' && !this.message.pFlags.is_outgoing
|
||||
}, {
|
||||
icon: 'send2',
|
||||
text: 'Send Now selected',
|
||||
@ -172,7 +174,7 @@ export default class ChatContextMenu {
|
||||
text: 'Reply',
|
||||
onClick: this.onReplyClick,
|
||||
verify: () => (this.peerId > 0 || this.appChatsManager.hasRights(-this.peerId, 'send')) &&
|
||||
this.mid > 0 &&
|
||||
!this.message.pFlags.is_outgoing &&
|
||||
!!this.chat.input.messageInput &&
|
||||
this.chat.type !== 'scheduled'/* ,
|
||||
cancelEvent: true */
|
||||
@ -197,7 +199,7 @@ export default class ChatContextMenu {
|
||||
icon: 'pin',
|
||||
text: 'Pin',
|
||||
onClick: this.onPinClick,
|
||||
verify: () => this.mid > 0 &&
|
||||
verify: () => !this.message.pFlags.is_outgoing &&
|
||||
this.message._ != 'messageService' &&
|
||||
!this.message.pFlags.pinned &&
|
||||
this.appPeersManager.canPinMessage(this.peerId) &&
|
||||
@ -222,26 +224,28 @@ export default class ChatContextMenu {
|
||||
onClick: this.onStopPoll,
|
||||
verify: () => {
|
||||
const poll = this.message.media?.poll;
|
||||
return this.appMessagesManager.canEditMessage(this.message, 'poll') && poll && !poll.pFlags.closed && this.mid > 0;
|
||||
return this.appMessagesManager.canEditMessage(this.message, 'poll') && poll && !poll.pFlags.closed && !this.message.pFlags.is_outgoing;
|
||||
}/* ,
|
||||
cancelEvent: true */
|
||||
}, {
|
||||
icon: 'forward',
|
||||
text: 'Forward',
|
||||
onClick: this.onForwardClick,
|
||||
verify: () => this.mid > 0 && this.chat.type !== 'scheduled'
|
||||
verify: () => this.chat.type !== 'scheduled' && !this.message.pFlags.is_outgoing
|
||||
}, {
|
||||
icon: 'forward',
|
||||
text: 'Forward selected',
|
||||
onClick: this.onForwardClick,
|
||||
verify: () => this.chat.selection.selectionForwardBtn && this.chat.selection.selectedMids.has(this.mid) && !this.chat.selection.selectionForwardBtn.hasAttribute('disabled'),
|
||||
verify: () => this.chat.selection.selectionForwardBtn &&
|
||||
this.chat.selection.selectedMids.has(this.mid) &&
|
||||
!this.chat.selection.selectionForwardBtn.hasAttribute('disabled'),
|
||||
notDirect: () => true,
|
||||
withSelection: true
|
||||
}, {
|
||||
icon: 'select',
|
||||
text: 'Select',
|
||||
onClick: this.onSelectClick,
|
||||
verify: () => !this.message.action && !this.chat.selection.selectedMids.has(this.mid),
|
||||
verify: () => !this.message.action && !this.chat.selection.selectedMids.has(this.mid) && this.isSelectable,
|
||||
notDirect: () => true,
|
||||
withSelection: true
|
||||
}, {
|
||||
|
@ -443,7 +443,7 @@ export default class ChatSelection {
|
||||
this.updateBubbleSelection(bubble, !found);
|
||||
};
|
||||
|
||||
private canSelectBubble(bubble: HTMLElement) {
|
||||
return !bubble.classList.contains('service');
|
||||
public canSelectBubble(bubble: HTMLElement) {
|
||||
return !bubble.classList.contains('service') && !bubble.classList.contains('is-sending');
|
||||
}
|
||||
}
|
@ -123,57 +123,41 @@ export function getRichValue(field: HTMLElement, entities?: MessageEntity[]) {
|
||||
RichTextProcessor.combineSameEntities(entities);
|
||||
}
|
||||
|
||||
console.log('getRichValue:', value, entities);
|
||||
//console.log('getRichValue:', value, entities);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
MOUNT_CLASS_TO && (MOUNT_CLASS_TO.getRichValue = getRichValue);
|
||||
|
||||
const markdownTypes = {
|
||||
bold: '**',
|
||||
underline: '_-_',
|
||||
italic: '__',
|
||||
monospace: '`',
|
||||
pre: '``',
|
||||
strikethrough: '~~'
|
||||
};
|
||||
|
||||
export type MarkdownType = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'monospace' | 'link';
|
||||
export type MarkdownTag = {
|
||||
match: string,
|
||||
markdown: string | ((node: HTMLElement) => string),
|
||||
entityName: 'messageEntityBold' | 'messageEntityUnderline' | 'messageEntityItalic' | 'messageEntityPre' | 'messageEntityStrike' | 'messageEntityTextUrl';
|
||||
};
|
||||
export const markdownTags: {[type in MarkdownType]: MarkdownTag} = {
|
||||
bold: {
|
||||
match: '[style*="font-weight"], b',
|
||||
markdown: markdownTypes.bold,
|
||||
entityName: 'messageEntityBold'
|
||||
},
|
||||
underline: {
|
||||
match: '[style*="underline"], u',
|
||||
markdown: markdownTypes.underline,
|
||||
entityName: 'messageEntityUnderline'
|
||||
},
|
||||
italic: {
|
||||
match: '[style*="italic"], i',
|
||||
markdown: markdownTypes.italic,
|
||||
entityName: 'messageEntityItalic'
|
||||
},
|
||||
monospace: {
|
||||
match: '[style*="monospace"], [face="monospace"]',
|
||||
markdown: markdownTypes.monospace,
|
||||
entityName: 'messageEntityPre'
|
||||
},
|
||||
strikethrough: {
|
||||
match: '[style*="line-through"], strike',
|
||||
markdown: markdownTypes.strikethrough,
|
||||
entityName: 'messageEntityStrike'
|
||||
},
|
||||
link: {
|
||||
match: 'A',
|
||||
markdown: (node: HTMLElement) => `[${(node.parentElement as HTMLAnchorElement).href}](${node.nodeValue})`,
|
||||
entityName: 'messageEntityTextUrl'
|
||||
}
|
||||
};
|
||||
|
@ -11,6 +11,7 @@ export function copy<T>(obj: T): T {
|
||||
|
||||
//handle Array
|
||||
if(Array.isArray(obj)) {
|
||||
// @ts-ignore
|
||||
const clonedArr: T = obj.map(el => copy(el)) as any as T;
|
||||
return clonedArr;
|
||||
}
|
||||
|
@ -402,7 +402,9 @@ export class AppMessagesManager {
|
||||
}
|
||||
|
||||
let entities = options.entities || [];
|
||||
text = RichTextProcessor.parseMarkdown(text, entities);
|
||||
if(text) {
|
||||
text = RichTextProcessor.parseMarkdown(text, entities);
|
||||
}
|
||||
|
||||
const schedule_date = options.scheduleDate || (message.pFlags.is_scheduled ? message.date : undefined);
|
||||
return apiManager.invokeApi('messages.editMessage', {
|
||||
@ -410,7 +412,7 @@ export class AppMessagesManager {
|
||||
id: message.id,
|
||||
message: text,
|
||||
media: options.newMedia,
|
||||
entities: entities ? this.getInputEntities(entities) : undefined,
|
||||
entities: entities.length ? this.getInputEntities(entities) : undefined,
|
||||
no_webpage: options.noWebPage,
|
||||
schedule_date
|
||||
}).then((updates) => {
|
||||
@ -882,7 +884,7 @@ export class AppMessagesManager {
|
||||
|
||||
uploadPromise && uploadPromise.then(async(inputFile) => {
|
||||
this.log('appMessagesManager: sendFile uploaded:', inputFile);
|
||||
|
||||
|
||||
delete message.media.preloader;
|
||||
|
||||
inputFile.name = apiFileName;
|
||||
@ -1162,7 +1164,6 @@ export class AppMessagesManager {
|
||||
const isMegagroup = isChannel && appPeersManager.isMegagroup(peerId);
|
||||
const asChannel = isChannel && !isMegagroup ? true : false;
|
||||
|
||||
let fromId = appUsersManager.getSelf().id;
|
||||
let media;
|
||||
switch(inputMedia._) {
|
||||
case 'inputMediaPoll': {
|
||||
|
@ -78,7 +78,7 @@ export class AppPollsManager {
|
||||
|
||||
constructor() {
|
||||
rootScope.on('apiUpdate', (e) => {
|
||||
let update = e.detail;
|
||||
const update = e.detail;
|
||||
|
||||
this.handleUpdate(update);
|
||||
});
|
||||
@ -122,7 +122,11 @@ export class AppPollsManager {
|
||||
}
|
||||
|
||||
public saveResults(poll: Poll, results: PollResults) {
|
||||
this.results[poll.id] = results;
|
||||
if(this.results[poll.id]) {
|
||||
results = Object.assign(this.results[poll.id], results);
|
||||
} else {
|
||||
this.results[poll.id] = results;
|
||||
}
|
||||
|
||||
if(!results.pFlags.min) { // ! https://core.telegram.org/constructor/pollResults - min
|
||||
poll.chosenIndexes.length = 0;
|
||||
@ -157,7 +161,7 @@ export class AppPollsManager {
|
||||
poll,
|
||||
correct_answers: correctAnswers,
|
||||
solution,
|
||||
solution_entities: solutionEntities
|
||||
solution_entities: solutionEntities?.length ? solutionEntities : undefined
|
||||
};
|
||||
}
|
||||
|
||||
@ -181,7 +185,7 @@ export class AppPollsManager {
|
||||
|
||||
return apiManager.invokeApi('messages.sendVote', {
|
||||
peer: inputPeer,
|
||||
msg_id: message.id,
|
||||
msg_id: appMessagesManager.getLocalMessageId(message.mid),
|
||||
options
|
||||
}).then(updates => {
|
||||
this.log('sendVote updates:', updates);
|
||||
@ -194,7 +198,7 @@ export class AppPollsManager {
|
||||
|
||||
return apiManager.invokeApi('messages.getPollResults', {
|
||||
peer: inputPeer,
|
||||
msg_id: message.id
|
||||
msg_id: appMessagesManager.getLocalMessageId(message.mid)
|
||||
}).then(updates => {
|
||||
apiUpdatesManager.processUpdateMessage(updates);
|
||||
this.log('getResults updates:', updates);
|
||||
@ -204,7 +208,7 @@ export class AppPollsManager {
|
||||
public getVotes(message: any, option?: Uint8Array, offset?: string, limit = 20) {
|
||||
return apiManager.invokeApi('messages.getPollVotes', {
|
||||
peer: appPeersManager.getInputPeerById(message.peerId),
|
||||
id: message.id,
|
||||
id: appMessagesManager.getLocalMessageId(message.mid),
|
||||
option,
|
||||
offset,
|
||||
limit
|
||||
|
Loading…
x
Reference in New Issue
Block a user