mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
193 lines
4.9 KiB
TypeScript
193 lines
4.9 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
import { Storage } from '@ionic/storage';
|
|
import { environment } from 'src/environments/environment';
|
|
|
|
@Injectable({
|
|
providedIn: 'root'
|
|
})
|
|
export class ChatStorageService {
|
|
|
|
constructor(
|
|
private storage: Storage,
|
|
) { }
|
|
|
|
/**
|
|
* @description delete message in the DB. get all messages, delete then corresponding message and update the store
|
|
* @param id message ID
|
|
*/
|
|
|
|
async deleteMessageFromDb(messageId, roomId) {
|
|
if (environment.chatOffline) {
|
|
await this.storage.get('chatmsg' + roomId).then(async(messages: any = []) => {
|
|
if(!Array.isArray(messages)) {
|
|
messages = []
|
|
}
|
|
|
|
await messages.forEach( async (message, index) => {
|
|
|
|
if(message._id == messageId) {
|
|
messages.splice(index, 1)
|
|
}
|
|
|
|
})
|
|
|
|
this.storage.set('chatmsg' + roomId, messages).then((value) => {
|
|
// console.log('MSG SAVED ON STORAGE', value)
|
|
});
|
|
|
|
})
|
|
}
|
|
}
|
|
|
|
async updateMessageDB(ChatMessage, roomId, identificator) {
|
|
|
|
if (environment.chatOffline) {
|
|
await this.storage.get('chatmsg' + roomId).then(async(messages: any = []) => {
|
|
if(!Array.isArray(messages)) {
|
|
messages = []
|
|
}
|
|
|
|
let index;
|
|
const find = messages.find((message, _index)=> {
|
|
|
|
if(message?.localReference == ChatMessage?.localReference ||
|
|
message?._id == ChatMessage?._id) {
|
|
index = _index
|
|
return true
|
|
}
|
|
|
|
return false
|
|
})
|
|
|
|
if(find) {
|
|
|
|
|
|
messages[index] = Object.assign(messages[index], ChatMessage)
|
|
|
|
await this.storage.set('chatmsg' + roomId, messages)
|
|
} else {
|
|
// console.log('failed to update', identificator, ':',ChatMessage)
|
|
}
|
|
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
async updateChat(history, roomId, identificator = '_id') {
|
|
if (environment.chatOffline) {
|
|
await this.storage.get('chatmsg' + roomId).then(async(messages: any = []) => {
|
|
if(!Array.isArray(messages)) {
|
|
messages = []
|
|
}
|
|
|
|
history.forEach( async(ChatMessage)=>{
|
|
let index;
|
|
const find = messages.find((message, _index)=> {
|
|
|
|
if(message[identificator]) {
|
|
if(message[identificator] == ChatMessage[identificator]) {
|
|
index = _index
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
})
|
|
|
|
if(find) {
|
|
|
|
|
|
messages[index] = Object.assign(messages[index], ChatMessage)
|
|
|
|
// if(messages[index].msg.includes('***********')) {
|
|
// console.log('storage update')
|
|
// console.log(JSON.stringify(messages[index]))
|
|
// console.log(JSON.stringify(ChatMessage))
|
|
// }
|
|
|
|
await this.storage.set('chatmsg' + roomId, messages)
|
|
} else {
|
|
console.log('failed to update', identificator)
|
|
}
|
|
})
|
|
|
|
|
|
|
|
})
|
|
}
|
|
}
|
|
|
|
async addMessageDB(ChatMessage, roomId) {
|
|
if (environment.chatOffline) {
|
|
await this.storage.get('chatmsg' + roomId).then(async(messages: any = []) => {
|
|
if(!Array.isArray(messages)) {
|
|
messages = []
|
|
}
|
|
|
|
|
|
if(!ChatMessage._id && environment.chatOffline) {
|
|
|
|
delete ChatMessage.temporaryData
|
|
messages.push(ChatMessage)
|
|
console.log('no ID')
|
|
|
|
await this.storage.set('chatmsg' + roomId, messages)
|
|
// console.log('add to DB', ChatMessage)
|
|
|
|
} else {
|
|
const find = messages.find((message)=> {
|
|
return message._id == ChatMessage._id
|
|
})
|
|
|
|
if(!find) {
|
|
delete ChatMessage.temporaryData
|
|
messages.push(ChatMessage)
|
|
await this.storage.set('chatmsg' + roomId, messages)
|
|
// console.log('add to DB', ChatMessage)
|
|
} else {
|
|
console.log('duplicate')
|
|
}
|
|
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
async addManyMessageDB(_ChatMessage: any[], roomId) {
|
|
if (environment.chatOffline) {
|
|
await this.storage.get('chatmsg' + roomId).then(async(messages: any = []) => {
|
|
if(!Array.isArray(messages)) {
|
|
messages = []
|
|
}
|
|
|
|
await _ChatMessage.forEach(async(ChatMessage)=>{
|
|
if(!ChatMessage._id && environment.chatOffline) {
|
|
|
|
delete ChatMessage.temporaryData
|
|
messages.push(ChatMessage)
|
|
// console.log('add to DB')
|
|
|
|
} else {
|
|
const find = messages.find((message)=> {
|
|
return message._id == ChatMessage._id
|
|
})
|
|
|
|
if(!find) {
|
|
delete ChatMessage.temporaryData
|
|
messages.push(ChatMessage)
|
|
// console.log('add to DB')
|
|
|
|
|
|
}
|
|
}
|
|
})
|
|
|
|
await this.storage.set('chatmsg' + roomId, messages)
|
|
|
|
})
|
|
}
|
|
}
|
|
|
|
}
|