mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 12:37:53 +00:00
save
This commit is contained in:
Generated
+673
-32242
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -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
@@ -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]
|
||||
})
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user