forked from EVOgeek/Vmeda.Online
		
	MOBILE-2927 messages: Detect push in group conversations
This commit is contained in:
		
							parent
							
								
									c982017029
								
							
						
					
					
						commit
						1146eea0fa
					
				@ -121,8 +121,8 @@ export class AddonMessagesModule {
 | 
				
			|||||||
                            // Check if we have enough information to open the conversation.
 | 
					                            // Check if we have enough information to open the conversation.
 | 
				
			||||||
                            if (notification.convid && enabled) {
 | 
					                            if (notification.convid && enabled) {
 | 
				
			||||||
                                pageParams.conversationId = Number(notification.convid);
 | 
					                                pageParams.conversationId = Number(notification.convid);
 | 
				
			||||||
                            } else if (notification.userfromid) {
 | 
					                            } else if (notification.userfromid || notification.useridfrom) {
 | 
				
			||||||
                                pageParams.discussionUserId = Number(notification.userfromid);
 | 
					                                pageParams.discussionUserId = Number(notification.userfromid || notification.useridfrom);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            linkHelper.goInSite(undefined, pageName, pageParams, notification.site);
 | 
					                            linkHelper.goInSite(undefined, pageName, pageParams, notification.site);
 | 
				
			||||||
 | 
				
			|||||||
@ -229,10 +229,61 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr
 | 
				
			|||||||
     * @return {Promise<any>}    Promise resolved with the notifications.
 | 
					     * @return {Promise<any>}    Promise resolved with the notifications.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected fetchMessages(siteId?: string): Promise<any> {
 | 
					    protected fetchMessages(siteId?: string): Promise<any> {
 | 
				
			||||||
 | 
					        return this.sitesProvider.getSite(siteId).then((site) => {
 | 
				
			||||||
 | 
					            if (site.isVersionGreaterEqualThan('3.7')) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Use get conversations WS to be able to get group conversations messages.
 | 
				
			||||||
 | 
					                return this.messagesProvider.getConversations(undefined, undefined, 0, site.id, undefined, false, true)
 | 
				
			||||||
 | 
					                        .then((result) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // Find the first unmuted conversation.
 | 
				
			||||||
 | 
					                    const conv = result.conversations.find((conversation) => {
 | 
				
			||||||
 | 
					                        return !conversation.ismuted;
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (conv.isread) {
 | 
				
			||||||
 | 
					                        // The conversation is read, no unread messages.
 | 
				
			||||||
 | 
					                        return [];
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    const currentUserId = site.getUserId(),
 | 
				
			||||||
 | 
					                        message = conv.messages[0]; // Treat only the last message, is the one we're interested.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (!message || message.useridfrom == currentUserId) {
 | 
				
			||||||
 | 
					                        // No last message or not from current user. Return empty list.
 | 
				
			||||||
 | 
					                        return [];
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // Add some calculated data.
 | 
				
			||||||
 | 
					                    message.contexturl = '';
 | 
				
			||||||
 | 
					                    message.contexturlname = '';
 | 
				
			||||||
 | 
					                    message.convid = conv.id;
 | 
				
			||||||
 | 
					                    message.fullmessage = message.text;
 | 
				
			||||||
 | 
					                    message.fullmessageformat = 0;
 | 
				
			||||||
 | 
					                    message.fullmessagehtml = '';
 | 
				
			||||||
 | 
					                    message.notification = 0;
 | 
				
			||||||
 | 
					                    message.read = 0;
 | 
				
			||||||
 | 
					                    message.smallmessage = message.smallmessage || message.text;
 | 
				
			||||||
 | 
					                    message.subject = conv.name;
 | 
				
			||||||
 | 
					                    message.timecreated = message.timecreated * 1000;
 | 
				
			||||||
 | 
					                    message.timeread = 0;
 | 
				
			||||||
 | 
					                    message.useridto = currentUserId;
 | 
				
			||||||
 | 
					                    message.usertofullname = site.getInfo().fullname;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    const userFrom = conv.members.find((member) => {
 | 
				
			||||||
 | 
					                        return member.id == message.useridfrom;
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                    message.userfromfullname = userFrom && userFrom.fullname;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    return [message];
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
                return this.messagesProvider.getUnreadReceivedMessages(true, false, true, siteId).then((response) => {
 | 
					                return this.messagesProvider.getUnreadReceivedMessages(true, false, true, siteId).then((response) => {
 | 
				
			||||||
                    return response.messages;
 | 
					                    return response.messages;
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Given a message, return the title and the text for the message.
 | 
					     * Given a message, return the title and the text for the message.
 | 
				
			||||||
@ -242,7 +293,7 @@ export class AddonMessagesMainMenuHandler implements CoreMainMenuHandler, CoreCr
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    protected getTitleAndText(message: any): Promise<any> {
 | 
					    protected getTitleAndText(message: any): Promise<any> {
 | 
				
			||||||
        const data = {
 | 
					        const data = {
 | 
				
			||||||
            title: message.userfromfullname,
 | 
					            title: message.name || message.userfromfullname,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return this.textUtils.formatText(message.text, true, true).catch(() => {
 | 
					        return this.textUtils.formatText(message.text, true, true).catch(() => {
 | 
				
			||||||
 | 
				
			|||||||
@ -882,14 +882,20 @@ export class AddonMessagesProvider {
 | 
				
			|||||||
                    result.messages = result.messages.slice(0, limitTo);
 | 
					                    result.messages = result.messages.slice(0, limitTo);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let lastReceived;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                result.messages.forEach((message) => {
 | 
					                result.messages.forEach((message) => {
 | 
				
			||||||
                    // Convert time to milliseconds.
 | 
					                    // Convert time to milliseconds.
 | 
				
			||||||
                    message.timecreated = message.timecreated ? message.timecreated * 1000 : 0;
 | 
					                    message.timecreated = message.timecreated ? message.timecreated * 1000 : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (!lastReceived && message.useridfrom != userId) {
 | 
				
			||||||
 | 
					                        lastReceived = message;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (this.appProvider.isDesktop() && params.useridto == userId && limitFrom === 0) {
 | 
					                if (this.appProvider.isDesktop() && limitFrom === 0 && lastReceived) {
 | 
				
			||||||
                    // Store the last received message (we cannot know if it's unread or not). Don't block the user for this.
 | 
					                    // Store the last received message (we cannot know if it's unread or not). Don't block the user for this.
 | 
				
			||||||
                    this.storeLastReceivedMessageIfNeeded(conversationId, result.messages[0], site.getId());
 | 
					                    this.storeLastReceivedMessageIfNeeded(conversationId, lastReceived, site.getId());
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (excludePending) {
 | 
					                if (excludePending) {
 | 
				
			||||||
@ -923,11 +929,13 @@ export class AddonMessagesProvider {
 | 
				
			|||||||
     * @param {number} [limitFrom=0] The offset to start at.
 | 
					     * @param {number} [limitFrom=0] The offset to start at.
 | 
				
			||||||
     * @param {string} [siteId] Site ID. If not defined, use current site.
 | 
					     * @param {string} [siteId] Site ID. If not defined, use current site.
 | 
				
			||||||
     * @param {number} [userId] User ID. If not defined, current user in the site.
 | 
					     * @param {number} [userId] User ID. If not defined, current user in the site.
 | 
				
			||||||
 | 
					     * @param {boolean} [forceCache] True if it should return cached data. Has priority over ignoreCache.
 | 
				
			||||||
 | 
					     * @param {boolean} [ignoreCache] True if it should ignore cached data (it will always fail in offline or server down).
 | 
				
			||||||
     * @return {Promise<any>} Promise resolved with the conversations.
 | 
					     * @return {Promise<any>} Promise resolved with the conversations.
 | 
				
			||||||
     * @since 3.6
 | 
					     * @since 3.6
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getConversations(type?: number, favourites?: boolean, limitFrom: number = 0, siteId?: string, userId?: number)
 | 
					    getConversations(type?: number, favourites?: boolean, limitFrom: number = 0, siteId?: string, userId?: number,
 | 
				
			||||||
            : Promise<{conversations: any[], canLoadMore: boolean}> {
 | 
					            forceCache?: boolean, ignoreCache?: boolean): Promise<{conversations: any[], canLoadMore: boolean}> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return this.sitesProvider.getSite(siteId).then((site) => {
 | 
					        return this.sitesProvider.getSite(siteId).then((site) => {
 | 
				
			||||||
            userId = userId || site.getUserId();
 | 
					            userId = userId || site.getUserId();
 | 
				
			||||||
@ -941,6 +949,13 @@ export class AddonMessagesProvider {
 | 
				
			|||||||
                    limitnum: this.LIMIT_MESSAGES + 1,
 | 
					                    limitnum: this.LIMIT_MESSAGES + 1,
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (forceCache) {
 | 
				
			||||||
 | 
					                preSets['omitExpires'] = true;
 | 
				
			||||||
 | 
					            } else if (ignoreCache) {
 | 
				
			||||||
 | 
					                preSets['getFromCache'] = false;
 | 
				
			||||||
 | 
					                preSets['emergencyCache'] = false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (typeof type != 'undefined' && type != null) {
 | 
					            if (typeof type != 'undefined' && type != null) {
 | 
				
			||||||
                params.type = type;
 | 
					                params.type = type;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -952,7 +967,14 @@ export class AddonMessagesProvider {
 | 
				
			|||||||
                // Format the conversations, adding some calculated fields.
 | 
					                // Format the conversations, adding some calculated fields.
 | 
				
			||||||
                const conversations = response.conversations.slice(0, this.LIMIT_MESSAGES).map((conversation) => {
 | 
					                const conversations = response.conversations.slice(0, this.LIMIT_MESSAGES).map((conversation) => {
 | 
				
			||||||
                        return this.formatConversation(conversation, userId);
 | 
					                        return this.formatConversation(conversation, userId);
 | 
				
			||||||
                });
 | 
					                    }),
 | 
				
			||||||
 | 
					                    conv = conversations[0],
 | 
				
			||||||
 | 
					                    lastMessage = conv && conv.messages[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (this.appProvider.isDesktop() && limitFrom === 0 && lastMessage && !conv.sentfromcurrentuser) {
 | 
				
			||||||
 | 
					                    // Store the last received message (we cannot know if it's unread or not). Don't block the user for this.
 | 
				
			||||||
 | 
					                    this.storeLastReceivedMessageIfNeeded(conv.id, lastMessage, site.getId());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return {
 | 
					                return {
 | 
				
			||||||
                    conversations: conversations,
 | 
					                    conversations: conversations,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user