diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 86b9b1828..5aa1b679b 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 = 96; + CURRENT_PROJECT_VERSION = 97; DEVELOPMENT_TEAM = 94BRNM2LSS; ENABLE_USER_SCRIPT_SANDBOXING = NO; INFOPLIST_FILE = App/Info.plist; @@ -516,7 +516,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 96; + CURRENT_PROJECT_VERSION = 97; DEVELOPMENT_TEAM = 94BRNM2LSS; ENABLE_USER_SCRIPT_SANDBOXING = NO; INFOPLIST_FILE = App/Info.plist; diff --git a/src/app/modals/crop-image/crop-image.page.html b/src/app/modals/crop-image/crop-image.page.html index bf56cd320..1207eab1c 100644 --- a/src/app/modals/crop-image/crop-image.page.html +++ b/src/app/modals/crop-image/crop-image.page.html @@ -24,7 +24,8 @@ --> - + + - diff --git a/src/app/pages/publications/new-publication/new-publication.page.ts b/src/app/pages/publications/new-publication/new-publication.page.ts index bc823ac54..5b9437553 100644 --- a/src/app/pages/publications/new-publication/new-publication.page.ts +++ b/src/app/pages/publications/new-publication/new-publication.page.ts @@ -143,6 +143,7 @@ export class NewPublicationPage implements OnInit { private videoconvertService: VideoconvertService, public PublicationFromMvService: PublicationFromMvService, ) { + this.PublicationFromMvService.clear() this.publicationType = this.navParams.get('publicationType'); this.folderId = this.navParams.get('folderId'); @@ -166,12 +167,25 @@ export class NewPublicationPage implements OnInit { } } + if(this.publicationType == '3') { + this.PublicationFromMvService.form.setData({ + DateIndex: publication.DateIndex, + DocumentId: publication.DocumentId, + ProcessId: publication.ProcessId, + Title: publication.Title, + Message: publication.Message, + DatePublication: publication.DatePublication + }) + + } + + this.publicationTitle = 'Nova Publicação'; this.intent = this.navParams.get('intent'); this.convertBlobToBase64Worker = new Worker(new URL('./convertBlobToBase64.worker.js', import.meta.url)); - this.PublicationFromMvService.clear() + } ngOnInit() { @@ -375,6 +389,8 @@ export class NewPublicationPage implements OnInit { if (this.PublicationFromMvService.form.Files.length != 0) { this.close(); + + this.PublicationFromMvService.publicationType = this.publicationType as any this.PublicationFromMvService.setFolderId(this.folderId) await this.PublicationFromMvService.save() @@ -394,10 +410,28 @@ export class NewPublicationPage implements OnInit { this.modalController.dismiss(this.PublicationFromMvService.form).then(() => { this.showLoader = true; }); + } + + cancel() { + + this.PublicationFromMvService.form.cancel = true + if(this.PublicationFromMvService.form.send == false) { + this.PublicationFromMvService.cancel() + this.PublicationFromMvService.ObjectMergeNotification.close() + } if (window["sharedContent"]) { - this.closeApp(); + + if (this.platform.is('android')) { + App.exitApp() + } else { + window["sharedContent"] = null; + this.close() + } + } else { + this.close() } + } clear() { @@ -631,14 +665,6 @@ export class NewPublicationPage implements OnInit { this.PublicationFromMvService.form.Files.splice(index, 1) } - closeApp() { - if (this.platform.is('android')) { - App.exitApp() - } else { - window["sharedContent"] = null - } - - } async recordevideoIos(fullPath, element) { @@ -785,21 +811,19 @@ export class NewPublicationPage implements OnInit { } async shareContentIso(fullPath, FileExtension, filename) { + + console.log({fullPath, FileExtension, filename}) + try { if (this.checkFileType.checkFileType(FileExtension) == 'image') { Filesystem.readFile({ path: fullPath }).then(async (content) => { - let fileObject; try { - fileObject = { - FileBase64: this.removeTextBeforeSlash(content.data, ','), - FileExtension: FileExtension, - OriginalFileName: 'shared', - } - console.log('shared base', content.data) - this.PublicationFromMvService.form.Files.push(fileObject) + console.log('shared base', content.data) + this.capturedImage = 'data:image/jpeg;base64,' + this.removeTextBeforeSlash(content.data, ','); + this.showCroppModal() } catch (error) { console.log('error shared filesystem', error) } @@ -811,7 +835,6 @@ export class NewPublicationPage implements OnInit { path: '', }); - let fileObject = {}; this.videoconvertService.convertVideo(fullPath, directory.uri, filename, 'mp4').then(async () => { await Filesystem.readFile({ path: `${directory.uri}${filename}.mp4` }) @@ -826,7 +849,7 @@ export class NewPublicationPage implements OnInit { const newAttachment = new PublicationAttachmentEntity( { - base64: 'data:video/mp4;base64,' + this.removeTextBeforeSlash(content.data, ','), + base64: content.data, extension: 'mp4', FileType: this.checkFileType.checkFileType('mp4') as any, OriginalFileName: 'shared' @@ -835,7 +858,7 @@ export class NewPublicationPage implements OnInit { newAttachment.needUpload() this.PublicationFromMvService.form.Files.push(newAttachment) - fileObject = {}; + const deleteSecretFile = async () => { await Filesystem.deleteFile({ path: `${filename}.mp4`, @@ -844,7 +867,7 @@ export class NewPublicationPage implements OnInit { }; deleteSecretFile().then((value) => { console.log('delete file', value) - fileObject = {}; + }) .catch((erro) => console.error('read converted video erro ', erro)); }); @@ -861,27 +884,31 @@ export class NewPublicationPage implements OnInit { shareContentAndroid(resultUrl, FileExtension) { + console.log({resultUrl, FileExtension}) + Filesystem.readFile({ path: resultUrl }).then(async (content) => { - let fileObject; try { if (this.checkFileType.checkFileType(FileExtension) == 'image') { - fileObject = { - FileBase64: 'data:image/jpeg;base64,' + this.removeTextBeforeSlash(content.data, ','), - FileExtension: FileExtension, - OriginalFileName: 'shared', - } + this.capturedImage = 'data:image/jpeg;base64,' + this.removeTextBeforeSlash(content.data, ','); + this.showCroppModal() } else if (this.checkFileType.checkFileType(FileExtension) == 'video') { - fileObject = { - FileBase64: 'data:video/mp4;base64,' + this.removeTextBeforeSlash(content.data, ','), - FileExtension: FileExtension, - OriginalFileName: 'shared', - } + + let newAttachment = new PublicationAttachmentEntity( + { + base64: content.data, + extension: 'mp4', + FileType: this.checkFileType.checkFileType('mp4') as any, + OriginalFileName: 'shared' + } + ) + newAttachment.needUpload() + this.PublicationFromMvService.form.Files.push(newAttachment) } console.log('shared base', content.data) - this.PublicationFromMvService.form.Files.push(fileObject) + } catch (error) { console.log('error shared filesystem', error) } diff --git a/src/app/pages/publications/publications.page.ts b/src/app/pages/publications/publications.page.ts index 4b793f994..f5ee0d697 100644 --- a/src/app/pages/publications/publications.page.ts +++ b/src/app/pages/publications/publications.page.ts @@ -113,6 +113,7 @@ export class PublicationsPage implements OnInit { this.getActions(); this.checkQueryParameter() } + this.intent = window['sharedContent'] }); this.hideRefreshButton(); diff --git a/src/app/services/chat/chat-system.service.ts b/src/app/services/chat/chat-system.service.ts index f7b2089d0..594c5e7c4 100644 --- a/src/app/services/chat/chat-system.service.ts +++ b/src/app/services/chat/chat-system.service.ts @@ -6,7 +6,7 @@ import { SessionStore } from 'src/app/store/session.service'; import { capitalizeTxt } from 'src/plugin/text'; import { Update as room } from 'src/app/models/chatMethod'; import { Storage } from '@ionic/storage'; -import { Platform } from '@ionic/angular'; +import { ModalController, NavController, Platform } from '@ionic/angular'; import { SqliteService } from 'src/app/services/sqlite.service'; import { ChatService } from 'src/app/services/chat.service'; import { NativeNotificationService } from 'src/app/services/native-notification.service'; @@ -68,6 +68,8 @@ export class ChatSystemService { private NetworkServiceService: NetworkServiceService, private ViewedMessageService: ViewedMessageService, private notificationService: NotificationsService, + private modalController: ModalController, + private navController: NavController ) { @@ -482,7 +484,7 @@ export class ChatSystemService { if (setData.name != 'Rocket Cat' && setData.name != 'general' && chat == false) { // create room if (!this.roomExist(roomId)) { - let room: RoomService = new RoomService(this.RochetChatConnectorService, new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this, this.notificationService), this.storage, this.platform, this.sqlservice, this.NativeNotificationService, this.sortService, this.ChatService, this.NfService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this, this.ViewedMessageService, this.notificationService) + let room: RoomService = new RoomService(this.RochetChatConnectorService, new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this, this.notificationService), this.storage, this.platform, this.sqlservice, this.NativeNotificationService, this.sortService, this.ChatService, this.NfService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this, this.ViewedMessageService, this.notificationService,this.modalController,this.navController) room.setData(setData) room.receiveMessage() room.getAllUsers = this.getUsers diff --git a/src/app/services/chat/room.service.ts b/src/app/services/chat/room.service.ts index 3767b9518..711e05fc5 100644 --- a/src/app/services/chat/room.service.ts +++ b/src/app/services/chat/room.service.ts @@ -4,7 +4,7 @@ import { MessageService, MessageServiceDateLabel } from 'src/app/services/chat/m import { showDateDuration } from 'src/plugin/showDateDuration'; import { chatHistory } from 'src/app/models/chatMethod'; import { Storage } from '@ionic/storage'; -import { Platform } from '@ionic/angular'; +import { ModalController, NavController, Platform } from '@ionic/angular'; import { SqliteService } from 'src/app/services/sqlite.service'; import { NativeNotificationService } from 'src/app/services/native-notification.service'; import { SessionStore } from 'src/app/store/session.service'; @@ -101,7 +101,9 @@ export class RoomService { private NetworkServiceService: NetworkServiceService, private ChatSystemService: ChatSystemService, private ViewedMessageService: ViewedMessageService, - private notificationService: NotificationsService + private notificationService: NotificationsService, + private modalController: ModalController, + private navController: NavController ) { /* this.NativeNotificationService.askForPermission() */ @@ -219,6 +221,9 @@ export class RoomService { if (difference < 0) { this.deleteRoom(); + if(this.chatOpen && window.location.pathname.includes('chat')) { + this.closeModal() + } } else { setTimeout(() => { @@ -1287,4 +1292,8 @@ export class RoomService { this.members = members this.membersExcludeMe = users } + + async closeModal() { + await this.modalController.dismiss(); + } } diff --git a/src/app/services/publication/publication-holder.service.ts b/src/app/services/publication/publication-holder.service.ts index beda76b73..1fe3c830a 100644 --- a/src/app/services/publication/publication-holder.service.ts +++ b/src/app/services/publication/publication-holder.service.ts @@ -1,5 +1,4 @@ import { Injectable } from '@angular/core'; -import { PublicationFormMV } from 'src/app/shared/publication/upload/upload-streaming.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/services/socket-connection-mcr.service.ts b/src/app/services/socket-connection-mcr.service.ts index e4fd89dd7..2ace6a853 100644 --- a/src/app/services/socket-connection-mcr.service.ts +++ b/src/app/services/socket-connection-mcr.service.ts @@ -151,6 +151,7 @@ class ReconnectingWebSocketSignalR { console.log('committing') return new Promise((resolve, reject) => { if(this.isOpen) { + console.log('open') try { console.log('this.connection.invoke', this.connection) this.connection.invoke("CommitUpload", path).then((e) => { @@ -168,6 +169,7 @@ class ReconnectingWebSocketSignalR { } } else { + console.log('wait') this.onConnect.push(()=> { resolve(this.commit(path)) }) diff --git a/src/app/shared/publication/new-publication/new-publication.page.html b/src/app/shared/publication/new-publication/new-publication.page.html index 65e49d75f..30afdfc30 100644 --- a/src/app/shared/publication/new-publication/new-publication.page.html +++ b/src/app/shared/publication/new-publication/new-publication.page.html @@ -66,7 +66,7 @@ - diff --git a/src/app/shared/publication/new-publication/new-publication.page.ts b/src/app/shared/publication/new-publication/new-publication.page.ts index ff170d0b1..0b9b8b5af 100644 --- a/src/app/shared/publication/new-publication/new-publication.page.ts +++ b/src/app/shared/publication/new-publication/new-publication.page.ts @@ -19,7 +19,7 @@ import { CMAPIService } from '../../repository/CMAPI/cmapi.service'; import { environment } from 'src/environments/environment'; import { CaptureImageOptions, MediaCapture } from '@awesome-cordova-plugins/media-capture/ngx'; import { Directory, Filesystem, FilesystemDirectory } from '@capacitor/filesystem'; -import { Platform } from '@ionic/angular'; +import { ModalController, Platform } from '@ionic/angular'; import { PublicationAttachmentEntity } from '../upload/upload-streaming.service'; import { VideoconvertService } from 'src/app/services/videoconvert.service'; import { PublicationHolderService } from 'src/app/services/publication/publication-holder.service' @@ -86,14 +86,15 @@ export class NewPublicationPage implements OnInit { private LakefsRepositoryService: LakefsRepositoryService, private SocketConnectionMCRService: SocketConnectionMCRService, private videoconvertService: VideoconvertService, - public UploadStreamingService: UploadStreamingService + public UploadStreamingService: UploadStreamingService, + private modalController: ModalController ) { this.publicationTitle = 'Nova Publicação'; - this.PublicationFromMvService.clear() } ngOnInit() { + this.PublicationFromMvService.clear() this.setAction(); this.setData() } @@ -163,8 +164,9 @@ export class NewPublicationPage implements OnInit { this.capturedImage = 'data:image/jpeg;base64,' + capturedImage.base64String; this.capturedImageTitle = 'foto'; + this.showCroppModal() /* if(validation.isOk) { */ - const compressedImage = await this.compressImageBase64( + /* const compressedImage = await this.compressImageBase64( this.capturedImage, 800, // maxWidth 800, // maxHeight @@ -183,7 +185,7 @@ export class NewPublicationPage implements OnInit { } ) this.PublicationFromMvService.form.Files.push(newAttachment) - }); + }); */ } async laodPicture() { @@ -233,12 +235,22 @@ export class NewPublicationPage implements OnInit { result.files.forEach(async blobFile => { console.log(blobFile) - if (this.checkFileType.checkFileType(blobFile.mimeType) == 'image' || this.checkFileType.checkFileType(blobFile.mimeType) == 'video') { + if (this.checkFileType.checkFileType(blobFile.mimeType) == 'image') { this.convertBlobToBase64(blobFile.blob).then((value: string) => { this.filesSizeSum = this.filesSizeSum + blobFile.size - if (this.fileSizeToMB(this.filesSizeSum) <= 20) { + this.capturedImage = 'data:image/jpeg;base64,' + this.removeTextBeforeSlash(value, ','), + this.showCroppModal(); + this.filecontent = true; + + }).catch((erro) => { + console.log(erro) + }) + } else if (this.checkFileType.checkFileType(blobFile.mimeType) == 'video'){ + this.convertBlobToBase64(blobFile.blob).then((value: string) => { + + this.filesSizeSum = this.filesSizeSum + blobFile.size const FileExtension = this.removeTextBeforeSlash(blobFile.mimeType, '/') @@ -254,21 +266,13 @@ export class NewPublicationPage implements OnInit { } ) - - newAttachment.needUpload() this.PublicationFromMvService.form.Files.push(newAttachment) this.filecontent = true; - - } else { - if (this.PublicationFromMvService.form.Files.length === 0) - this.filesSizeSum = 0 - - this.httpErroHandle.validationMessagge('filessize'); - } }).catch((erro) => { console.log(erro) }) + } else { this.httpErroHandle.validationMessagge('filetype'); } @@ -286,8 +290,22 @@ export class NewPublicationPage implements OnInit { result.files.forEach(element => { this.filesSizeSum = this.filesSizeSum + element.size - if (this.fileSizeToMB(this.filesSizeSum) <= 20) { - if (this.checkFileType.checkFileType(element.mimeType) == 'image' || this.checkFileType.checkFileType(element.mimeType) == 'video') { + if (this.checkFileType.checkFileType(element.mimeType) == 'image') { + let resultUrl = decodeURIComponent(element.path); + try { + Filesystem.readFile({ path: resultUrl }) + + .then(async (content) => { + console.log(result) + this.capturedImage = 'data:image/jpeg;base64,'+content.data + this.showCroppModal() + }) + .catch((err) => console.error(err)); + } catch (error) { + console.log('upload video error: ', error) + } + + } else if (this.checkFileType.checkFileType(element.mimeType) == 'video'){ let resultUrl = decodeURIComponent(element.path); try { Filesystem.readFile({ path: resultUrl }) @@ -297,7 +315,7 @@ export class NewPublicationPage implements OnInit { console.log('load video tablet base64', content) this.filecontent = true; let fileObject = new PublicationAttachmentEntity({ - base64: 'data:video/mp4;base64,'+content.data, + base64: content.data, extension: this.removeTextBeforeSlash(element.mimeType, '/'), OriginalFileName: 'video', FileType: this.checkFileType.checkFileType( this.removeTextBeforeSlash(element.mimeType, '/')) as any @@ -311,13 +329,9 @@ export class NewPublicationPage implements OnInit { console.log('upload video error: ', error) } + } else { + this.httpErroHandle.validationMessagge('filetype'); } - } else { - if (this.PublicationFromMvService.form.Files.length === 0) - this.filesSizeSum = 0 - - this.httpErrorHandle.validationMessagge('filessize') - } }); }; @@ -366,6 +380,10 @@ export class NewPublicationPage implements OnInit { close() { + if(this.PublicationFromMvService.form.send == false) { + this.PublicationFromMvService.cancel() + this.PublicationFromMvService.ObjectMergeNotification.close() + } this.goBack(); } @@ -746,12 +764,46 @@ console.log(stringGerada); return stringAleatoria; } + +async showCroppModal() { + const modal = await this.modalController.create({ + component: CropImagePage, + componentProps: { + base64ToCroppe: this.capturedImage + }, + cssClass: 'modal modal-desktop' + }); + + modal.onDidDismiss().then((res) => { + if (res) { + this.capturedImage = res.data + this.filecontent = true; + this.photoOrVideo = false; + + const newAttachment = new PublicationAttachmentEntity( + { + base64: res.data.base64ToCroppe, + extension: 'jpeg', + OriginalFileName: "image", + FileType: 'image' + } + ) + + this.PublicationFromMvService.form.Files.push(newAttachment) + } + }, (error) => { + console.log(error) + }); + + await modal.present(); +} } import { Observable, of, Subject } from 'rxjs'; import { tap, switchMap, delay, map } from 'rxjs/operators'; +import { CropImagePage } from 'src/app/modals/crop-image/crop-image.page'; function shareResponse(): MethodDecorator { return function ( diff --git a/src/app/shared/publication/upload/publication-from-mv.service.ts b/src/app/shared/publication/upload/publication-from-mv.service.ts index 1f1c3591b..9197ac7ce 100644 --- a/src/app/shared/publication/upload/publication-from-mv.service.ts +++ b/src/app/shared/publication/upload/publication-from-mv.service.ts @@ -10,6 +10,9 @@ import { v4 as uuidv4 } from 'uuid' import { Result } from 'neverthrow'; import { IPublicationFormModelEntity } from '../new-publication/interface/interface'; import { CMAPIService } from "src/app/shared/repository/CMAPI/cmapi.service" +import { App } from '@capacitor/app'; +import { ModalController, NavParams, Platform, LoadingController } from '@ionic/angular'; +import { Router } from '@angular/router'; enum ActionType { newRapid = "1", @@ -31,13 +34,17 @@ export class PublicationFromMvService { folderId: string + constructor( private publications: PublicationsService, private toastService: ToastService, private httpErroHandle: HttpErrorHandle, public PublicationFolderService: PublicationFolderService, private CMAPIService: CMAPIService, - public publicationFolderService: PublicationFolderService + public publicationFolderService: PublicationFolderService, + private platform: Platform, + private modalController: ModalController, + private router: Router, ) {} @@ -63,7 +70,7 @@ export class PublicationFromMvService { this.folderId = folderId } - save = async() => { + save = async() => { const needChunk = this.needToUploadChunk() @@ -75,6 +82,8 @@ export class PublicationFromMvService { this.form.send = true const upload = await this.uploadVideosFiles() + console.log('release chunks') + const needChunk = this.needToUploadChunk() if(needChunk.length == 0 ) { @@ -102,11 +111,21 @@ export class PublicationFromMvService { OriginalFileName: e.OriginalFileName || 'foto' })) + publication.ProcessId = this.folderId + + if(this.form.cancel) { + window['upload-header-set-remove'](this.id); + return false + } + try { const response = await this.publications.UpdatePublication(publication.ProcessId, publication).toPromise() - this.httpErroHandle.httpsSucessMessagge('Editar publicação') + if (this.form.cancel == false) { + this.httpErroHandle.httpsSucessMessagge('Editar publicação') + } + this.publicationFolderService.getPublicationsIds(this.folderId) window['upload-header-set-remove'](this.id); @@ -117,7 +136,6 @@ export class PublicationFromMvService { this.httpErroHandle.httpStatusHandle(error) if (error.status == 404) { this.PublicationFolderService.deletePost(this.form.ProcessId, this.form.DocumentId) - // this.goBack(); } else { window['upload-header-set-retry'](this.id) } @@ -127,7 +145,6 @@ export class PublicationFromMvService { } else { - window['upload-header-set-retry'](this.id) this.toastService._badRequest("É necessário adicionar uma imagem ou vídeo") } @@ -149,6 +166,8 @@ export class PublicationFromMvService { window['upload-header-set-percentage'](this.id, 100) } + console.log('release chunk') + if(upload) { this.form.Files = this.form.Files.map((e:PublicationAttachmentEntity) => { if(e.FileType == 'video' && e.toUpload) { @@ -164,6 +183,12 @@ export class PublicationFromMvService { return e }) + } else { + window['upload-header-set-retry'](this.id) + this.toastService._badRequest("ocorreu um erro ao enviar o ficheiro") + return true + // loader.remove() + } @@ -178,22 +203,24 @@ export class PublicationFromMvService { publication.DocumentId = null; publication.ProcessId = this.folderId - + if(this.form.cancel == false) { + window['upload-header-set-remove'](this.id); + return false + } try { await this.publications.CreatePublication(publication.ProcessId, publication).toPromise() if (this.publicationType == '1') { - + this.httpErroHandle.httpsSucessMessagge('Criar publicação') } else if (this.publicationType == '2') { this.httpErroHandle.httpsSucessMessagge('Criar publicação') - } else if (this.publicationType == '3') { - this.httpErroHandle.httpsSucessMessagge('Editar publicação') } // this.goBackToViewPublications.emit(); window['upload-header-set-remove'](this.id); + this.doneUpload() this.publicationFolderService.getPublicationsIds(this.folderId) } catch (error) { window['upload-header-set-retry'](this.id) @@ -202,14 +229,6 @@ export class PublicationFromMvService { // loader.remove() } - } else { - window['upload-header-set-retry'](this.id) - this.toastService._badRequest("ocorreu um erro ao enviar o ficheiro") - // loader.remove() - } - - - } else { this.toastService._badRequest("É necessário adicionar uma imagem ou vídeo") @@ -219,7 +238,29 @@ export class PublicationFromMvService { // this.PublicationHolderService.setPublication(this.publicationFormMV) + this.ObjectMergeNotification.close() + + } + + doneUpload() { + if (window["sharedContent"]) { + + if (this.platform.is('android')) { + window["sharedContent"] = null + this.modalController.dismiss(this.form).then(() => { + this.router.navigate(['/home/publications', this.folderId]) + }); + } else { + window["sharedContent"] = null + this.modalController.dismiss(this.form).then(() => { + this.router.navigate(['/home/publications', this.folderId]) + }); + + } + } else { + this.modalController.dismiss(this.form).then(() => {}); + } } @@ -258,7 +299,7 @@ export class PublicationFromMvService { if(PublicationAttachmentEntity.hasBlob) { const fileBlob = PublicationAttachmentEntity.blobFile; - const fileChunks = new Chunks({chunkSize: 1000 }) + const fileChunks = new Chunks({chunkSize: 50 }) fileChunks.setFile(fileBlob) PublicationAttachmentEntity.setChunkManger(fileChunks) } else { @@ -305,6 +346,7 @@ export class PublicationFromMvService { } else { console.log('already uploading') + resolve(true) } }) @@ -330,6 +372,8 @@ export class PublicationFromMvService { Promises.push(promise) } + console.log('Promises', Promises) + // Use Promise.all to wait for all promises to resolve Promise.all(Promises) .then((results) => { diff --git a/src/app/shared/publication/upload/upload-streaming.service.ts b/src/app/shared/publication/upload/upload-streaming.service.ts index 66f6c649f..ca533e38b 100644 --- a/src/app/shared/publication/upload/upload-streaming.service.ts +++ b/src/app/shared/publication/upload/upload-streaming.service.ts @@ -215,6 +215,7 @@ export class PublicationFormModel implements IPublicationFormModelEntity { hasSet = false send = false + cancel = false setData(data: IPublicationFormModelEntity) { if(data.Files) { @@ -227,171 +228,6 @@ export class PublicationFormModel implements IPublicationFormModelEntity { } } -export class PublicationFormMV { - - readonly id = uuidv4() - private UploadFileUseCase = new UploadFileUseCase() - form = new PublicationFormModel() - ObjectMergeNotification = new ObjectMergeNotification() - totalPercentage = 0 - - constructor() { - this.ObjectMergeNotification.connect(); - window['upload-header-set-add'](this.id, this.totalPercentage) - } - - setDataToFrom(data: IPublicationFormModelEntity) { - this.form.setData(data) - } - - private getVideoFiles() { - return this.form.Files.filter( x => x.FileType == 'video') - } - - async commit(PublicationAttachmentEntity: PublicationAttachmentEntity) { - PublicationAttachmentEntity.chucksManager.doneChunkUpload() - const mergeRequest = await this.ObjectMergeNotification.socket.commit(PublicationAttachmentEntity.chucksManager.path) - - if(mergeRequest.isOk()) { - console.log("commit") - PublicationAttachmentEntity.chucksManager.contentSetReady() - return true - } else { - console.log('no commit') - return false - } - } - - private upload(PublicationAttachmentEntity: PublicationAttachmentEntity) { - - return new Promise(async (resolve, reject)=> { - - if(!PublicationAttachmentEntity.hasChunkManger) { - - if(PublicationAttachmentEntity.hasBlob) { - - const fileBlob = PublicationAttachmentEntity.blobFile; - const fileChunks = new Chunks({chunkSize: 50 }) - fileChunks.setFile(fileBlob) - PublicationAttachmentEntity.setChunkManger(fileChunks) - } else { - const Base64 = PublicationAttachmentEntity.Base64; - const fileChunks = new ChunksBase64({chunkSize: 50 }) - fileChunks.setFile(Base64) - PublicationAttachmentEntity.setChunkManger(fileChunks) - } - - - PublicationAttachmentEntity.chucksManager.updateTotalPercentageTrigger = () => { - this.uploadPercentage() - } - - } - - let attemp = 0; - let result: Result - - if( PublicationAttachmentEntity.chucksManager.isUploading == false && PublicationAttachmentEntity.chucksManager.doneUpload == false) { - - do { - attemp++ - - PublicationAttachmentEntity.chucksManager.clearManualRetry() - PublicationAttachmentEntity.chucksManager.setUploading() - result = await this.UploadFileUseCase.execute(PublicationAttachmentEntity) - PublicationAttachmentEntity.chucksManager.clearUploading() - - } while (attemp<3 && result.isErr() && result.error == 'slow') - - - if(result.isErr()) { - PublicationAttachmentEntity.chucksManager.setManualRetry() - resolve(false) - } else { - - return await resolve(this.commit(PublicationAttachmentEntity)) - - } - - } else if ( PublicationAttachmentEntity.chucksManager.contentReady == false) { - console.log("try to send again") - return await resolve(this.commit(PublicationAttachmentEntity)) - - } else { - console.log('already uploading') - } - - }) - - } - - uploadVideosFiles(): Promise { - - return new Promise((resolve, reject) => { - - // this.ObjectMergeNotification.socket.registerWhenConnected(() => { - const videosFiles = this.getVideoFiles() - - window['upload-header-set-percentage'](this.id, 1) - - const videosFilesToUploads = videosFiles.filter( e => e.FileType == "video" && e.toUpload && e.blobFile) - - const Promises: Promise[] = [] - - for(const file of videosFilesToUploads) { - const promise = this.upload(file) - Promises.push(promise) - } - - // Use Promise.all to wait for all promises to resolve - Promise.all(Promises) - .then((results) => { - // Check if every promise resolved successfully - const allPromisesResolvedSuccessfully = results.every((result) => result == true); - - if (allPromisesResolvedSuccessfully) { - console.log('All promises resolved successfully.'); - window['upload-header-set-remove'](this.id); - resolve(true) - } else { - window['upload-header-set-remove'](this.id); - resolve(false) - console.log('Some promises failed to resolve successfully.'); - } - }) - .catch((error) => { - resolve(false) - console.error('An error occurred while resolving promises:', error); - }); - //}) - - }) - - } - - uploadPercentage() { - - const videosFiles = this.getVideoFiles() - const percentageArray = videosFiles.map((e) => e.chucksManager.calculatePercentage()) - - // Check if the array is not empty - if (percentageArray.length === 0) { - window['upload-header-set-percentage'](this.id, this.totalPercentage) - return 0; - } else { - let sum = percentageArray.reduce((acc, percentage) => acc + percentage, 0); - - // Calculate the average percentage - let averagePercentage = sum / percentageArray.length; - - this.totalPercentage = averagePercentage - window['upload-header-set-percentage'](this.id, this.totalPercentage) - return averagePercentage; - } - - } -} - export class Chunks { diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 03d2a6508..8982b9007 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -4,4 +4,4 @@ import { environment as oaprDev } from './suport/oapr' import { DevDev } from './suport/dev' -export const environment: Environment = oaprDev +export const environment: Environment = DevDev diff --git a/workspace.code-workspace b/workspace.code-workspace index bf4bc2067..b1838162c 100644 --- a/workspace.code-workspace +++ b/workspace.code-workspace @@ -2,6 +2,9 @@ "folders": [ { "path": "." + }, + { + "path": "../sih/ORM" } ], "settings": {