diff --git a/src/app/Rules/despacho.service.ts b/src/app/Rules/despacho.service.ts index ae89903af..2e41e5305 100644 --- a/src/app/Rules/despacho.service.ts +++ b/src/app/Rules/despacho.service.ts @@ -254,7 +254,7 @@ export class DespachoService { }); despachoList = this.sortService.sortDate(despachoList, 'CreateDate') - + if(updateStore) { this.despachoStore.reset(despachoList); } diff --git a/src/app/pages/chat/chat.page.html b/src/app/pages/chat/chat.page.html index 99fa196ef..d6b54ec3f 100644 --- a/src/app/pages/chat/chat.page.html +++ b/src/app/pages/chat/chat.page.html @@ -67,19 +67,27 @@
{{room.value.duration}}
+ {{room.value.lastMessage.msg}} A escrever ... + + +
+ + {{room.value.lastMessage.file.name || room.value.lastMessage.file.subject }} - +
+
Fotografia
+
@@ -122,11 +130,10 @@
{{countDownDate(group.value.customFields.countDownDate, group.value.id)}}
-
{{group.value.lastMessage.u.name}}: {{group.value.lastMessage.msg}}
-
{{group.value.lastMessage.u.name}}: {{group.value.lastMessage.msg}}
{{group.value.userThatIsTyping}} A escrever ...
+
{{group.value.lastMessage.u.name}}: {{group.value.lastMessage.msg}}
diff --git a/src/app/pages/chat/chat.page.ts b/src/app/pages/chat/chat.page.ts index b0c731cdb..b5963e605 100644 --- a/src/app/pages/chat/chat.page.ts +++ b/src/app/pages/chat/chat.page.ts @@ -143,6 +143,7 @@ export class ChatPage implements OnInit { ngOnInit() { + console.log(this.wsChatMethodsService.dm); console.log(this.wsChatMethodsService.group); @@ -548,7 +549,7 @@ export class ChatPage implements OnInit { return dateB - dateA; }); - + //console.log('GROUPS FROM DB', this.allGroups) }) diff --git a/src/app/pages/chat/group-messages/group-messages.page.html b/src/app/pages/chat/group-messages/group-messages.page.html index fba00d888..cdfd4646b 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.html +++ b/src/app/pages/chat/group-messages/group-messages.page.html @@ -56,49 +56,20 @@ Esta conversa passou a grupo
A conversa original mantêm-se como chat individual
-
-
+
+
{{msg.u.name ?? ""}} {{showDateDuration(msg._updatedAt)}}
{{msg.msg}} -
-
-
- image -
-
-
-
- -
- - - - - - - {{file.title}} -
-
-
- - {{file.description}} - - {{msg.file.type.replace('application/','').toUpperCase()}} - -
-
-
-
-
{{last ? scrollToBottom() : ''}}
-
+ + File image
@@ -120,22 +90,22 @@ {{last ? scrollToBottom() : ''}}
-
+
--> -
+
+
{{msg.u.name ?? ""}} {{showDateDuration(msg._updatedAt)}}
- {{msg.msg}}
-
+
image +
-
-
+
@@ -154,13 +124,19 @@ {{msg.file.type.replace('application/','').toUpperCase()}}
-
{{last ? scrollToBottom() : ''}}
+
+ {{msg.u.name ?? ""}} criou esta reunião
+
+ De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}
+ {{msg.file.venue}}
+
+
@@ -191,7 +167,7 @@
{{last ? scrollToBottom() : ''}}
-
+
diff --git a/src/app/pages/chat/group-messages/group-messages.page.ts b/src/app/pages/chat/group-messages/group-messages.page.ts index 9ad1f4e7e..0a9b8d3a7 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -137,7 +137,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { "asUser": false, } if(msgId){ - this.alertService.confirmDeleteMessage(body); + //this.alertService.confirmDeleteMessage(body); } else{ this.toastService.badRequest('Não foi possível apagar'); @@ -336,12 +336,14 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { cssClass: 'chat-popover', componentProps: { roomId: this.roomId, + members: this.members, }, }); await modal.present(); modal.onDidDismiss().then(res=>{ if(res.data == 'leave'){ console.log('saiu do grupo'); + //this.wsChatMethodsService.subscribeToRoomUpdate(this.roomId, this.room); } else if(res.data == 'cancel'){ console.log('cancel'); diff --git a/src/app/pages/chat/messages/messages.page.html b/src/app/pages/chat/messages/messages.page.html index 43947b077..0b7b9b61a 100644 --- a/src/app/pages/chat/messages/messages.page.html +++ b/src/app/pages/chat/messages/messages.page.html @@ -49,46 +49,14 @@ -->
-
-
+
+
{{msg.u.name}} {{showDateDuration(msg._updatedAt)}}
{{msg.msg}} -
-
-
- - image -
-
-
-
- -
- - - - - - - {{file.title}} -
-
-
- - {{file.description}} - - {{msg.file.type.replace('application/','').toUpperCase()}} - -
-
-
-
-
{{last ? scrollToBottom() : ''}}
@@ -104,7 +72,9 @@
--> -
+ +
+
{{msg.u.name}} {{showDateDuration(msg._updatedAt)}} @@ -112,15 +82,12 @@
-
- - File +
image +
-
-
+
-
@@ -138,15 +105,22 @@ {{msg.file.type.replace('application/','').toUpperCase()}}
-
{{last ? scrollToBottom() : ''}}
+
+ {{msg.u.name}} criou esta reunião
+
+ De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}
+ {{msg.file.venue}}
+
-
+
+ +
diff --git a/src/app/pages/chat/messages/messages.page.ts b/src/app/pages/chat/messages/messages.page.ts index 8627b05f1..49521291e 100644 --- a/src/app/pages/chat/messages/messages.page.ts +++ b/src/app/pages/chat/messages/messages.page.ts @@ -114,7 +114,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { this.wsChatMethodsService.getDmRoom(this.roomId).loadHistory() this.wsChatMethodsService.getDmRoom(this.roomId).scrollDown = this.scrollToBottomClicked - + setTimeout(()=>{ this.scrollToBottomClicked() }, 50) @@ -245,7 +245,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { "asUser": false, } if (msgId) { - this.alertService.confirmDeleteMessage(body); + //this.alertService.confirmDeleteMessage(body); } else { this.toastService.badRequest('Não foi possível apagar'); @@ -580,11 +580,11 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { }); } - /* + /* this.fileService.downloadFile(element.file.guid).subscribe(async (event) => { var name = element.file.guid; if (event.type === HttpEventType.DownloadProgress) { - + } else if (event.type === HttpEventType.Response) { var base64 = btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '') ); @@ -604,14 +604,14 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { console.log('error LAKE FS FILE', error) }); - + const readFile = await Filesystem.readFile({ path: `${IMAGE_DIR}/${name}`, directory: Directory.Data, - }); - - + }); + + });*/ getRoomMessageDB(roomId) { diff --git a/src/app/pages/chat/new-group/new-group.page.ts b/src/app/pages/chat/new-group/new-group.page.ts index d1006c0e2..5ca806462 100644 --- a/src/app/pages/chat/new-group/new-group.page.ts +++ b/src/app/pages/chat/new-group/new-group.page.ts @@ -6,6 +6,8 @@ import { GroupContactsPage } from '../group-messages/group-contacts/group-contac import { ThemeService } from 'src/app/services/theme.service' import { ChatService } from 'src/app/services/chat.service'; import { ProcessesService } from 'src/app/services/processes.service'; +import { WsChatMethodsService } from 'src/app/services/chat/ws-chat-methods.service'; +import { AuthService } from 'src/app/services/auth.service'; @Component({ selector: 'app-new-group', @@ -21,6 +23,7 @@ export class NewGroupPage implements OnInit { thedate:any; groupName:string; documents:any; + loggedUserChat: any; constructor( private pickerController: PickerController, @@ -30,8 +33,11 @@ export class NewGroupPage implements OnInit { public ThemeService: ThemeService, private chatService: ChatService, private processesService: ProcessesService, + public wsChatMethodsService: WsChatMethodsService, + private authService: AuthService, ) { + this.loggedUserChat = authService.ValidatedUserChat['data']; this.isGroupCreated = false; this.groupName = this.navParams.get('name'); this.documents = this.navParams.get('documents'); @@ -55,10 +61,34 @@ export class NewGroupPage implements OnInit { this.modalController.dismiss(); } - createGroup(){ + async createGroup(){ let name = this.groupName.split(' ').join('-'); //Take out all special characters in string name = name.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); + + let customFields = {} + let res:any; + + if(this.thedate){ + let customFields = { + "countDownDate":this.thedate + } + res = await this.wsChatMethodsService.createPrivateRoom(name, this.loggedUserChat.me.username, customFields); + console.log(res); + } + else{ + res = await this.wsChatMethodsService.createPrivateRoom(name, this.loggedUserChat.me.username, customFields); + console.log(res); + } + + this.isGroupCreated = true; + this.addContacts(res.result); + + this.wsChatMethodsService.subscribeToRoomUpdate(res.result.rid, res.result); + + //this.addGroupMessage.emit(res.result.rid); + + /* let body = { "name":name, } this.chatService.addGroup(body).subscribe(res=>{ console.log('group created'); @@ -112,7 +142,7 @@ export class NewGroupPage implements OnInit { this.chatService.sendMessage(body).toPromise(); }); } - }); + }); */ } async addContacts(room){ diff --git a/src/app/pages/publications/view-publications/view-publications.page.ts b/src/app/pages/publications/view-publications/view-publications.page.ts index d95ba7411..f81eb7b19 100644 --- a/src/app/pages/publications/view-publications/view-publications.page.ts +++ b/src/app/pages/publications/view-publications/view-publications.page.ts @@ -144,16 +144,16 @@ export class ViewPublicationsPage implements OnInit { console.log('publications ids', res) this.publicationList = new Array(); - for(let i of res) { + /* for(let i of res) { this.publications.GetPublicationById(i).subscribe(ress => { console.log('publications by ids', ress) let item: Publication = this.publicationPipe.itemList(ress) console.log('publications by ids 2', item) this.publicationList.push(item); }) - } + } */ - /* res.forEach(element => { + res.forEach(element => { console.log('publications elements', element) this.publications.GetPublicationById(element).subscribe(ress => { console.log('publications by ids', ress) @@ -162,7 +162,7 @@ export class ViewPublicationsPage implements OnInit { this.publicationList.push(ress); }) - }); */ + }); this.sqliteservice.updateactions(this.folderId, JSON.stringify(this.publicationList)); diff --git a/src/app/services/alert.service.ts b/src/app/services/alert.service.ts index 239c5d89c..447b18fe4 100644 --- a/src/app/services/alert.service.ts +++ b/src/app/services/alert.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@angular/core'; import { AlertController, AnimationController } from '@ionic/angular'; import { ChatService } from './chat.service'; +import { WsChatMethodsService } from './chat/ws-chat-methods.service'; import { ToastService } from './toast.service'; @Injectable({ @@ -13,6 +14,7 @@ export class AlertService { private animationController: AnimationController, private chatService: ChatService, private toastService: ToastService, + public wsChatMethodsService: WsChatMethodsService, ) { } async presentAlert(message:string) { @@ -40,7 +42,9 @@ export class AlertService { }, 2500); } - async confirmDeleteMessage(body:any) { + async confirmDeleteMessage(msgId:any, room:any) { + console.log(room); + const alert = await this.alertController.create({ cssClass: 'my-custom-class', header: 'Apagar a mensagem?', @@ -55,10 +59,10 @@ export class AlertService { }, { text: 'Apagar', handler: () => { - const loader = this.toastService.loading(); - this.chatService.deleteMessage(body).subscribe(res=>{ - loader.remove(); - }); + //const loader = this.toastService.loading(); + this.wsChatMethodsService.deleteMessage(msgId); + //this.wsChatMethodsService.subscribeToRoomUpdate(room._id, room); + //loader.remove(); } } ] diff --git a/src/app/services/chat/room.service.ts b/src/app/services/chat/room.service.ts index e9d02ea06..7f803a5c4 100644 --- a/src/app/services/chat/room.service.ts +++ b/src/app/services/chat/room.service.ts @@ -11,12 +11,13 @@ import { SqliteService } from 'src/app/services/sqlite.service'; import { NativeNotificationService } from 'src/app/services/native-notification.service'; import { SessionStore } from 'src/app/store/session.service'; import { capitalizeTxt } from 'src/plugin/text' +import { SortService } from '../functions/sort.service'; @Injectable({ providedIn: 'root' }) export class RoomService { - massages: MessageService[] = [] + messages: MessageService[] = [] storageMessage: any[] = []; lastMessage: MessageService; @@ -46,12 +47,12 @@ export class RoomService { private storage: Storage, private platform: Platform, private sqlservice: SqliteService, - private NativeNotificationService: NativeNotificationService + private NativeNotificationService: NativeNotificationService, ) { this.NativeNotificationService.askForPermission() } - setData({ customFields, id, name, t, lastMessage, _updatedAt }) { + setData({ customFields, id, name, t, lastMessage = new MessageService(), _updatedAt }) { this.customFields = customFields this.id = id this.name = name @@ -64,8 +65,9 @@ export class RoomService { receiveMessage() { - this.WsChatService.receiveLiveMessageFromRoom( + this.WsChatService.upateRoomEvents( this.id, + "stream-room-messages", (ChatMessage) => { ChatMessage = ChatMessage.fields.args[0] ChatMessage = this.fix_updatedAt(ChatMessage) @@ -74,15 +76,17 @@ export class RoomService { /* this.ToastService._chatMessage({message:'Nova mensagem', sender:'Gilson'}) */ const message = new MessageService() message.setData(ChatMessage) - this.lastMessage.msg = message.msg + + this.lastMessage = message if (message.t == 'r') { this.name = message.msg } this.calDateDuration(ChatMessage._updatedAt) - this.massages.push(message) + this.messages.push(message) setTimeout(() => { this.scrollDown() }, 100) + //this.sortService.sortDate(this.messages, '') if(SessionStore.user.RochetChatUser != ChatMessage.u.username) { this.NativeNotificationService.sendNotificationChat({ @@ -118,6 +122,36 @@ export class RoomService { } else if (message.fields.eventName == this.id+'/'+'deleteMessage') {} }) + this.WsChatService.registerCallback + } + + async receiveMessageDelete() { + + this.WsChatService.upateRoomEvents( + this.id, + "stream-notify-room", + async (ChatMessage) => { + console.log(ChatMessage.fields.args[0]._id); + const messageId = ChatMessage.fields.args[0]._id; + this.messages.forEach((message, index)=>{ + if(message._id == messageId){ + this.messages.splice(index, 1) + this.storage.set('chatmsg' + this.id, this.messages).then((value) => { + //console.log('MSG DELETE ON STORAGE', value) + }); + + //Get previous last message from room + const previousLastMessage = this.messages.slice(-1)[0]; + + this.lastMessage = previousLastMessage; + this.calDateDuration(previousLastMessage._updatedAt) + + } + }) + + } + ) + this.WsChatService.registerCallback } send() { @@ -199,8 +233,8 @@ export class RoomService { console.log('FROM DB WEB', mmessage) const wewMessage = new MessageService() wewMessage.setData(mmessage) - this.massages.push(wewMessage) - console.log('loadHistory 222', this.massages) + this.messages.push(wewMessage) + console.log('loadHistory 222', this.messages) }); }); } @@ -223,7 +257,7 @@ export class RoomService { if (message.file) { if (message.file.guid) { this.storage.get(message.file.guid).then((image) => { - console.log('IMAGE FROM STORAGE', image) + //console.log('IMAGE FROM STORAGE', image) message.file.image_url = image }); } @@ -233,8 +267,8 @@ export class RoomService { console.log('FROM DB WEB', mmessage) const wewMessage = new MessageService() wewMessage.setData(mmessage) - this.massages.push(wewMessage) - console.log('loadHistory 222', this.massages) + this.messages.push(wewMessage) + console.log('loadHistory 222', this.messages) }); }) } @@ -263,6 +297,8 @@ export class RoomService { this.WsChatService.loadHistory(this.id, limit).then(async (chatHistory: chatHistory) => { const mgsArray = chatHistory.result.messages.reverse(); + console.log(mgsArray); + if (this.platform.is('desktop') || this.platform.is('mobileweb')) { await this.storage.remove('chatmsg' + this.id).then(() => { console.log('MSG REMOVE ON STORAGE') diff --git a/src/app/services/chat/ws-chat-methods.service.ts b/src/app/services/chat/ws-chat-methods.service.ts index b07a7737d..a7b30102b 100644 --- a/src/app/services/chat/ws-chat-methods.service.ts +++ b/src/app/services/chat/ws-chat-methods.service.ts @@ -9,6 +9,7 @@ import { Storage } from '@ionic/storage'; import { Platform } from '@ionic/angular'; import { SqliteService } from 'src/app/services/sqlite.service'; import { NativeNotificationService } from 'src/app/services/native-notification.service'; +import { SortService } from '../functions/sort.service'; @Injectable({ providedIn: 'root' @@ -28,7 +29,8 @@ export class WsChatMethodsService { private storage: Storage, private platform: Platform, private sqlservice: SqliteService, - private NativeNotificationService: NativeNotificationService + private NativeNotificationService: NativeNotificationService, + private sortService: SortService ) { (async()=>{ await this.getAllRooms(); @@ -46,30 +48,7 @@ export class WsChatMethodsService { // console.log("ROOMS" + JSON.stringify(rooms)) rooms.result.update.forEach((roomData: room) => { - let room:RoomService; - - room = new RoomService(this.WsChatService, new MessageService(), this.storage, this.platform, this.sqlservice, this.NativeNotificationService) - room.setData({ - customFields: roomData.customFields, - id: this.getRoomId(roomData), - name: this.getRoomName(roomData), - t: roomData.t, - lastMessage: this.getRoomLastMessage(roomData), - _updatedAt: new Date(roomData._updatedAt['$date']) - }) - - room.receiveMessage() - - let roomId = this.getRoomId(roomData) - - if(this.isIndividual(roomData)) { - this.dm[roomId] = room - this.dmCount++ - } else { - this.group[roomId] = room - this.groupCount++ - } - + this.prepareRoom(roomData); }); this.loadingWholeList = false @@ -83,6 +62,9 @@ export class WsChatMethodsService { }) this.WsChatService.subStreamNotifyRoom(id, 'typing', false) + this.WsChatService.streamNotifyRoomDeleteMessage(id).then((subscription)=>{ + console.log('streamNotifyRoomDeleteMessage', subscription); + }) } for (const id in this.group) { @@ -91,13 +73,69 @@ export class WsChatMethodsService { }) this.WsChatService.subStreamNotifyRoom(id, 'typing', false) + this.WsChatService.streamNotifyRoomDeleteMessage(id).then((subscription)=>{ + console.log('streamNotifyRoomDeleteMessage', subscription); + }) } - this.WsChatService.streamNotifyLogged().then((subscription=>{ console.log('streamRoomMessages', subscription) })) } + + subscribeToRoomUpdate(id, roomData) { + this.WsChatService.streamRoomMessages(id).then((subscription)=>{ + console.log('streamRoomMessages', subscription) + }) + this.WsChatService.streamRoomMessages(id).then((subscription)=>{ + console.log('streamRoomMessages', subscription) + }) + this.WsChatService.streamNotifyLogged().then((subscription=>{ + console.log('streamRoomMessages', subscription) + })) + this.WsChatService.streamNotifyRoomDeleteMessage(id).then((subscription)=>{ + console.log('streamNotifyRoomDeleteMessage', subscription); + }) + + this.prepareRoom(roomData); + + this.getGroupRoom(id).loadHistory(); + + } + + prepareRoom(roomData){ + let room:RoomService; + + room = new RoomService(this.WsChatService, new MessageService(), this.storage, this.platform, this.sqlservice, this.NativeNotificationService) + room.setData({ + customFields: roomData.customFields, + id: this.getRoomId(roomData), + name: this.getRoomName(roomData), + t: roomData.t, + lastMessage: this.getRoomLastMessage(roomData), + _updatedAt: new Date(roomData._updatedAt['$date']) + }) + + room.receiveMessage() + room.receiveMessageDelete(); + + let roomId = this.getRoomId(roomData) + + if(this.isIndividual(roomData)) { + console.log(room); + + this.dm[roomId] = room + this.dmCount++ + } else { + this.group[roomId] = room + this.groupCount++ + } + } + + deleteMessage(id?) { + return this.WsChatService.deleteMessage(id); + } + leaveRoom(id?) { return this.WsChatService.leaveRoom(id); } @@ -110,6 +148,10 @@ export class WsChatMethodsService { return this.WsChatService.addRoomOwner(roomid, userId); } + createPrivateRoom(groupName, username, customFields){ + return this.WsChatService.createPrivateRoom(groupName, username, customFields); + } + getDmRoom(id): RoomService { try { return this.dm[id] @@ -141,7 +183,7 @@ export class WsChatMethodsService { return roomData._id } - getRoomLastMessage(roomData: room) { + getRoomLastMessage(roomData: room):any { return roomData.lastMessage } diff --git a/src/app/services/chat/ws-chat.service.ts b/src/app/services/chat/ws-chat.service.ts index 39f6327a2..0d2dce882 100644 --- a/src/app/services/chat/ws-chat.service.ts +++ b/src/app/services/chat/ws-chat.service.ts @@ -228,8 +228,59 @@ export class WsChatService { } joinRoom(){} - deleteMessage() {} - createRoom() {} + + deleteMessage(msgId) { + const requestId = uuidv4(); + + var message = { + msg: "method", + method: "deleteMessage", + id: requestId, + params:[{"_id":msgId}] + } + + this.ws.send({message, requestId}); + + return new Promise ((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', funx:(message) =>{ + if(message.id == requestId || deepFind(message, 'result') == requestId){ + resolve(message) + return true + } + }}) + }); + } + + createPrivateRoom(groupName, username, customFields) { + const requestId = uuidv4() + + var message = { + msg: "method", + method: "createPrivateGroup", + id: requestId, + params: [ + groupName, + [username], + false, + customFields, + { + "broadcast":false, + "encrypted":false + } + ] + } + + this.ws.send({message, requestId}); + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', funx:(message)=>{ + if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send + resolve(message) + return true + } + }}) + }); + } sendStreamNotifyRoom(roomId : string, username, event: 'typing', param: any) { @@ -374,15 +425,20 @@ export class WsChatService { } - receiveLiveMessageFromRoom(roomId, funx: Function) { +upateRoomEvents(roomId, collection:string, funx: Function, ) { this.ws.registerCallback({ type:'Onmessage', funx:(message)=>{ - if(message.msg =='changed' && message.collection == 'stream-room-messages') { + //console.log(message); + + if(message.msg =='changed' && message.collection == collection) { if(message.fields.args[0].rid == roomId) { funx(message) } + else if(message.fields.eventName ==`${roomId}/deleteMessage`){ + funx(message) + } } } }) @@ -469,6 +525,33 @@ export class WsChatService { } + streamNotifyRoomDeleteMessage(roomId:string) { + + const requestId = uuidv4() + + let message = { + "msg": "sub", + "id": requestId, + "name": "stream-notify-room", + "params": [ + `${roomId}/deleteMessage`, + true + ] + }; + + this.ws.send({message, requestId}) + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', funx:(message)=>{ + if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send + resolve(message) + return true + } + }}) + }); + + } + registerCallback(data:wsCallbacksParams) { return this.ws.registerCallback(data) } diff --git a/src/app/services/functions/file.service.ts b/src/app/services/functions/file.service.ts index cc7576c52..2f3313ab2 100644 --- a/src/app/services/functions/file.service.ts +++ b/src/app/services/functions/file.service.ts @@ -13,7 +13,7 @@ import { Camera, CameraResultType, CameraSource, Photo} from '@capacitor/camera import { Filesystem, Directory } from '@capacitor/filesystem'; import { environment } from 'src/environments/environment'; import { HttpClient, HttpEventType, HttpHeaders, HttpParams } from '@angular/common/http'; - +import { Storage } from '@ionic/storage'; const IMAGE_DIR = 'stored-images'; @@ -53,6 +53,7 @@ export class FileService { private platform: Platform, private loadingCtrl: LoadingController, private http: HttpClient, + private storage: Storage ) { this.headers = new HttpHeaders(); } @@ -253,43 +254,64 @@ export class FileService { this.capturedImage = this.images[0].data this.capturedImageTitle = new Date().getTime() + '.jpeg'; + const base64 = await fetch(this.capturedImage); + const blob = await base64.blob(); const formData = new FormData(); - formData.append("blobFile", this.capturedImage); - let guid: any = await this.uploadFile(this.capturedImage).toPromise() + formData.append("blobFile", blob); + console.log('ALL IMAGE', formData) + let guid: any = await this.uploadFile(formData).toPromise() console.log(guid.path); - let body = { - "message": - { - "rid": roomid, - "msg": "", - "attachments": [{ - "title": this.capturedImageTitle, - "title_link_download": false, - "image_url": this.capturedImage, - }], - "file":{ - "type": "application/img", - "guid": guid.path, - "image_url": "" + + this.downloadFile(guid.path).subscribe(async (event) => { + + if (event.type === HttpEventType.DownloadProgress) { + //this.downloadProgess = Math.round((100 * event.loaded) / event.total); + //console.log('FILE TYPE 33', msg.file.type) + } else if (event.type === HttpEventType.Response) { + var fileImage = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '')); + console.log('add picture to chat',fileImage); + await this.storage.set(guid.path, fileImage).then(() => { + console.log('add picture to chat IMAGE SAVED') + let body = { + "message": + { + "rid": roomid, + "msg": "", + "attachments": [{ + "title": this.capturedImageTitle, + "title_link_download": false, + "image_url": fileImage, + }], + "file":{ + "type": "application/img", + "guid": guid.path, + "image_url": fileImage + } + } + } + console.log('BODY TAKE PICTURE CHAT', body) + const loader = this.toastService.loading(); + this.chatService.sendMessage(body).subscribe(res=> { + console.log(res); + loader.remove(); + },(error) => { + loader.remove(); + this.toastService.badRequest("Não foi possível adicionar a fotografia!"); + }); + + }); } - } - } - console.log('BODY TAKE PICTURE CHAT', body) - const loader = this.toastService.loading(); - this.chatService.sendMessage(body).subscribe(res=> { - console.log(res); - loader.remove(); - },(error) => { - loader.remove(); - this.toastService.badRequest("Não foi possível adicionar a fotografia!"); - }); + + }); } async addCameraPictureToChat(roomId){ + console.log('add camera to picture') + const image = await Camera.getPhoto({ quality: 50, allowEditing: false, @@ -299,6 +321,8 @@ export class FileService { if (image) { await this.saveImage(image,roomId) + } else { + console.log('Error saving image') } //this.capturedImage = this.capturedImage; @@ -354,70 +378,84 @@ export class FileService { //loader.remove(); }); */ } + addPictureToChat(roomId) { - addPictureToChat(roomId) { + console.log('add picture to chat') - console.log('add picture to chat') - - const input = this.fileLoaderService.createInput({ - accept: ['image/apng', 'image/jpeg', 'image/png'] - }) + const input = this.fileLoaderService.createInput({ + accept: ['image/apng', 'image/jpeg', 'image/png'] + }) - setInterval(()=>{ - console.log(input.value) - }, 550) + setInterval(() => { + console.log(input.value) + }, 550) - input.onchange = async () => { + input.onchange = async () => { - //alert('Onchange AQUI') + //alert('Onchange AQUI') - const file = this.fileLoaderService.getFirstFile(input) + const file = this.fileLoaderService.getFirstFile(input) - console.log(file); + console.log('first file',file); - const formData = new FormData(); - formData.append("blobFile", file); - let guid: any = await this.uploadFile(formData).toPromise() - console.log('add picture to chat',guid.path); + const formData = new FormData(); + formData.append("blobFile", file); + let guid: any = await this.uploadFile(formData).toPromise() + console.log('ADD IMAGE FORM DATA', formData) + console.log('add picture to chat', guid.path); + this.downloadFile(guid.path).subscribe(async (event) => { - /* const imageData = await this.fileToBase64Service.convert(file) - this.capturedImage = imageData; */ - this.capturedImageTitle = file.name; + if (event.type === HttpEventType.DownloadProgress) { + //this.downloadProgess = Math.round((100 * event.loaded) / event.total); + //console.log('FILE TYPE 33', msg.file.type) + } else if (event.type === HttpEventType.Response) { + var fileImage = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '')); + console.log('add picture to chat',fileImage); + await this.storage.set(guid.path, fileImage).then(() => { + console.log('add picture to chat IMAGE SAVED') - let body = { - "message": - { - "rid": roomId, - "msg": "", - "attachments": [{ - //"title": this.capturedImageTitle , - //"text": "description", - "title_link_download": false, - //"image_url": this.capturedImage, - }], - "file":{ - "type": "application/img", - "guid": guid.path, - "image_url": "" + let body = { + "message": + { + "rid": roomId, + "msg": "", + "attachments": [{ + //"title": this.capturedImageTitle , + //"text": "description", + "title_link_download": false, + //"image_url": this.capturedImage, + }], + "file": { + "type": "application/img", + "guid": guid.path, + "image_url": fileImage + } + } } - } + + console.log('SELECT PICTURE GALLERY', body) + console.log(this.capturedImage) + + this.chatService.sendMessage(body).subscribe(res => { + + console.log('Msg after send image', res); + }, (error) => { + console.log('Msg after send image error', error); + }); + }); } - console.log('SELECT PICTURE GALLERY', body) - console.log(this.capturedImage) + }); - this.chatService.sendMessage(body).subscribe(res=> { + /* const imageData = await this.fileToBase64Service.convert(file) + this.capturedImage = imageData; */ - console.log('Msg after send image',res); - },(error) => { - console.log('Msg after send image error',error); - }); - //console.log(this.capturedImage) - }; - } + //console.log(this.capturedImage) + }; +} addDocumentToChat(roomId:string) { const input = this.fileLoaderService.createInput({ diff --git a/src/app/services/functions/sort.service.ts b/src/app/services/functions/sort.service.ts index c248ff958..dc4c4b84f 100644 --- a/src/app/services/functions/sort.service.ts +++ b/src/app/services/functions/sort.service.ts @@ -15,7 +15,7 @@ export class SortService { }); } } - + sortArrayByDate(myArray: any) { console.log(myArray[0].taskStartDate); if(myArray.length > 0){ @@ -26,13 +26,8 @@ export class SortService { } sortDate(array = [], path: string) { - return array.sort( (a,b)=> { - - return new Date(this.ObjectService.deepFind(b, path)).getTime() - - new Date(this.ObjectService.deepFind(a, path)).getTime() - + return new Date(this.ObjectService.deepFind(b, path)).getTime() - new Date(this.ObjectService.deepFind(a, path)).getTime() }) - } } diff --git a/src/app/shared/chat/group-messages/group-contacts/group-contacts.page.ts b/src/app/shared/chat/group-messages/group-contacts/group-contacts.page.ts index 63173ed2f..53a2394cb 100644 --- a/src/app/shared/chat/group-messages/group-contacts/group-contacts.page.ts +++ b/src/app/shared/chat/group-messages/group-contacts/group-contacts.page.ts @@ -134,12 +134,9 @@ export class GroupContactsPage implements OnInit { updateGroup(){ this.showLoader = true; - this.chatService.getRoomInfo(this.roomId).subscribe(room=>{ - this.room = room['room']; - this.addContacts(this.room); - this.showLoader = false; - this.openGroupMessage.emit(this.room._id); - }); + this.addContacts(this.roomId); + this.openGroupMessage.emit(this.roomId); + this.showLoader = false; } openGroupMessagesPage(){ this.showLoader = true; @@ -259,15 +256,15 @@ export class GroupContactsPage implements OnInit { user.isChecked = !user.isChecked; } - addContacts(room:any){ - console.log(room); + addContacts(roomId:any){ + console.log(roomId); this.selectedUserList = this.users.filter(function(contact) { return contact.isChecked == true; }); console.log( this.selectedUserList); this.selectedUserList.forEach(user=>{ let body ={ - "roomId":room._id, + "roomId":roomId, "userId":user._id, } this.chatService.addUserToGroup(body).subscribe(res=>{ diff --git a/src/app/shared/chat/group-messages/group-messages.page.html b/src/app/shared/chat/group-messages/group-messages.page.html index 75dd39a56..2bbb6b651 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.html +++ b/src/app/shared/chat/group-messages/group-messages.page.html @@ -44,12 +44,12 @@ A conversa original mantêm-se como chat individual
-
+
- +
@@ -58,89 +58,64 @@
{{msg.msg}} -
-
-
- image -
-
-
-
- -
- - - - - - - {{file.title}} -
-
-
- - {{file.description}} - - {{msg.file.type.replace('application/','').toUpperCase()}} - -
-
-
-
-
{{last ? scrollToBottom() : ''}}
- -
-
- - - - -
-
- {{msg.u.name}} - {{showDateDuration(msg._updatedAt)}} -
-
- {{msg.msg}} -
-
-
- image -
-
-
+
+
+
+
+ + + + +
+
+ {{showDateDuration(msg._updatedAt)}} +
+
+
+
+
+ image + +
+
- -
- - - - - - - {{file.title}} +
+ + + + + + + {{file.title}} +
-
-
- - {{file.description}} - - {{msg.file.type.replace('application/','').toUpperCase()}} - +
+ + {{file.description}} + + {{msg.file.type.replace('application/','').toUpperCase()}} +
+ {{last ? scrollToBottom() : ''}}
- {{last ? scrollToBottom() : ''}}
+
+ {{msg.u.name}} criou esta reunião
+
+ De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}
+ {{msg.file.venue}}
+
+
-
+ image
@@ -167,7 +141,7 @@
- + -->
@@ -198,7 +172,7 @@
{{last ? scrollToBottom() : ''}}
-
+
@@ -242,7 +216,7 @@ - + diff --git a/src/app/shared/chat/group-messages/group-messages.page.ts b/src/app/shared/chat/group-messages/group-messages.page.ts index 227265f8f..b14ec33ec 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.ts +++ b/src/app/shared/chat/group-messages/group-messages.page.ts @@ -80,9 +80,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe downloadFile: any; constructor( - private menu: MenuController, + public wsChatMethodsService: WsChatMethodsService, private modalController: ModalController, - private actionSheetController: ActionSheetController, public popoverController: PopoverController, private chatService: ChatService, private authService: AuthService, @@ -97,8 +96,9 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe public ThemeService: ThemeService, private changeDetectorRef: ChangeDetectorRef, private storage: Storage, - public wsChatMethodsService: WsChatMethodsService + ) { + console.log('OnCONSTRUCTOR'); this.loggedUserChat = authService.ValidatedUserChat['data']; this.isGroupCreated = true; this.roomCountDownDate = ""; @@ -106,11 +106,13 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe } ngOnChanges(changes: SimpleChanges): void { + console.log('OnCHANGES'); + this.getRoomInfo(); //this.scrollToBottom(); this.wsChatMethodsService.getGroupRoom(this.roomId).loadHistory(); this.wsChatMethodsService.getGroupRoom(this.roomId).getMsgFromDB(); - console.log('MESSAGES'+this.wsChatMethodsService.getGroupRoom(this.roomId).massages); + console.log('MESSAGES'+ this.wsChatMethodsService.getGroupRoom(this.roomId).messages); this.wsChatMethodsService.getGroupRoom(this.roomId).scrollDown = this.scrollToBottomClicked setTimeout(()=>{ @@ -120,11 +122,13 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe } ngOnInit() { + console.log(this.roomId); this.loggedUser = this.loggedUserChat; - //console.log(this.wsChatMethodsService.getRoom(this.roomId).massages); this.loggedUser=this.loggedUserChat; - this.getRoomInfo(); + setTimeout(() => { + this.getRoomInfo(); + }, 1000); this.setStatus('online'); this.getChatMembers(); //this.getMessageDB(); @@ -259,6 +263,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe } async getRoomInfo() { + this.wsChatMethodsService.getGroupRoom(this.roomId).loadHistory(); let room = await this.chatService.getRoomInfo(this.roomId).toPromise(); this.room = room['room']; if (this.room.name) { @@ -293,42 +298,20 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe } loadGroupMessages(roomId) { - //console.log('here'+room.t); - this.showLoader = true; - //If group is private call getGroupMembers - /* if(room.t === 'p'){ - console.log('private'); */ - this.chatService.getPrivateGroupMessages(this.roomId).subscribe(res => { console.log(res); let msgOnly = res['messages'].filter(data => data.t != 'au'); - //this.messages = msgOnly.reverse(); - //console.log(res); - this.showLoader = false; }); - /* } */ - //Otherwise call getChannelMembers for públic groups - /* else{ - this.chatService.getPublicGroupMessages(this.roomId).subscribe(res=>{ - console.log(res); - this.messages = res['messages'].reverse(); - }); - } */ } sendMessage() { this.wsChatMethodsService.getGroupRoom(this.roomId).send() } - deleteMessage(msgId: string) { - let body = { - "roomId": this.roomId, - "msgId": msgId, - "asUser": false, - } - this.alertService.confirmDeleteMessage(body); + deleteMessage(msgId: string, room:any) { + this.alertService.confirmDeleteMessage(msgId, room); } async openGroupMessagesOptions() { diff --git a/src/app/shared/chat/messages/messages.page.html b/src/app/shared/chat/messages/messages.page.html index e8aff450e..62c13ad87 100644 --- a/src/app/shared/chat/messages/messages.page.html +++ b/src/app/shared/chat/messages/messages.page.html @@ -38,13 +38,13 @@
-
+
- +
@@ -56,63 +56,74 @@ {{last ? scrollToBottom() : ''}}
-
-
- - - - - -
-
- {{msg.u.name}} - {{showDateDuration(msg._updatedAt)}} -
-
- -
-
-
- - image - -
-
-
-
- - - - - - - - {{file.title}} -
+
+
+
+ + + + + +
+
+ {{msg.u.name}} + {{showDateDuration(msg._updatedAt)}} +
+
+
+
+
+ image +
-
- - {{file.description}} - - {{msg.file.type.replace('application/','').toUpperCase()}} - +
+
+
+ + + + + + + + {{file.title}} +
+
+
+ + {{file.description}} + + {{msg.file.type.replace('application/','').toUpperCase()}} + +
+ {{last ? scrollToBottom() : ''}}
- {{last ? scrollToBottom() : ''}}
- +
+ {{msg.u.name}} criou esta reunião
+
+ + De {{showDateDuration(msg.file.start_date)}} a + {{showDateDuration(msg.file.end_date)}} +
+ + + {{msg.file.venue}} +
+
-
+ File image
@@ -141,10 +151,10 @@
-
+
--> -
+
diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts index ffc07663f..705a6108a 100644 --- a/src/app/shared/chat/messages/messages.page.ts +++ b/src/app/shared/chat/messages/messages.page.ts @@ -106,8 +106,8 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy this.wsChatMethodsService.getDmRoom(this.roomId).massages.forEach((element) => { console.log('DATATATA 11', element) }) */ - - + + //this.transformData(this.wsChatMethodsService.getDmRoom(this.roomId).massages) //this.getMessageDB() @@ -252,16 +252,8 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy this.wsChatMethodsService.getDmRoom(this.roomId).send() } - deleteMessage(msgId: string) { - let body = { - "roomId": this.roomId, - "msgId": msgId, - "asUser": false, - } - this.alertService.confirmDeleteMessage(body); - /* this.chatService.deleteMessage(body).subscribe(res=>{ - console.log(res); - }); */ + deleteMessage(msgId: string, room:any) { + this.alertService.confirmDeleteMessage(msgId, room); } async viewDocument(msg: any, url?: string) { @@ -639,7 +631,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy console.log('FILE TYPE 33', msg.file.type) } else if (event.type === HttpEventType.Response) { this.downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), '')); - + msg.file = { guid: msg.file.guid, image_url: this.downloadFile, diff --git a/src/app/shared/chat/new-group/new-group.page.ts b/src/app/shared/chat/new-group/new-group.page.ts index a8fb7a4c5..9bcc2eddc 100644 --- a/src/app/shared/chat/new-group/new-group.page.ts +++ b/src/app/shared/chat/new-group/new-group.page.ts @@ -2,7 +2,9 @@ import { analyzeAndValidateNgModules } from '@angular/compiler'; import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; import { NavigationStart, Router } from '@angular/router'; import { ModalController, NavParams, PickerController, PopoverController } from '@ionic/angular'; +import { AuthService } from 'src/app/services/auth.service'; import { ChatService } from 'src/app/services/chat.service'; +import { WsChatMethodsService } from 'src/app/services/chat/ws-chat-methods.service'; import { DataService } from 'src/app/services/data.service'; import { ProcessesService } from 'src/app/services/processes.service'; import { GroupDurationPage } from 'src/app/shared/popover/group-duration/group-duration.page'; @@ -25,6 +27,7 @@ export class NewGroupPage implements OnInit{ //groupName:string; task:any; documents: any; + loggedUserChat: any; @Input() groupName:string; @Output() addGroupMessage:EventEmitter = new EventEmitter(); @@ -37,8 +40,11 @@ export class NewGroupPage implements OnInit{ private dataService:DataService, private processesService: ProcessesService, private router: Router, + public wsChatMethodsService: WsChatMethodsService, + private authService: AuthService, ) { + this.loggedUserChat = authService.ValidatedUserChat['data']; this.isGroupCreated = false; //this.groupName = this.navParams.get('name'); } @@ -86,16 +92,38 @@ export class NewGroupPage implements OnInit{ this.addGroupMessage.emit(); } - createGroup(){ + async createGroup(){ let name = this.groupName.split(' ').join('-'); //Take out all special characters in string name = name.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); + + let customFields = {} + let res:any; + + if(this.thedate){ + let customFields = { + "countDownDate":this.thedate + } + res = await this.wsChatMethodsService.createPrivateRoom(name, this.loggedUserChat.me.username, customFields); + console.log(res); + } + else{ + res = await this.wsChatMethodsService.createPrivateRoom(name, this.loggedUserChat.me.username, customFields); + console.log(res); + } + + this.wsChatMethodsService.subscribeToRoomUpdate(res.result.rid, res.result); + this.addGroupMessage.emit(res.result.rid); + + /* let body = { "name":name, } this.chatService.addGroup(body).subscribe(res=>{ console.log('group created'); console.log(res['group']); - this.addGroupMessage.emit(res['group']._id); + this.addGroupMessage.emit(res['group']._id); */ + + /* this.addGroupMessage.emit(res['group']._id); if(this.thedate){ let countDownBody = { @@ -139,11 +167,11 @@ export class NewGroupPage implements OnInit{ } this.chatService.sendMessage(body).toPromise(); }); - } + } */ - }); + //}); } async addContacts(){ diff --git a/src/app/shared/popover/chat-options-popover/chat-options-popover.page.html b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.html index eca090810..fb5cc2d04 100644 --- a/src/app/shared/popover/chat-options-popover/chat-options-popover.page.html +++ b/src/app/shared/popover/chat-options-popover/chat-options-popover.page.html @@ -7,8 +7,8 @@
- - + +
diff --git a/src/app/shared/popover/chat-popover/chat-popover.page.ts b/src/app/shared/popover/chat-popover/chat-popover.page.ts index 89fb4a101..d15e5abdb 100644 --- a/src/app/shared/popover/chat-popover/chat-popover.page.ts +++ b/src/app/shared/popover/chat-popover/chat-popover.page.ts @@ -96,6 +96,7 @@ export class ChatPopoverPage implements OnInit { } this.close('leave'); + //this.wsChatMethodsService.subscribeToRoomUpdate(this.roomId, res.result); /* this.chatService.getRoomInfo(this.roomId).subscribe(room=>{