diff --git a/src/app/models/beast-orm.ts b/src/app/models/beast-orm.ts index 8c309cc12..d9cec8e66 100644 --- a/src/app/models/beast-orm.ts +++ b/src/app/models/beast-orm.ts @@ -16,6 +16,7 @@ export class MessageModel extends models.Model { _updatedAt = models.IntegerField() messageSend = models.BooleanField() offline = models.BooleanField() + hasFile = models.BooleanField({blank:true}) viewed = ArrayField({blank:true}) received = ArrayField({blank:true}) localReference = models.CharField({blank:true, unique: true}) @@ -23,14 +24,16 @@ export class MessageModel extends models.Model { file = JsonField({blank:true}) async getAttachments() { - const _attachments = await attachments.filter({id: this['id']}) - return _attachments + console.log('this[id]', this['id']) + const _attachments = await attachments.filter({messageId: this['id']}).execute() + return _attachments[0] } } export class attachments extends models.Model { - message = models.OneToOneField({model:MessageModel}) - attachments = ArrayField({default:[]}) + messageId = models.IntegerField() + attachments = ArrayField({blank:true}) + file = JsonField({blank:true}) } export class DeleteMessageModel extends models.Model { diff --git a/src/app/models/chatMethod.ts b/src/app/models/chatMethod.ts index 56ee9fa79..8a3363d2d 100644 --- a/src/app/models/chatMethod.ts +++ b/src/app/models/chatMethod.ts @@ -90,6 +90,10 @@ export interface Message { received: string[], delate: boolean, delateRequest: boolean + attachmentsModelData: { + fileBase64: string + } + hasFile: boolean } diff --git a/src/app/pages/chat/group-messages/group-messages.page.html b/src/app/pages/chat/group-messages/group-messages.page.html index 748e38f07..8c0fa786d 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.html +++ b/src/app/pages/chat/group-messages/group-messages.page.html @@ -114,11 +114,15 @@
+ - {{file.title}} - - + {{ file.title}} + + + + +
diff --git a/src/app/pages/chat/group-messages/group-messages.page.ts b/src/app/pages/chat/group-messages/group-messages.page.ts index f34c359a9..f47d5a4b6 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -16,7 +16,6 @@ import { EventPerson } from 'src/app/models/eventperson.model'; import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page'; import { ThemeService } from 'src/app/services/theme.service' import { ViewEventPage } from 'src/app/modals/view-event/view-event.page'; -import { SqliteService } from 'src/app/services/sqlite.service'; import { ChatSystemService } from 'src/app/services/chat/chat-system.service'; import { FileType } from 'src/app/models/fileType'; import { Storage } from '@ionic/storage'; @@ -463,32 +462,12 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { this.ChatSystemService.getGroupRoom(this.roomId).send({}) } - base64toBlob(base64Data, contentType) { - contentType = contentType || ''; - var sliceSize = 1024; - var byteCharacters = atob(base64Data); - var bytesLength = byteCharacters.length; - var slicesCount = Math.ceil(bytesLength / sliceSize); - var byteArrays = new Array(slicesCount); - - for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { - var begin = sliceIndex * sliceSize; - var end = Math.min(begin + sliceSize, bytesLength); - - var bytes = new Array(end - begin); - for (var offset = begin, i = 0; offset < end; ++i, ++offset) { - bytes[i] = byteCharacters[offset].charCodeAt(0); - } - byteArrays[sliceIndex] = new Uint8Array(bytes); - } - return new Blob(byteArrays, { type: contentType }); - } async sendAudio(fileName) { const roomId = this.roomId let audioFile; - this.storage.get('recordData').then((recordData) => { + this.storage.get('recordData').then(async (recordData) => { audioFile = recordData; if (recordData?.value?.recordDataBase64.includes('data:audio')) { @@ -500,7 +479,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { //Converting base64 to blob const encodedData = btoa(this.audioRecorded); - const blob = this.base64toBlob(encodedData, recordData.value.mimeType) + const blob = this.fileService.base64toBlob(encodedData, recordData.value.mimeType) const formData = new FormData(); formData.append("blobFile", blob); @@ -516,7 +495,10 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { "title_link_download": true, "type": "audio" }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) }); @@ -670,7 +652,10 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { "title": capturedImageTitle, "text": "description", "title_link_download": false, - }] + }], + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } @@ -740,7 +725,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { const encodedData = btoa(JSON.stringify(await this.getBase64(file).catch ((error) => { console.error(error); }))); - const blob = this.base64toBlob(encodedData, file.type) + const blob = this.fileService.base64toBlob(encodedData, file.type) const formData = new FormData(); formData.append('blobFile', blob); @@ -757,7 +742,10 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { // "text": "description", "title_link_download": false, }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }); } else { @@ -864,65 +852,6 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { }); } - /* async actionSheet() { - const actionSheet = await this.actionSheetController.create({ - cssClass: 'my-custom-class', - buttons: [{ - text: 'Sair do grupo', - handler: () => { - - } - }, { - text: 'Alterar nome do grupo1', - handler: () => { - - this.openChangeGroupName() - } - }, { - text: 'Apagar o grupo', - handler: () => { - - } - }, - ] - }); - await actionSheet.present(); - } - */ - - // getRoomMessageDB(roomId) { - // if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - // } else { - // this.sqlservice.getAllChatMSG(roomId).then((msg: any) => { - - // let chatmsgArray = []; - // let array = [] - // msg.forEach(element => { - - - // let msgChat = { - // _id: element.Id, - // attachments: this.isJson(element.Attachments), - // channels: this.isJson(element.Channels), - // file: this.isJson(element.File), - // mentions: this.isJson(element.Mentions), - // msg: element.Msg, - // rid: element.Rid, - // ts: element.Ts, - // u: this.isJson(element.U), - // _updatedAt: element.UpdatedAt, - // image_url: this.isJson(element.image_url) - // } - - // chatmsgArray.push(msgChat) - // }); - - // // this.messages = chatmsgArray; - - // }) - // } - // } - isJson(str) { try { JSON.parse(str); diff --git a/src/app/pages/chat/messages/messages.page.html b/src/app/pages/chat/messages/messages.page.html index de63f84e9..832e9111e 100644 --- a/src/app/pages/chat/messages/messages.page.html +++ b/src/app/pages/chat/messages/messages.page.html @@ -114,11 +114,14 @@
+ - {{file.title}} - - + {{ file.title}} + + + +
diff --git a/src/app/pages/chat/messages/messages.page.ts b/src/app/pages/chat/messages/messages.page.ts index d081fa2ce..32f363959 100644 --- a/src/app/pages/chat/messages/messages.page.ts +++ b/src/app/pages/chat/messages/messages.page.ts @@ -401,31 +401,10 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { }) } */ - base64toBlob(base64Data, contentType) { - contentType = contentType || ''; - var sliceSize = 1024; - var byteCharacters = atob(base64Data); - var bytesLength = byteCharacters.length; - var slicesCount = Math.ceil(bytesLength / sliceSize); - var byteArrays = new Array(slicesCount); - - for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { - var begin = sliceIndex * sliceSize; - var end = Math.min(begin + sliceSize, bytesLength); - - var bytes = new Array(end - begin); - for (var offset = begin, i = 0; offset < end; ++i, ++offset) { - bytes[i] = byteCharacters[offset].charCodeAt(0); - } - byteArrays[sliceIndex] = new Uint8Array(bytes); - } - return new Blob(byteArrays, { type: contentType }); - } - async sendAudio(fileName) { const roomId = this.roomId let audioFile; - this.storage.get('recordData').then((recordData) => { + this.storage.get('recordData').then(async (recordData) => { audioFile = recordData; if (recordData?.value?.recordDataBase64.includes('data:audio')) { @@ -439,7 +418,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { //Converting base64 to blob const encodedData = btoa(this.audioRecorded); - const blob = this.base64toBlob(encodedData, recordData.value.mimeType) + const blob = this.fileService.base64toBlob(encodedData, recordData.value.mimeType) const formData = new FormData(); formData.append("blobFile", blob); @@ -455,7 +434,10 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { "title_link_download": true, "type": "audio" }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) }); @@ -658,14 +640,12 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { source: CameraSource.Camera }); - const blob = this.dataURItoBlob('data:image/jpeg;base64,' + file.base64String) - console.log('data:image/jpeg;base64,' + file.base64String) + const base64 = 'data:image/jpeg;base64,' + file.base64String + const blob = this.dataURItoBlob(base64) const formData = new FormData(); formData.append("blobFile", blob); - // console.log('capturedImage', capturedImage); - this.ChatSystemService.getDmRoom(roomId).send({ file: { "type": "application/img", @@ -676,7 +656,11 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { "text": "description", "title_link_download": false, }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } + }) } @@ -789,7 +773,10 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { "title": file.path, "text": "description", "title_link_download": false, - }] + }], + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } @@ -813,7 +800,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { const encodedData = btoa(JSON.stringify(await this.getBase64(file).catch ((error) => { console.error(error); }))); - const blob = this.base64toBlob(encodedData, file.type) + const blob = this.fileService.base64toBlob(encodedData, file.type) const formData = new FormData(); @@ -831,7 +818,10 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { // "text": "description", "title_link_download": false, }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }); } else { diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index b94755c80..3c3143ef0 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -166,7 +166,9 @@ export class AuthService { return true } catch(e) { + window['e'] = e console.error('BeforesendAtachment', e) + message.uploadingFile = false return false } @@ -183,7 +185,9 @@ export class AuthService { return true } catch(e) { + window['e'] = e console.error('BeforesendAtachment', e) + message.uploadingFile = false return false } } @@ -211,9 +215,6 @@ export class AuthService { type: message.file.type } - await this.storage.set(message.file.guid, downloadFile).then(() => { - // - }); return true } return false diff --git a/src/app/services/chat/message.service.ts b/src/app/services/chat/message.service.ts index 64b4b5ae9..e988717ea 100644 --- a/src/app/services/chat/message.service.ts +++ b/src/app/services/chat/message.service.ts @@ -6,7 +6,7 @@ import { NfService } from 'src/app/services/chat/nf.service'; import { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service'; import { showDateDuration } from 'src/plugin/showDateDuration'; import { ChatMethodsService } from './chat-methods.service'; -import { MessageModel } from '../../models/beast-orm'; +import { MessageModel, attachments } from '../../models/beast-orm'; import { AESEncrypt } from '../aesencrypt.service'; import { HttpEventType } from '@angular/common/http'; import { AttachmentsService } from 'src/app/services/attachments.service'; @@ -40,7 +40,7 @@ export class MessageService { file attachments displayType = '' - temporaryData: any = {} + temporaryData: any hasFile = false hasSendAttachment = false sendAttempt = 0 @@ -64,7 +64,9 @@ export class MessageService { manualRetry = false origin: 'history' | 'stream' | 'local' - rowInstance: MessageModel + messageModelInstance: MessageModel + attachmentsModelData: any + constructor( private NfService: NfService, @@ -77,7 +79,7 @@ export class MessageService { private notificationService: NotificationsService) { } - setData({customFields = {}, channels, mentions, msg ,rid ,ts, u, t, _id, id, _updatedAt, file, attachments, temporaryData, localReference = 'out-'+uuidv4() , viewed = [], received = [], delate = false, delateRequest =false, from, sendAttempt = 0, origin }:Message) { + setData({customFields = {}, channels, mentions, msg ,rid ,ts, u, t, _id, id, _updatedAt, file, attachments, temporaryData, localReference = 'out-'+uuidv4() , viewed = [], received = [], delate = false, delateRequest =false, from, sendAttempt = 0, origin, attachmentsModelData, hasFile = false }:Message) { this.channels = channels || [] this.mentions = mentions || [] @@ -96,6 +98,7 @@ export class MessageService { this.delateRequest = delateRequest this.sendAttempt = 0 this.origin = origin + this.attachmentsModelData = attachmentsModelData if(this.attachments?.length >= 1 && attachments?.length >= 1) { this.attachments[0] = Object.assign(this.attachments[0], attachments[0]) @@ -112,12 +115,10 @@ export class MessageService { this.messageSend = true } - if (this.file) { - if(this.file.type) { - if(typeof(this.file.type) == 'string') { - this.hasFile = true - } - } + this.hasFile = hasFile + + if (this.instanceHasAttachment && !this.hasFile) { + this.hasFile = true } if(this.hasFile) { @@ -201,6 +202,7 @@ export class MessageService { } else { + console.log('send', this) let uploadSuccessfully = await this.sendRequestAttachment() if(uploadSuccessfully) { @@ -247,24 +249,35 @@ export class MessageService { functionTimer = null; async sendRequestAttachment() { + this.uploadingFile = true let uploadSuccessfully = false + if(!this.instanceHasAttachmentBase64 && !this.temporaryData) { + try { + await this.getFileFromDB() + } catch (error) {} + } + + if(!this.instanceHasTemporaryData) { + + await this.generateTemporaryData() + } + if(this.hasSendAttachment == false) { try { uploadSuccessfully = await this.NfService.beforeSendAttachment(this) this.UploadAttachmentsTemp++ this.uploadingFile = false + this.manualRetry = false this.errorUploadingAttachment = false this.hasSendAttachment = true - this.temporaryData = {} } catch (error) { this.uploadingFile = false + this.errorUploadingAttachment = true this.UploadAttachmentsTemp++ - console.error('beforeSendAttachment error:', error) - } } @@ -411,6 +424,7 @@ export class MessageService { // save the changes to the storage this.saveChanges() + this.addFileToDb() this.downloadLoader = false; this.downloadAttachments = true this.downloadAttachmentsTemp++; @@ -461,11 +475,11 @@ export class MessageService { async delateDB() { - if(!this.rowInstance) { - this.rowInstance = await this.getRowInstance() + if(!this.messageModelInstance) { + this.messageModelInstance = await this.getRowInstance() } - await this.rowInstance.delete() + await this.messageModelInstance.delete() } @@ -489,6 +503,7 @@ export class MessageService { u: this.u, _id: this._id, id: this.id, + hasFile: this.hasFile, origin: this.origin, _updatedAt: this._updatedAt, messageSend: this.messageSend, @@ -509,10 +524,18 @@ export class MessageService { this.addToDb = true const message = this.getChatObj() + if(this.instanceHasAttachment) { + this.hasFile = true + } + delete message.id const createdMessage = await MessageModel.create(message) - this.rowInstance = createdMessage + if(this.instanceHasAttachment) { + this.addFileToDb() + } + + this.messageModelInstance = createdMessage this.id = createdMessage.id if(this.earlySave) { @@ -521,6 +544,96 @@ export class MessageService { } } + async addFileToDb() { + + if(!this.messageModelInstance) { + this.messageModelInstance = await this.getRowInstance() + } + + + const createdMessage: any = this.messageModelInstance + try { + + let file = {} + + if(this.attachmentsModelData) { + file = {image_url: this.attachmentsModelData?.fileBase64} + } + + await attachments.create({messageId: createdMessage.id, attachments: this.attachments, file: Object.assign(this.file, file) }) + } catch (error) { + console.log(error) + } + } + + async getFileFromDB() { + + if(!this.messageModelInstance) { + this.messageModelInstance = await this.getRowInstance() + } + + + const data = await this.messageModelInstance.getAttachments() + + console.log('data', data); + + this.attachments = data.attachments + this.file = data.file + } + + async generateTemporaryData () { + const blob: any = await this.base64StringToBlob(this.file.image_url) + + const formData = new FormData(); + formData.append("blobFile", blob); + this.temporaryData = formData + } + + + get instanceHasAttachment() { + if (this.file) { + if(this.file.type) { + if(typeof(this.file.type) == 'string') { + return true + } + } + } + + return false + } + + get instanceHasAttachmentBase64() { + if (this.file) { + if(this.file.type) { + if(this.file?.image_url) { + return true + } + } + } + + return false + } + + get instanceHasTemporaryData() { + if (!this.temporaryData) { + return false + } + + return true + } + + + base64StringToBlob(base64Data) { + return new Promise((resolve, reject) => { + + fetch(base64Data) + .then(res => resolve(res.blob())) + .then(console.log) + + }) + } + + async getRowInstance () { @@ -547,11 +660,11 @@ export class MessageService { async saveChanges() { - if(!this.rowInstance) { - this.rowInstance = await this.getRowInstance() + if(!this.messageModelInstance) { + this.messageModelInstance = await this.getRowInstance() } - if(this.save && this.rowInstance) { + if(this.save && this.messageModelInstance) { const message = this.getChatObj() if(!message.id) { @@ -560,11 +673,11 @@ export class MessageService { for( const [name, value] of Object.entries(message)) { try { - this.rowInstance[name] = value + this.messageModelInstance[name] = value } catch (error) {} } - await this.rowInstance.save() + await this.messageModelInstance.save() } else { this.earlySave = true diff --git a/src/app/services/chat/room.service.ts b/src/app/services/chat/room.service.ts index 808e3cc2f..c5bc66032 100644 --- a/src/app/services/chat/room.service.ts +++ b/src/app/services/chat/room.service.ts @@ -564,7 +564,7 @@ export class RoomService { /** * @description sen text message */ - async send({file = null, attachments = null, temporaryData = {}}) { + async send({file = null, attachments = null, temporaryData = {}, attachmentsModelData = {}}) { const localReference = uuidv4(); @@ -575,9 +575,13 @@ export class RoomService { file, temporaryData, localReference, - origin: 'local' + origin: 'local', + attachmentsModelData } + + console.log('offlineChatMessage', offlineChatMessage) + this.message= '' const message: MessageService = await this.prepareCreate({message:offlineChatMessage, save: environment.chatOffline}) @@ -705,12 +709,14 @@ export class RoomService { const wewMessage = await this.simplePrepareMessage(ChatMessage) wewMessage.from = 'Offline' wewMessage.loadHistory = this.hasLoadHistory + wewMessage.messageModelInstance = ChatMessage if(wewMessage.offline == false) { const message = await this.prepareCreate({message:ChatMessage}) message.from = 'Offline' message.loadHistory = this.hasLoadHistory + wewMessage.messageModelInstance = ChatMessage message?.decryptMessage() } else { @@ -719,11 +725,11 @@ export class RoomService { offlineMessage.from = 'Offline' offlineMessage.loadHistory = this.hasLoadHistory + wewMessage.messageModelInstance = ChatMessage this.registerSendMessage(offlineMessage) offlineMessage?.decryptMessage() offlineMessage.send() - } if(wewMessage.delate && !wewMessage.offline && !wewMessage.delateRequest) { diff --git a/src/app/services/functions/file.service.ts b/src/app/services/functions/file.service.ts index 1caf69920..bf2fef68b 100644 --- a/src/app/services/functions/file.service.ts +++ b/src/app/services/functions/file.service.ts @@ -169,9 +169,85 @@ export class FileService { } + + + getFileFromDeviceBase64(types: typeof FileType[]) { + const input = this.fileLoaderService.createInput({ + accept: types + }) + + return new Promise((resolve, reject)=>{ + input.onchange = async () => { + const file = this.fileLoaderService.getFirstFile(input) + + resolve(await this.getBase64(file)); + }; + }) + } + + + getBase64(file) { + return new Promise((resolve, reject) => { + var reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = function () { + resolve(reader.result) + }; + reader.onerror = function (error) { + console.log('Error: ', error); + }; + }) + + } + + viewDocumentByUrl(url) { const browser = this.iab.create(url,"_parent"); browser.show(); } + + blobToBase64 = blob => { + const reader = new FileReader(); + reader.readAsDataURL(blob); + return new Promise(resolve => { + reader.onloadend = () => { + resolve(reader.result); + }; + }); + } + + + base64toBlob(base64Data, contentType) { + contentType = contentType || ''; + var sliceSize = 1024; + var byteCharacters = atob(base64Data); + var bytesLength = byteCharacters.length; + var slicesCount = Math.ceil(bytesLength / sliceSize); + var byteArrays = new Array(slicesCount); + + for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { + var begin = sliceIndex * sliceSize; + var end = Math.min(begin + sliceSize, bytesLength); + + var bytes = new Array(end - begin); + for (var offset = begin, i = 0; offset < end; ++i, ++offset) { + bytes[i] = byteCharacters[offset].charCodeAt(0); + } + byteArrays[sliceIndex] = new Uint8Array(bytes); + } + return new Blob(byteArrays, { type: contentType }); + } + + + base64StringToBlob(base64Data) { + return new Promise((resolve, reject) => { + + fetch(base64Data) + .then(res => resolve(res.blob())) + .then(console.log) + + }) + } + } diff --git a/src/app/shared/chat/group-messages/group-messages.page.html b/src/app/shared/chat/group-messages/group-messages.page.html index 3c0966ffd..178c29f5b 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.html +++ b/src/app/shared/chat/group-messages/group-messages.page.html @@ -120,11 +120,14 @@
+ - {{file.title}} - - + {{ file.title}} + + + +
diff --git a/src/app/shared/chat/group-messages/group-messages.page.ts b/src/app/shared/chat/group-messages/group-messages.page.ts index e703d91a5..116b52943 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.ts +++ b/src/app/shared/chat/group-messages/group-messages.page.ts @@ -424,31 +424,11 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe this.ChatSystemService.getGroupRoom(this.roomId).send({}) } - base64toBlob(base64Data, contentType) { - contentType = contentType || ''; - var sliceSize = 1024; - var byteCharacters = atob(base64Data); - var bytesLength = byteCharacters.length; - var slicesCount = Math.ceil(bytesLength / sliceSize); - var byteArrays = new Array(slicesCount); - - for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { - var begin = sliceIndex * sliceSize; - var end = Math.min(begin + sliceSize, bytesLength); - - var bytes = new Array(end - begin); - for (var offset = begin, i = 0; offset < end; ++i, ++offset) { - bytes[i] = byteCharacters[offset].charCodeAt(0); - } - byteArrays[sliceIndex] = new Uint8Array(bytes); - } - return new Blob(byteArrays, { type: contentType }); - } async sendAudio(fileName) { const roomId = this.roomId let audioFile; - this.storage.get('recordData').then((recordData) => { + this.storage.get('recordData').then(async (recordData) => { audioFile = recordData; if (recordData?.value?.recordDataBase64.includes('data:audio')) { @@ -461,7 +441,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe //Converting base64 to blob const encodedData = btoa(this.audioRecorded); - const blob = this.base64toBlob(encodedData, recordData.value.mimeType) + const blob = this.fileService.base64toBlob(encodedData, recordData.value.mimeType) const formData = new FormData(); formData.append("blobFile", blob); @@ -477,7 +457,10 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe "title_link_download": true, "type": "audio" }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) }); @@ -748,7 +731,10 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe "image_url": 'data:image/jpeg;base64,' + file.base64String, "text": "description", "title_link_download": false, - }] + }], + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } @@ -776,7 +762,10 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe "text": "description", "title_link_download": false, }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } @@ -864,7 +853,10 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe "image_url": 'data:image/jpeg;base64,' + file.base64String, "text": "description", "title_link_download": false, - }] + }], + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } @@ -882,7 +874,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe const encodedData = btoa(JSON.stringify(await this.getBase64(file).catch ((error) => { console.error(error); }))); - const blob = this.base64toBlob(encodedData, file.type) + const blob = this.fileService.base64toBlob(encodedData, file.type) const formData = new FormData(); @@ -900,7 +892,10 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe // "text": "description", "title_link_download": false, }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } else { diff --git a/src/app/shared/chat/messages/messages.page.html b/src/app/shared/chat/messages/messages.page.html index d7f012635..5ae210611 100644 --- a/src/app/shared/chat/messages/messages.page.html +++ b/src/app/shared/chat/messages/messages.page.html @@ -122,10 +122,11 @@ - {{ file.title}} - - + + + +
diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts index 3275c2360..df5e18b14 100644 --- a/src/app/shared/chat/messages/messages.page.ts +++ b/src/app/shared/chat/messages/messages.page.ts @@ -411,7 +411,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy async sendAudio(fileName) { const roomId = this.roomId let audioFile; - this.storage.get('recordData').then((recordData) => { + this.storage.get('recordData').then(async (recordData) => { audioFile = recordData; @@ -423,7 +423,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy } //Converting base64 to blob const encodedData = btoa(this.audioRecorded); - const blob = this.base64toBlob(encodedData, recordData.value.mimeType) + const blob = this.fileService.base64toBlob(encodedData, recordData.value.mimeType) const formData = new FormData(); formData.append("blobFile", blob); @@ -439,7 +439,10 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy "title_link_download": true, "type": "audio" }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) }); @@ -451,27 +454,6 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy this.ChatSystemService.getDmRoom(this.roomId).sendDeleteRequest(msgId) } - base64toBlob(base64Data, contentType) { - contentType = contentType || ''; - var sliceSize = 1024; - var byteCharacters = atob(base64Data); - var bytesLength = byteCharacters.length; - var slicesCount = Math.ceil(bytesLength / sliceSize); - var byteArrays = new Array(slicesCount); - - for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { - var begin = sliceIndex * sliceSize; - var end = Math.min(begin + sliceSize, bytesLength); - - var bytes = new Array(end - begin); - for (var offset = begin, i = 0; offset < end; ++i, ++offset) { - bytes[i] = byteCharacters[offset].charCodeAt(0); - } - byteArrays[sliceIndex] = new Uint8Array(bytes); - } - return new Blob(byteArrays, { type: contentType }); - } - async openViewDocumentModal(file: any) { let task = { @@ -661,7 +643,8 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy source: CameraSource.Camera }); - const blob = this.dataURItoBlob('data:image/jpeg;base64,' + file.base64String) + const base64 = 'data:image/jpeg;base64,' + file.base64String + const blob = this.dataURItoBlob(base64) const formData = new FormData(); formData.append("blobFile", blob); @@ -678,7 +661,10 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy //"image_url": 'data:image/jpeg;base64,' + file.base64String, "text": "description", "title_link_download": false, - }] + }], + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } @@ -710,7 +696,10 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy "image_url": capturedImage, "text": "description", "title_link_download": false, - }] + }], + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } @@ -778,6 +767,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy //const imageData = await this.fileToBase64Service.convert(file) // + const response = await fetch('data:image/jpeg;base64,' + file.base64String!); const blob = await response.blob(); @@ -795,7 +785,10 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy //"image_url": 'data:image/jpeg;base64,' + file.base64String, "text": "description", "title_link_download": false, - }] + }], + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } @@ -814,7 +807,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy const encodedData = btoa(JSON.stringify(await this.getBase64(file).catch ((error) => { console.error(error); }))); - const blob = this.base64toBlob(encodedData, file.type) + const blob = this.fileService.base64toBlob(encodedData, file.type) const formData = new FormData(); @@ -832,7 +825,10 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy // "text": "description", "title_link_download": false, }], - temporaryData: formData + temporaryData: formData, + attachmentsModelData: { + fileBase64: await this.fileService.blobToBase64(blob), + } }) } else { diff --git a/src/app/shared/gabinete-digital/diplomas/diplomas.page.html b/src/app/shared/gabinete-digital/diplomas/diplomas.page.html index 192e3c429..4ae88f85b 100644 --- a/src/app/shared/gabinete-digital/diplomas/diplomas.page.html +++ b/src/app/shared/gabinete-digital/diplomas/diplomas.page.html @@ -87,7 +87,12 @@ Diplomas por validar - Diplomas assinados PR + + Diplomas assinados PR + + + Diplomas + diff --git a/version/git-version.ts b/version/git-version.ts index 6d9498b84..8d00b6b2b 100644 --- a/version/git-version.ts +++ b/version/git-version.ts @@ -1,12 +1,12 @@ export let versionData = { - "shortSHA": "2c28e37a4", - "SHA": "2c28e37a4b09610c5e3ab7da7d1c887065ab91b6", + "shortSHA": "8c02c5abb", + "SHA": "8c02c5abb8e15fb6d0dfa2e119ec8005953ae968", "branch": "feature/gabinete-search", "lastCommitAuthor": "'Peter Maquiran'", - "lastCommitTime": "'Fri Jun 23 12:14:24 2023 +0100'", - "lastCommitMessage": "change words to english", - "lastCommitNumber": "5020", + "lastCommitTime": "'Fri Jun 23 13:56:34 2023 +0100'", + "lastCommitMessage": "rename", + "lastCommitNumber": "5021", "change": "", - "changeStatus": "On branch feature/gabinete-search\nChanges to be committed:\n (use \"git restore --staged ...\" to unstage)\n\tmodified: src/app/domain/process/DiplomaGenerate.ts\n\tmodified: src/app/domain/process/DiplomaSignPr.ts\n\tmodified: src/app/domain/process/DiplomaToSign.ts\n\tmodified: src/app/domain/process/DiplomasValidate.ts\n\tmodified: src/app/domain/process/DispatchDomain.ts\n\tmodified: src/app/domain/process/DispatchPrDomain.ts\n\tmodified: src/app/domain/process/Expediente.ts\n\tmodified: src/app/domain/process/GenericBehaviorTaskActions.ts\n\tmodified: src/app/domain/process/RequestsForDeferment.ts", + "changeStatus": "On branch feature/gabinete-search\nChanges to be committed:\n (use \"git restore --staged ...\" to unstage)\n\tmodified: src/app/models/beast-orm.ts\n\tmodified: src/app/models/chatMethod.ts\n\tmodified: src/app/pages/chat/group-messages/group-messages.page.html\n\tmodified: src/app/pages/chat/group-messages/group-messages.page.ts\n\tmodified: src/app/pages/chat/messages/messages.page.html\n\tmodified: src/app/pages/chat/messages/messages.page.ts\n\tmodified: src/app/services/auth.service.ts\n\tmodified: src/app/services/chat/message.service.ts\n\tmodified: src/app/services/chat/room.service.ts\n\tmodified: src/app/services/functions/file.service.ts\n\tmodified: src/app/shared/chat/group-messages/group-messages.page.html\n\tmodified: src/app/shared/chat/group-messages/group-messages.page.ts\n\tmodified: src/app/shared/chat/messages/messages.page.html\n\tmodified: src/app/shared/chat/messages/messages.page.ts\n\tmodified: src/app/shared/gabinete-digital/diplomas/diplomas.page.html", "changeAuthor": "peter.maquiran" } \ No newline at end of file