From c22efc99dcd73b8c7b06bf62bc7636fdaff2dd91 Mon Sep 17 00:00:00 2001 From: Equilibrium ITO Date: Mon, 11 Mar 2024 11:18:32 +0100 Subject: [PATCH] bug adding file to chat on ios solved --- ios/App/App.xcodeproj/project.pbxproj | 8 +-- package-lock.json | 14 ++--- package.json | 2 +- src/app/app.component.ts | 11 ++-- src/app/interceptors/token.interceptors.ts | 5 +- .../group-messages/group-messages.page.ts | 40 +++++++++++++++ src/app/pages/chat/messages/messages.page.ts | 51 ++++++++++++++++++- src/app/services/functions/file.service.ts | 12 +++++ 8 files changed, 126 insertions(+), 17 deletions(-) diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 0fed9f9ee..02a8ed1b5 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -489,7 +489,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 87; + CURRENT_PROJECT_VERSION = 88; DEVELOPMENT_TEAM = 94BRNM2LSS; ENABLE_USER_SCRIPT_SANDBOXING = NO; INFOPLIST_FILE = App/Info.plist; @@ -498,7 +498,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.7; + MARKETING_VERSION = 3.8; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; PRODUCT_BUNDLE_IDENTIFIER = com.gpr.gabinetedigital.teste; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -516,7 +516,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 87; + CURRENT_PROJECT_VERSION = 88; DEVELOPMENT_TEAM = 94BRNM2LSS; ENABLE_USER_SCRIPT_SANDBOXING = NO; INFOPLIST_FILE = App/Info.plist; @@ -525,7 +525,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.7; + MARKETING_VERSION = 3.8; PRODUCT_BUNDLE_IDENTIFIER = com.gpr.gabinetedigital.teste; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = ""; diff --git a/package-lock.json b/package-lock.json index fd3d134d0..df3443228 100644 --- a/package-lock.json +++ b/package-lock.json @@ -124,7 +124,7 @@ "cordova-plugin-filepath": "^1.5.8", "cordova-plugin-multiple-documents-picker": "^1.0.0", "cordova-plugin-okhttp": "^2.0.0", - "cordova-plugin-screen-orientation": "^3.0.2", + "cordova-plugin-screen-orientation": "^3.0.4", "cordova-res": "^0.15.3", "cordova-sqlite-storage": "^6.0.0", "cross-env": "^7.0.3", @@ -12878,9 +12878,9 @@ ] }, "node_modules/cordova-plugin-screen-orientation": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cordova-plugin-screen-orientation/-/cordova-plugin-screen-orientation-3.0.2.tgz", - "integrity": "sha512-2w6CMC+HGvbhogJetalwGurL2Fx8DQCCPy3wlSZHN1/W7WoQ5n9ujVozcoKrY4VaagK6bxrPFih+ElkO8Uqfzg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cordova-plugin-screen-orientation/-/cordova-plugin-screen-orientation-3.0.4.tgz", + "integrity": "sha512-AswRuUKJ8J3HycUilTJsIB50aa9TLrwndPNBFG+wfAPhHEqIBF0HaD0q3HbAK7ypgmaj0cvbzk84qP51IcTfrQ==", "engines": { "cordovaDependencies": { "4.0.0": { @@ -53547,9 +53547,9 @@ "integrity": "sha512-k8Fr3Zcv2kcsTD7TYrPPBZX/kEDSCjnPQOtaQBOFmCS3IcJNgWQY8LYST57zkIijaTKeQR7JZo4DvW1Oda3o2Q==" }, "cordova-plugin-screen-orientation": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cordova-plugin-screen-orientation/-/cordova-plugin-screen-orientation-3.0.2.tgz", - "integrity": "sha512-2w6CMC+HGvbhogJetalwGurL2Fx8DQCCPy3wlSZHN1/W7WoQ5n9ujVozcoKrY4VaagK6bxrPFih+ElkO8Uqfzg==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cordova-plugin-screen-orientation/-/cordova-plugin-screen-orientation-3.0.4.tgz", + "integrity": "sha512-AswRuUKJ8J3HycUilTJsIB50aa9TLrwndPNBFG+wfAPhHEqIBF0HaD0q3HbAK7ypgmaj0cvbzk84qP51IcTfrQ==" }, "cordova-plugin-statusbar": { "version": "2.4.3", diff --git a/package.json b/package.json index 20a04a850..b942356d9 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "cordova-plugin-filepath": "^1.5.8", "cordova-plugin-multiple-documents-picker": "^1.0.0", "cordova-plugin-okhttp": "^2.0.0", - "cordova-plugin-screen-orientation": "^3.0.2", + "cordova-plugin-screen-orientation": "^3.0.4", "cordova-res": "^0.15.3", "cordova-sqlite-storage": "^6.0.0", "cross-env": "^7.0.3", diff --git a/src/app/app.component.ts b/src/app/app.component.ts index a8e9d3c9c..95e5aa059 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -12,6 +12,7 @@ import { Storage } from '@ionic/storage'; import { ChatController } from './controller/chat'; import { register } from 'swiper/element/bundle'; import { DomSanitizer } from '@angular/platform-browser'; +import {ScreenOrientation} from "@ionic-native/screen-orientation/ngx"; const CUSTOM_DATE_FORMATS: NgxMatDateFormats = { parse: { @@ -41,7 +42,8 @@ export class AppComponent { public ThemeService: ThemeService, private storage: Storage, private ChatSystemService: ChatSystemService, - private sanitizer: DomSanitizer + private sanitizer: DomSanitizer, + private screenOrientation: ScreenOrientation ) { window["sanitizer"] = this.sanitizer @@ -77,9 +79,12 @@ export class AppComponent { if (this.platform.is("tablet")) { window.screen.orientation.unlock(); } else if( this.platform.is("mobile")) { - // window.screen.orientation.lock('portrait'); + if(this.platform.is('ios')){ + this.screenOrientation.lock('portrait') + } else { + window.screen.orientation.lock('portrait'); + } } - }); } } diff --git a/src/app/interceptors/token.interceptors.ts b/src/app/interceptors/token.interceptors.ts index 13e4ebe71..23ca06a7c 100644 --- a/src/app/interceptors/token.interceptors.ts +++ b/src/app/interceptors/token.interceptors.ts @@ -121,7 +121,10 @@ export class TokenInterceptor implements HttpInterceptor { } else { /* const pathBeforeGoOut = window.location.pathname */ this.router.navigateByUrl('/auth', { replaceUrl: true }).then(() =>{ - this.httpErrorHandle.httpsSucessMessagge('sessonExpired') + if(SessionStore.user.Authorization){ + this.httpErrorHandle.httpsSucessMessagge('sessonExpired') + } + }) } return of(false); 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 0f25ba173..262955733 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -34,6 +34,7 @@ import { Camera, CameraResultType, CameraSource } from '@capacitor/camera'; import { RouteService } from 'src/app/services/route.service'; import { FileValidatorService } from "src/app/services/file/file-validator.service" import { sanitize } from "sanitize-filename-ts"; +import { FilePicker } from '@capawesome/capacitor-file-picker'; @Component({ @@ -828,8 +829,47 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { async addFileToChat(types: typeof FileType[]) { + + const roomId = this.roomId + if(this.platform.is('ios')) { + console.log('ios add file ') + + const resultt = await FilePicker.pickFiles({ + types: ['application/pdf'], + multiple: false, + readData: true, + }); + + console.log('RESULT', resultt.files[0]) + + const blobb = this.fileService.base64toBlob(resultt.files[0].data, resultt.files[0].mimeType) + + const formDataa = new FormData(); + formDataa.append('blobFile', blobb); + /* console.log('add file', fileBase64) */ + + this.ChatSystemService.getGroupRoom(roomId).send({ + file: { + "type": resultt.files[0].mimeType, + "guid": '', + }, + attachments: [{ + "title": sanitize(resultt.files[0].name), + "name": sanitize(resultt.files[0].name), + // "text": "description", + "title_link_download": false, + }], + temporaryData: formDataa, + attachmentsModelData: { + fileBase64: '', + } + }) + return + + } + const file: any = await this.fileService.getFileFromDevice(types); diff --git a/src/app/pages/chat/messages/messages.page.ts b/src/app/pages/chat/messages/messages.page.ts index b28b048a0..8990525c5 100644 --- a/src/app/pages/chat/messages/messages.page.ts +++ b/src/app/pages/chat/messages/messages.page.ts @@ -35,6 +35,7 @@ import { NotificationsService } from 'src/app/services/notifications.service'; import { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service' import { FileValidatorService } from "src/app/services/file/file-validator.service" import { sanitize } from "sanitize-filename-ts"; +import { FilePicker } from '@capawesome/capacitor-file-picker'; @@ -839,9 +840,46 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { } async addFileToChat(types: typeof FileType[]) { - console.log('add file') + console.log('add file ') const roomId = this.roomId + if(this.platform.is('ios')) { + console.log('ios add file ') + + const resultt = await FilePicker.pickFiles({ + types: ['application/pdf'], + multiple: false, + readData: true, + }); + + console.log('RESULT', resultt.files[0]) + + const blobb = this.fileService.base64toBlob(resultt.files[0].data, resultt.files[0].mimeType) + + const formDataa = new FormData(); + formDataa.append('blobFile', blobb); + /* console.log('add file', fileBase64) */ + + this.ChatSystemService.getDmRoom(roomId).send({ + file: { + "type": resultt.files[0].mimeType, + "guid": '', + }, + attachments: [{ + "title": sanitize(resultt.files[0].name), + "name": sanitize(resultt.files[0].name), + // "text": "description", + "title_link_download": false, + }], + temporaryData: formDataa, + attachmentsModelData: { + fileBase64: '', + } + }) + return + + } + const file: any = await this.fileService.getFileFromDevice(types); console.log(file) @@ -1239,6 +1277,17 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { }); } + dataURItoBlobIso(dataURI: any) { + const byteString = window.atob(dataURI); + const arrayBuffer = new ArrayBuffer(byteString.length); + const int8Array = new Uint8Array(arrayBuffer); + for (let i = 0; i < byteString.length; i++) { + int8Array[i] = byteString.charCodeAt(i); + } + const blob = new Blob([int8Array], { type: 'application/pdf' }); + return blob; +} + } diff --git a/src/app/services/functions/file.service.ts b/src/app/services/functions/file.service.ts index 6c2c22a11..d7295d49e 100644 --- a/src/app/services/functions/file.service.ts +++ b/src/app/services/functions/file.service.ts @@ -263,5 +263,17 @@ export class FileService { return new File([u8arr], filename, {type:mime}); } + base64toBlobIos(base64Data, contentType) { + contentType = contentType || ''; + const byteCharacters = atob(base64Data); + const byteArray = new Uint8Array(byteCharacters.length); + + for (let i = 0; i < byteCharacters.length; i++) { + byteArray[i] = byteCharacters.charCodeAt(i); + } + + return new Blob([byteArray], { type: contentType }); + } + }