MOBILE-3631 messages: Small fixes found during Peer review
parent
344eedfde5
commit
a03e29eba3
|
@ -17,7 +17,7 @@ import { IonRefresher } from '@ionic/angular';
|
||||||
import { CoreSites } from '@services/sites';
|
import { CoreSites } from '@services/sites';
|
||||||
import {
|
import {
|
||||||
AddonMessagesProvider,
|
AddonMessagesProvider,
|
||||||
AddonMessagesGetContactsResult,
|
AddonMessagesGetContactsWSResponse,
|
||||||
AddonMessagesSearchContactsContact,
|
AddonMessagesSearchContactsContact,
|
||||||
AddonMessagesGetContactsContact,
|
AddonMessagesGetContactsContact,
|
||||||
AddonMessages,
|
AddonMessages,
|
||||||
|
@ -268,6 +268,6 @@ export class AddonMessagesContacts35Page implements OnInit, OnDestroy {
|
||||||
/**
|
/**
|
||||||
* Contacts with some calculated data.
|
* Contacts with some calculated data.
|
||||||
*/
|
*/
|
||||||
export type AddonMessagesGetContactsFormatted = AddonMessagesGetContactsResult & {
|
export type AddonMessagesGetContactsFormatted = AddonMessagesGetContactsWSResponse & {
|
||||||
search?: AddonMessagesSearchContactsContact[]; // Calculated in the app. Result of searching users.
|
search?: AddonMessagesSearchContactsContact[]; // Calculated in the app. Result of searching users.
|
||||||
};
|
};
|
||||||
|
|
|
@ -24,15 +24,14 @@ import {
|
||||||
AddonMessagesGetMessagesMessage,
|
AddonMessagesGetMessagesMessage,
|
||||||
AddonMessages,
|
AddonMessages,
|
||||||
AddonMessagesMemberInfoChangedEventData,
|
AddonMessagesMemberInfoChangedEventData,
|
||||||
AddonMessagesSendInstantMessagesMessage,
|
|
||||||
AddonMessagesSendMessagesToConversationMessage,
|
|
||||||
AddonMessagesReadChangedEventData,
|
AddonMessagesReadChangedEventData,
|
||||||
AddonMessagesNewMessagedEventData,
|
AddonMessagesNewMessagedEventData,
|
||||||
AddonMessagesUpdateConversationListEventData,
|
AddonMessagesUpdateConversationListEventData,
|
||||||
AddonMessagesConversationMessageFormatted,
|
AddonMessagesConversationMessageFormatted,
|
||||||
AddonMessagesOpenConversationEventData,
|
AddonMessagesOpenConversationEventData,
|
||||||
|
AddonMessagesSendMessageResults,
|
||||||
} from '../../services/messages';
|
} from '../../services/messages';
|
||||||
import { AddonMessagesOffline } from '../../services/messages-offline';
|
import { AddonMessagesOffline, AddonMessagesOfflineMessagesDBRecordFormatted } from '../../services/messages-offline';
|
||||||
import { AddonMessagesSync, AddonMessagesSyncEvents, AddonMessagesSyncProvider } from '../../services/messages-sync';
|
import { AddonMessagesSync, AddonMessagesSyncEvents, AddonMessagesSyncProvider } from '../../services/messages-sync';
|
||||||
import { CoreUser } from '@features/user/services/user';
|
import { CoreUser } from '@features/user/services/user';
|
||||||
import { CoreDomUtils } from '@services/utils/dom';
|
import { CoreDomUtils } from '@services/utils/dom';
|
||||||
|
@ -49,9 +48,6 @@ import { ModalController, Translate } from '@singletons';
|
||||||
import { CoreNavigator } from '@services/navigator';
|
import { CoreNavigator } from '@services/navigator';
|
||||||
import { CoreIonLoadingElement } from '@classes/ion-loading';
|
import { CoreIonLoadingElement } from '@classes/ion-loading';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import {
|
|
||||||
AddonMessagesOfflineMessagesDBRecordFormatted,
|
|
||||||
} from '@addons/messages/services/database/messages';
|
|
||||||
import { AddonMessagesConversationInfoComponent } from '../../components/conversation-info/conversation-info';
|
import { AddonMessagesConversationInfoComponent } from '../../components/conversation-info/conversation-info';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1187,10 +1183,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
|
||||||
} finally {
|
} finally {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let data: {
|
let data: AddonMessagesSendMessageResults;
|
||||||
sent: boolean;
|
|
||||||
message: AddonMessagesSendMessagesToConversationMessage | AddonMessagesSendInstantMessagesMessage;
|
|
||||||
};
|
|
||||||
if (this.conversationId) {
|
if (this.conversationId) {
|
||||||
data = await AddonMessages.instance.sendMessageToConversation(this.conversation!, text);
|
data = await AddonMessages.instance.sendMessageToConversation(this.conversation!, text);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -51,8 +51,8 @@
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container *ngIf="!search.showResults">
|
<ng-container *ngIf="!search.showResults">
|
||||||
<ion-item class="ion-text-wrap addon-message-discussion" *ngFor="let discussion of discussions"
|
<ion-item class="ion-text-wrap addon-message-discussion" *ngFor="let discussion of discussions"
|
||||||
[title]="discussion.fullname" (click)="gotoDiscussion(discussion.message!.user)"
|
[title]="discussion.fullname" (click)="gotoDiscussion(discussion.message!.user)"
|
||||||
[class.core-selected-item]="discussion.message!.user == discussionUserId">
|
[class.core-selected-item]="discussion.message!.user == discussionUserId">
|
||||||
<core-user-avatar [user]="discussion" slot="start" checkOnline="false"></core-user-avatar>
|
<core-user-avatar [user]="discussion" slot="start" checkOnline="false"></core-user-avatar>
|
||||||
<ion-label>
|
<ion-label>
|
||||||
<h2>{{ discussion.fullname }}</h2>
|
<h2>{{ discussion.fullname }}</h2>
|
||||||
|
@ -73,10 +73,10 @@
|
||||||
</ion-list>
|
</ion-list>
|
||||||
|
|
||||||
<core-empty-box *ngIf="(!discussions || discussions.length <= 0) && !search.showResults" icon="far-comments"
|
<core-empty-box *ngIf="(!discussions || discussions.length <= 0) && !search.showResults" icon="far-comments"
|
||||||
[message]="'addon.messages.nomessagesfound' | translate"></core-empty-box>
|
[message]="'addon.messages.nomessagesfound' | translate"></core-empty-box>
|
||||||
|
|
||||||
<core-empty-box *ngIf="(!search.results || search.results.length <= 0) && search.showResults" icon="search"
|
<core-empty-box *ngIf="(!search.results || search.results.length <= 0) && search.showResults" icon="search"
|
||||||
[message]="'core.noresults' | translate"></core-empty-box>
|
[message]="'core.noresults' | translate"></core-empty-box>
|
||||||
</core-loading>
|
</core-loading>
|
||||||
</core-split-view>
|
</core-split-view>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
|
|
|
@ -57,16 +57,10 @@ export class AddonMessagesDiscussions35Page implements OnInit, OnDestroy {
|
||||||
discussions: AddonMessagesDiscussion[] = [];
|
discussions: AddonMessagesDiscussion[] = [];
|
||||||
discussionUserId?: number;
|
discussionUserId?: number;
|
||||||
|
|
||||||
search: {
|
search = {
|
||||||
enabled: boolean;
|
|
||||||
showResults: boolean;
|
|
||||||
results: AddonMessagesMessageAreaContact[];
|
|
||||||
loading: string;
|
|
||||||
text: string;
|
|
||||||
} = {
|
|
||||||
enabled: false,
|
enabled: false,
|
||||||
showResults: false,
|
showResults: false,
|
||||||
results: [],
|
results: <AddonMessagesMessageAreaContact[]> [],
|
||||||
loading: '',
|
loading: '',
|
||||||
text: '',
|
text: '',
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,7 +28,10 @@ import {
|
||||||
AddonMessagesNewMessagedEventData,
|
AddonMessagesNewMessagedEventData,
|
||||||
AddonMessagesOpenConversationEventData,
|
AddonMessagesOpenConversationEventData,
|
||||||
} from '../../services/messages';
|
} from '../../services/messages';
|
||||||
import { AddonMessagesOffline } from '../../services/messages-offline';
|
import {
|
||||||
|
AddonMessagesOffline,
|
||||||
|
AddonMessagesOfflineAnyMessagesFormatted,
|
||||||
|
} from '../../services/messages-offline';
|
||||||
import { CoreDomUtils } from '@services/utils/dom';
|
import { CoreDomUtils } from '@services/utils/dom';
|
||||||
import { CoreUser } from '@features/user/services/user';
|
import { CoreUser } from '@features/user/services/user';
|
||||||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
|
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
|
||||||
|
@ -38,10 +41,6 @@ import { CorePushNotificationsNotificationBasicData } from '@features/pushnotifi
|
||||||
import { ActivatedRoute, Params } from '@angular/router';
|
import { ActivatedRoute, Params } from '@angular/router';
|
||||||
import { CoreUtils } from '@services/utils/utils';
|
import { CoreUtils } from '@services/utils/utils';
|
||||||
import { CoreNavigator } from '@services/navigator';
|
import { CoreNavigator } from '@services/navigator';
|
||||||
import {
|
|
||||||
AddonMessagesOfflineConversationMessagesDBRecordFormatted,
|
|
||||||
AddonMessagesOfflineMessagesDBRecordFormatted,
|
|
||||||
} from '@addons/messages/services/database/messages';
|
|
||||||
import { AddonMessagesSettingsHandlerService } from '@addons/messages/services/handlers/settings';
|
import { AddonMessagesSettingsHandlerService } from '@addons/messages/services/handlers/settings';
|
||||||
import { CoreScreen } from '@services/screen';
|
import { CoreScreen } from '@services/screen';
|
||||||
|
|
||||||
|
@ -402,12 +401,12 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
||||||
const limitFrom = loadingMore ? option.conversations.length : 0;
|
const limitFrom = loadingMore ? option.conversations.length : 0;
|
||||||
const promises: Promise<unknown>[] = [];
|
const promises: Promise<unknown>[] = [];
|
||||||
|
|
||||||
let data: { conversations: AddonMessagesConversationForList[]; canLoadMore: boolean } = {
|
let data = {
|
||||||
conversations: [],
|
conversations: <AddonMessagesConversationForList[]> [],
|
||||||
canLoadMore: false,
|
canLoadMore: false,
|
||||||
};
|
};
|
||||||
let offlineMessages:
|
let offlineMessages:
|
||||||
(AddonMessagesOfflineConversationMessagesDBRecordFormatted | AddonMessagesOfflineMessagesDBRecordFormatted)[] = [];
|
AddonMessagesOfflineAnyMessagesFormatted[] = [];
|
||||||
|
|
||||||
// Get the conversations and, if needed, the offline messages. Always try to get the latest data.
|
// Get the conversations and, if needed, the offline messages. Always try to get the latest data.
|
||||||
promises.push(AddonMessages.instance.invalidateConversations(this.siteId).then(async () => {
|
promises.push(AddonMessages.instance.invalidateConversations(this.siteId).then(async () => {
|
||||||
|
@ -574,7 +573,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
||||||
*/
|
*/
|
||||||
protected async loadOfflineMessages(
|
protected async loadOfflineMessages(
|
||||||
option: AddonMessagesGroupConversationOption,
|
option: AddonMessagesGroupConversationOption,
|
||||||
messages: (AddonMessagesOfflineConversationMessagesDBRecordFormatted | AddonMessagesOfflineMessagesDBRecordFormatted)[],
|
messages: AddonMessagesOfflineAnyMessagesFormatted[],
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
|
|
||||||
|
@ -605,7 +604,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
||||||
userid: 0, // Faked data.
|
userid: 0, // Faked data.
|
||||||
name: message.conversation?.name,
|
name: message.conversation?.name,
|
||||||
imageurl: message.conversation?.imageurl || '',
|
imageurl: message.conversation?.imageurl || '',
|
||||||
}; message.conversation || {};
|
};
|
||||||
|
|
||||||
if (this.getConversationOption(conversation) == option) {
|
if (this.getConversationOption(conversation) == option) {
|
||||||
// Message belongs to current option, add the conversation.
|
// Message belongs to current option, add the conversation.
|
||||||
|
@ -674,7 +673,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
|
||||||
*/
|
*/
|
||||||
protected addLastOfflineMessage(
|
protected addLastOfflineMessage(
|
||||||
conversation: AddonMessagesConversationForList,
|
conversation: AddonMessagesConversationForList,
|
||||||
message: AddonMessagesOfflineConversationMessagesDBRecordFormatted | AddonMessagesOfflineMessagesDBRecordFormatted,
|
message: AddonMessagesOfflineAnyMessagesFormatted,
|
||||||
): void {
|
): void {
|
||||||
conversation.lastmessage = message.text;
|
conversation.lastmessage = message.text;
|
||||||
conversation.lastmessagedate = message.timecreated / 1000;
|
conversation.lastmessagedate = message.timecreated / 1000;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
ion-app.app-root page-addon-messages-settings {
|
:host {
|
||||||
.list-header {
|
.list-header {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import { CoreSiteSchema } from '@services/sites';
|
import { CoreSiteSchema } from '@services/sites';
|
||||||
import { AddonMessagesConversation } from '../messages';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database variables for AddonMessagesOffline service.
|
* Database variables for AddonMessagesOffline service.
|
||||||
|
@ -87,11 +86,6 @@ export type AddonMessagesOfflineMessagesDBRecord = {
|
||||||
deviceoffline: number; // If message was stored because device was offline.
|
deviceoffline: number; // If message was stored because device was offline.
|
||||||
};
|
};
|
||||||
|
|
||||||
export type AddonMessagesOfflineMessagesDBRecordFormatted = AddonMessagesOfflineMessagesDBRecord & {
|
|
||||||
pending?: boolean; // Will be likely true.
|
|
||||||
text?: string; // Copy of smallmessage.
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AddonMessagesOfflineConversationMessagesDBRecord = {
|
export type AddonMessagesOfflineConversationMessagesDBRecord = {
|
||||||
conversationid: number;
|
conversationid: number;
|
||||||
text: string;
|
text: string;
|
||||||
|
@ -99,13 +93,3 @@ export type AddonMessagesOfflineConversationMessagesDBRecord = {
|
||||||
deviceoffline: number; // If message was stored because device was offline.
|
deviceoffline: number; // If message was stored because device was offline.
|
||||||
conversation: string; // Data about the conversation.
|
conversation: string; // Data about the conversation.
|
||||||
};
|
};
|
||||||
|
|
||||||
export type AddonMessagesOfflineConversationMessagesDBRecordFormatted =
|
|
||||||
Omit<AddonMessagesOfflineConversationMessagesDBRecord, 'conversation'> &
|
|
||||||
{
|
|
||||||
conversation?: AddonMessagesConversation; // Data about the conversation.
|
|
||||||
pending: boolean; // Will be always true.
|
|
||||||
useridfrom?: number; // User Id who send the message, will be likely us.
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,7 @@ import { CoreApp } from '@services/app';
|
||||||
import { CoreTextUtils } from '@services/utils/text';
|
import { CoreTextUtils } from '@services/utils/text';
|
||||||
import {
|
import {
|
||||||
AddonMessagesOfflineConversationMessagesDBRecord,
|
AddonMessagesOfflineConversationMessagesDBRecord,
|
||||||
AddonMessagesOfflineConversationMessagesDBRecordFormatted,
|
|
||||||
AddonMessagesOfflineMessagesDBRecord,
|
AddonMessagesOfflineMessagesDBRecord,
|
||||||
AddonMessagesOfflineMessagesDBRecordFormatted,
|
|
||||||
CONVERSATION_MESSAGES_TABLE,
|
CONVERSATION_MESSAGES_TABLE,
|
||||||
MESSAGES_TABLE,
|
MESSAGES_TABLE,
|
||||||
} from './database/messages';
|
} from './database/messages';
|
||||||
|
@ -94,28 +92,23 @@ export class AddonMessagesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
async getAllDeviceOfflineMessages(
|
async getAllDeviceOfflineMessages(
|
||||||
siteId?: string,
|
siteId?: string,
|
||||||
): Promise<(AddonMessagesOfflineConversationMessagesDBRecordFormatted | AddonMessagesOfflineMessagesDBRecordFormatted)[]> {
|
): Promise<AddonMessagesOfflineAnyMessagesFormatted[]> {
|
||||||
const site = await CoreSites.instance.getSite(siteId);
|
const site = await CoreSites.instance.getSite(siteId);
|
||||||
|
|
||||||
const promises: [
|
|
||||||
Promise<AddonMessagesOfflineMessagesDBRecord[]>,
|
|
||||||
Promise<AddonMessagesOfflineConversationMessagesDBRecord[]>,
|
|
||||||
] = [
|
|
||||||
site.getDb().getRecords(MESSAGES_TABLE, { deviceoffline: 1 }),
|
|
||||||
site.getDb().getRecords(CONVERSATION_MESSAGES_TABLE, { deviceoffline: 1 }),
|
|
||||||
];
|
|
||||||
|
|
||||||
const [
|
const [
|
||||||
messages,
|
messages,
|
||||||
conversations,
|
conversations,
|
||||||
]: [
|
] = await Promise.all([
|
||||||
AddonMessagesOfflineMessagesDBRecord[],
|
site.getDb().getRecords<AddonMessagesOfflineMessagesDBRecord>(MESSAGES_TABLE, { deviceoffline: 1 }),
|
||||||
AddonMessagesOfflineConversationMessagesDBRecord[],
|
site.getDb().getRecords<AddonMessagesOfflineConversationMessagesDBRecord>(
|
||||||
] = await Promise.all(promises);
|
CONVERSATION_MESSAGES_TABLE,
|
||||||
|
{ deviceoffline: 1 },
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
const messageResult:
|
const messageResult:
|
||||||
(AddonMessagesOfflineConversationMessagesDBRecordFormatted | AddonMessagesOfflineMessagesDBRecordFormatted)[] =
|
AddonMessagesOfflineAnyMessagesFormatted[] =
|
||||||
this.parseMessages(messages);
|
this.parseMessages(messages);
|
||||||
const formattedConv = this.parseConversationMessages(conversations);
|
const formattedConv = this.parseConversationMessages(conversations);
|
||||||
|
|
||||||
|
@ -130,28 +123,19 @@ export class AddonMessagesOfflineProvider {
|
||||||
*/
|
*/
|
||||||
async getAllMessages(
|
async getAllMessages(
|
||||||
siteId?: string,
|
siteId?: string,
|
||||||
): Promise<(AddonMessagesOfflineConversationMessagesDBRecordFormatted | AddonMessagesOfflineMessagesDBRecordFormatted)[]> {
|
): Promise<AddonMessagesOfflineAnyMessagesFormatted[]> {
|
||||||
const site = await CoreSites.instance.getSite(siteId);
|
const site = await CoreSites.instance.getSite(siteId);
|
||||||
|
|
||||||
const promises: [
|
|
||||||
Promise<AddonMessagesOfflineMessagesDBRecord[]>,
|
|
||||||
Promise<AddonMessagesOfflineConversationMessagesDBRecord[]>,
|
|
||||||
] = [
|
|
||||||
site.getDb().getAllRecords(MESSAGES_TABLE),
|
|
||||||
site.getDb().getAllRecords(CONVERSATION_MESSAGES_TABLE),
|
|
||||||
];
|
|
||||||
|
|
||||||
const [
|
const [
|
||||||
messages,
|
messages,
|
||||||
conversations,
|
conversations,
|
||||||
]: [
|
] = await Promise.all([
|
||||||
AddonMessagesOfflineMessagesDBRecord[],
|
site.getDb().getAllRecords<AddonMessagesOfflineMessagesDBRecord>(MESSAGES_TABLE),
|
||||||
AddonMessagesOfflineConversationMessagesDBRecord[],
|
site.getDb().getAllRecords<AddonMessagesOfflineConversationMessagesDBRecord>(CONVERSATION_MESSAGES_TABLE),
|
||||||
] = await Promise.all(promises);
|
]);
|
||||||
|
|
||||||
|
|
||||||
const messageResult:
|
const messageResult:
|
||||||
(AddonMessagesOfflineConversationMessagesDBRecordFormatted | AddonMessagesOfflineMessagesDBRecordFormatted)[] =
|
AddonMessagesOfflineAnyMessagesFormatted[] =
|
||||||
this.parseMessages(messages);
|
this.parseMessages(messages);
|
||||||
const formattedConv = this.parseConversationMessages(conversations);
|
const formattedConv = this.parseConversationMessages(conversations);
|
||||||
|
|
||||||
|
@ -348,7 +332,7 @@ export class AddonMessagesOfflineProvider {
|
||||||
* @return Promise resolved if stored, rejected if failure.
|
* @return Promise resolved if stored, rejected if failure.
|
||||||
*/
|
*/
|
||||||
async setMessagesDeviceOffline(
|
async setMessagesDeviceOffline(
|
||||||
messages: (AddonMessagesOfflineMessagesDBRecordFormatted | AddonMessagesOfflineConversationMessagesDBRecordFormatted)[],
|
messages: AddonMessagesOfflineAnyMessagesFormatted[],
|
||||||
value: boolean,
|
value: boolean,
|
||||||
siteId?: string,
|
siteId?: string,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
|
@ -381,3 +365,20 @@ export class AddonMessagesOfflineProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AddonMessagesOffline extends makeSingleton(AddonMessagesOfflineProvider) {}
|
export class AddonMessagesOffline extends makeSingleton(AddonMessagesOfflineProvider) {}
|
||||||
|
|
||||||
|
export type AddonMessagesOfflineMessagesDBRecordFormatted = AddonMessagesOfflineMessagesDBRecord & {
|
||||||
|
pending?: boolean; // Will be likely true.
|
||||||
|
text?: string; // Copy of smallmessage.
|
||||||
|
};
|
||||||
|
|
||||||
|
export type AddonMessagesOfflineConversationMessagesDBRecordFormatted =
|
||||||
|
Omit<AddonMessagesOfflineConversationMessagesDBRecord, 'conversation'> &
|
||||||
|
{
|
||||||
|
conversation?: AddonMessagesConversation; // Data about the conversation.
|
||||||
|
pending: boolean; // Will be always true.
|
||||||
|
useridfrom?: number; // User Id who send the message, will be likely us.
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export type AddonMessagesOfflineAnyMessagesFormatted =
|
||||||
|
AddonMessagesOfflineConversationMessagesDBRecordFormatted | AddonMessagesOfflineMessagesDBRecordFormatted;
|
||||||
|
|
|
@ -14,7 +14,9 @@
|
||||||
|
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CoreSyncBaseProvider } from '@classes/base-sync';
|
import { CoreSyncBaseProvider } from '@classes/base-sync';
|
||||||
import { AddonMessagesOffline } from './messages-offline';
|
import {
|
||||||
|
AddonMessagesOffline, AddonMessagesOfflineAnyMessagesFormatted,
|
||||||
|
} from './messages-offline';
|
||||||
import {
|
import {
|
||||||
AddonMessagesProvider,
|
AddonMessagesProvider,
|
||||||
AddonMessages,
|
AddonMessages,
|
||||||
|
@ -28,10 +30,6 @@ import { CoreApp } from '@services/app';
|
||||||
import { CoreConstants } from '@/core/constants';
|
import { CoreConstants } from '@/core/constants';
|
||||||
import { CoreUser } from '@features/user/services/user';
|
import { CoreUser } from '@features/user/services/user';
|
||||||
import { CoreError } from '@classes/errors/error';
|
import { CoreError } from '@classes/errors/error';
|
||||||
import {
|
|
||||||
AddonMessagesOfflineConversationMessagesDBRecordFormatted,
|
|
||||||
AddonMessagesOfflineMessagesDBRecordFormatted,
|
|
||||||
} from './database/messages';
|
|
||||||
import { CoreTextErrorObject, CoreTextUtils } from '@services/utils/text';
|
import { CoreTextErrorObject, CoreTextUtils } from '@services/utils/text';
|
||||||
import { CoreSiteWSPreSets } from '@classes/site';
|
import { CoreSiteWSPreSets } from '@classes/site';
|
||||||
|
|
||||||
|
@ -177,7 +175,7 @@ export class AddonMessagesSyncProvider extends CoreSyncBaseProvider<AddonMessage
|
||||||
};
|
};
|
||||||
|
|
||||||
const groupMessagingEnabled = AddonMessages.instance.isGroupMessagingEnabled();
|
const groupMessagingEnabled = AddonMessages.instance.isGroupMessagingEnabled();
|
||||||
let messages: (AddonMessagesOfflineMessagesDBRecordFormatted | AddonMessagesOfflineConversationMessagesDBRecordFormatted)[];
|
let messages: AddonMessagesOfflineAnyMessagesFormatted[];
|
||||||
const errors: (string | CoreError | CoreTextErrorObject)[] = [];
|
const errors: (string | CoreError | CoreTextErrorObject)[] = [];
|
||||||
|
|
||||||
if (conversationId) {
|
if (conversationId) {
|
||||||
|
|
|
@ -17,7 +17,12 @@ import { CoreLogger } from '@singletons/logger';
|
||||||
import { CoreSites } from '@services/sites';
|
import { CoreSites } from '@services/sites';
|
||||||
import { CoreApp } from '@services/app';
|
import { CoreApp } from '@services/app';
|
||||||
import { CoreUser, CoreUserBasicData } from '@features/user/services/user';
|
import { CoreUser, CoreUserBasicData } from '@features/user/services/user';
|
||||||
import { AddonMessagesOffline } from './messages-offline';
|
import {
|
||||||
|
AddonMessagesOffline,
|
||||||
|
AddonMessagesOfflineAnyMessagesFormatted,
|
||||||
|
AddonMessagesOfflineConversationMessagesDBRecordFormatted,
|
||||||
|
AddonMessagesOfflineMessagesDBRecordFormatted,
|
||||||
|
} from './messages-offline';
|
||||||
import { CoreUtils } from '@services/utils/utils';
|
import { CoreUtils } from '@services/utils/utils';
|
||||||
import { CoreTimeUtils } from '@services/utils/time';
|
import { CoreTimeUtils } from '@services/utils/time';
|
||||||
import { CoreEvents } from '@singletons/events';
|
import { CoreEvents } from '@singletons/events';
|
||||||
|
@ -25,10 +30,6 @@ import { CoreSite, CoreSiteWSPreSets } from '@classes/site';
|
||||||
import { CoreWSExternalWarning } from '@services/ws';
|
import { CoreWSExternalWarning } from '@services/ws';
|
||||||
import { makeSingleton } from '@singletons';
|
import { makeSingleton } from '@singletons';
|
||||||
import { CoreError } from '@classes/errors/error';
|
import { CoreError } from '@classes/errors/error';
|
||||||
import {
|
|
||||||
AddonMessagesOfflineConversationMessagesDBRecordFormatted,
|
|
||||||
AddonMessagesOfflineMessagesDBRecordFormatted,
|
|
||||||
} from './database/messages';
|
|
||||||
import { AddonMessagesMainMenuHandlerService } from './handlers/mainmenu';
|
import { AddonMessagesMainMenuHandlerService } from './handlers/mainmenu';
|
||||||
|
|
||||||
const ROOT_CACHE_KEY = 'mmaMessages:';
|
const ROOT_CACHE_KEY = 'mmaMessages:';
|
||||||
|
@ -554,7 +555,7 @@ export class AddonMessagesProvider {
|
||||||
* @return Promise resolved with the WS data.
|
* @return Promise resolved with the WS data.
|
||||||
* @deprecatedonmoodle since Moodle 3.6
|
* @deprecatedonmoodle since Moodle 3.6
|
||||||
*/
|
*/
|
||||||
async getAllContacts(siteId?: string): Promise<AddonMessagesGetContactsResult> {
|
async getAllContacts(siteId?: string): Promise<AddonMessagesGetContactsWSResponse> {
|
||||||
siteId = siteId || CoreSites.instance.getCurrentSiteId();
|
siteId = siteId || CoreSites.instance.getCurrentSiteId();
|
||||||
|
|
||||||
const contacts = await this.getContacts(siteId);
|
const contacts = await this.getContacts(siteId);
|
||||||
|
@ -580,7 +581,7 @@ export class AddonMessagesProvider {
|
||||||
* @param siteId Site ID. If not defined, use current site.
|
* @param siteId Site ID. If not defined, use current site.
|
||||||
* @return Promise resolved with the WS data.
|
* @return Promise resolved with the WS data.
|
||||||
*/
|
*/
|
||||||
async getBlockedContacts(siteId?: string): Promise<AddonMessagesGetBlockedUsersResult> {
|
async getBlockedContacts(siteId?: string): Promise<AddonMessagesGetBlockedUsersWSResponse> {
|
||||||
const site = await CoreSites.instance.getSite(siteId);
|
const site = await CoreSites.instance.getSite(siteId);
|
||||||
|
|
||||||
const userId = site.getUserId();
|
const userId = site.getUserId();
|
||||||
|
@ -606,7 +607,7 @@ export class AddonMessagesProvider {
|
||||||
* @return Promise resolved with the WS data.
|
* @return Promise resolved with the WS data.
|
||||||
* @deprecatedonmoodle since Moodle 3.6
|
* @deprecatedonmoodle since Moodle 3.6
|
||||||
*/
|
*/
|
||||||
async getContacts(siteId?: string): Promise<AddonMessagesGetContactsResult> {
|
async getContacts(siteId?: string): Promise<AddonMessagesGetContactsWSResponse> {
|
||||||
const site = await CoreSites.instance.getSite(siteId);
|
const site = await CoreSites.instance.getSite(siteId);
|
||||||
|
|
||||||
const preSets: CoreSiteWSPreSets = {
|
const preSets: CoreSiteWSPreSets = {
|
||||||
|
@ -614,10 +615,10 @@ export class AddonMessagesProvider {
|
||||||
updateFrequency: CoreSite.FREQUENCY_OFTEN,
|
updateFrequency: CoreSite.FREQUENCY_OFTEN,
|
||||||
};
|
};
|
||||||
|
|
||||||
const contacts = await site.read<AddonMessagesGetContactsResult>('core_message_get_contacts', undefined, preSets);
|
const contacts = await site.read<AddonMessagesGetContactsWSResponse>('core_message_get_contacts', undefined, preSets);
|
||||||
|
|
||||||
// Filter contacts with negative ID, they are notifications.
|
// Filter contacts with negative ID, they are notifications.
|
||||||
const validContacts: AddonMessagesGetContactsResult = {
|
const validContacts: AddonMessagesGetContactsWSResponse = {
|
||||||
online: [],
|
online: [],
|
||||||
offline: [],
|
offline: [],
|
||||||
strangers: [],
|
strangers: [],
|
||||||
|
@ -809,7 +810,11 @@ export class AddonMessagesProvider {
|
||||||
newestmessagesfirst: newestFirst,
|
newestmessagesfirst: newestFirst,
|
||||||
};
|
};
|
||||||
|
|
||||||
const conversation = await site.read<AddonMessagesConversationFormatted>('core_message_get_conversation', params, preSets);
|
const conversation = await site.read<AddonMessagesGetConversationWSResponse>(
|
||||||
|
'core_message_get_conversation',
|
||||||
|
params,
|
||||||
|
preSets,
|
||||||
|
);
|
||||||
|
|
||||||
return this.formatConversation(conversation, userId);
|
return this.formatConversation(conversation, userId);
|
||||||
}
|
}
|
||||||
|
@ -2467,10 +2472,10 @@ export class AddonMessagesProvider {
|
||||||
toUserId: number,
|
toUserId: number,
|
||||||
message: string,
|
message: string,
|
||||||
siteId?: string,
|
siteId?: string,
|
||||||
): Promise<{ sent: boolean; message: AddonMessagesSendInstantMessagesMessage }> {
|
): Promise<AddonMessagesSendMessageResults> {
|
||||||
|
|
||||||
// Convenience function to store a message to be synchronized later.
|
// Convenience function to store a message to be synchronized later.
|
||||||
const storeOffline = async (): Promise<{ sent: boolean; message: AddonMessagesSendInstantMessagesMessage }> => {
|
const storeOffline = async (): Promise<AddonMessagesSendMessageResults> => {
|
||||||
const entry = await AddonMessagesOffline.instance.saveMessage(toUserId, message, siteId);
|
const entry = await AddonMessagesOffline.instance.saveMessage(toUserId, message, siteId);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -2599,13 +2604,13 @@ export class AddonMessagesProvider {
|
||||||
conversation: AddonMessagesConversation,
|
conversation: AddonMessagesConversation,
|
||||||
message: string,
|
message: string,
|
||||||
siteId?: string,
|
siteId?: string,
|
||||||
): Promise<{ sent: boolean; message: AddonMessagesSendMessagesToConversationMessage }> {
|
): Promise<AddonMessagesSendMessageResults> {
|
||||||
|
|
||||||
const site = await CoreSites.instance.getSite(siteId);
|
const site = await CoreSites.instance.getSite(siteId);
|
||||||
siteId = site.getId();
|
siteId = site.getId();
|
||||||
|
|
||||||
// Convenience function to store a message to be synchronized later.
|
// Convenience function to store a message to be synchronized later.
|
||||||
const storeOffline = async(): Promise<{ sent: boolean; message: AddonMessagesSendMessagesToConversationMessage }> => {
|
const storeOffline = async(): Promise<AddonMessagesSendMessageResults> => {
|
||||||
const entry = await AddonMessagesOffline.instance.saveConversationMessage(conversation, message, siteId);
|
const entry = await AddonMessagesOffline.instance.saveConversationMessage(conversation, message, siteId);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -2789,21 +2794,17 @@ export class AddonMessagesProvider {
|
||||||
* @param messages Array of messages containing the key 'timecreated'.
|
* @param messages Array of messages containing the key 'timecreated'.
|
||||||
* @return Messages sorted with most recent last.
|
* @return Messages sorted with most recent last.
|
||||||
*/
|
*/
|
||||||
sortMessages(
|
sortMessages(messages: AddonMessagesConversationMessageFormatted[]): AddonMessagesConversationMessageFormatted[];
|
||||||
messages: AddonMessagesConversationMessageFormatted[],
|
|
||||||
): AddonMessagesConversationMessageFormatted[];
|
|
||||||
sortMessages(
|
sortMessages(
|
||||||
messages: (AddonMessagesGetMessagesMessage | AddonMessagesOfflineMessagesDBRecordFormatted)[],
|
messages: (AddonMessagesGetMessagesMessage | AddonMessagesOfflineMessagesDBRecordFormatted)[],
|
||||||
): (AddonMessagesGetMessagesMessage | AddonMessagesOfflineMessagesDBRecordFormatted)[];
|
): (AddonMessagesGetMessagesMessage | AddonMessagesOfflineMessagesDBRecordFormatted)[];
|
||||||
sortMessages(
|
sortMessages(messages: AddonMessagesOfflineAnyMessagesFormatted[]): AddonMessagesOfflineAnyMessagesFormatted[];
|
||||||
messages: (AddonMessagesOfflineMessagesDBRecordFormatted | AddonMessagesOfflineConversationMessagesDBRecordFormatted)[],
|
|
||||||
): (AddonMessagesOfflineMessagesDBRecordFormatted | AddonMessagesOfflineConversationMessagesDBRecordFormatted)[];
|
|
||||||
sortMessages(
|
sortMessages(
|
||||||
messages: (AddonMessagesGetMessagesMessage | AddonMessagesOfflineMessagesDBRecordFormatted)[] |
|
messages: (AddonMessagesGetMessagesMessage | AddonMessagesOfflineMessagesDBRecordFormatted)[] |
|
||||||
(AddonMessagesOfflineMessagesDBRecordFormatted | AddonMessagesOfflineConversationMessagesDBRecordFormatted)[] |
|
AddonMessagesOfflineAnyMessagesFormatted[] |
|
||||||
AddonMessagesConversationMessageFormatted[],
|
AddonMessagesConversationMessageFormatted[],
|
||||||
): (AddonMessagesGetMessagesMessage | AddonMessagesOfflineMessagesDBRecordFormatted)[] |
|
): (AddonMessagesGetMessagesMessage | AddonMessagesOfflineMessagesDBRecordFormatted)[] |
|
||||||
(AddonMessagesOfflineMessagesDBRecordFormatted | AddonMessagesOfflineConversationMessagesDBRecordFormatted)[] |
|
AddonMessagesOfflineAnyMessagesFormatted[] |
|
||||||
AddonMessagesConversationMessageFormatted[] {
|
AddonMessagesConversationMessageFormatted[] {
|
||||||
return messages.sort((a, b) => {
|
return messages.sort((a, b) => {
|
||||||
// Pending messages last.
|
// Pending messages last.
|
||||||
|
@ -2831,7 +2832,7 @@ export class AddonMessagesProvider {
|
||||||
*
|
*
|
||||||
* @param contactTypes List of contacts grouped in types.
|
* @param contactTypes List of contacts grouped in types.
|
||||||
*/
|
*/
|
||||||
protected storeUsersFromAllContacts(contactTypes: AddonMessagesGetContactsResult): void {
|
protected storeUsersFromAllContacts(contactTypes: AddonMessagesGetContactsWSResponse): void {
|
||||||
for (const x in contactTypes) {
|
for (const x in contactTypes) {
|
||||||
CoreUser.instance.storeUsers(contactTypes[x]);
|
CoreUser.instance.storeUsers(contactTypes[x]);
|
||||||
}
|
}
|
||||||
|
@ -2945,6 +2946,11 @@ type AddonMessagesGetConversationWSParams = {
|
||||||
newestmessagesfirst?: boolean; // Order messages by newest first.
|
newestmessagesfirst?: boolean; // Order messages by newest first.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data returned by core_message_get_conversation WS.
|
||||||
|
*/
|
||||||
|
type AddonMessagesGetConversationWSResponse = AddonMessagesConversation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Params of core_message_get_self_conversation WS.
|
* Params of core_message_get_self_conversation WS.
|
||||||
*/
|
*/
|
||||||
|
@ -2955,7 +2961,6 @@ type AddonMessagesGetSelfConversationWSParams = {
|
||||||
newestmessagesfirst?: boolean; // Order messages by newest first.
|
newestmessagesfirst?: boolean; // Order messages by newest first.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Conversation with some calculated data.
|
* Conversation with some calculated data.
|
||||||
*/
|
*/
|
||||||
|
@ -3172,7 +3177,7 @@ type AddonMessagesGetBlockedUsersWSParams = {
|
||||||
/**
|
/**
|
||||||
* Result of WS core_message_get_blocked_users.
|
* Result of WS core_message_get_blocked_users.
|
||||||
*/
|
*/
|
||||||
export type AddonMessagesGetBlockedUsersResult = {
|
export type AddonMessagesGetBlockedUsersWSResponse = {
|
||||||
users: AddonMessagesBlockedUser[]; // List of blocked users.
|
users: AddonMessagesBlockedUser[]; // List of blocked users.
|
||||||
warnings?: CoreWSExternalWarning[];
|
warnings?: CoreWSExternalWarning[];
|
||||||
};
|
};
|
||||||
|
@ -3189,7 +3194,7 @@ export type AddonMessagesBlockedUser = {
|
||||||
/**
|
/**
|
||||||
* Result of WS core_message_get_contacts.
|
* Result of WS core_message_get_contacts.
|
||||||
*/
|
*/
|
||||||
export type AddonMessagesGetContactsResult = {
|
export type AddonMessagesGetContactsWSResponse = {
|
||||||
online: AddonMessagesGetContactsContact[]; // List of online contacts.
|
online: AddonMessagesGetContactsContact[]; // List of online contacts.
|
||||||
offline: AddonMessagesGetContactsContact[]; // List of offline contacts.
|
offline: AddonMessagesGetContactsContact[]; // List of offline contacts.
|
||||||
strangers: AddonMessagesGetContactsContact[]; // List of users that are not in the user's contact list but have sent a message.
|
strangers: AddonMessagesGetContactsContact[]; // List of users that are not in the user's contact list but have sent a message.
|
||||||
|
@ -3416,6 +3421,14 @@ export type AddonMessagesSendMessagesToConversationMessage = {
|
||||||
timecreated: number; // The timecreated timestamp for the message.
|
timecreated: number; // The timecreated timestamp for the message.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Result for Send Messages functions trying online or storing in offline.
|
||||||
|
*/
|
||||||
|
export type AddonMessagesSendMessageResults = {
|
||||||
|
sent: boolean;
|
||||||
|
message: AddonMessagesSendMessagesToConversationMessage | AddonMessagesSendInstantMessagesMessage;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculated data for core_message_get_contacts.
|
* Calculated data for core_message_get_contacts.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue