@chat21/chat21-ionic 3.0.65 → 3.0.68-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/deploy_amazon_prod.sh +6 -2
  3. package/package.json +1 -1
  4. package/src/app/app.component.ts +90 -56
  5. package/src/app/app.module.ts +4 -4
  6. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +8 -0
  7. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.ts +0 -2
  8. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.html +49 -4
  9. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +1 -3
  10. package/src/app/components/conversation-info/info-content/info-content.component.ts +22 -25
  11. package/src/app/components/ddp-header/ddp-header.component.html +20 -5
  12. package/src/app/components/ddp-header/ddp-header.component.ts +8 -0
  13. package/src/app/components/project-item/project-item.component.ts +26 -49
  14. package/src/app/components/sidebar/sidebar.component.ts +33 -56
  15. package/src/app/pages/conversation-detail/conversation-detail.page.ts +54 -106
  16. package/src/app/pages/conversations-list/conversations-list.page.html +3 -1
  17. package/src/app/pages/conversations-list/conversations-list.page.ts +48 -30
  18. package/src/app/pages/create-canned-response/create-canned-response.page.ts +22 -29
  19. package/src/app/pages/loader-preview/loader-preview.page.ts +12 -43
  20. package/src/app/services/websocket/websocket.service.ts +1 -1
  21. package/src/assets/i18n/ar.json +1 -1
  22. package/src/assets/i18n/az.json +266 -0
  23. package/src/assets/i18n/de.json +1 -1
  24. package/src/assets/i18n/en.json +1 -1
  25. package/src/assets/i18n/es.json +1 -1
  26. package/src/assets/i18n/fr.json +1 -1
  27. package/src/assets/i18n/it.json +1 -1
  28. package/src/assets/i18n/kk.json +266 -0
  29. package/src/assets/i18n/pt.json +1 -1
  30. package/src/assets/i18n/ru.json +1 -1
  31. package/src/assets/i18n/sr.json +1 -1
  32. package/src/assets/i18n/sv.json +266 -0
  33. package/src/assets/i18n/tr.json +1 -1
  34. package/src/assets/i18n/uk.json +266 -0
  35. package/src/assets/i18n/uz.json +267 -0
  36. package/src/assets/images/language_flag/az.png +0 -0
  37. package/src/assets/images/language_flag/kk.png +0 -0
  38. package/src/assets/images/language_flag/{sv-SE.png → sv.png} +0 -0
  39. package/src/assets/images/language_flag/uz.png +0 -0
  40. package/src/chat-config-mqtt-localhost.json +10 -3
  41. package/src/chat-config-pre.json +3 -1
  42. package/src/chat21-core/providers/abstract/archivedconversations-handler.service.ts +1 -2
  43. package/src/chat21-core/providers/abstract/conversations-handler.service.ts +4 -4
  44. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +3 -6
  45. package/src/chat21-core/providers/firebase/firebase-auth-service.ts +2 -8
  46. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +4 -4
  47. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +49 -10
  48. package/src/chat21-core/providers/firebase/firebase-groups-handler.ts +5 -5
  49. package/src/chat21-core/providers/firebase/firebase-image-repo.ts +2 -1
  50. package/src/chat21-core/providers/firebase/firebase-presence.service.ts +2 -3
  51. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +2 -2
  52. package/src/chat21-core/providers/firebase/firebase-upload.service.ts +1 -1
  53. package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +74 -274
  54. package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +26 -29
  55. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +7 -28
  56. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +24 -52
  57. package/src/chat21-core/providers/mqtt/mqtt-groups-handler.ts +11 -15
  58. package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +88 -93
  59. package/src/chat21-core/providers/mqtt/mqtt-presence.service.ts +3 -2
  60. package/src/chat21-core/providers/mqtt/mqtt-typing.service.ts +5 -0
  61. package/src/chat21-core/providers/native/native-image-repo.ts +9 -2
  62. package/src/chat21-core/providers/native/native-upload-service.ts +3 -11
  63. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +0 -2
  64. package/src/chat21-core/utils/constants.ts +1 -1
  65. package/src/chat21-core/utils/utils-message.ts +1 -1
  66. package/deploy_pre.sh +0 -44
@@ -30,10 +30,10 @@ import { messageType } from '../../utils/utils-message';
30
30
  export class MQTTConversationHandler extends ConversationHandlerService {
31
31
 
32
32
  // BehaviorSubject
33
- messageAdded: BehaviorSubject<MessageModel>;
34
- messageChanged: BehaviorSubject<MessageModel>;
35
- messageRemoved: BehaviorSubject<string>;
36
- isTypings: BehaviorSubject<any> = new BehaviorSubject<any>(null);
33
+ messageAdded: BehaviorSubject<MessageModel> = new BehaviorSubject<MessageModel>(null);;
34
+ messageChanged: BehaviorSubject<MessageModel> = new BehaviorSubject<MessageModel>(null);;
35
+ messageRemoved: BehaviorSubject<string> = new BehaviorSubject<string>(null);
36
+ messageWait: BehaviorSubject<any> = new BehaviorSubject<string>(null);
37
37
 
38
38
  // public variables
39
39
  public attributes: any;
@@ -65,13 +65,7 @@ export class MQTTConversationHandler extends ConversationHandlerService {
65
65
  /**
66
66
  * inizializzo conversation handler
67
67
  */
68
- initialize(
69
- recipientId: string,
70
- recipientFullName: string,
71
- loggedUser: UserModel,
72
- tenant: string,
73
- translationMap: Map<string, string>
74
- ) {
68
+ initialize(recipientId: string,recipientFullName: string,loggedUser: UserModel,tenant: string, translationMap: Map<string, string>) {
75
69
  this.logger.log('[MQTTConversationHandler] initWithRecipient:', tenant);
76
70
  this.recipientId = recipientId;
77
71
  this.recipientFullname = recipientFullName;
@@ -96,7 +90,7 @@ export class MQTTConversationHandler extends ConversationHandlerService {
96
90
  * mi sottoscrivo a change, removed, added
97
91
  */
98
92
  connect() {
99
- this.logger.log('[MQTTConversationHandler] connecting conversation handler...');
93
+ this.logger.log('[MQTTConversationHandler] connecting conversation handler...', this.conversationWith);
100
94
  if (this.conversationWith == null) {
101
95
  this.logger.error('[MQTTConversationHandler] cant connect invalid this.conversationWith', this.conversationWith);
102
96
  return;
@@ -118,7 +112,6 @@ export class MQTTConversationHandler extends ConversationHandlerService {
118
112
  this.logger.log('[MQTTConversationHandler] message updated:', message, 'on topic:', topic);
119
113
  this.updatedMessageStatus(message);
120
114
  });
121
- this.logger.log("[MQTTConversationHandler] this.conversationWith,", this.conversationWith);
122
115
  }
123
116
 
124
117
  isGroup(groupId) {
@@ -256,16 +249,6 @@ export class MQTTConversationHandler extends ConversationHandlerService {
256
249
  this.messageAdded.next(msg);
257
250
  }
258
251
 
259
- // /** */
260
- // private updatedMessage(message: any) {
261
- // const msg = this.messageGenerate(message);
262
- // msg.uid = msg.message_id;
263
- // // imposto il giorno del messaggio per visualizzare o nascondere l'header data
264
- // // con**** DATAIL messageAdded ***sole.log('>>>>>>>>>>>>>> changed headerDate: ', msg);
265
- // this.addReplaceMessageInArray(msg.uid, msg);
266
- // this.messageChanged.next(msg);
267
- // }
268
-
269
252
  /** */
270
253
  private updatedMessageStatus(patch: any) {
271
254
  if(this.skipInfoMessage && messageType(MESSAGE_TYPE_INFO, patch) ){
@@ -278,8 +261,6 @@ export class MQTTConversationHandler extends ConversationHandlerService {
278
261
  if (message) {
279
262
  message.status = patch.status;
280
263
  this.logger.log('[MQTTConversationHandler] message found and patched (replacing)', message);
281
- // imposto il giorno del messaggio per visualizzare o nascondere l'header data
282
- // con**** DATAIL messageAdded ***sole.log('>>>>>>>>>>>>>> changed headerDate: ', msg);
283
264
  this.addReplaceMessageInArray(message.uid, message);
284
265
  this.messageChanged.next(message);
285
266
  }
@@ -311,8 +292,7 @@ export class MQTTConversationHandler extends ConversationHandlerService {
311
292
  // msg.text = htmlEntities(msg.text);
312
293
  // }
313
294
  // verifico che il sender è il logged user
314
- this.logger.log("****>msg.sender:" + msg.sender);
315
- this.logger.log("****>this.loggedUser.uid:" + this.loggedUser.uid);
295
+ this.logger.log("[MQTTConversationHandler] ****>msg.sender:" + msg.sender);
316
296
  msg.isSender = this.isSender(msg.sender, this.loggedUser.uid);
317
297
  // traduco messaggi se sono del server
318
298
  if (msg.attributes && msg.attributes.subtype) {
@@ -436,7 +416,6 @@ export class MQTTConversationHandler extends ConversationHandlerService {
436
416
  this.listSubsriptions.forEach(sub => {
437
417
  this.logger.log('[MQTTConversationHandler] unsubscribe: ', sub.uid, key);
438
418
  if (sub.uid === key) {
439
- this.logger.log('[MQTTConversationHandler] unsubscribe: ', sub.uid, key);
440
419
  sub.unsubscribe(key, null);
441
420
  return;
442
421
  }
@@ -23,15 +23,21 @@ import { THIS_EXPR } from '@angular/compiler/src/output/output_ast';
23
23
  @Injectable({ providedIn: 'root' })
24
24
  export class MQTTConversationsHandler extends ConversationsHandlerService {
25
25
 
26
- BSConversationDetail: BehaviorSubject<ConversationModel>;
27
- conversationAdded: BehaviorSubject<ConversationModel>;
28
- conversationChanged: BehaviorSubject<ConversationModel>;
29
- conversationRemoved: BehaviorSubject<ConversationModel>;
30
- loadedConversationsStorage: BehaviorSubject<ConversationModel[]>;
26
+ // BehaviorSubject
27
+ BSConversationDetail: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);;
28
+ conversationAdded: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);;
29
+ conversationChanged: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);;
30
+ conversationChangedDetailed: BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}> = new BehaviorSubject<{value: ConversationModel, previousValue: ConversationModel}>(null);
31
+ conversationRemoved: BehaviorSubject<ConversationModel> = new BehaviorSubject<ConversationModel>(null);;
31
32
  BSConversations: BehaviorSubject<ConversationModel[]>
33
+ // readAllMessages: BehaviorSubject<string>;
34
+
35
+ // public variables
32
36
  conversations: Array<ConversationModel> = [];
33
37
  uidConvSelected: string;
34
38
  tenant: string;
39
+
40
+ // private variables
35
41
  private loggedUserId: string;
36
42
  private translationMap: Map<string, string>;
37
43
  private isConversationClosingMap: Map<string, boolean>;
@@ -43,11 +49,7 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
43
49
  super();
44
50
  }
45
51
 
46
- initialize(
47
- tenant: string,
48
- userId: string,
49
- translationMap: Map<string, string>
50
- ) {
52
+ initialize(tenant: string, userId: string,translationMap: Map<string, string>) {
51
53
  this.logger.debug('[MQTTConversationsHandler] initialize');
52
54
  this.loggedUserId = userId;
53
55
  this.translationMap = translationMap;
@@ -56,19 +58,19 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
56
58
  }
57
59
 
58
60
  public getConversationDetail(conversationWith: string, callback) {
59
- // 1 search local array
60
- // 2 search remote
61
+ // 1 cerco array locale
62
+ // 2 cerco remoto
61
63
  // callback
62
-
64
+
63
65
  const conversation = this.conversations.find(conv => conv.conversation_with === conversationWith);
64
-
66
+ this.logger.log('[MQTTConversationsHandler] getConversationDetail found locally? *****: ', conversation);
65
67
  if (conversation) {
66
68
 
67
69
  callback(conversation);
68
70
  } else {
69
-
71
+ this.logger.log('[MQTTConversationsHandler] getConversationDetail Not found locally, remote.getConversationDetail *****: ', conversation);
70
72
  this.chat21Service.chatClient.conversationDetail(conversationWith, (err, conversation) => {
71
-
73
+ this.logger.log('[MQTTConversationsHandler] getConversationDetail --REMOTE CONV IS OBJ:', conversation);
72
74
  if (conversation) {
73
75
  if (callback) {
74
76
  callback(this.completeConversation(conversation));
@@ -148,9 +150,8 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
148
150
  // lastTimestamp temporarily ignored
149
151
  this.logger.debug('[MQTTConversationsHandler] connecting MQTT conversations handler');
150
152
  const handlerConversationAdded = this.chat21Service.chatClient.onConversationAdded( (conv) => {
151
- this.logger.log("onConversationAdded:", conv);
152
153
  let conversation = this.completeConversation(conv); // needed to get the "conversation_with", and find the conv in the conv-history
153
- this.logger.log("onConversationAdded completed:" + JSON.stringify(conversation));
154
+ this.logger.log("onConversationAdded completed:",conversation);
154
155
  const index = this.searchIndexInArrayForConversationWith(this.conversations, conversation.conversation_with);
155
156
  if (index > -1) {
156
157
  this.logger.log('[MQTTConversationsHandler] Added conv -> Changed!')
@@ -189,17 +190,18 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
189
190
  }
190
191
  });
191
192
  }
193
+
194
+ getLastConversation(callback: (conv: ConversationModel, error: string) => void): void {
195
+ throw new Error('Method not implemented.');
196
+ }
192
197
 
193
198
  private added(conv: any) {
194
199
  this.logger.debug('[MQTTConversationsHandler] NEW CONV childSnapshot', conv)
195
200
  let conversation = this.completeConversation(conv);
196
201
  if (this.isValidConversation(conversation)) {
197
202
  this.setClosingConversation(conversation.conversation_with, false);
198
- this.logger.debug('[MQTTConversationsHandler] new conv.uid' + conversation.uid);
199
- this.logger.debug('[MQTTConversationsHandler] conversations:', this.conversations);
203
+ this.logger.debug('[MQTTConversationsHandler] conversations:', conversation.uid, this.conversations);
200
204
  const index = this.searchIndexInArrayForConversationWith(this.conversations, conversation.conversation_with);
201
- this.logger.debug('[MQTTConversationsHandler] found index:', index)
202
- this.logger.debug('[MQTTConversationsHandler] NUOVA CONVER;.uid2' + conversation.uid)
203
205
  if (index > -1) {
204
206
  this.logger.debug('[MQTTConversationsHandler] TROVATO')
205
207
  this.conversations.splice(index, 1, conversation);
@@ -210,13 +212,8 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
210
212
  }
211
213
  this.logger.debug('[MQTTConversationsHandler] NUOVA CONVER;.uid3' + conversation.uid)
212
214
  this.conversations.sort(compareValues('timestamp', 'desc'));
213
- this.logger.debug('[MQTTConversationsHandler] NUOVA CONVER;.uid4' + conversation.uid)
214
215
  this.logger.debug('[MQTTConversationsHandler] TUTTE:', this.conversations)
215
- // this.conversationChanged.next(conversation);
216
- this.logger.debug('[MQTTConversationsHandler] NUOVA CONVER;.uid5' + conversation.uid)
217
216
  this.conversationAdded.next(conversation);
218
- this.logger.debug('[MQTTConversationsHandler] NUOVA CONVER;.uid6' + conversation.uid)
219
- // this.events.publish('conversationsChanged', this.conversations);
220
217
  } else {
221
218
  this.logger.error('[MQTTConversationsHandler] ChatConversationsHandler::added::conversations with conversationId: ', conversation.conversation_with, 'is not valid');
222
219
  }
@@ -267,7 +264,6 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
267
264
 
268
265
  private updateConversationWithSnapshot(conv: ConversationModel, snap: any) {
269
266
  this.logger.debug('[MQTTConversationsHandler] updating conv', conv, 'with snap', snap)
270
- this.logger.debug('[MQTTConversationsHandler] print snap keys/values')
271
267
  Object.keys(snap).forEach(k => {
272
268
  this.logger.debug('[MQTTConversationsHandler] key:' + k);
273
269
  if (k === 'is_new') {
@@ -312,27 +308,6 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
312
308
  conv.type = snap[k];
313
309
  }
314
310
  });
315
- // SCHEMA ConversationModel
316
- // public uid: string,
317
- // public attributes: any,
318
- // public channel_type: string,
319
- // public conversation_with_fullname: string,
320
- // public conversation_with: string,
321
- // public recipient: string,
322
- // public recipient_fullname: string,
323
- // public image: string,
324
- // public is_new: boolean,
325
- // public last_message_text: string,
326
- // public sender: string,
327
- // public senderAuthInfo: any,
328
- // public sender_fullname: string,
329
- // public status: string,
330
- // public timestamp: string,
331
- // public time_last_message: string,
332
- // public selected: boolean,
333
- // public color: string,
334
- // public avatar: string,
335
- // public archived: boolean
336
311
  }
337
312
 
338
313
 
@@ -411,13 +386,10 @@ export class MQTTConversationsHandler extends ConversationsHandlerService {
411
386
  conv.last_message_text = conv.text; // building conv with a message
412
387
  }
413
388
  conv.uid = conv.conversation_with;
414
- console.log("uidConvSelected is", this.uidConvSelected);
415
389
  if (conv.uid === this.uidConvSelected) {
416
- this.logger.debug("For selected conversation is_new = false");
417
390
  conv.is_new = false;
418
391
  }
419
392
  if (conv.sender === this.loggedUserId) {
420
- this.logger.debug("is_new always false if sender it's me")
421
393
  conv.is_new = false;
422
394
  }
423
395
  return conv;
@@ -14,11 +14,11 @@ import { avatarPlaceholder, getColorBck } from 'src/chat21-core/utils/utils-user
14
14
  export class MQTTGroupsHandler extends GroupsHandlerService {
15
15
 
16
16
  // BehaviorSubject
17
- BSgroupDetail: BehaviorSubject<GroupModel>;
18
- SgroupDetail: Subject<GroupModel>;
19
- groupAdded: BehaviorSubject<GroupModel>;
20
- groupChanged: BehaviorSubject<GroupModel>;
21
- groupRemoved: BehaviorSubject<GroupModel>;
17
+ BSgroupDetail: BehaviorSubject<GroupModel> = new BehaviorSubject<GroupModel>(null);
18
+ SgroupDetail: Subject<GroupModel> = new BehaviorSubject<GroupModel>(null);
19
+ groupAdded: BehaviorSubject<GroupModel> = new BehaviorSubject<GroupModel>(null);
20
+ groupChanged: BehaviorSubject<GroupModel> = new BehaviorSubject<GroupModel>(null);
21
+ groupRemoved: BehaviorSubject<GroupModel> = new BehaviorSubject<GroupModel>(null);
22
22
 
23
23
  // private params
24
24
  private tenant: string;
@@ -35,7 +35,7 @@ import { avatarPlaceholder, getColorBck } from 'src/chat21-core/utils/utils-user
35
35
  * inizializzo groups handler
36
36
  */
37
37
  initialize(tenant: string, loggedUserId: string): void {
38
- this.logger.log('initialize GROUP-HANDLER MQTT');
38
+ this.logger.log('[MQTT-GROUPS-HANDLER] initialize');
39
39
  this.tenant = tenant;
40
40
  this.loggedUserId = loggedUserId;
41
41
  }
@@ -64,13 +64,11 @@ import { avatarPlaceholder, getColorBck } from 'src/chat21-core/utils/utils-user
64
64
  onGroupChange(groupId: string): Observable<GroupModel> {
65
65
  if (this.isGroup(groupId)) {
66
66
  this.chat21Service.chatClient.groupData(groupId, (err, group) => {
67
- this.logger.log('got result by REST call:', group);
68
- this.logger.log('got group by REST call:', group.result);
67
+ this.logger.log('[MQTT-GROUPS-HANDLER] onGroupChange: got result by REST call:', group);
69
68
  this.groupValue(group.result);
70
- this.logger.log('subscribing to group updates...', groupId);
69
+ this.logger.log('[MQTT-GROUPS-HANDLER] onGroupChange: subscribing to group updates...', groupId);
71
70
  const handler_group_updated = this.chat21Service.chatClient.onGroupUpdated( (group, topic) => {
72
71
  if (topic.conversWith === groupId) {
73
- this.logger.log('group updated:', group);
74
72
  this.groupValue(group);
75
73
  }
76
74
  });
@@ -87,13 +85,11 @@ import { avatarPlaceholder, getColorBck } from 'src/chat21-core/utils/utils-user
87
85
  }
88
86
 
89
87
  private groupValue(childSnapshot: any){
90
- this.logger.log('groupValue > childSnapshot:', childSnapshot)
91
- const group: GroupModel = childSnapshot;
92
- this.logger.log('groupValue > GroupModel by childSnapshot:', group)
88
+ this.logger.debug('[MQTT-GROUPS-SERV] group detail::', childSnapshot.val(), childSnapshot)
89
+ const group: GroupModel = childSnapshot.val();
90
+ this.logger.debug('[MQTT-GROUPS-SERV] groupValue ', group)
93
91
  if (group) {
94
92
  let groupCompleted = this.completeGroup(group)
95
- this.logger.log("group:", group);
96
- this.logger.log("groupCompleted:", groupCompleted);
97
93
  this.SgroupDetail.next(groupCompleted)
98
94
  }
99
95
  }
@@ -14,109 +14,104 @@ import { Chat21Service } from './chat-service';
14
14
  @Injectable({
15
15
  providedIn: 'root'
16
16
  })
17
- export class MQTTNotifications extends NotificationsService {
17
+ export class MQTTNotifications extends NotificationsService {
18
18
 
19
- public BUILD_VERSION: string;
20
- private FCMcurrentToken: string;
21
- private userId: string;
22
- private tenant: string;
23
- private vapidkey: string;
24
- private logger: LoggerService = LoggerInstance.getInstance();
19
+ public BUILD_VERSION: string;
20
+ private FCMcurrentToken: string;
21
+ private userId: string;
22
+ private tenant: string;
23
+ private vapidkey: string;
24
+ private logger: LoggerService = LoggerInstance.getInstance();
25
25
 
26
- constructor(
27
- public chat21Service: Chat21Service
26
+ constructor(
27
+ public chat21Service: Chat21Service
28
28
  ) {
29
- super();
29
+ super();
30
30
  }
31
31
 
32
- initialize(tenant: string, vapId: string): void {
33
- this.tenant = tenant;
34
- this.vapidkey = vapId;
35
- return;
36
- }
32
+ initialize(tenant: string, vapId: string): void {
33
+ this.tenant = tenant;
34
+ this.vapidkey = vapId;
35
+ return;
36
+ }
37
37
 
38
- getNotificationPermissionAndSaveToken(currentUserUid) {
39
- console.log("getNotificationPermissionAndSaveToken()",currentUserUid );
40
- this.userId = currentUserUid;
41
- if (firebase.messaging.isSupported()) {
42
- console.log("firebase.messaging.isSupported() YES");
43
- const messaging = firebase.messaging();
44
- // messaging.requestPermission()
45
- Notification.requestPermission().then((permission) => {
46
- if (permission === 'granted') {
47
- this.logger.log('[MQTT-FIREBASE-NOTIFICATIONS] >>>> requestPermission Notification permission granted.');
38
+ getNotificationPermissionAndSaveToken(currentUserUid) {
39
+ console.log("[MQTTNotificationService] getNotificationPermissionAndSaveToken()",currentUserUid );
40
+ this.userId = currentUserUid;
41
+ if (firebase.messaging.isSupported()) {
42
+ console.log("[MQTTNotificationService] firebase.messaging.isSupported -> YES");
43
+ const messaging = firebase.messaging();
44
+ // messaging.requestPermission()
45
+ Notification.requestPermission().then((permission) => {
46
+ if (permission === 'granted') {
47
+ this.logger.log('[MQTTNotificationService] >>>> requestPermission Notification permission granted.');
48
48
 
49
- return messaging.getToken({ vapidKey: this.vapidkey })
50
- }
51
- }).then(FCMtoken => {
52
- this.logger.log('[MQTT-FIREBASE-NOTIFICATIONS] >>>> requestPermission FCMtoken', FCMtoken)
53
- // Save FCM Token in Chat21
54
- this.FCMcurrentToken = FCMtoken;
55
- this.saveToken(FCMtoken, currentUserUid)
56
- }).catch((err) => {
57
- this.logger.error('[FIREBASE-NOTIFICATIONS] >>>> requestPermission ERR: Unable to get permission to notify.', err);
58
- });
59
- } else {
60
- this.logger.log('[FIREBASE-NOTIFICATIONS] >>>> FIREBASE MESSAGING IS NOT SUPPORTED')
61
- }
49
+ return messaging.getToken({ vapidKey: this.vapidkey })
50
+ }
51
+ }).then(FCMtoken => {
52
+ this.logger.log('[MQTTNotificationService] >>>> requestPermission FCMtoken', FCMtoken)
53
+ // Save FCM Token in Chat21
54
+ this.FCMcurrentToken = FCMtoken;
55
+ this.saveToken(FCMtoken, currentUserUid)
56
+ }).catch((err) => {
57
+ this.logger.error('[MQTTNotificationService] >>>> requestPermission ERR: Unable to get permission to notify.', err);
58
+ });
59
+ } else {
60
+ this.logger.log('[MQTTNotificationService] >>>> FIREBASE MESSAGING IS NOT SUPPORTED')
62
61
  }
62
+ }
63
63
 
64
64
 
65
- removeNotificationsInstance(callback: (string) => void) {
66
- var self = this;
67
- // firebase.auth().onAuthStateChanged(function (user) {
68
- // if (user) {
69
- // self.logger.debug('[FIREBASE-NOTIFICATIONS] - FB User is signed in. ', user)
70
- // self.logger.log('[FIREBASE-NOTIFICATIONS] >>>> removeNotificationsInstance > this.userId', self.userId);
71
- // self.logger.log('[FIREBASE-NOTIFICATIONS] >>>> removeNotificationsInstance > FCMcurrentToken', self.FCMcurrentToken);
72
- // // this.logger.log('[FIREBASE-NOTIFICATIONS] >>>> removeNotificationsInstance > this.tenant', this.tenant);
73
- // } else {
74
- // self.logger.debug('[FIREBASE-NOTIFICATIONS] - No FB user is signed in. ', user)
75
- // }
76
- // });
77
- const urlNodeFirebase = '/apps/' + self.tenant
78
- const connectionsRefinstancesId = urlNodeFirebase + '/users/' + self.userId + '/instances/'
79
- self.logger.log('[FIREBASE-NOTIFICATIONS] >>>> connectionsRefinstancesId ', connectionsRefinstancesId);
80
- let connectionsRefURL = '';
81
- if (connectionsRefinstancesId) {
82
- connectionsRefURL = connectionsRefinstancesId + self.FCMcurrentToken;
83
- const connectionsRef = firebase.database().ref().child(connectionsRefURL);
84
- self.logger.log('[FIREBASE-NOTIFICATIONS] >>>> connectionsRef ', connectionsRef);
85
- self.logger.log('[FIREBASE-NOTIFICATIONS] >>>> connectionsRef url ', connectionsRefURL);
86
- connectionsRef.off()
87
- connectionsRef.remove()
88
- .then(() => {
89
- self.logger.log("[FIREBASE-NOTIFICATIONS] >>>> removeNotificationsInstance > Remove succeeded.")
90
- callback('success')
91
- }).catch((error) => {
92
- self.logger.error("[FIREBASE-NOTIFICATIONS] >>>> removeNotificationsInstance Remove failed: " + error.message)
93
- callback('error')
94
- }).finally(() => {
95
- self.logger.log('[FIREBASE-NOTIFICATIONS] COMPLETED');
96
- })
97
- }
98
- }
99
-
100
- private saveToken(FCMcurrentToken, currentUserUid) {
101
- this.logger.log('[FIREBASE-NOTIFICATIONS] >>>> getPermission > updateToken ', FCMcurrentToken);
102
- if (!currentUserUid || !FCMcurrentToken) {
103
- return
104
- };
105
- const device_model = {
106
- device_model: navigator.userAgent,
107
- language: navigator.language,
108
- platform: 'ionic',
109
- platform_version: this.BUILD_VERSION
65
+ removeNotificationsInstance(callback: (string) => void) {
66
+ var self = this;
67
+ // firebase.auth().onAuthStateChanged(function (user) {
68
+ // if (user) {
69
+ // self.logger.debug('[FIREBASE-NOTIFICATIONS] - FB User is signed in. ', user)
70
+ // self.logger.log('[FIREBASE-NOTIFICATIONS] >>>> removeNotificationsInstance > this.userId', self.userId);
71
+ // self.logger.log('[FIREBASE-NOTIFICATIONS] >>>> removeNotificationsInstance > FCMcurrentToken', self.FCMcurrentToken);
72
+ // // this.logger.log('[FIREBASE-NOTIFICATIONS] >>>> removeNotificationsInstance > this.tenant', this.tenant);
73
+ // } else {
74
+ // self.logger.debug('[FIREBASE-NOTIFICATIONS] - No FB user is signed in. ', user)
75
+ // }
76
+ // });
77
+ const urlNodeFirebase = '/apps/' + self.tenant
78
+ const connectionsRefinstancesId = urlNodeFirebase + '/users/' + self.userId + '/instances/'
79
+ self.logger.log('[MQTTNotificationService] >>>> connectionsRefinstancesId ', connectionsRefinstancesId);
80
+ let connectionsRefURL = '';
81
+ if (connectionsRefinstancesId) {
82
+ connectionsRefURL = connectionsRefinstancesId + self.FCMcurrentToken;
83
+ const connectionsRef = firebase.database().ref().child(connectionsRefURL);
84
+ self.logger.log('[MQTTNotificationService] >>>> connectionsRef ', connectionsRef);
85
+ self.logger.log('[MQTTNotificationService] >>>> connectionsRef url ', connectionsRefURL);
86
+ connectionsRef.off()
87
+ connectionsRef.remove().then(() => {
88
+ self.logger.log("[MQTTNotificationService] >>>> removeNotificationsInstance > Remove succeeded.")
89
+ callback('success')
90
+ }).catch((error) => {
91
+ self.logger.error("[MQTTNotificationService] >>>> removeNotificationsInstance Remove failed: " + error.message)
92
+ callback('error')
93
+ }).finally(() => {
94
+ self.logger.log('[MQTTNotificationService] COMPLETED');
95
+ })
110
96
  }
111
- this.chat21Service.chatClient.saveInstance(
112
- FCMcurrentToken,
113
- device_model,
114
- (err, response) => {
115
- if (err) {
116
- this.logger.error('Error saving FCMcurrentToken on chat21 App Instance', FCMcurrentToken);
117
- }
118
- }
119
- );
97
+ }
98
+
99
+ private saveToken(FCMcurrentToken, currentUserUid) {
100
+ this.logger.log('[MQTTNotificationService] >>>> getPermission > updateToken ', FCMcurrentToken);
101
+ if (!currentUserUid || !FCMcurrentToken) {
102
+ return
103
+ };
104
+ const device_model = {
105
+ device_model: navigator.userAgent,
106
+ language: navigator.language,
107
+ platform: 'ionic',
108
+ platform_version: this.BUILD_VERSION
120
109
  }
121
-
110
+ this.chat21Service.chatClient.saveInstance(FCMcurrentToken,device_model,(err, response) => {
111
+ if (err) {
112
+ this.logger.error('[MQTTNotificationService] Error saving FCMcurrentToken on chat21 App Instance', FCMcurrentToken);
113
+ }
114
+ });
122
115
  }
116
+
117
+ }
@@ -21,8 +21,9 @@ import { environment } from '../../../environments/environment';
21
21
  })
22
22
  export class MQTTPresenceService extends PresenceService {
23
23
 
24
- BSIsOnline: BehaviorSubject<any>;
25
- BSLastOnline: BehaviorSubject<any>;
24
+ // BehaviorSubject
25
+ BSIsOnline: BehaviorSubject<any> = new BehaviorSubject<any>(null);
26
+ BSLastOnline: BehaviorSubject<any> = new BehaviorSubject<any>(null);
26
27
 
27
28
  // private params
28
29
  private tenant: string;
@@ -14,6 +14,7 @@ import { LoggerInstance } from '../logger/loggerInstance';
14
14
  import { setLastDate } from '../../utils/utils';
15
15
  import { environment } from '../../../environments/environment';
16
16
  import { TypingService } from '../abstract/typing.service';
17
+ import { BehaviorSubject } from 'rxjs';
17
18
 
18
19
  export class TypingModel {
19
20
 
@@ -31,6 +32,10 @@ export class TypingModel {
31
32
 
32
33
  export class MQTTTypingService extends TypingService {
33
34
 
35
+ // BehaviorSubject
36
+ BSIsTyping: BehaviorSubject<any> = new BehaviorSubject<any>(null);
37
+ BSSetTyping: BehaviorSubject<any> = new BehaviorSubject<any>(null);
38
+
34
39
  // private params
35
40
  private tenant: string;
36
41
  private urlNodeTypings: string;
@@ -1,3 +1,4 @@
1
+ import { HttpClient } from '@angular/common/http';
1
2
  import { Injectable } from '@angular/core';
2
3
  import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
3
4
 
@@ -7,7 +8,7 @@ export class NativeImageRepoService extends ImageRepoService {
7
8
 
8
9
  private baseImageURL: string;
9
10
 
10
- constructor() {
11
+ constructor(public http: HttpClient) {
11
12
  super();
12
13
  }
13
14
 
@@ -25,6 +26,12 @@ export class NativeImageRepoService extends ImageRepoService {
25
26
  const filename_photo = '?path=uploads/users/'+ sender_id + '/images/photo.jpg'
26
27
  const filename_thumbnail = '?path=uploads/users/'+ sender_id + '/images/thumbnails_200_200-photo.jpg'
27
28
  return this.baseImageURL + filename_photo
28
- }
29
+ }
30
+
31
+ checkImageExists(url: string, callback: (exist: boolean) => void): void {
32
+ this.http.get(url).subscribe( res => {
33
+ callback(true)
34
+ },(error) => { console.log('errorrrrrr', url, error);callback(false)})
35
+ }
29
36
 
30
37
  }
@@ -11,16 +11,9 @@ import { LoggerInstance } from '../logger/loggerInstance';
11
11
  @Injectable()
12
12
  export class NativeUploadService extends UploadService {
13
13
 
14
+ BSStateUpload: BehaviorSubject<any> = new BehaviorSubject<any>(null)
14
15
 
15
-
16
- BSStateUpload: BehaviorSubject<any>;
17
-
18
- // private persistence: string;
19
- SERVER_BASE_URL: string;
20
-
21
- public token: any;
22
- public tiledeskToken: any;
23
-
16
+ private tiledeskToken: string;
24
17
  private URL_TILEDESK_IMAGES: string;
25
18
  private URL_TILEDESK_FILE: string;
26
19
  private logger: LoggerService = LoggerInstance.getInstance()
@@ -32,9 +25,8 @@ export class NativeUploadService extends UploadService {
32
25
  super();
33
26
  }
34
27
 
35
-
36
28
  initialize(): void {
37
- this.logger.info(' [NATIVE UPLOAD] initialize')
29
+ this.logger.info('[NATIVE UPLOAD] initialize')
38
30
  this.URL_TILEDESK_FILE = this.getBaseUrl() + 'files'
39
31
  this.URL_TILEDESK_IMAGES = this.getBaseUrl() + 'images'
40
32
  this.tiledeskToken = this.appStorage.getItem('tiledeskToken')
@@ -14,7 +14,6 @@ import { LoggerInstance } from '../logger/loggerInstance';
14
14
  })
15
15
  export class TiledeskAuthService {
16
16
 
17
- // public isOnline$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(null);
18
17
  // private persistence: string;
19
18
  public SERVER_BASE_URL: string;
20
19
 
@@ -120,7 +119,6 @@ export class TiledeskAuthService {
120
119
  if (data['success'] && data['token']) {
121
120
  that.tiledeskToken = data['token'];
122
121
  that.createCompleteUser(data['user']);
123
-
124
122
  // that.appStorage.setItem('tiledeskToken', that.tiledeskToken); // salvarlo esternamente nell'app.component
125
123
  this.checkAndSetInStorageTiledeskToken(that.tiledeskToken)
126
124
  resolve(this.currentUser)
@@ -110,7 +110,7 @@ export const LogLevel = {
110
110
  'DEBUG': 3
111
111
  }
112
112
 
113
- export const tranlatedLanguage = ['it', 'en', 'de', 'es', 'pt', 'fr', 'ru', 'tr', 'sr', 'ar']
113
+ export const tranlatedLanguage = ['it', 'en', 'de', 'es', 'pt', 'fr', 'ru', 'tr', 'sr', 'ar', 'uk', 'sv', 'az', 'kk', 'uz']
114
114
 
115
115
 
116
116
 
@@ -109,7 +109,7 @@ export function isEmojii(message: any){
109
109
  const onlyEmojis = message.replace(new RegExp('[\u0000-\u1eeff]', 'g'), '')
110
110
  const visibleChars = message.replace(new RegExp('[\n\r\s]+|( )+', 'g'), '')
111
111
  if(onlyEmojis === '' || visibleChars == '') return false
112
- return onlyEmojis.length === visibleChars.length
112
+ return (onlyEmojis.length === visibleChars.length && onlyEmojis.length <= 2)
113
113
  } catch(e) {
114
114
  return false
115
115
  }