This commit is contained in:
Peter Maquiran
2022-03-18 12:32:21 +01:00
parent 2302a32df6
commit f31dd55811
6 changed files with 790 additions and 32307 deletions
+673 -32242
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -97,8 +97,8 @@
"angular-cropperjs": "^0.1.5",
"angular-svg-icon": "^12.0.0",
"angular-tag-cloud-module": "^5.2.2",
"beast-orm": "0.0.7",
"base64-js": "^1.5.1",
"beast-orm": "^1.0.0",
"bootstrap": "^4.5.0",
"build": "0.1.4",
"capacitor-voice-recorder": "^2.0.0",
+11 -11
View File
@@ -2,25 +2,25 @@ import { models } from 'beast-orm'
import { AESEncrypt } from '../services/aesencrypt.service'
const _AESEncrypt = new AESEncrypt()
const { ArrayField, JsonField} = models.indexedDB.fields
export class MessageModel extends models.Model {
channels = models.IndDbJsonField()
mentions = models.IndDbJsonField()
channels = ArrayField()
mentions = ArrayField()
msg = models.CharField()
rid = models.CharField()
ts = models.CharField()
u = models.IndDbJsonField()
u = JsonField()
_id = models.CharField({unique:true})
_updatedAt = models.CharField()
messageSend = models.BooleanField()
offline = models.BooleanField()
viewed = models.IndDbJsonField()
received = models.IndDbJsonField()
viewed = ArrayField()
received = ArrayField()
localReference = models.CharField({blank:true})
attachments = models.IndDbJsonField()
file = models.IndDbJsonField()
attachments = ArrayField()
file = ArrayField()
}
@@ -29,8 +29,8 @@ export class DeleteMessageModel extends models.Model {
messageId = models.IntegerField()
rid = models.CharField()
ts = models.CharField()
u = models.IndDbJsonField()
needToReceiveBy = models.IndDbJsonField()
u = JsonField()
needToReceiveBy = ArrayField()
}
@@ -38,7 +38,7 @@ export class DeleteMessageModel extends models.Model {
models.register({
databaseName: 'chat-storage',
type: 'indexeddb',
type: 'indexedDB',
version: 1,
models: [MessageModel, DeleteMessageModel]
})
+8 -1
View File
@@ -235,11 +235,18 @@ export class MessageService {
}
async deleteFromDB() {
async delateStatusFalse() {
this.delate = true
this.save()
}
async delateDB() {
const message = await MessageModel.get({_id: this._id})
await message.delete()
}
isSenderIsNotMe(ChatMessage) {
return SessionStore.user.RochetChatUser != ChatMessage.u.username
+96 -51
View File
@@ -84,13 +84,18 @@ export class RoomService {
this.WsChatService.getUserStatus((d) => {
const userId = d.fields.args[0][0]
const statusNum = d.fields.args[0][2]
const statusText = this.statusNumberToText(statusNum)
//
if(this.members?.map) {
const membersIds = this.members.map((user)=> user._id)
if(membersIds.includes(userId)) {
this.deleteMessageToReceive(userId)
if(statusText != 'offline') {
this.deleteMessageToReceive(userId)
}
this.messages.forEach((message, index) => {
if(!message.messageOwnerById(userId)) {
@@ -118,6 +123,26 @@ export class RoomService {
}
/**
* @description convert rocketchat statues num to readable string
* @param text
* @returns
*/
statusNumberToText(text) {
if(text == '0') {
return "offline"
}
else if(text == '1') {
return "online"
}
else if(text == '2') {
return "away"
}
else if(text == '3') {
return "busy"
}
}
setData({members, u, customFields = {}, id, name, t, lastMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt), _updatedAt }) {
this.customFields = customFields
this.id = id
@@ -190,6 +215,7 @@ export class RoomService {
if(users.status != 'offline') {
this.messages[index].received.push(users._id)
setTimeout(() => {
message.save()
}, 150)
@@ -211,19 +237,29 @@ export class RoomService {
const args = message.fields.args
console.log(args)
if (typeof args[0] != 'object') {
// alert(JSON.stringify(args))
if (typeof args[1] != 'object') {
this.userThatIsTyping = this.usernameToDisplayName(args[0])
console.log(this.userThatIsTyping, 'this.userThatIsTyping')
this.isTyping = args[1]
this.otherUserType = args[1]
this.readAllMessage()
} else if(args[0]?.method == 'viewMessage') {
// console.log(JSON.stringify(args))
// alert(JSON.stringify(args))
} else if(args[0]?.method == 'viewMessage' || args[1]?.method == 'viewMessage') {
this.readAllMessage()
} else if(args[0]?.method == 'deleteMessage') {
//
} else if(args[0]?.method == 'deleteMessage' || args[1]?.method == 'deleteMessage') {
// alert('delete')
// console.log(args[0], 'receive delete message::()')
this.deleteMessage(args[1]?.method?._id)
} else {
// alert('miss')
}
@@ -278,22 +314,28 @@ export class RoomService {
async deleteMessageToReceive(userId) {
const allDeleteMessages = await DeleteMessageModel.all()
for(let message of allDeleteMessages) {
const allDeleteMessages = await DeleteMessageModel.filter({rid: this.id}).execute()
for(let message_ of allDeleteMessages) {
console.log('delete messages',message)
if(message.needToReceiveBy.includes(userId)) {
if(message_.needToReceiveBy.includes(userId)) {
message.needToReceiveBy = message.needToReceiveBy.filter((e)=> e != userId)
this.sendFalseTypingReadMessage('deleteMessage',{_id:message.messageId})
message_.needToReceiveBy = message_.needToReceiveBy.filter((e)=> e != userId)
this.sendFalseTypingReadMessage('deleteMessage',{_id:message_.messageId})
console.log(message,'update::')
DeleteMessageModel.update(message)
if(message_.needToReceiveBy.length == 0) {
const deleteMessage = await DeleteMessageModel.get({messageId: message_.messageId})
await deleteMessage.delete()
} else {
await DeleteMessageModel.update(message_)
}
}
}
}
@@ -307,7 +349,6 @@ export class RoomService {
async (ChatMessage) => {
const DeletedMessageId = ChatMessage.fields.args[0]._id;
console.log(DeletedMessageId);
this.deleteMessage(DeletedMessageId)
}
@@ -324,19 +365,21 @@ export class RoomService {
if(message._id == id) {
this.messages.splice(index, 1)
const allMemberThatIsOffline = this.getAllMemberThatIsOffline()
message.deleteFromDB()
await DeleteMessageModel.create({
messageId: message._id,
rid: message.rid,
ts: message.ts,
u: message.u,
needToReceiveBy: allMemberThatIsOffline
})
const DBmessage = await MessageModel.get({_id: message._id})
DBmessage.delete()
if (SessionStore.user.RochetChatUser == message.u.username) {
const allMemberThatIsOffline = this.getAllMemberThatIsOffline()
await DeleteMessageModel.create({
messageId: message._id,
rid: message.rid,
ts: message.ts,
u: message.u,
needToReceiveBy: allMemberThatIsOffline
})
}
message.delateStatusFalse()
message.delateDB()
//Get previous last message from room
const previousLastMessage = this.messages.slice(-1)[0];
@@ -356,30 +399,35 @@ export class RoomService {
const toSend = deleteMessage.filter((DeleteMessage:string[])=> ! DeleteMessage.includes(userId))
}
async sendDeleteRequest(msgId) {
const message = this.messages.find((e)=>e._id = msgId)
message.deleteFromDB()
message.delateStatusFalse()
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
}
})
(response) => {
if (response.error.error.startsWith('No message found with the id of')) {
this.deleteMessage(msgId)
} else {
// this.deleteMessage(DeletedMessageId)
this.WsChatService.registerCallback({
type: 'reConnect',
funx: async ()=> {
this.sendDeleteRequest(msgId)
return true
}
})
}
}
)
}
@@ -464,7 +512,7 @@ export class RoomService {
this.WsChatService.sendStreamNotifyRoom(this.id, SessionStore.user.RochetChatUser, 'typing', this.isTyping)
}
} else {
//console.log(now - this.lastTimeType)
}
}, 3000)
@@ -509,12 +557,6 @@ export class RoomService {
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})
@@ -529,6 +571,10 @@ export class RoomService {
}
if(wewMessage.delate && !wewMessage.offline && !wewMessage.delateRequest) {
this.sendDeleteRequest(wewMessage._id)
}
});
setTimeout(()=> {
@@ -567,8 +613,7 @@ export class RoomService {
})
console.log('load chatHistory', chatHistory)
// console.log('load chatHistory', chatHistory)
})
@@ -683,7 +728,7 @@ export class RoomService {
if(!message?._id && environment.chatOffline && save) {
this.messages.push(wewMessage)
console.log('add to view')
// console.log('add to view')
return wewMessage
}
@@ -251,7 +251,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
deleteMessage(msgId: string, msg:MessageService) {
msg.deleteFromDB()
msg.delateStatusFalse()
this.wsChatMethodsService.getDmRoom(this.roomId).sendDeleteRequest(msgId)
}