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) => { // }); }) } } 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 { // } }) } } 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('***********')) { // // // // } await this.storage.set('chatmsg' + roomId, messages) } else { } }) }) } } 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) await this.storage.set('chatmsg' + roomId, messages) // } 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) // } else { } } }) } } 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) // } 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) }) } } }