diff --git a/src/app/models/beast-orm.ts b/src/app/models/beast-orm.ts
index be871b1bd..b83f137fb 100644
--- a/src/app/models/beast-orm.ts
+++ b/src/app/models/beast-orm.ts
@@ -30,8 +30,7 @@ export class DeleteMessageModel extends models.Model {
rid = models.CharField()
ts = models.CharField()
u = models.IndDbJsonField()
- _id = models.CharField({unique:true})
- receivedBy = models.IndDbJsonField()
+ needToReceiveBy = models.IndDbJsonField()
}
diff --git a/src/app/models/chatMethod.ts b/src/app/models/chatMethod.ts
index 7e2ff27b2..3178d7633 100644
--- a/src/app/models/chatMethod.ts
+++ b/src/app/models/chatMethod.ts
@@ -85,6 +85,8 @@ export interface Message {
localReference?: string,
viewed: string[],
received: string[],
+ delate: boolean,
+ delateRequest: boolean
}
diff --git a/src/app/models/message.model.ts b/src/app/models/message.model.ts
index 6ab5931c8..732672370 100644
--- a/src/app/models/message.model.ts
+++ b/src/app/models/message.model.ts
@@ -50,4 +50,5 @@ export interface ChatMessageInterface {
export interface falseTypingMethod{
method: 'viewMessage' | 'deleteMessage'
+ params: object
}
\ No newline at end of file
diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts
index 51e9b7503..45e971aba 100644
--- a/src/app/services/auth.service.ts
+++ b/src/app/services/auth.service.ts
@@ -51,7 +51,7 @@ export class AuthService {
if (SessionStore.exist) {
this.ValidatedUser = SessionStore.user
- console.log('login', SessionStore.user.RochetChatUser, SessionStore.user.Password)
+ // console.log('login', SessionStore.user.RochetChatUser, SessionStore.user.Password)
this.loginToChatWs()
}
@@ -176,7 +176,7 @@ export class AuthService {
return true
} catch(e) {
- console.log(e)
+ console.log('failed to upload to server', e)
return false
}
diff --git a/src/app/services/chat.service.ts b/src/app/services/chat.service.ts
index e48f7217e..cccf6fe89 100644
--- a/src/app/services/chat.service.ts
+++ b/src/app/services/chat.service.ts
@@ -119,7 +119,7 @@ export class ChatService {
return this.http.get(environment.apiChatUrl+'im.history', opts);
}
- sendMessage(body:any){
+ sendMessage(body:any) {
let opts = {
headers: this.headers,
}
diff --git a/src/app/services/chat/chat-methods.service.ts b/src/app/services/chat/chat-methods.service.ts
index bcb927321..61e446163 100644
--- a/src/app/services/chat/chat-methods.service.ts
+++ b/src/app/services/chat/chat-methods.service.ts
@@ -46,5 +46,14 @@ export class ChatMethodsService {
return this.chatService.sendMessage(body)
}
+
+
+ deleteMessage(body) {
+ return this.chatService.deleteMessage(body)
+ }
+
+
+
+
}
\ No newline at end of file
diff --git a/src/app/services/chat/message.service.ts b/src/app/services/chat/message.service.ts
index c2f5a6da6..eb0708962 100644
--- a/src/app/services/chat/message.service.ts
+++ b/src/app/services/chat/message.service.ts
@@ -5,7 +5,6 @@ import { SessionStore } from 'src/app/store/session.service';
import { capitalizeTxt } from 'src/plugin/text'
import { NfService } from 'src/app/services/chat/nf.service'
import { WsChatService } from 'src/app/services/chat/ws-chat.service';
-import { environment } from 'src/environments/environment';
import { showDateDuration } from 'src/plugin/showDateDuration';
import { ChatStorageService } from './chat-storage.service'
import { ChatMethodsService } from './chat-methods.service'
@@ -52,6 +51,8 @@ export class MessageService {
addToDb = false
messageSend = false
+ delate = false
+ delateRequest = false
constructor(private storage: Storage,
private NfService: NfService,
@@ -61,7 +62,7 @@ export class MessageService {
private AESEncrypt: AESEncrypt) {
}
- setData({customFields = {}, channels, mentions, msg ,rid ,ts, u, t, _id, id, _updatedAt, file, attachments, temporaryData, localReference , viewed = [], received = []}:Message) {
+ setData({customFields = {}, channels, mentions, msg ,rid ,ts, u, t, _id, id, _updatedAt, file, attachments, temporaryData, localReference , viewed = [], received = [], delate = false, delateRequest =false, }:Message) {
this.channels = channels || []
this.mentions = mentions || []
@@ -77,6 +78,8 @@ export class MessageService {
this.temporaryData = temporaryData
this.localReference = localReference || null
this.id = id
+ this.delate = delate
+ this.delateRequest = delateRequest
this.viewed = [...new Set([...viewed,...this.viewed])];
this.received = [...new Set([...received,...this.received])];
@@ -231,15 +234,12 @@ export class MessageService {
this.duration = showDateDuration(date || this._updatedAt);
}
- private messageReceptor() {
- return this.u.username != SessionStore.user.RochetChatUser
+
+ async deleteFromDB() {
+ this.delate = true
+ this.save()
}
- async delete() {
-
- const message = await MessageModel.get({_id: this._id})
- await message.delete()
- }
isSenderIsNotMe(ChatMessage) {
return SessionStore.user.RochetChatUser != ChatMessage.u.username
@@ -267,7 +267,8 @@ export class MessageService {
received: this.received,
localReference: this.localReference,
attachments: this.attachments,
- file: this.file
+ file: this.file,
+ delate: this.delate
}
}
@@ -278,7 +279,6 @@ export class MessageService {
delete message.id
const createdMessage = await MessageModel.create(message)
- console.log('done add to db')
this.id = createdMessage.id
}
diff --git a/src/app/services/chat/room.service.ts b/src/app/services/chat/room.service.ts
index 9a0aac448..8be97cba1 100644
--- a/src/app/services/chat/room.service.ts
+++ b/src/app/services/chat/room.service.ts
@@ -89,6 +89,9 @@ export class RoomService {
const membersIds = this.members.map((user)=> user._id)
if(membersIds.includes(userId)) {
+
+ this.deleteMessageToReceive(userId)
+
this.messages.forEach((message, index) => {
if(!message.messageOwnerById(userId)) {
@@ -207,6 +210,9 @@ export class RoomService {
if(message.fields.eventName == this.id+'/'+'typing') {
const args = message.fields.args
+
+ console.log(args)
+
if (typeof args[0] != 'object') {
this.userThatIsTyping = this.usernameToDisplayName(args[0])
console.log(this.userThatIsTyping, 'this.userThatIsTyping')
@@ -250,6 +256,48 @@ export class RoomService {
return AllMemberThatIsNotOffline
}
+ getAllMemberThatIsOffline(): string[] {
+
+ const membersIds = this.getRoomMembersIds()
+ const allChatUsers = this.getAllUsers()
+
+ const AllMemberThatIsNotOffline = []
+
+ for(let user of allChatUsers) {
+ if(membersIds.includes(user._id)) {
+
+ if(user.status == 'offline') {
+ AllMemberThatIsNotOffline.push(user._id)
+ }
+ }
+ }
+
+ return AllMemberThatIsNotOffline
+ }
+
+
+ async deleteMessageToReceive(userId) {
+
+ const allDeleteMessages = await DeleteMessageModel.all()
+
+ for(let message of allDeleteMessages) {
+
+ console.log('delete messages',message)
+
+ if(message.needToReceiveBy.includes(userId)) {
+
+ message.needToReceiveBy = message.needToReceiveBy.filter((e)=> e != userId)
+ this.sendFalseTypingReadMessage('deleteMessage',{_id:message.messageId})
+
+ console.log(message,'update::')
+ DeleteMessageModel.update(message)
+
+
+ }
+ }
+
+ }
+
async receiveMessageDelete() {
@@ -271,22 +319,25 @@ export class RoomService {
* @description delete message in the view
* @param id message ID
*/
- deleteMessage(id) {
- this.messages.forEach((message, index) => {
+ async deleteMessage(id) {
+ await this.messages.forEach(async(message, index) => {
if(message._id == id) {
this.messages.splice(index, 1)
- const allMemberThatIsNotOffline = this.getAllMemberThatIsNotOffline()
- message.delete()
+ const allMemberThatIsOffline = this.getAllMemberThatIsOffline()
+ message.deleteFromDB()
- DeleteMessageModel.create({
+ await DeleteMessageModel.create({
messageId: message._id,
rid: message.rid,
ts: message.ts,
u: message.u,
- receivedBy: allMemberThatIsNotOffline
+ needToReceiveBy: allMemberThatIsOffline
})
+ const DBmessage = await MessageModel.get({_id: message._id})
+ DBmessage.delete()
+
//Get previous last message from room
const previousLastMessage = this.messages.slice(-1)[0];
@@ -299,7 +350,7 @@ export class RoomService {
}
- async delateMessageToSend(userId) {
+ async delateMessageToSendToOthers(userId) {
const deleteMessage = await DeleteMessageModel.all()
@@ -309,6 +360,31 @@ export class RoomService {
}
+ async sendDeleteRequest(msgId) {
+
+ const message = this.messages.find((e)=>e._id = msgId)
+ message.deleteFromDB()
+
+ this.ChatMethodsService.deleteMessage({_id:msgId, msgId:msgId, roomId:message.rid}).subscribe(
+ (response: any) => {
+ console.log(response)
+ message.delateRequest = true
+ message.save()
+ },
+ (error) => {
+ this.WsChatService.registerCallback({
+ type: 'reConnect',
+ funx: async ()=> {
+
+ this.sendDeleteRequest(msgId)
+ return true
+ }
+ })
+ }
+ )
+ }
+
+
/**
* @description sen text message
@@ -329,8 +405,6 @@ export class RoomService {
this.message= ''
const message: MessageService = await this.prepareCreate({message:offlineChatMessage, save: environment.chatOffline})
-
- console.log(message, 'message')
this.messagesLocalReference.push(localReference)
await message.addMessageDB()
@@ -374,8 +448,8 @@ export class RoomService {
this.typingWatch()
}
- sendFalseTypingReadMessage() {
- this.WsChatService.sendStreamNotifyRoom(this.id, SessionStore.user.RochetChatUser, 'typing', {method:'viewMessage'} as falseTypingMethod)
+ sendFalseTypingReadMessage(method,param: object) {
+ this.WsChatService.sendStreamNotifyRoom(this.id, SessionStore.user.RochetChatUser, 'typing', {method:method, params: param} as falseTypingMethod)
this.setTypingOff()
}
@@ -434,8 +508,13 @@ export class RoomService {
if(wewMessage.offline == false) {
const message = await this.prepareMessageCreateIfNotExist({message:ChatMessage})
-
message?.decryptMessage()
+ } else if(wewMessage.delate && wewMessage.offline && !wewMessage.delateRequest) {
+
+ console.log('offline delete message')
+
+ wewMessage.deleteFromDB()
+ this.sendDeleteRequest(wewMessage._id)
} else {
const offlineMessage = await this.prepareMessageCreateIfNotExist({message:ChatMessage})
@@ -488,6 +567,8 @@ export class RoomService {
})
+ console.log('load chatHistory', chatHistory)
+
})
@@ -505,7 +586,6 @@ export class RoomService {
const membersIds = this.members.map((user)=> user._id)
- console.log('read all ===========')
await this.messages.forEach( async (message, index) => {
if(message._id) {
@@ -670,7 +750,7 @@ export class RoomService {
sendReadMessage() {
this.WsChatService.readMessage(this.id)
- this.sendFalseTypingReadMessage()
+ this.sendFalseTypingReadMessage('viewMessage', {})
}
}
diff --git a/src/app/shared/chat/messages/messages.page.html b/src/app/shared/chat/messages/messages.page.html
index 8297c36d2..634451a61 100644
--- a/src/app/shared/chat/messages/messages.page.html
+++ b/src/app/shared/chat/messages/messages.page.html
@@ -45,15 +45,18 @@