MOBILE-4653 messages: Move AddonMessages constants
parent
dab0ea6c6e
commit
e69eed4f4c
|
@ -0,0 +1,52 @@
|
|||
// (C) Copyright 2015 Moodle Pty Ltd.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
export const ADDON_MESSAGES_NEW_MESSAGE_EVENT = 'addon_messages_new_message_event';
|
||||
export const ADDON_MESSAGES_READ_CHANGED_EVENT = 'addon_messages_read_changed_event';
|
||||
// Notify a conversation should be opened.
|
||||
export const ADDON_MESSAGES_OPEN_CONVERSATION_EVENT = 'addon_messages_open_conversation_event';
|
||||
export const ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT = 'addon_messages_update_conversation_list_event';
|
||||
export const ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT = 'addon_messages_member_changed_event';
|
||||
export const ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT = 'addon_messages_unread_conversation_counts_event';
|
||||
export const ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT = 'addon_messages_contact_requests_count_event';
|
||||
|
||||
export const ADDON_MESSAGES_POLL_INTERVAL = 10000;
|
||||
export const ADDON_MESSAGES_PUSH_SIMULATION_COMPONENT = 'AddonMessagesPushSimulation';
|
||||
|
||||
export const enum AddonMessagesMessagePrivacy {
|
||||
COURSEMEMBER = 0, // Privacy setting for being messaged by anyone within courses user is member.
|
||||
ONLYCONTACTS = 1, // Privacy setting for being messaged only by contacts.
|
||||
SITE = 2, // Privacy setting for being messaged by anyone on the site.
|
||||
}
|
||||
|
||||
export const enum AddonMessagesMessageConversationType {
|
||||
INDIVIDUAL = 1, // An individual conversation.
|
||||
GROUP = 2, // A group conversation.
|
||||
SELF = 3, // A self conversation.
|
||||
}
|
||||
|
||||
export const ADDON_MESSAGES_LIMIT_CONTACTS = 50;
|
||||
export const ADDON_MESSAGES_LIMIT_MESSAGES = 50;
|
||||
export const ADDON_MESSAGES_LIMIT_INITIAL_USER_SEARCH = 3;
|
||||
export const ADDON_MESSAGES_LIMIT_SEARCH = 50;
|
||||
|
||||
export const ADDON_MESSAGES_NOTIFICATION_PREFERENCES_KEY = 'message_provider_moodle_instantmessage';
|
||||
|
||||
export const ADDON_MESSAGES_AUTO_SYNCED = 'addon_messages_autom_synced';
|
||||
|
||||
export const enum AddonMessagesUpdateConversationAction {
|
||||
MUTE = 'mute',
|
||||
FAVOURITE = 'favourite',
|
||||
DELETE = 'delete',
|
||||
}
|
|
@ -15,7 +15,6 @@
|
|||
import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import {
|
||||
AddonMessagesProvider,
|
||||
AddonMessagesGetContactsWSResponse,
|
||||
AddonMessagesSearchContactsContact,
|
||||
AddonMessagesGetContactsContact,
|
||||
|
@ -29,6 +28,7 @@ import { CoreScreen } from '@services/screen';
|
|||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||
import { CoreKeyboard } from '@singletons/keyboard';
|
||||
import { ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT } from '@addons/messages/constants';
|
||||
|
||||
/**
|
||||
* Page that displays the list of contacts.
|
||||
|
@ -73,7 +73,7 @@ export class AddonMessagesContacts35Page implements OnInit, OnDestroy {
|
|||
|
||||
// Refresh the list when a contact request is confirmed.
|
||||
this.memberInfoObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
(data) => {
|
||||
if (data.contactRequestConfirmed) {
|
||||
this.refreshData();
|
||||
|
|
|
@ -18,12 +18,12 @@ import { CoreSites } from '@services/sites';
|
|||
import {
|
||||
AddonMessages,
|
||||
AddonMessagesConversationMember,
|
||||
AddonMessagesProvider,
|
||||
} from '../../services/messages';
|
||||
import { CoreNavigator } from '@services/navigator';
|
||||
import { CoreScreen } from '@services/screen';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||
import { ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT, ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT } from '@addons/messages/constants';
|
||||
|
||||
/**
|
||||
* Page that displays contacts and contact requests.
|
||||
|
@ -63,7 +63,7 @@ export class AddonMessagesContactsPage implements OnInit, OnDestroy {
|
|||
|
||||
// Update the contact requests badge.
|
||||
this.contactRequestsCountObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.CONTACT_REQUESTS_COUNT_EVENT,
|
||||
ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT,
|
||||
(data) => {
|
||||
this.requestsBadge = data.count > 0 ? String(data.count) : '';
|
||||
},
|
||||
|
@ -72,7 +72,7 @@ export class AddonMessagesContactsPage implements OnInit, OnDestroy {
|
|||
|
||||
// Update block status of a user.
|
||||
this.memberInfoObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
(data) => {
|
||||
if (data.userBlocked || data.userUnblocked) {
|
||||
const user = this.confirmedContacts.find((user) => user.id == data.userId);
|
||||
|
|
|
@ -18,17 +18,15 @@ import { AlertOptions } from '@ionic/core';
|
|||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import {
|
||||
AddonMessagesProvider,
|
||||
AddonMessagesConversationFormatted,
|
||||
AddonMessagesConversationMember,
|
||||
AddonMessagesGetMessagesMessage,
|
||||
AddonMessages,
|
||||
AddonMessagesConversationMessageFormatted,
|
||||
AddonMessagesSendMessageResults,
|
||||
AddonMessagesUpdateConversationAction,
|
||||
} from '../../services/messages';
|
||||
import { AddonMessagesOffline, AddonMessagesOfflineMessagesDBRecordFormatted } from '../../services/messages-offline';
|
||||
import { AddonMessagesSync, AddonMessagesSyncProvider } from '../../services/messages-sync';
|
||||
import { AddonMessagesSync } from '../../services/messages-sync';
|
||||
import { CoreUser } from '@features/user/services/user';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
|
@ -48,6 +46,18 @@ import { CoreText } from '@singletons/text';
|
|||
import { CoreWait } from '@singletons/wait';
|
||||
import { CoreModals } from '@services/modals';
|
||||
import { CoreLoadings } from '@services/loadings';
|
||||
import {
|
||||
ADDON_MESSAGES_AUTO_SYNCED,
|
||||
ADDON_MESSAGES_LIMIT_MESSAGES,
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_NEW_MESSAGE_EVENT,
|
||||
ADDON_MESSAGES_OPEN_CONVERSATION_EVENT,
|
||||
ADDON_MESSAGES_POLL_INTERVAL,
|
||||
ADDON_MESSAGES_READ_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT,
|
||||
AddonMessagesMessageConversationType,
|
||||
AddonMessagesUpdateConversationAction,
|
||||
} from '@addons/messages/constants';
|
||||
|
||||
/**
|
||||
* Page that displays a message discussion page.
|
||||
|
@ -125,7 +135,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
this.logger = CoreLogger.getInstance('AddonMessagesDiscussionPage');
|
||||
|
||||
// Refresh data if this discussion is synchronized automatically.
|
||||
this.syncObserver = CoreEvents.on(AddonMessagesSyncProvider.AUTO_SYNCED, (data) => {
|
||||
this.syncObserver = CoreEvents.on(ADDON_MESSAGES_AUTO_SYNCED, (data) => {
|
||||
if ((data.userId && data.userId == this.userId) ||
|
||||
(data.conversationId && data.conversationId == this.conversationId)) {
|
||||
// Fetch messages.
|
||||
|
@ -140,7 +150,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
|
||||
// Refresh data if info of a mamber of the conversation have changed.
|
||||
this.memberInfoObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
(data) => {
|
||||
if (data.userId && (this.members[data.userId] || this.otherMember && data.userId == this.otherMember.id)) {
|
||||
this.fetchData();
|
||||
|
@ -595,13 +605,13 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
this.conversationId = this.conversation.id;
|
||||
this.title = this.conversation.name;
|
||||
this.conversationImage = this.conversation.imageurl;
|
||||
this.isGroup = this.conversation.type == AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP;
|
||||
this.isGroup = this.conversation.type === AddonMessagesMessageConversationType.GROUP;
|
||||
this.favouriteIcon = 'fas-star';
|
||||
this.muteIcon = this.conversation.ismuted ? 'fas-bell' : 'fas-bell-slash';
|
||||
if (!this.isGroup) {
|
||||
this.userId = this.conversation.userid;
|
||||
}
|
||||
this.isSelf = this.conversation.type == AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_SELF;
|
||||
this.isSelf = this.conversation.type === AddonMessagesMessageConversationType.SELF;
|
||||
|
||||
return true;
|
||||
} else {
|
||||
|
@ -645,7 +655,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
const messages: AddonMessagesConversationMessageFormatted[] = result.messages;
|
||||
|
||||
if (pagesToLoad > 0 && result.canLoadMore) {
|
||||
offset += AddonMessagesProvider.LIMIT_MESSAGES;
|
||||
offset += ADDON_MESSAGES_LIMIT_MESSAGES;
|
||||
|
||||
// Get more messages.
|
||||
const nextMessages = await this.getConversationMessages(pagesToLoad, offset);
|
||||
|
@ -764,7 +774,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
}
|
||||
|
||||
if (readChanged) {
|
||||
CoreEvents.trigger(AddonMessagesProvider.READ_CHANGED_EVENT, {
|
||||
CoreEvents.trigger(ADDON_MESSAGES_READ_CHANGED_EVENT, {
|
||||
conversationId: this.conversationId,
|
||||
userId: this.userId,
|
||||
}, this.siteId);
|
||||
|
@ -789,7 +799,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
|
||||
if (trigger) {
|
||||
// Update discussions last message.
|
||||
CoreEvents.trigger(AddonMessagesProvider.NEW_MESSAGE_EVENT, {
|
||||
CoreEvents.trigger(ADDON_MESSAGES_NEW_MESSAGE_EVENT, {
|
||||
conversationId: this.conversationId,
|
||||
userId: this.userId,
|
||||
message: this.lastMessage?.text,
|
||||
|
@ -905,7 +915,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
this.fetchMessages().catch(() => {
|
||||
// Ignore errors.
|
||||
});
|
||||
}, AddonMessagesProvider.POLL_INTERVAL);
|
||||
}, ADDON_MESSAGES_POLL_INTERVAL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1265,7 +1275,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
if (splitViewLoaded) {
|
||||
// Notify the left pane to load it, this way the right conversation will be highlighted.
|
||||
CoreEvents.trigger(
|
||||
AddonMessagesProvider.OPEN_CONVERSATION_EVENT,
|
||||
ADDON_MESSAGES_OPEN_CONVERSATION_EVENT,
|
||||
{ userId },
|
||||
this.siteId,
|
||||
);
|
||||
|
@ -1300,7 +1310,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
// Get the conversation data so it's cached. Don't block the user for this.
|
||||
AddonMessages.getConversation(this.conversation.id, undefined, true);
|
||||
|
||||
CoreEvents.trigger(AddonMessagesProvider.UPDATE_CONVERSATION_LIST_EVENT, {
|
||||
CoreEvents.trigger(ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT, {
|
||||
conversationId: this.conversation.id,
|
||||
action: AddonMessagesUpdateConversationAction.FAVOURITE,
|
||||
value: this.conversation.isfavourite,
|
||||
|
@ -1332,7 +1342,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
// Get the conversation data so it's cached. Don't block the user for this.
|
||||
AddonMessages.getConversation(this.conversation.id, undefined, true);
|
||||
|
||||
CoreEvents.trigger(AddonMessagesProvider.UPDATE_CONVERSATION_LIST_EVENT, {
|
||||
CoreEvents.trigger(ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT, {
|
||||
conversationId: this.conversation.id,
|
||||
action: AddonMessagesUpdateConversationAction.MUTE,
|
||||
value: this.conversation.ismuted,
|
||||
|
@ -1447,7 +1457,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
|||
await AddonMessages.deleteConversation(this.conversation.id);
|
||||
|
||||
CoreEvents.trigger(
|
||||
AddonMessagesProvider.UPDATE_CONVERSATION_LIST_EVENT,
|
||||
ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT,
|
||||
{
|
||||
conversationId: this.conversation.id,
|
||||
action: AddonMessagesUpdateConversationAction.DELETE,
|
||||
|
|
|
@ -19,7 +19,6 @@ import {
|
|||
AddonMessages,
|
||||
AddonMessagesDiscussion,
|
||||
AddonMessagesMessageAreaContact,
|
||||
AddonMessagesProvider,
|
||||
} from '../../services/messages';
|
||||
import { CoreDomUtils } from '@services/utils/dom';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
|
@ -33,6 +32,7 @@ import { CoreScreen } from '@services/screen';
|
|||
import { CorePlatform } from '@services/platform';
|
||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||
import { CoreKeyboard } from '@singletons/keyboard';
|
||||
import { ADDON_MESSAGES_NEW_MESSAGE_EVENT, ADDON_MESSAGES_READ_CHANGED_EVENT } from '@addons/messages/constants';
|
||||
|
||||
/**
|
||||
* Page that displays the list of discussions.
|
||||
|
@ -75,7 +75,7 @@ export class AddonMessagesDiscussions35Page implements OnInit, OnDestroy {
|
|||
|
||||
// Update discussions when new message is received.
|
||||
this.newMessagesObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.NEW_MESSAGE_EVENT,
|
||||
ADDON_MESSAGES_NEW_MESSAGE_EVENT,
|
||||
(data) => {
|
||||
if (data.userId && this.discussions) {
|
||||
const discussion = this.discussions.find((disc) => disc.message?.user === data.userId);
|
||||
|
@ -97,7 +97,7 @@ export class AddonMessagesDiscussions35Page implements OnInit, OnDestroy {
|
|||
|
||||
// Update discussions when a message is read.
|
||||
this.readChangedObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.READ_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_READ_CHANGED_EVENT,
|
||||
(data) => {
|
||||
if (data.userId && this.discussions) {
|
||||
const discussion = this.discussions.find((disc) => disc.message?.user === data.userId);
|
||||
|
|
|
@ -17,12 +17,10 @@ import { AccordionGroupChangeEventDetail, IonAccordionGroup, IonContent } from '
|
|||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import {
|
||||
AddonMessagesProvider,
|
||||
AddonMessagesConversationFormatted,
|
||||
AddonMessages,
|
||||
AddonMessagesNewMessagedEventData,
|
||||
AddonMessagesUnreadConversationCountsEventData,
|
||||
AddonMessagesUpdateConversationAction,
|
||||
} from '../../services/messages';
|
||||
import {
|
||||
AddonMessagesOffline,
|
||||
|
@ -40,6 +38,17 @@ import { CoreNavigator } from '@services/navigator';
|
|||
import { CoreScreen } from '@services/screen';
|
||||
import { CorePlatform } from '@services/platform';
|
||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||
import {
|
||||
ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT,
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_NEW_MESSAGE_EVENT,
|
||||
ADDON_MESSAGES_OPEN_CONVERSATION_EVENT,
|
||||
ADDON_MESSAGES_READ_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT,
|
||||
ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT,
|
||||
AddonMessagesMessageConversationType,
|
||||
AddonMessagesUpdateConversationAction,
|
||||
} from '@addons/messages/constants';
|
||||
|
||||
const enum AddonMessagesGroupConversationOptionNames {
|
||||
FAVOURITES = 'favourites',
|
||||
|
@ -82,7 +91,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
optionName: AddonMessagesGroupConversationOptionNames.GROUP,
|
||||
titleString: 'addon.messages.groupconversations',
|
||||
emptyString: 'addon.messages.nogroupconversations',
|
||||
type: AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP,
|
||||
type: AddonMessagesMessageConversationType.GROUP,
|
||||
favourites: false,
|
||||
count: 0,
|
||||
unread: 0,
|
||||
|
@ -92,7 +101,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
optionName: AddonMessagesGroupConversationOptionNames.INDIVIDUAL,
|
||||
titleString: 'addon.messages.individualconversations',
|
||||
emptyString: 'addon.messages.noindividualconversations',
|
||||
type: AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL,
|
||||
type: AddonMessagesMessageConversationType.INDIVIDUAL,
|
||||
favourites: false,
|
||||
count: 0,
|
||||
unread: 0,
|
||||
|
@ -100,7 +109,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
},
|
||||
];
|
||||
|
||||
typeGroup = AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP;
|
||||
typeGroup = AddonMessagesMessageConversationType.GROUP;
|
||||
|
||||
protected siteId: string;
|
||||
protected currentUserId: number;
|
||||
|
@ -124,7 +133,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
|
||||
// Update conversations when new message is received.
|
||||
this.newMessagesObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.NEW_MESSAGE_EVENT,
|
||||
ADDON_MESSAGES_NEW_MESSAGE_EVENT,
|
||||
(data) => {
|
||||
// Check if the new message belongs to the option that is currently expanded.
|
||||
const expandedOption = this.getExpandedOption();
|
||||
|
@ -163,7 +172,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
conversation.lastmessagedate = data.timecreated / 1000;
|
||||
if (data.userFrom) {
|
||||
conversation.sentfromcurrentuser = data.userFrom.id === this.currentUserId;
|
||||
if (conversation.type === AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP) {
|
||||
if (conversation.type === AddonMessagesMessageConversationType.GROUP) {
|
||||
conversation.members[0] = data.userFrom;
|
||||
}
|
||||
}
|
||||
|
@ -183,7 +192,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
);
|
||||
|
||||
// Update conversations when a message is read.
|
||||
this.readChangedObserver = CoreEvents.on(AddonMessagesProvider.READ_CHANGED_EVENT, (data) => {
|
||||
this.readChangedObserver = CoreEvents.on(ADDON_MESSAGES_READ_CHANGED_EVENT, (data) => {
|
||||
if (data.conversationId) {
|
||||
const conversation = this.findConversation(data.conversationId);
|
||||
|
||||
|
@ -200,7 +209,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
|
||||
// Load a discussion if we receive an event to do so.
|
||||
this.openConversationObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.OPEN_CONVERSATION_EVENT,
|
||||
ADDON_MESSAGES_OPEN_CONVERSATION_EVENT,
|
||||
(data) => {
|
||||
if (data.conversationId || data.userId) {
|
||||
this.gotoConversation(data.conversationId, data.userId);
|
||||
|
@ -222,7 +231,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
|
||||
// Update conversations if we receive an event to do so.
|
||||
this.updateConversationListObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.UPDATE_CONVERSATION_LIST_EVENT,
|
||||
ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT,
|
||||
(data) => {
|
||||
if (data?.action === AddonMessagesUpdateConversationAction.MUTE) {
|
||||
// If the conversation is displayed, change its muted value.
|
||||
|
@ -256,7 +265,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
|
||||
// Update unread conversation counts.
|
||||
this.cronObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.UNREAD_CONVERSATION_COUNTS_EVENT,
|
||||
ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT,
|
||||
(data) => {
|
||||
this.setCounts(data, 'unread');
|
||||
},
|
||||
|
@ -265,7 +274,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
|
||||
// Update the contact requests badge.
|
||||
this.contactRequestsCountObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.CONTACT_REQUESTS_COUNT_EVENT,
|
||||
ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT,
|
||||
(data) => {
|
||||
this.contactRequestsCount = data.count;
|
||||
},
|
||||
|
@ -274,7 +283,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
|
||||
// Update block status of a user.
|
||||
this.memberInfoObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
(data) => {
|
||||
if (!data.userBlocked && !data.userUnblocked) {
|
||||
// The block status has not changed, ignore.
|
||||
|
@ -638,7 +647,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
// Conversation not found, it could be an old one or the message could belong to another option.
|
||||
conversation = {
|
||||
id: message.conversationid,
|
||||
type: message.conversation?.type || AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL,
|
||||
type: message.conversation?.type || AddonMessagesMessageConversationType.INDIVIDUAL,
|
||||
membercount: message.conversation?.membercount || 0,
|
||||
ismuted: message.conversation?.ismuted || false,
|
||||
isfavourite: message.conversation?.isfavourite || false,
|
||||
|
@ -657,7 +666,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
this.addOfflineConversation(conversation, option);
|
||||
}
|
||||
}
|
||||
} else if (option.type === AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL) {
|
||||
} else if (option.type === AddonMessagesMessageConversationType.INDIVIDUAL) {
|
||||
// It's a new conversation. Check if we already created it (there is more than one message for the same user).
|
||||
const conversation = this.findConversation(undefined, message.touserid, option);
|
||||
|
||||
|
@ -675,7 +684,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
}).then((user) => {
|
||||
const conversation: AddonMessagesConversationForList = {
|
||||
id: 0,
|
||||
type: AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL,
|
||||
type: AddonMessagesMessageConversationType.INDIVIDUAL,
|
||||
membercount: 0, // Faked data.
|
||||
ismuted: false, // Faked data.
|
||||
isfavourite: false, // Faked data.
|
||||
|
@ -742,7 +751,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
|||
return AddonMessagesGroupConversationOptionNames.FAVOURITES;
|
||||
}
|
||||
|
||||
if (conversation.type === AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP) {
|
||||
if (conversation.type === AddonMessagesMessageConversationType.GROUP) {
|
||||
return AddonMessagesGroupConversationOptionNames.GROUP;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ import { Component, OnDestroy, ViewChild } from '@angular/core';
|
|||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
|
||||
import { CoreSites } from '@services/sites';
|
||||
import {
|
||||
AddonMessagesProvider,
|
||||
AddonMessagesConversationMember,
|
||||
AddonMessagesMessageAreaContact,
|
||||
AddonMessages,
|
||||
|
@ -26,6 +25,11 @@ import { CoreNavigator } from '@services/navigator';
|
|||
import { CoreScreen } from '@services/screen';
|
||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||
import { CoreKeyboard } from '@singletons/keyboard';
|
||||
import {
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_LIMIT_SEARCH,
|
||||
ADDON_MESSAGES_LIMIT_INITIAL_USER_SEARCH,
|
||||
} from '@addons/messages/constants';
|
||||
|
||||
/**
|
||||
* Page for searching users.
|
||||
|
@ -74,7 +78,7 @@ export class AddonMessagesSearchPage implements OnDestroy {
|
|||
constructor() {
|
||||
// Update block status of a user.
|
||||
this.memberInfoObserver = CoreEvents.on(
|
||||
AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
(data) => {
|
||||
if (!data.userBlocked && !data.userUnblocked) {
|
||||
// The block status has not changed, ignore.
|
||||
|
@ -139,7 +143,7 @@ export class AddonMessagesSearchPage implements OnDestroy {
|
|||
let canLoadMoreMessages = false;
|
||||
|
||||
if (!loadMore || loadMore == 'contacts' || loadMore == 'noncontacts') {
|
||||
const limitNum = loadMore ? AddonMessagesProvider.LIMIT_SEARCH : AddonMessagesProvider.LIMIT_INITIAL_USER_SEARCH;
|
||||
const limitNum = loadMore ? ADDON_MESSAGES_LIMIT_SEARCH : ADDON_MESSAGES_LIMIT_INITIAL_USER_SEARCH;
|
||||
let limitFrom = 0;
|
||||
if (loadMore == 'contacts') {
|
||||
limitFrom = this.contacts.results.length;
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
import { Component, OnDestroy, OnInit, signal } from '@angular/core';
|
||||
import {
|
||||
AddonMessagesProvider, AddonMessagesMessagePreferences,
|
||||
AddonMessagesMessagePreferences,
|
||||
AddonMessagesMessagePreferencesNotification,
|
||||
AddonMessagesMessagePreferencesNotificationProcessor,
|
||||
AddonMessages,
|
||||
|
@ -29,6 +29,7 @@ import { AddonNotificationsPreferencesNotificationProcessorState } from '@addons
|
|||
import { CorePlatform } from '@services/platform';
|
||||
import { CoreErrorHelper } from '@services/error-helper';
|
||||
import { CoreLoadings } from '@services/loadings';
|
||||
import { ADDON_MESSAGES_NOTIFICATION_PREFERENCES_KEY, AddonMessagesMessagePrivacy } from '@addons/messages/constants';
|
||||
|
||||
/**
|
||||
* Page that displays the messages settings page.
|
||||
|
@ -46,9 +47,9 @@ export class AddonMessagesSettingsPage implements OnInit, OnDestroy {
|
|||
contactablePrivacy?: number | boolean;
|
||||
advancedContactable = false; // Whether the site supports "advanced" contactable privacy.
|
||||
allowSiteMessaging = false;
|
||||
onlyContactsValue = AddonMessagesProvider.MESSAGE_PRIVACY_ONLYCONTACTS;
|
||||
courseMemberValue = AddonMessagesProvider.MESSAGE_PRIVACY_COURSEMEMBER;
|
||||
siteValue = AddonMessagesProvider.MESSAGE_PRIVACY_SITE;
|
||||
onlyContactsValue = AddonMessagesMessagePrivacy.ONLYCONTACTS;
|
||||
courseMemberValue = AddonMessagesMessagePrivacy.COURSEMEMBER;
|
||||
siteValue = AddonMessagesMessagePrivacy.SITE;
|
||||
groupMessagingEnabled = false;
|
||||
sendOnEnter = false;
|
||||
warningMessage = signal<string | undefined>(undefined);
|
||||
|
@ -91,7 +92,7 @@ export class AddonMessagesSettingsPage implements OnInit, OnDestroy {
|
|||
for (const component of preferences.components) {
|
||||
// Only display get the notification preferences.
|
||||
component.notifications = component.notifications.filter((notification) =>
|
||||
notification.preferencekey == AddonMessagesProvider.NOTIFICATION_PREFERENCES_KEY);
|
||||
notification.preferencekey === ADDON_MESSAGES_NOTIFICATION_PREFERENCES_KEY);
|
||||
|
||||
if (this.loggedInOffLegacyMode) {
|
||||
// Load enabled from loggedin / loggedoff values.
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
import { Injectable } from '@angular/core';
|
||||
import {
|
||||
AddonMessagesProvider,
|
||||
AddonMessages,
|
||||
} from '../messages';
|
||||
import { CoreMainMenuHandler, CoreMainMenuHandlerToDisplay } from '@features/mainmenu/services/mainmenu-delegate';
|
||||
|
@ -28,6 +27,10 @@ import {
|
|||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { CoreMainMenuProvider } from '@features/mainmenu/services/mainmenu';
|
||||
import {
|
||||
ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT,
|
||||
ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT,
|
||||
} from '@addons/messages/constants';
|
||||
|
||||
/**
|
||||
* Handler to inject an option into main menu.
|
||||
|
@ -58,14 +61,14 @@ export class AddonMessagesMainMenuHandlerService implements CoreMainMenuHandler,
|
|||
|
||||
constructor() {
|
||||
|
||||
CoreEvents.on(AddonMessagesProvider.UNREAD_CONVERSATION_COUNTS_EVENT, (data) => {
|
||||
CoreEvents.on(ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT, (data) => {
|
||||
this.unreadCount = data.favourites + data.individual + data.group + data.self;
|
||||
this.orMore = !!data.orMore;
|
||||
|
||||
data.siteId && this.updateBadge(data.siteId);
|
||||
});
|
||||
|
||||
CoreEvents.on(AddonMessagesProvider.CONTACT_REQUESTS_COUNT_EVENT, (data) => {
|
||||
CoreEvents.on(ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT, (data) => {
|
||||
this.contactRequestsCount = data.count;
|
||||
|
||||
data.siteId && this.updateBadge(data.siteId);
|
||||
|
|
|
@ -18,7 +18,6 @@ import {
|
|||
AddonMessagesOffline, AddonMessagesOfflineAnyMessagesFormatted,
|
||||
} from './messages-offline';
|
||||
import {
|
||||
AddonMessagesProvider,
|
||||
AddonMessages,
|
||||
AddonMessagesGetMessagesWSParams,
|
||||
} from './messages';
|
||||
|
@ -33,6 +32,20 @@ import { CoreError } from '@classes/errors/error';
|
|||
import { CoreSiteWSPreSets } from '@classes/sites/authenticated-site';
|
||||
import { CoreWait } from '@singletons/wait';
|
||||
import { CoreErrorHelper, CoreErrorObject } from '@services/error-helper';
|
||||
import { ADDON_MESSAGES_AUTO_SYNCED, ADDON_MESSAGES_LIMIT_MESSAGES } from '../constants';
|
||||
|
||||
declare module '@singletons/events' {
|
||||
|
||||
/**
|
||||
* Augment CoreEventsData interface with events specific to this service.
|
||||
*
|
||||
* @see https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation
|
||||
*/
|
||||
export interface CoreEventsData {
|
||||
[ADDON_MESSAGES_AUTO_SYNCED]: AddonMessagesSyncEvents;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Service to sync messages.
|
||||
|
@ -40,8 +53,6 @@ import { CoreErrorHelper, CoreErrorObject } from '@services/error-helper';
|
|||
@Injectable({ providedIn: 'root' })
|
||||
export class AddonMessagesSyncProvider extends CoreSyncBaseProvider<AddonMessagesSyncEvents> {
|
||||
|
||||
static readonly AUTO_SYNCED = 'addon_messages_autom_synced';
|
||||
|
||||
constructor() {
|
||||
super('AddonMessagesSync');
|
||||
}
|
||||
|
@ -113,7 +124,7 @@ export class AddonMessagesSyncProvider extends CoreSyncBaseProvider<AddonMessage
|
|||
}
|
||||
|
||||
// Sync successful, send event.
|
||||
CoreEvents.trigger(AddonMessagesSyncProvider.AUTO_SYNCED, result, siteId);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_AUTO_SYNCED, result, siteId);
|
||||
|
||||
return;
|
||||
}));
|
||||
|
@ -126,7 +137,7 @@ export class AddonMessagesSyncProvider extends CoreSyncBaseProvider<AddonMessage
|
|||
}
|
||||
|
||||
// Sync successful, send event.
|
||||
CoreEvents.trigger(AddonMessagesSyncProvider.AUTO_SYNCED, result, siteId);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_AUTO_SYNCED, result, siteId);
|
||||
|
||||
return;
|
||||
}));
|
||||
|
@ -305,7 +316,7 @@ export class AddonMessagesSyncProvider extends CoreSyncBaseProvider<AddonMessage
|
|||
const params: AddonMessagesGetMessagesWSParams = {
|
||||
useridto: userId,
|
||||
useridfrom: siteCurrentUserId,
|
||||
limitnum: AddonMessagesProvider.LIMIT_MESSAGES,
|
||||
limitnum: ADDON_MESSAGES_LIMIT_MESSAGES,
|
||||
};
|
||||
const preSets: CoreSiteWSPreSets = {
|
||||
cacheKey: AddonMessages.getCacheKeyForDiscussion(userId),
|
||||
|
|
|
@ -30,11 +30,28 @@ import { CoreSite } from '@classes/sites/site';
|
|||
import { CoreWSExternalWarning } from '@services/ws';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { CoreError } from '@classes/errors/error';
|
||||
import { AddonMessagesSyncEvents, AddonMessagesSyncProvider } from './messages-sync';
|
||||
import { CoreWSError } from '@classes/errors/wserror';
|
||||
import { AddonNotificationsPreferencesNotificationProcessorState } from '@addons/notifications/services/notifications';
|
||||
import { CoreSiteWSPreSets } from '@classes/sites/authenticated-site';
|
||||
import { CoreCacheUpdateFrequency } from '@/core/constants';
|
||||
import {
|
||||
ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT,
|
||||
ADDON_MESSAGES_LIMIT_CONTACTS,
|
||||
ADDON_MESSAGES_LIMIT_INITIAL_USER_SEARCH,
|
||||
ADDON_MESSAGES_LIMIT_MESSAGES,
|
||||
ADDON_MESSAGES_LIMIT_SEARCH,
|
||||
ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_NEW_MESSAGE_EVENT,
|
||||
ADDON_MESSAGES_OPEN_CONVERSATION_EVENT,
|
||||
ADDON_MESSAGES_POLL_INTERVAL,
|
||||
ADDON_MESSAGES_PUSH_SIMULATION_COMPONENT,
|
||||
ADDON_MESSAGES_READ_CHANGED_EVENT,
|
||||
ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT,
|
||||
ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT,
|
||||
AddonMessagesMessageConversationType,
|
||||
AddonMessagesMessagePrivacy,
|
||||
AddonMessagesUpdateConversationAction,
|
||||
} from '../constants';
|
||||
|
||||
declare module '@singletons/events' {
|
||||
|
||||
|
@ -44,24 +61,17 @@ declare module '@singletons/events' {
|
|||
* @see https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation
|
||||
*/
|
||||
export interface CoreEventsData {
|
||||
[AddonMessagesProvider.NEW_MESSAGE_EVENT]: AddonMessagesNewMessagedEventData;
|
||||
[AddonMessagesProvider.READ_CHANGED_EVENT]: AddonMessagesReadChangedEventData;
|
||||
[AddonMessagesProvider.OPEN_CONVERSATION_EVENT]: AddonMessagesOpenConversationEventData;
|
||||
[AddonMessagesProvider.UPDATE_CONVERSATION_LIST_EVENT]: AddonMessagesUpdateConversationListEventData;
|
||||
[AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT]: AddonMessagesMemberInfoChangedEventData;
|
||||
[AddonMessagesProvider.UNREAD_CONVERSATION_COUNTS_EVENT]: AddonMessagesUnreadConversationCountsEventData;
|
||||
[AddonMessagesProvider.CONTACT_REQUESTS_COUNT_EVENT]: AddonMessagesContactRequestCountEventData;
|
||||
[AddonMessagesSyncProvider.AUTO_SYNCED]: AddonMessagesSyncEvents;
|
||||
[ADDON_MESSAGES_NEW_MESSAGE_EVENT]: AddonMessagesNewMessagedEventData;
|
||||
[ADDON_MESSAGES_READ_CHANGED_EVENT]: AddonMessagesReadChangedEventData;
|
||||
[ADDON_MESSAGES_OPEN_CONVERSATION_EVENT]: AddonMessagesOpenConversationEventData;
|
||||
[ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT]: AddonMessagesUpdateConversationListEventData;
|
||||
[ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT]: AddonMessagesMemberInfoChangedEventData;
|
||||
[ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT]: AddonMessagesUnreadConversationCountsEventData;
|
||||
[ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT]: AddonMessagesContactRequestCountEventData;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const enum AddonMessagesUpdateConversationAction {
|
||||
MUTE = 'mute',
|
||||
FAVOURITE = 'favourite',
|
||||
DELETE = 'delete',
|
||||
}
|
||||
|
||||
/**
|
||||
* Service to handle messages.
|
||||
*/
|
||||
|
@ -70,27 +80,87 @@ export class AddonMessagesProvider {
|
|||
|
||||
protected static readonly ROOT_CACHE_KEY = 'mmaMessages:';
|
||||
|
||||
static readonly NEW_MESSAGE_EVENT = 'addon_messages_new_message_event';
|
||||
static readonly READ_CHANGED_EVENT = 'addon_messages_read_changed_event';
|
||||
static readonly OPEN_CONVERSATION_EVENT = 'addon_messages_open_conversation_event'; // Notify a conversation should be opened.
|
||||
static readonly UPDATE_CONVERSATION_LIST_EVENT = 'addon_messages_update_conversation_list_event';
|
||||
static readonly MEMBER_INFO_CHANGED_EVENT = 'addon_messages_member_changed_event';
|
||||
static readonly UNREAD_CONVERSATION_COUNTS_EVENT = 'addon_messages_unread_conversation_counts_event';
|
||||
static readonly CONTACT_REQUESTS_COUNT_EVENT = 'addon_messages_contact_requests_count_event';
|
||||
static readonly POLL_INTERVAL = 10000;
|
||||
static readonly PUSH_SIMULATION_COMPONENT = 'AddonMessagesPushSimulation';
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_NEW_MESSAGE_EVENT instead.
|
||||
*/
|
||||
static readonly NEW_MESSAGE_EVENT = ADDON_MESSAGES_NEW_MESSAGE_EVENT;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_READ_CHANGED_EVENT instead.
|
||||
*/
|
||||
static readonly READ_CHANGED_EVENT = ADDON_MESSAGES_READ_CHANGED_EVENT;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_OPEN_CONVERSATION_EVENT instead.
|
||||
*/
|
||||
static readonly OPEN_CONVERSATION_EVENT = ADDON_MESSAGES_OPEN_CONVERSATION_EVENT;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT instead.
|
||||
*/
|
||||
static readonly UPDATE_CONVERSATION_LIST_EVENT = ADDON_MESSAGES_UPDATE_CONVERSATION_LIST_EVENT;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT instead.
|
||||
*/
|
||||
static readonly MEMBER_INFO_CHANGED_EVENT = ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT instead.
|
||||
*/
|
||||
static readonly UNREAD_CONVERSATION_COUNTS_EVENT = ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT instead.
|
||||
*/
|
||||
static readonly CONTACT_REQUESTS_COUNT_EVENT = ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_POLL_INTERVAL instead.
|
||||
*/
|
||||
static readonly POLL_INTERVAL = ADDON_MESSAGES_POLL_INTERVAL;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_PUSH_SIMULATION_COMPONENT instead.
|
||||
*/
|
||||
static readonly PUSH_SIMULATION_COMPONENT = ADDON_MESSAGES_PUSH_SIMULATION_COMPONENT;
|
||||
|
||||
static readonly MESSAGE_PRIVACY_COURSEMEMBER = 0; // Privacy setting for being messaged by anyone within courses user is member.
|
||||
static readonly MESSAGE_PRIVACY_ONLYCONTACTS = 1; // Privacy setting for being messaged only by contacts.
|
||||
static readonly MESSAGE_PRIVACY_SITE = 2; // Privacy setting for being messaged by anyone on the site.
|
||||
static readonly MESSAGE_CONVERSATION_TYPE_INDIVIDUAL = 1; // An individual conversation.
|
||||
static readonly MESSAGE_CONVERSATION_TYPE_GROUP = 2; // A group conversation.
|
||||
static readonly MESSAGE_CONVERSATION_TYPE_SELF = 3; // A self conversation.
|
||||
static readonly LIMIT_CONTACTS = 50;
|
||||
static readonly LIMIT_MESSAGES = 50;
|
||||
static readonly LIMIT_INITIAL_USER_SEARCH = 3;
|
||||
static readonly LIMIT_SEARCH = 50;
|
||||
/**
|
||||
* @deprecated since 5.0. Use AddonMessagesMessagePrivacy.COURSEMEMBER instead.
|
||||
*/
|
||||
static readonly MESSAGE_PRIVACY_COURSEMEMBER = AddonMessagesMessagePrivacy.COURSEMEMBER;
|
||||
/**
|
||||
* @deprecated since 5.0. Use AddonMessagesMessagePrivacy.ONLYCONTACTS instead.
|
||||
*/
|
||||
static readonly MESSAGE_PRIVACY_ONLYCONTACTS = AddonMessagesMessagePrivacy.ONLYCONTACTS;
|
||||
/**
|
||||
* @deprecated since 5.0. Use AddonMessagesMessagePrivacy.SITE instead.
|
||||
*/
|
||||
static readonly MESSAGE_PRIVACY_SITE = AddonMessagesMessagePrivacy.SITE;
|
||||
/**
|
||||
* @deprecated since 5.0. Use AddonMessagesMessageConversationType.INDIVIDUAL instead.
|
||||
*/
|
||||
static readonly MESSAGE_CONVERSATION_TYPE_INDIVIDUAL = AddonMessagesMessageConversationType.INDIVIDUAL;
|
||||
/**
|
||||
* @deprecated since 5.0. Use AddonMessagesMessageConversationType.GROUP instead.
|
||||
*/
|
||||
static readonly MESSAGE_CONVERSATION_TYPE_GROUP = AddonMessagesMessageConversationType.GROUP;
|
||||
/**
|
||||
* @deprecated since 5.0. Use AddonMessagesMessageConversationType.SELF instead.
|
||||
*/
|
||||
static readonly MESSAGE_CONVERSATION_TYPE_SELF = AddonMessagesMessageConversationType.SELF;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_LIMIT_CONTACTS instead.
|
||||
*/
|
||||
static readonly LIMIT_CONTACTS = ADDON_MESSAGES_LIMIT_CONTACTS;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_LIMIT_MESSAGES instead.
|
||||
*/
|
||||
static readonly LIMIT_MESSAGES = ADDON_MESSAGES_LIMIT_MESSAGES;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_LIMIT_INITIAL_USER_SEARCH instead.
|
||||
*/
|
||||
static readonly LIMIT_INITIAL_USER_SEARCH = ADDON_MESSAGES_LIMIT_INITIAL_USER_SEARCH;
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_LIMIT_SEARCH instead.
|
||||
*/
|
||||
static readonly LIMIT_SEARCH = ADDON_MESSAGES_LIMIT_SEARCH;
|
||||
|
||||
/**
|
||||
* @deprecated since 5.0. Use ADDON_MESSAGES_NEW_MESSAGE_EVENT instead.
|
||||
*/
|
||||
static readonly NOTIFICATION_PREFERENCES_KEY = 'message_provider_moodle_instantmessage';
|
||||
|
||||
protected logger: CoreLogger;
|
||||
|
@ -148,7 +218,7 @@ export class AddonMessagesProvider {
|
|||
} finally {
|
||||
const data: AddonMessagesMemberInfoChangedEventData = { userId, userBlocked: true };
|
||||
|
||||
CoreEvents.trigger(AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -177,7 +247,7 @@ export class AddonMessagesProvider {
|
|||
this.refreshContactRequestsCount(site.id),
|
||||
]).finally(() => {
|
||||
const data: AddonMessagesMemberInfoChangedEventData = { userId, contactRequestConfirmed: true };
|
||||
CoreEvents.trigger(AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -213,7 +283,7 @@ export class AddonMessagesProvider {
|
|||
|
||||
await this.invalidateAllMemberInfo(userId, site).finally(() => {
|
||||
const data: AddonMessagesMemberInfoChangedEventData = { userId, contactRequestCreated: true };
|
||||
CoreEvents.trigger(AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -240,7 +310,7 @@ export class AddonMessagesProvider {
|
|||
this.refreshContactRequestsCount(site.id),
|
||||
]).finally(() => {
|
||||
const data: AddonMessagesMemberInfoChangedEventData = { userId, contactRequestDeclined: true };
|
||||
CoreEvents.trigger(AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -374,8 +444,8 @@ export class AddonMessagesProvider {
|
|||
conversation.lastmessagedate = lastMessage ? lastMessage.timecreated : undefined;
|
||||
conversation.sentfromcurrentuser = lastMessage ? lastMessage.useridfrom == userId : undefined;
|
||||
|
||||
if (conversation.type != AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP) {
|
||||
const isIndividual = conversation.type == AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL;
|
||||
if (conversation.type != AddonMessagesMessageConversationType.GROUP) {
|
||||
const isIndividual = conversation.type == AddonMessagesMessageConversationType.INDIVIDUAL;
|
||||
|
||||
const otherUser = conversation.members.find((member) =>
|
||||
(isIndividual && member.id != userId) || (!isIndividual && member.id == userId));
|
||||
|
@ -680,14 +750,14 @@ export class AddonMessagesProvider {
|
|||
* Get the list of user contacts.
|
||||
*
|
||||
* @param limitFrom Position of the first contact to fetch.
|
||||
* @param limitNum Number of contacts to fetch. Default is AddonMessagesProvider.LIMIT_CONTACTS.
|
||||
* @param limitNum Number of contacts to fetch. Default is ADDON_MESSAGES_LIMIT_CONTACTS.
|
||||
* @param siteId Site ID. If not defined, use current site.
|
||||
* @returns Promise resolved with the list of user contacts.
|
||||
* @since 3.6
|
||||
*/
|
||||
async getUserContacts(
|
||||
limitFrom: number = 0,
|
||||
limitNum: number = AddonMessagesProvider.LIMIT_CONTACTS,
|
||||
limitNum: number = ADDON_MESSAGES_LIMIT_CONTACTS,
|
||||
siteId?: string,
|
||||
): Promise<{contacts: AddonMessagesConversationMember[]; canLoadMore: boolean}> {
|
||||
const site = await CoreSites.getSite(siteId);
|
||||
|
@ -724,14 +794,14 @@ export class AddonMessagesProvider {
|
|||
* Get the contact request sent to the current user.
|
||||
*
|
||||
* @param limitFrom Position of the first contact request to fetch.
|
||||
* @param limitNum Number of contact requests to fetch. Default is AddonMessagesProvider.LIMIT_CONTACTS.
|
||||
* @param limitNum Number of contact requests to fetch. Default is ADDON_MESSAGES_LIMIT_CONTACTS.
|
||||
* @param siteId Site ID. If not defined, use current site.
|
||||
* @returns Promise resolved with the list of contact requests.
|
||||
* @since 3.6
|
||||
*/
|
||||
async getContactRequests(
|
||||
limitFrom: number = 0,
|
||||
limitNum: number = AddonMessagesProvider.LIMIT_CONTACTS,
|
||||
limitNum: number = ADDON_MESSAGES_LIMIT_CONTACTS,
|
||||
siteId?: string,
|
||||
): Promise<{requests: AddonMessagesConversationMember[]; canLoadMore: boolean}> {
|
||||
const site = await CoreSites.getSite(siteId);
|
||||
|
@ -792,7 +862,7 @@ export class AddonMessagesProvider {
|
|||
};
|
||||
|
||||
// Notify the new count so all badges are updated.
|
||||
CoreEvents.trigger(AddonMessagesProvider.CONTACT_REQUESTS_COUNT_EVENT, data , site.id);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_CONTACT_REQUESTS_COUNT_EVENT, data , site.id);
|
||||
|
||||
return data.count;
|
||||
|
||||
|
@ -936,7 +1006,7 @@ export class AddonMessagesProvider {
|
|||
): Promise<{members: AddonMessagesConversationMember[]; canLoadMore: boolean}> {
|
||||
const site = await CoreSites.getSite(siteId);
|
||||
userId = userId || site.getUserId();
|
||||
limitTo = limitTo ?? AddonMessagesProvider.LIMIT_MESSAGES;
|
||||
limitTo = limitTo ?? ADDON_MESSAGES_LIMIT_MESSAGES;
|
||||
|
||||
const preSets: CoreSiteWSPreSets = {
|
||||
cacheKey: this.getCacheKeyForConversationMembers(userId, conversationId),
|
||||
|
@ -984,7 +1054,7 @@ export class AddonMessagesProvider {
|
|||
|
||||
options.userId = options.userId || site.getUserId();
|
||||
options.limitFrom = options.limitFrom || 0;
|
||||
options.limitTo = options.limitTo ?? AddonMessagesProvider.LIMIT_MESSAGES;
|
||||
options.limitTo = options.limitTo ?? ADDON_MESSAGES_LIMIT_MESSAGES;
|
||||
options.timeFrom = options.timeFrom || 0;
|
||||
options.newestFirst = options.newestFirst ?? true;
|
||||
|
||||
|
@ -1077,7 +1147,7 @@ export class AddonMessagesProvider {
|
|||
const params: AddonMessagesGetConversationsWSParams = {
|
||||
userid: userId,
|
||||
limitfrom: limitFrom,
|
||||
limitnum: AddonMessagesProvider.LIMIT_MESSAGES + 1,
|
||||
limitnum: ADDON_MESSAGES_LIMIT_MESSAGES + 1,
|
||||
};
|
||||
|
||||
if (forceCache) {
|
||||
|
@ -1092,7 +1162,7 @@ export class AddonMessagesProvider {
|
|||
if (favourites !== undefined && favourites != null) {
|
||||
params.favourites = !!favourites;
|
||||
}
|
||||
if (site.isVersionGreaterEqualThan('3.7') && type != AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP) {
|
||||
if (site.isVersionGreaterEqualThan('3.7') && type != AddonMessagesMessageConversationType.GROUP) {
|
||||
// Add self conversation to the list.
|
||||
params.mergeself = true;
|
||||
}
|
||||
|
@ -1113,12 +1183,12 @@ export class AddonMessagesProvider {
|
|||
|
||||
// Format the conversations, adding some calculated fields.
|
||||
const conversations = response.conversations
|
||||
.slice(0, AddonMessagesProvider.LIMIT_MESSAGES)
|
||||
.slice(0, ADDON_MESSAGES_LIMIT_MESSAGES)
|
||||
.map((conversation) => this.formatConversation(conversation, userId!));
|
||||
|
||||
return {
|
||||
conversations,
|
||||
canLoadMore: response.conversations.length > AddonMessagesProvider.LIMIT_MESSAGES,
|
||||
canLoadMore: response.conversations.length > ADDON_MESSAGES_LIMIT_MESSAGES,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1145,9 +1215,9 @@ export class AddonMessagesProvider {
|
|||
|
||||
const counts = {
|
||||
favourites: result.favourites,
|
||||
individual: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL],
|
||||
group: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP],
|
||||
self: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_SELF] || 0,
|
||||
individual: result.types[AddonMessagesMessageConversationType.INDIVIDUAL],
|
||||
group: result.types[AddonMessagesMessageConversationType.GROUP],
|
||||
self: result.types[AddonMessagesMessageConversationType.SELF] || 0,
|
||||
};
|
||||
|
||||
return counts;
|
||||
|
@ -1190,7 +1260,7 @@ export class AddonMessagesProvider {
|
|||
const params: AddonMessagesGetMessagesWSParams = {
|
||||
useridto: site.getUserId(),
|
||||
useridfrom: userId,
|
||||
limitnum: AddonMessagesProvider.LIMIT_MESSAGES,
|
||||
limitnum: ADDON_MESSAGES_LIMIT_MESSAGES,
|
||||
};
|
||||
|
||||
if (lfReceivedUnread > 0 || lfReceivedRead > 0 || lfSentUnread > 0 || lfSentRead > 0) {
|
||||
|
@ -1213,13 +1283,13 @@ export class AddonMessagesProvider {
|
|||
result.messages = result.messages.concat(sent);
|
||||
const hasSent = sent.length > 0;
|
||||
|
||||
if (result.messages.length > AddonMessagesProvider.LIMIT_MESSAGES) {
|
||||
if (result.messages.length > ADDON_MESSAGES_LIMIT_MESSAGES) {
|
||||
// Sort messages and get the more recent ones.
|
||||
result.canLoadMore = true;
|
||||
result.messages = this.sortMessages(result['messages']);
|
||||
result.messages = result.messages.slice(-AddonMessagesProvider.LIMIT_MESSAGES);
|
||||
result.messages = result.messages.slice(-ADDON_MESSAGES_LIMIT_MESSAGES);
|
||||
} else {
|
||||
result.canLoadMore = result.messages.length == AddonMessagesProvider.LIMIT_MESSAGES && (!hasReceived || !hasSent);
|
||||
result.canLoadMore = result.messages.length == ADDON_MESSAGES_LIMIT_MESSAGES && (!hasReceived || !hasSent);
|
||||
}
|
||||
|
||||
if (excludePending) {
|
||||
|
@ -1290,7 +1360,7 @@ export class AddonMessagesProvider {
|
|||
const params: AddonMessagesGetMessagesWSParams = {
|
||||
useridto: currentUserId,
|
||||
useridfrom: 0,
|
||||
limitnum: AddonMessagesProvider.LIMIT_MESSAGES,
|
||||
limitnum: ADDON_MESSAGES_LIMIT_MESSAGES,
|
||||
};
|
||||
|
||||
const preSets: CoreSiteWSPreSets = {
|
||||
|
@ -1573,9 +1643,9 @@ export class AddonMessagesProvider {
|
|||
|
||||
counts = {
|
||||
favourites: result.favourites,
|
||||
individual: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_INDIVIDUAL],
|
||||
group: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_GROUP],
|
||||
self: result.types[AddonMessagesProvider.MESSAGE_CONVERSATION_TYPE_SELF] || 0,
|
||||
individual: result.types[AddonMessagesMessageConversationType.INDIVIDUAL],
|
||||
group: result.types[AddonMessagesMessageConversationType.GROUP],
|
||||
self: result.types[AddonMessagesMessageConversationType.SELF] || 0,
|
||||
};
|
||||
|
||||
} else {
|
||||
|
@ -1593,7 +1663,7 @@ export class AddonMessagesProvider {
|
|||
}
|
||||
|
||||
// Notify the new counts so all views are updated.
|
||||
CoreEvents.trigger(AddonMessagesProvider.UNREAD_CONVERSATION_COUNTS_EVENT, counts, site.id);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_UNREAD_CONVERSATION_COUNTS_EVENT, counts, site.id);
|
||||
|
||||
return counts;
|
||||
}
|
||||
|
@ -1618,7 +1688,7 @@ export class AddonMessagesProvider {
|
|||
const params: AddonMessagesGetMessagesWSParams = {
|
||||
read: false,
|
||||
limitfrom: 0,
|
||||
limitnum: AddonMessagesProvider.LIMIT_MESSAGES,
|
||||
limitnum: ADDON_MESSAGES_LIMIT_MESSAGES,
|
||||
useridto: site.getUserId(),
|
||||
useridfrom: 0,
|
||||
};
|
||||
|
@ -2250,7 +2320,7 @@ export class AddonMessagesProvider {
|
|||
this.invalidateContactsCache(site.id),
|
||||
]).then(() => {
|
||||
const data: AddonMessagesMemberInfoChangedEventData = { userId, contactRemoved: true };
|
||||
CoreEvents.trigger(AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
|
||||
return;
|
||||
});
|
||||
|
@ -2297,7 +2367,7 @@ export class AddonMessagesProvider {
|
|||
* @param query The query string.
|
||||
* @param userId The user ID. If not defined, current user.
|
||||
* @param limitFrom Position of the first result to get. Defaults to 0.
|
||||
* @param limitNum Number of results to get. Defaults to AddonMessagesProvider.LIMIT_SEARCH.
|
||||
* @param limitNum Number of results to get. Defaults to ADDON_MESSAGES_LIMIT_SEARCH.
|
||||
* @param siteId Site ID. If not defined, current site.
|
||||
* @returns Promise resolved with the results.
|
||||
*/
|
||||
|
@ -2305,7 +2375,7 @@ export class AddonMessagesProvider {
|
|||
query: string,
|
||||
userId?: number,
|
||||
limitFrom: number = 0,
|
||||
limitNum: number = AddonMessagesProvider.LIMIT_SEARCH,
|
||||
limitNum: number = ADDON_MESSAGES_LIMIT_SEARCH,
|
||||
siteId?: string,
|
||||
): Promise<{messages: AddonMessagesMessageAreaContact[]; canLoadMore: boolean}> {
|
||||
const site = await CoreSites.getSite(siteId);
|
||||
|
@ -2350,7 +2420,7 @@ export class AddonMessagesProvider {
|
|||
*
|
||||
* @param query Text to search for.
|
||||
* @param limitFrom Position of the first found user to fetch.
|
||||
* @param limitNum Number of found users to fetch. Defaults to AddonMessagesProvider.LIMIT_SEARCH.
|
||||
* @param limitNum Number of found users to fetch. Defaults to ADDON_MESSAGES_LIMIT_SEARCH.
|
||||
* @param siteId Site ID. If not defined, use current site.
|
||||
* @returns Resolved with two lists of found users: contacts and non-contacts.
|
||||
* @since 3.6
|
||||
|
@ -2358,7 +2428,7 @@ export class AddonMessagesProvider {
|
|||
async searchUsers(
|
||||
query: string,
|
||||
limitFrom: number = 0,
|
||||
limitNum: number = AddonMessagesProvider.LIMIT_SEARCH,
|
||||
limitNum: number = ADDON_MESSAGES_LIMIT_SEARCH,
|
||||
siteId?: string,
|
||||
): Promise<{
|
||||
contacts: AddonMessagesConversationMember[];
|
||||
|
@ -2828,7 +2898,7 @@ export class AddonMessagesProvider {
|
|||
} finally {
|
||||
const data: AddonMessagesMemberInfoChangedEventData = { userId, userUnblocked: true };
|
||||
|
||||
CoreEvents.trigger(AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
CoreEvents.trigger(ADDON_MESSAGES_MEMBER_INFO_CHANGED_EVENT, data, site.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue