diff --git a/android/app/src/main/assets/capacitor.config.json b/android/app/src/main/assets/capacitor.config.json
index f9d5f88c0..2a189f2f1 100644
--- a/android/app/src/main/assets/capacitor.config.json
+++ b/android/app/src/main/assets/capacitor.config.json
@@ -18,6 +18,6 @@
}
},
"server": {
- "url": "http://192.168.1.5:8100"
+ "url": "http://192.168.137.1:8100"
}
}
diff --git a/android/app/src/main/res/xml/config.xml b/android/app/src/main/res/xml/config.xml
index ce530bfc9..e5c21ca29 100644
--- a/android/app/src/main/res/xml/config.xml
+++ b/android/app/src/main/res/xml/config.xml
@@ -15,6 +15,10 @@
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
index 84f153db9..6a05c627f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -799,6 +799,36 @@
"integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==",
"dev": true
},
+ "@awesome-cordova-plugins/core": {
+ "version": "5.40.0",
+ "resolved": "https://registry.npmjs.org/@awesome-cordova-plugins/core/-/core-5.40.0.tgz",
+ "integrity": "sha512-tk5QlnXfSE2Zu3mJVC3f11Guu5iqnLtNkvvClNHjz/e4FsJEmprfXWCv/QImWs5fLsismHcn31LKYBfWIhOv9g==",
+ "requires": {
+ "@types/cordova": "^0.0.34"
+ },
+ "dependencies": {
+ "@types/cordova": {
+ "version": "0.0.34",
+ "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
+ "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
+ }
+ }
+ },
+ "@awesome-cordova-plugins/multiple-document-picker": {
+ "version": "5.40.0",
+ "resolved": "https://registry.npmjs.org/@awesome-cordova-plugins/multiple-document-picker/-/multiple-document-picker-5.40.0.tgz",
+ "integrity": "sha512-7mYRo2yulfgStK0XsPaTUJigFbYwlQy/qWjLRbNHMbEUOk372a/HnjTUwFBFT+oWX8k0Rn9hjX50Xsqoz46hyQ==",
+ "requires": {
+ "@types/cordova": "^0.0.34"
+ },
+ "dependencies": {
+ "@types/cordova": {
+ "version": "0.0.34",
+ "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
+ "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
+ }
+ }
+ },
"@babel/code-frame": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
@@ -6892,6 +6922,29 @@
"get-blob-duration": "^1.2.0"
}
},
+ "capacitor2-file-picker": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/capacitor2-file-picker/-/capacitor2-file-picker-1.0.0.tgz",
+ "integrity": "sha512-mumuW44Bx6mMK0V5KEifu6EgBGPsWQ/kXKWMIaHGFYYUtmZTVpDl2DWiQe6VYFbaemhT+0C1EvKbP681RpLOpQ==",
+ "requires": {
+ "@capacitor/core": "^2.4.7"
+ },
+ "dependencies": {
+ "@capacitor/core": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-2.5.0.tgz",
+ "integrity": "sha512-WUkUnqqLtlEYn6tly8t6VR0ABlSVbXdlD/gBbYxx0P+gEqMF9b46uYb2YqyH+8HBDANzTweEySpLfhiSUvYS7w==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ }
+ }
+ },
"capture-exit": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
@@ -8110,6 +8163,11 @@
"integrity": "sha512-pVQOrNM7VAuVUMXibAlMGIArrftHPrRs4dUCoE+e2HEFUp3LmN3Yj539LjdUxcWmz/A/cHC65m9E3DS56YJhcg==",
"dev": true
},
+ "cordova-plugin-multiple-documents-picker": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-multiple-documents-picker/-/cordova-plugin-multiple-documents-picker-1.0.0.tgz",
+ "integrity": "sha512-MXc1A6bP8/gOSxRRijj5Tp61Sm4zd+yxz5s5ssWD/VQV+MWK88THPZyDuQ2efUbFVs6i2T255mkboLsEEY8EXQ=="
+ },
"cordova-plugin-network-information": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-network-information/-/cordova-plugin-network-information-3.0.0.tgz",
diff --git a/package.json b/package.json
index 25f754e7e..b9e2d213f 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,8 @@
"@angular/platform-browser": "~12.1.2",
"@angular/platform-browser-dynamic": "~12.1.2",
"@angular/router": "~12.1.2",
+ "@awesome-cordova-plugins/core": "^5.40.0",
+ "@awesome-cordova-plugins/multiple-document-picker": "^5.40.0",
"@byteowls/capacitor-filesharer": "^3.0.0",
"@capacitor-community/camera-preview": "^1.2.1",
"@capacitor/android": "3.3.3",
@@ -101,11 +103,13 @@
"bootstrap": "^4.5.0",
"build": "0.1.4",
"capacitor-voice-recorder": "^2.0.0",
+ "capacitor2-file-picker": "^1.0.0",
"ci": "^2.1.1",
"cordova": "^10.0.0",
"cordova-plugin-crop": "^0.4.0",
"cordova-plugin-dbcopy": "git+https://github.com/an-rahulpandey/cordova-plugin-dbcopy.git",
"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-res": "^0.15.3",
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index ed93e7c49..9f749397f 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -36,6 +36,7 @@ import {MAT_DATE_FORMATS, MAT_DATE_LOCALE} from '@angular/material/core';
import { NgxMatDateFormats, NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker';
import { Network } from '@ionic-native/network/ngx';
import { File } from '@ionic-native/file/ngx';
+import { MultipleDocumentsPicker } from '@awesome-cordova-plugins/multiple-document-picker/ngx';
@@ -144,6 +145,8 @@ import { FirebaseX } from '@ionic-native/firebase-x/ngx'; */
StreamingMedia,
PhotoViewer,
NgxImageCompressService,
+ MultipleDocumentsPicker,
+
],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
diff --git a/src/app/pages/chat/messages/messages.page.ts b/src/app/pages/chat/messages/messages.page.ts
index 9da9cf2da..98571d874 100644
--- a/src/app/pages/chat/messages/messages.page.ts
+++ b/src/app/pages/chat/messages/messages.page.ts
@@ -20,7 +20,7 @@ import { ChatUserStorage } from 'src/app/store/chat/chat-user.service';
import { environment } from 'src/environments/environment';
import { ThemeService } from 'src/app/services/theme.service'
-import { Directory, Encoding, FilesystemDirectory } from '@capacitor/filesystem';
+import { Directory, Encoding , Filesystem, FilesystemDirectory, } from '@capacitor/filesystem';
import { VoiceRecorder, VoiceRecorderPlugin, RecordingData, GenericResponse, CurrentRecordingStatus } from 'capacitor-voice-recorder';
import { Haptics, ImpactStyle } from '@capacitor/haptics';
import { PreviewCameraPage } from 'src/app/modals/preview-camera/preview-camera.page';
@@ -40,10 +40,9 @@ import { SearchPage } from 'src/app/pages/search/search.page';
import { Storage } from '@ionic/storage';
import { FileToBase64Service } from 'src/app/services/file/file-to-base64.service';
import { Camera, CameraResultType, CameraSource } from '@capacitor/camera';
-import { Plugins } from '@capacitor/core';
-import { fromByteArray } from 'base64-js';
+import { Plugins, Capacitor } from '@capacitor/core';
+import { MultipleDocumentsPicker } from '@awesome-cordova-plugins/multiple-document-picker/ngx';
-const { Filesystem } = Plugins;
const IMAGE_DIR = 'stored-images';
@@ -94,6 +93,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
myAudio: any;
downloadfile: any;
downloadFile: any;
+ files:any[] = [];
constructor(
public popoverController: PopoverController,
@@ -119,6 +119,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
private processesService: ProcessesService,
private storage: Storage,
private fileToBase64Service: FileToBase64Service,
+ private multipleDocumentsPicker: MultipleDocumentsPicker
) {
this.loggedUser = authService.ValidatedUserChat['data'];
this.roomId = this.navParams.get('roomId');
@@ -673,39 +674,94 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
async addFileToChat(types: typeof FileType[]) {
- const roomId = this.roomId
+ this.multipleDocumentsPicker.pick(2)
+ .then(async (res: any) => {
+ this.files = JSON.parse(res)
+ console.log('1 Add file', this.files[0].uri)
+
- const file: any = await this.fileService.getFileFromDevice(types);
- console.log('Add file', file)
- /* const imageData = await this.fileToBase64Service.convert(file).then((filee) => {
- console.log('Add file', filee)
- }) */
- const response = await fetch(file);
- const blob = await response.blob();
- const blob2 = new Blob([blob])
- console.log('Add file base64', file)
- console.log('Add file blob', blob)
+
+ // Here's an example of reading a file with a full file path. Use this to
+ // read binary data (base64 encoded) from plugins that return File URIs, such as
+ // the Camera.
+ const contents = await Filesystem.readFile({
+ path: this.files[0].uri
+ });
+
+ console.log('data:', contents);
+
- const formData = new FormData();
- formData.append("blobFile", blob);
+ /* const response = await fetch(this.files[0].uri);
+ const blob = await response.blob(); */
- this.wsChatMethodsService.getDmRoom(roomId).send({
- file: {
- "type": file.type,
- "guid": '',
- },
- attachments: [{
- "title": file.name,
- "name": file.name,
- // "text": "description",
- "title_link_download": false,
- }],
- temporaryData: formData
- })
+
+ const blob = new Blob([res])
+ console.log('Add Blob file', blob)
+
+ const formData = new FormData();
+ formData.append("blobFile", blob);
+ console.log(formData)
+
+ this.wsChatMethodsService.getDmRoom(this.roomId).send({
+ file: {
+ "type": 'application/pdf',
+ "guid": '',
+ },
+ attachments: [{
+ "title": 'pdf1',
+ "name": 'pdf1',
+ // "text": "description",
+ "title_link_download": false,
+ }],
+ temporaryData: formData
+ })
+ })
+ .catch((error: any) => console.error(error));
+
+ /* const roomId = this.roomId
+
+ const file: any = await this.fileService.getFileFromDevice(types);
+
+
+ console.log('Add file', file)
+ const blob = new Blob([file], { type: file.type });
+ //const blob = new Blob([file.size], {type: file.type });
+ console.log('Add Blob file', blob)
+ this.blobToBase64(file)
+ .then(base64String => console.log(base64String));
+
+ const formData = new FormData();
+ formData.append('blobFile', file);
+ console.log(formData)
+
+ this.wsChatMethodsService.getDmRoom(roomId).send({
+ file: {
+ "type": file.type,
+ "guid": '',
+ },
+ attachments: [{
+ "title": file.name,
+ "name": file.name,
+ // "text": "description",
+ "title_link_download": false,
+ }],
+ temporaryData: formData
+ });
+ */
}
+ blobToBase64 = blob => {
+ const reader = new FileReader();
+ reader.readAsDataURL(blob);
+ return new Promise(resolve => {
+ reader.onloadend = () => {
+ resolve(reader.result);
+ };
+ });
+ };
+
async openChatOptions(ev?: any) {
const roomId = this.roomId
console.log('MOBILE CHAT OPTION', this.members);
@@ -838,6 +894,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
} else {
//console.log('TRY THIS LIBRARY ',fromByteArray(event.body));
this.downloadFile = event.body;
+ console.log(this._arrayBufferToBase64(event.body))
}
msg.attachments[0] = {
@@ -856,6 +913,16 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}
+ _arrayBufferToBase64(buffer) {
+ var binary = '';
+ var bytes = new Uint8Array(buffer);
+ var len = bytes.byteLength;
+ for (var i = 0; i < len; i++) {
+ binary += String.fromCharCode(bytes[i]);
+ }
+ return window.btoa(binary);
+ }
+
async openPreview(msg) {
console.log(msg);
diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts
index c52649b9b..390e234b1 100644
--- a/src/app/shared/chat/messages/messages.page.ts
+++ b/src/app/shared/chat/messages/messages.page.ts
@@ -750,7 +750,8 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
this.downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));
} else if (msg.file.type === 'application/pdf') {
- this.downloadFile = event.body;
+ this.downloadFile = 'data:application/pdf;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));;
+ console.log(this._arrayBufferToBase64(event.body))
}
msg.attachments[0] = {
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index d333a7fd8..cbbb0f817 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -4,8 +4,8 @@
export const environment = {
production: false,
- apiURL: 'https://gabinetedigital.dyndns.info/GabineteDigital.Services/V5/api/',
- // apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/V5/api/',
+ //apiURL: 'https://gabinetedigital.dyndns.info/GabineteDigital.Services/V5/api/',
+ apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/V5/api/',
apiChatUrl: 'https://gabinetedigitalchat.dyndns.info/api/v1/',
apiWsChatUrl: 'wss://gabinetedigitalchat.dyndns.info/websocket',
//apiChatUrl: 'https://www.tabularium.pt/api/v1/',