mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 12:37:53 +00:00
Merge branch 'feature/chat-v0' of bitbucket.org:equilibriumito/gabinete-digital into feature/chat-v0
This commit is contained in:
Generated
+6
-6
@@ -3175,9 +3175,9 @@
|
||||
}
|
||||
},
|
||||
"@ionic-native/network": {
|
||||
"version": "5.36.0",
|
||||
"resolved": "https://registry.npmjs.org/@ionic-native/network/-/network-5.36.0.tgz",
|
||||
"integrity": "sha512-gpa7cJqodEK+zmmViYJCqEpXoKSXcaYLaaRKdv5gn5M++bpmiw2pKM9JH8VoqYWaYDcUwD3S0yYeBBkG5DE0Kg==",
|
||||
"version": "5.22.0-beta-1",
|
||||
"resolved": "https://registry.npmjs.org/@ionic-native/network/-/network-5.22.0-beta-1.tgz",
|
||||
"integrity": "sha512-reOgFhHkyzCujqoGc1x8U9AZ40SBzdYT4HCFA6L2RwQT1NMyv+sDsp5er64p419Rfxg1k2QVTaDlEh+xPwhEqQ==",
|
||||
"requires": {
|
||||
"@types/cordova": "^0.0.34"
|
||||
},
|
||||
@@ -6230,9 +6230,9 @@
|
||||
}
|
||||
},
|
||||
"beast-orm": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/beast-orm/-/beast-orm-1.0.1.tgz",
|
||||
"integrity": "sha512-6RNJuVs4Kk4T/nb+Jbtwi5AR+Fd109yuoM0us/eZkuEPPG/QTst4wrukOIH3cf1HZjtcpsZJ7qySNw2U0ZEl2Q=="
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/beast-orm/-/beast-orm-1.0.3.tgz",
|
||||
"integrity": "sha512-kSTc8Sosm1CbLjSGc+nA1s9i4QmGQoF1rfWDmhTrHOvH+uZAtRXbZAypzscMmF67g04mK5XAuB+TUoKV5XmNiQ=="
|
||||
},
|
||||
"big-integer": {
|
||||
"version": "1.6.49",
|
||||
|
||||
+2
-2
@@ -72,7 +72,7 @@
|
||||
"@ionic-native/local-notifications": "^4.20.0",
|
||||
"@ionic-native/media": "^5.36.0",
|
||||
"@ionic-native/media-capture": "^5.36.0",
|
||||
"@ionic-native/network": "^5.36.0",
|
||||
"@ionic-native/network": "^5.22.0-beta-1",
|
||||
"@ionic-native/photo-viewer": "^5.36.0",
|
||||
"@ionic-native/screen-orientation": "^5.35.0",
|
||||
"@ionic-native/social-sharing": "^5.36.0",
|
||||
@@ -99,7 +99,7 @@
|
||||
"angular-svg-icon": "^12.0.0",
|
||||
"angular-tag-cloud-module": "^5.2.2",
|
||||
"base64-js": "^1.5.1",
|
||||
"beast-orm": "1.0.1",
|
||||
"beast-orm": "^1.0.3",
|
||||
"bootstrap": "^4.5.0",
|
||||
"build": "0.1.4",
|
||||
"capacitor-voice-recorder": "^2.1.0",
|
||||
|
||||
@@ -3,15 +3,20 @@ import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTr
|
||||
import { Observable } from 'rxjs';
|
||||
import { SessionStore } from '../store/session.service';
|
||||
import { AlertController, Platform } from '@ionic/angular';
|
||||
import { PermissionService } from '../services/permission.service';
|
||||
import { PermissionList } from '../models/permissionList';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class InactivityGuard implements CanActivate {
|
||||
|
||||
permissionList = new PermissionList();
|
||||
|
||||
constructor(
|
||||
private router:Router,
|
||||
private platform: Platform,
|
||||
public permissionService: PermissionService,
|
||||
){}
|
||||
|
||||
canActivate(
|
||||
@@ -19,17 +24,34 @@ export class InactivityGuard implements CanActivate {
|
||||
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
|
||||
|
||||
if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
|
||||
this.router.navigate(['/home/events']);
|
||||
if(this.permissionService.userPermission(this.permissionList.Agenda) || this.permissionService.userPermission(this.permissionList.Gabinete)){
|
||||
this.router.navigate(['/home/events']);
|
||||
}
|
||||
else if(this.permissionService.userPermission(this.permissionList.Chat)){
|
||||
this.router.navigate(['/home/chat']);
|
||||
}
|
||||
else if(this.permissionService.userPermission(this.permissionList.Actions)){
|
||||
this.router.navigate(['/home/publications']);
|
||||
}
|
||||
return false
|
||||
} else if(SessionStore.exist && SessionStore.user.Inactivity && !SessionStore.hasPin ) {
|
||||
return true
|
||||
} else if(SessionStore.exist && !SessionStore.user.Inactivity) {
|
||||
return true
|
||||
} else {
|
||||
this.router.navigate(['/home/events']);
|
||||
}//Mobile or Tablet without session
|
||||
else {
|
||||
if(this.permissionService.userPermission(this.permissionList.Agenda) || this.permissionService.userPermission(this.permissionList.Gabinete)){
|
||||
this.router.navigate(['/home/events']);
|
||||
}
|
||||
else if(this.permissionService.userPermission(this.permissionList.Chat)){
|
||||
this.router.navigate(['/home/chat']);
|
||||
}
|
||||
else if(this.permissionService.userPermission(this.permissionList.Actions)){
|
||||
this.router.navigate(['/home/publications']);
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<ion-tabs class="tab">
|
||||
<ion-tab-bar class="bottoms" slot="bottom">
|
||||
|
||||
<ion-tab-button tab="events" [class.active]="pathname === '/home/events'">
|
||||
<ion-tab-button *ngIf="p.userPermission([permissionList.Agenda]) || p.userPermission([permissionList.Gabinete])" tab="events" [class.active]="pathname === '/home/events'">
|
||||
<!-- <ion-icon name="home"></ion-icon> -->
|
||||
<ion-icon *ngIf="pathname != '/home/events'" class="nav-icon" src="assets/images/icons-nav-home.svg"></ion-icon>
|
||||
<ion-icon *ngIf="pathname == '/home/events'" class="nav-icon" src="assets/images/nav-hover/icons-nav-home-active.svg"></ion-icon>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { models } from 'beast-orm'
|
||||
import { AESEncrypt } from '../services/aesencrypt.service'
|
||||
|
||||
const _AESEncrypt = new AESEncrypt()
|
||||
const _AESEncrypt = new AESEncrypt()
|
||||
const { ArrayField, JsonField} = models.indexedDB.fields
|
||||
|
||||
export class MessageModel extends models.Model {
|
||||
@@ -12,12 +12,12 @@ export class MessageModel extends models.Model {
|
||||
rid = models.CharField()
|
||||
ts = JsonField({blank:true})
|
||||
u = JsonField()
|
||||
_id = models.CharField({unique:true, blank:true})
|
||||
_id = models.CharField({blank:true})
|
||||
_updatedAt = models.IntegerField()
|
||||
messageSend = models.BooleanField()
|
||||
offline = models.BooleanField()
|
||||
viewed = ArrayField()
|
||||
received = ArrayField()
|
||||
viewed = ArrayField({blank:true})
|
||||
received = ArrayField({blank:true})
|
||||
localReference = models.CharField({blank:true})
|
||||
attachments = ArrayField({blank:true})
|
||||
file = JsonField({blank:true})
|
||||
@@ -28,17 +28,18 @@ export class DeleteMessageModel extends models.Model {
|
||||
|
||||
messageId = models.CharField()
|
||||
rid = models.CharField()
|
||||
ts = JsonField()
|
||||
u = JsonField()
|
||||
needToReceiveBy = ArrayField()
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
models.register({
|
||||
databaseName: 'chat-storage',
|
||||
type: 'indexedDB',
|
||||
version: 1,
|
||||
type: 'indexedDB',
|
||||
version: 4,
|
||||
models: [MessageModel, DeleteMessageModel]
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
window['MessageModel'] = MessageModel
|
||||
|
||||
@@ -395,7 +395,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
||||
const roomId = this.roomId
|
||||
let audioFile;
|
||||
this.storage.get('recordData').then((recordData) => {
|
||||
console.log(recordData);
|
||||
|
||||
audioFile = recordData;
|
||||
if(recordData?.value?.recordDataBase64.includes('data:audio')){
|
||||
this.audioRecorded = recordData?.value?.recordDataBase64;
|
||||
@@ -404,6 +404,8 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
||||
this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;
|
||||
}
|
||||
|
||||
console.log(this.audioRecorded);
|
||||
|
||||
//Converting base64 to blob
|
||||
const encodedData = btoa(this.audioRecorded);
|
||||
const blob = this.base64toBlob(encodedData, recordData.value.mimeType)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<div class="main-content d-flex height-100 border-t-radius">
|
||||
|
||||
<!-- Aside left -->
|
||||
<div *ngIf="p.per([permission.Agenda])" class="aside-wrapper d-flex flex-column width-md-40 flex-grow-1">
|
||||
<div class="aside-wrapper d-flex flex-column width-md-40 flex-grow-1">
|
||||
<ion-progress-bar type="indeterminate" *ngIf="showLoader"></ion-progress-bar>
|
||||
<div class="title-container">
|
||||
<div class="title">
|
||||
|
||||
@@ -12,6 +12,8 @@ import { ChangeProfileService } from 'src/app/services/change-profile.service';
|
||||
import { ThemeService } from 'src/app/services/theme.service';
|
||||
import { StorageService } from 'src/app/services/storage.service';
|
||||
import { ChatService } from 'src/app/services/chat.service';
|
||||
import { PermissionService } from 'src/app/services/permission.service';
|
||||
import { PermissionList } from 'src/app/models/permissionList';
|
||||
|
||||
@Component({
|
||||
selector: 'app-login',
|
||||
@@ -29,7 +31,8 @@ export class LoginPage implements OnInit {
|
||||
hasPin: boolean
|
||||
loginPreference: string
|
||||
|
||||
sessionStore = SessionStore
|
||||
sessionStore = SessionStore;
|
||||
permissionList = new PermissionList();
|
||||
|
||||
constructor(
|
||||
private notificatinsservice: NotificationsService,
|
||||
@@ -40,7 +43,8 @@ export class LoginPage implements OnInit {
|
||||
private clearStoreService: ClearStoreService,
|
||||
private changeProfileService: ChangeProfileService,
|
||||
public ThemeService: ThemeService,
|
||||
private storageservice: StorageService
|
||||
private storageservice: StorageService,
|
||||
public permissionService: PermissionService,
|
||||
) {}
|
||||
|
||||
ngOnInit() {
|
||||
@@ -101,26 +105,29 @@ export class LoginPage implements OnInit {
|
||||
// login to API successfully
|
||||
if (attempt) {
|
||||
if (attempt.UserId == SessionStore.user.UserId) {
|
||||
|
||||
await this.authService.SetSession(attempt, this.userattempt);
|
||||
await this.authService.loginChat();
|
||||
await this.authService.loginToChatWs()
|
||||
await this.authService.loginToChatWs();
|
||||
this.getToken();
|
||||
SessionStore.setInativity(true);
|
||||
|
||||
this.goback()
|
||||
this.goback();
|
||||
|
||||
} else {
|
||||
|
||||
this.clearStoreService.clear()
|
||||
SessionStore.delete()
|
||||
this.clearStoreService.clear();
|
||||
SessionStore.delete();
|
||||
window.localStorage.clear();
|
||||
|
||||
await this.authService.SetSession(attempt, this.userattempt);
|
||||
|
||||
this.changeProfileService.run()
|
||||
this.changeProfileService.run();
|
||||
await this.authService.loginChat();
|
||||
await this.authService.loginToChatWs()
|
||||
await this.authService.loginToChatWs();
|
||||
this.getToken();
|
||||
this.router.navigateByUrl('/pin', { replaceUrl: true });
|
||||
|
||||
}
|
||||
}
|
||||
else{
|
||||
@@ -141,7 +148,15 @@ export class LoginPage implements OnInit {
|
||||
if(pathName) {
|
||||
this.router.navigate([pathName]);
|
||||
} else {
|
||||
this.router.navigate(['/home/events']);
|
||||
if(this.permissionService.userPermission(this.permissionList.Agenda) || this.permissionService.userPermission(this.permissionList.Gabinete)){
|
||||
this.router.navigate(['/home/events']);
|
||||
}
|
||||
else if(this.permissionService.userPermission(this.permissionList.Chat)){
|
||||
this.router.navigate(['/home/chat']);
|
||||
}
|
||||
else if(this.permissionService.userPermission(this.permissionList.Actions)){
|
||||
this.router.navigate(['/home/publications']);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -131,7 +131,6 @@ export class AuthService {
|
||||
let responseChat = await this.httpService.post('login', postData).toPromise();
|
||||
|
||||
if(responseChat) {
|
||||
|
||||
console.log('Login to Rocket chat OK', responseChat);
|
||||
this.ValidatedUserChat = responseChat;
|
||||
localStorage.setItem('userChat', JSON.stringify(responseChat));
|
||||
|
||||
@@ -47,13 +47,8 @@ export class ChatMethodsService {
|
||||
return this.chatService.sendMessage(body)
|
||||
}
|
||||
|
||||
|
||||
deleteMessage(body) {
|
||||
return this.chatService.deleteMessage(body)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import { MessageModel, DeleteMessageModel } from '../../models/beast-orm'
|
||||
import { AESEncrypt } from '../aesencrypt.service'
|
||||
import { HttpClient, HttpEventType } from '@angular/common/http';
|
||||
import { AttachmentsService } from 'src/app/services/attachments.service';
|
||||
import { NetworkServiceService , ConnectionStatus} from 'src/app/services/network-service.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@@ -62,7 +63,8 @@ export class MessageService {
|
||||
private ChatStorageService: ChatStorageService,
|
||||
private ChatMethodsService: ChatMethodsService,
|
||||
private AESEncrypt: AESEncrypt,
|
||||
private AttachmentsService: AttachmentsService,) {
|
||||
private AttachmentsService: AttachmentsService,
|
||||
private NetworkServiceService: NetworkServiceService) {
|
||||
}
|
||||
|
||||
setData({customFields = {}, channels, mentions, msg ,rid ,ts, u, t, _id, id, _updatedAt, file, attachments, temporaryData, localReference , viewed = [], received = [], delate = false, delateRequest =false, }:Message) {
|
||||
@@ -184,24 +186,30 @@ export class MessageService {
|
||||
delete params?.attachments?.image_url
|
||||
}
|
||||
|
||||
this.ChatMethodsService.send(params).subscribe(
|
||||
(response: any) => {
|
||||
const ChatMessage = response.message
|
||||
this.messageSend = true
|
||||
this.redefinedMessage(ChatMessage)
|
||||
|
||||
},
|
||||
(error) => {
|
||||
this.WsChatService.registerCallback({
|
||||
type: 'reConnect',
|
||||
funx: async ()=> {
|
||||
|
||||
this.send()
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
if(this.NetworkServiceService.getCurrentNetworkStatus() == ConnectionStatus.Online) {
|
||||
|
||||
this.WsChatService.send(params).then(
|
||||
(ChatMessage: any) => {
|
||||
ChatMessage = ChatMessage.message.result
|
||||
|
||||
this.messageSend = true
|
||||
this.redefinedMessage(ChatMessage)
|
||||
}
|
||||
)
|
||||
|
||||
} else {
|
||||
this.WsChatService.registerCallback({
|
||||
type: 'reConnect',
|
||||
funx: async ()=> {
|
||||
|
||||
this.send()
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async redefinedMessage(ChatMessage , update = true) {
|
||||
@@ -222,7 +230,6 @@ export class MessageService {
|
||||
|
||||
if (event.type === HttpEventType.DownloadProgress) {
|
||||
|
||||
console.log('FILE TYPE 33', this.file.type)
|
||||
} else if (event.type === HttpEventType.Response) {
|
||||
if (this.file.type == "application/img") {
|
||||
downloadFile = 'data:image/jpeg;base64,' + btoa(new Uint8Array(event.body).reduce((data, byte) => data + String.fromCharCode(byte), ''));
|
||||
@@ -242,7 +249,6 @@ export class MessageService {
|
||||
ts: this.attachments[0].ts
|
||||
}
|
||||
|
||||
console.log(this.attachments)
|
||||
// save the changes to the storage
|
||||
this.save()
|
||||
}
|
||||
@@ -262,7 +268,6 @@ export class MessageService {
|
||||
|
||||
async delateDB() {
|
||||
|
||||
// alert('delete data')
|
||||
const message = await MessageModel.get({_id: this._id})
|
||||
await message.delete()
|
||||
|
||||
@@ -314,6 +319,7 @@ export class MessageService {
|
||||
|
||||
async save() {
|
||||
const message = this.getChatObj()
|
||||
console.log(message);
|
||||
|
||||
await MessageModel.update(message)
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import { DeleteMessageModel, MessageModel } from '../../models/beast-orm'
|
||||
import { AESEncrypt } from '../aesencrypt.service'
|
||||
import { IncomingChatMessage, ChatMessageInterface, falseTypingMethod } from 'src/app/models/message.model';
|
||||
import { AttachmentsService } from 'src/app/services/attachments.service';
|
||||
import { ConnectionStatus, NetworkServiceService} from 'src/app/services/network-service.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@@ -77,18 +78,16 @@ export class RoomService {
|
||||
private ChatStorageService: ChatStorageService,
|
||||
private ChatMethodsService: ChatMethodsService,
|
||||
private AESEncrypt: AESEncrypt,
|
||||
private AttachmentsService: AttachmentsService
|
||||
private AttachmentsService: AttachmentsService,
|
||||
private NetworkServiceService: NetworkServiceService
|
||||
) {
|
||||
this.NativeNotificationService.askForPermission()
|
||||
|
||||
// this.restoreMessageFromDB()
|
||||
|
||||
this.WsChatService.getUserStatus((d) => {
|
||||
|
||||
const userId = d.fields.args[0][0]
|
||||
const statusNum = d.fields.args[0][2]
|
||||
const statusText = this.statusNumberToText(statusNum)
|
||||
//
|
||||
|
||||
if(this.members?.map) {
|
||||
const membersIds = this.members.map((user)=> user._id)
|
||||
@@ -145,7 +144,7 @@ export class RoomService {
|
||||
}
|
||||
}
|
||||
|
||||
setData({members, u, customFields = {}, id, name, t, lastMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService), _updatedAt }) {
|
||||
setData({members, u, customFields = {}, id, name, t, lastMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService), _updatedAt }) {
|
||||
this.customFields = customFields
|
||||
this.id = id
|
||||
this.name = name
|
||||
@@ -343,7 +342,6 @@ export class RoomService {
|
||||
|
||||
}
|
||||
|
||||
|
||||
async receiveMessageDelete() {
|
||||
|
||||
this.WsChatService.updateRoomEventss(
|
||||
@@ -372,14 +370,6 @@ export class RoomService {
|
||||
if(this.messages[i]?._id == id ) {
|
||||
|
||||
|
||||
|
||||
//Get previous last message from room
|
||||
const previousLastMessage = this.messages.slice(-1)[0];
|
||||
this.lastMessage = previousLastMessage;
|
||||
|
||||
this.calDateDuration(previousLastMessage._updatedAt)
|
||||
this.sortRoomList()
|
||||
|
||||
if (SessionStore.user.RochetChatUser == this.messages[i]?.u?.username) {
|
||||
const allMemberThatIsOffline = this.getAllMemberThatIsOffline()
|
||||
|
||||
@@ -393,14 +383,18 @@ export class RoomService {
|
||||
}
|
||||
|
||||
this.messages[i]?.delateDB()
|
||||
|
||||
console.log(_id,'==',this.messages[i]?._id, true)
|
||||
this.messages.splice(i, 1)
|
||||
|
||||
//Get previous last message from room
|
||||
const previousLastMessage = this.messages.slice(-1)[0];
|
||||
this.lastMessage = previousLastMessage;
|
||||
this.calDateDuration(previousLastMessage._updatedAt)
|
||||
this.sortRoomList()
|
||||
|
||||
return true
|
||||
|
||||
} else {
|
||||
console.log(_id,'==',this.messages[i]?._id, false)
|
||||
// console.log(_id,'==',this.messages[i]?._id, false)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -429,39 +423,28 @@ export class RoomService {
|
||||
const message = this.messages.find((e)=>e._id == msgId)
|
||||
await message.delateStatusFalse()
|
||||
|
||||
this.ChatMethodsService.deleteMessage({_id:msgId, msgId:msgId, roomId:message.rid}).subscribe(
|
||||
(response: any) => {
|
||||
|
||||
if(this.NetworkServiceService.getCurrentNetworkStatus() == ConnectionStatus.Online) {
|
||||
|
||||
this.WsChatService.deleteMessage(msgId).then(async() => {
|
||||
message.delateRequest = true
|
||||
message.save()
|
||||
await message.save()
|
||||
this.deleteMessage(msgId)
|
||||
})
|
||||
|
||||
},
|
||||
(response) => {
|
||||
|
||||
if (response.error.error.startsWith('No message found with the id of')) {
|
||||
} else {
|
||||
this.WsChatService.registerCallback({
|
||||
type: 'reConnect',
|
||||
funx: async ()=> {
|
||||
|
||||
this.deleteMessage(msgId)
|
||||
message.delateRequest = true
|
||||
|
||||
} else {
|
||||
this.WsChatService.registerCallback({
|
||||
type: 'reConnect',
|
||||
funx: async ()=> {
|
||||
|
||||
this.sendDeleteRequest(msgId)
|
||||
return true
|
||||
}
|
||||
})
|
||||
this.sendDeleteRequest(msgId)
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @description sen text message
|
||||
*/
|
||||
@@ -628,7 +611,7 @@ export class RoomService {
|
||||
|
||||
await this.WsChatService.loadHistory(this.id, limit).then( async (chatHistory:chatHistory) => {
|
||||
|
||||
console.log('load chatHistory', JSON.stringify(chatHistory))
|
||||
// console.log('load chatHistory', JSON.stringify(chatHistory))
|
||||
|
||||
const messagesId = this.messages.map((message)=> message._id)
|
||||
|
||||
@@ -684,7 +667,7 @@ export class RoomService {
|
||||
message = this.fix_updatedAt(message)
|
||||
|
||||
|
||||
const wewMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService)
|
||||
const wewMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService)
|
||||
wewMessage.setData(message)
|
||||
wewMessage.loadHistory = this.hasLoadHistory
|
||||
|
||||
@@ -741,7 +724,7 @@ export class RoomService {
|
||||
async prepareCreate({message, save = true}): Promise<MessageService> {
|
||||
message = this.fix_updatedAt(message)
|
||||
|
||||
const wewMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService)
|
||||
const wewMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService)
|
||||
wewMessage.setData(message)
|
||||
wewMessage.loadHistory = this.hasLoadHistory
|
||||
|
||||
@@ -753,7 +736,7 @@ export class RoomService {
|
||||
|
||||
simplePrepareMessage(message) {
|
||||
message = this.fix_updatedAt(message)
|
||||
const wewMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService)
|
||||
const wewMessage = new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService)
|
||||
wewMessage.setData(message)
|
||||
wewMessage.loadHistory = this.hasLoadHistory
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ import { ChatStorageService } from './chat-storage.service'
|
||||
import { ChatMethodsService } from './chat-methods.service'
|
||||
import { AESEncrypt } from '../aesencrypt.service'
|
||||
import { AttachmentsService } from 'src/app/services/attachments.service';
|
||||
import { NetworkServiceService} from 'src/app/services/network-service.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@@ -57,7 +58,8 @@ export class WsChatMethodsService {
|
||||
private ChatStorageService: ChatStorageService,
|
||||
private ChatMethodsService:ChatMethodsService,
|
||||
private AESEncrypt: AESEncrypt,
|
||||
private AttachmentsService:AttachmentsService
|
||||
private AttachmentsService:AttachmentsService,
|
||||
private NetworkServiceService: NetworkServiceService
|
||||
) {
|
||||
|
||||
this.loggedUser = authService.ValidatedUserChat['data'];
|
||||
@@ -160,7 +162,10 @@ export class WsChatMethodsService {
|
||||
|
||||
} catch(e){}
|
||||
|
||||
this.sortRoomList()
|
||||
setTimeout(()=>{
|
||||
this.sortRoomList()
|
||||
}, 1000)
|
||||
|
||||
}
|
||||
|
||||
async getAllRooms () {
|
||||
@@ -204,7 +209,11 @@ export class WsChatMethodsService {
|
||||
console.log('save rooms', rooms)
|
||||
await this.storage.set('Rooms', rooms);
|
||||
|
||||
this.sortRoomList()
|
||||
|
||||
setTimeout(()=>{
|
||||
this.sortRoomList()
|
||||
}, 1000)
|
||||
|
||||
this.loadingWholeList = false
|
||||
}
|
||||
|
||||
@@ -307,7 +316,7 @@ export class WsChatMethodsService {
|
||||
|
||||
// create room
|
||||
if(!this.roomExist(roomId)) {
|
||||
let room:RoomService = new RoomService(this.WsChatService, new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService), this.storage, this.platform, this.sqlservice, this.NativeNotificationService, this.sortService, this.ChatService, this.NfService , this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService)
|
||||
let room:RoomService = new RoomService(this.WsChatService, new MessageService(this.storage, this.NfService, this.WsChatService, this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService), this.storage, this.platform, this.sqlservice, this.NativeNotificationService, this.sortService, this.ChatService, this.NfService , this.ChatStorageService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService)
|
||||
room.setData(setData)
|
||||
room.receiveMessage()
|
||||
room.getAllUsers = this.getUsers
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { NetworkServiceService } from './network-service.service';
|
||||
|
||||
describe('NetworkServiceService', () => {
|
||||
let service: NetworkServiceService;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({});
|
||||
service = TestBed.inject(NetworkServiceService);
|
||||
});
|
||||
|
||||
it('should be created', () => {
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,62 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ToastController, Platform } from '@ionic/angular';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
import { Network } from '@ionic-native/network/ngx'
|
||||
|
||||
|
||||
export enum ConnectionStatus {
|
||||
Online,
|
||||
Offline
|
||||
}
|
||||
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class NetworkServiceService {
|
||||
private status: BehaviorSubject<ConnectionStatus> = new BehaviorSubject(ConnectionStatus.Offline);
|
||||
|
||||
constructor(private network: Network, private toastController: ToastController, private plt: Platform) {
|
||||
this.plt.ready().then(() => {
|
||||
this.initializeNetworkEvents();
|
||||
let status = this.network.type !== 'none' ? ConnectionStatus.Online : ConnectionStatus.Offline;
|
||||
this.status.next(status);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public initializeNetworkEvents() {
|
||||
|
||||
this.network.onDisconnect().subscribe(() => {
|
||||
if (this.status.getValue() === ConnectionStatus.Online) {
|
||||
this.updateNetworkStatus(ConnectionStatus.Offline);
|
||||
}
|
||||
});
|
||||
|
||||
this.network.onConnect().subscribe(() => {
|
||||
if (this.status.getValue() === ConnectionStatus.Offline) {
|
||||
this.updateNetworkStatus(ConnectionStatus.Online);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private async updateNetworkStatus(status: ConnectionStatus) {
|
||||
this.status.next(status);
|
||||
|
||||
let connection = status == ConnectionStatus.Offline ? 'Offline' : 'Online';
|
||||
let toast = this.toastController.create({
|
||||
message: `You are now ${connection}`,
|
||||
duration: 3000,
|
||||
position: 'bottom'
|
||||
});
|
||||
toast.then(toast => toast.present());
|
||||
}
|
||||
|
||||
public onNetworkChange(): Observable<ConnectionStatus> {
|
||||
return this.status.asObservable();
|
||||
}
|
||||
|
||||
public getCurrentNetworkStatus(): ConnectionStatus {
|
||||
return this.status.getValue();
|
||||
}
|
||||
}
|
||||
@@ -23,8 +23,10 @@ export class PermissionService {
|
||||
if(!Array.isArray(args)) {
|
||||
args = [args]
|
||||
}
|
||||
for(let permission of this.SessionStore.user.UserPermissions){
|
||||
if (args.includes(permission)){
|
||||
|
||||
|
||||
for(let permission of (this.SessionStore.user.UserPermissions || [])) {
|
||||
if (args.includes(permission)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -42,7 +44,7 @@ export class PermissionService {
|
||||
role = [role]
|
||||
}
|
||||
|
||||
if(!UserRoleIsValid) {return false }
|
||||
if(!UserRoleIsValid) { return false }
|
||||
|
||||
return true
|
||||
|
||||
|
||||
@@ -130,7 +130,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div *ngIf="msg.t == 'r'" class="info-text">
|
||||
<ion-label>Alterou o nome do grupo para "{{msg.msg.split('-').join(' ')}}"</ion-label><br />
|
||||
{{last ? scrollToBottom() : ''}}
|
||||
|
||||
@@ -253,7 +253,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
||||
this.storage.get('fileName').then((fileName) => {
|
||||
this.lastAudioRecorded = fileName;
|
||||
})
|
||||
|
||||
|
||||
this.storage.get('recordData').then((recordData) => {
|
||||
console.log(recordData);
|
||||
if(recordData?.value?.recordDataBase64.includes('data:audio')){
|
||||
@@ -265,7 +265,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
||||
});
|
||||
} catch (error) {}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
startRecording() {
|
||||
@@ -389,6 +389,8 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
||||
this.audioRecorded = `data:${recordData.value.mimeType};base64,${recordData?.value?.recordDataBase64}`;
|
||||
}
|
||||
|
||||
console.log(this.audioRecorded);
|
||||
|
||||
//Converting base64 to blob
|
||||
const encodedData = btoa(this.audioRecorded);
|
||||
const blob = this.base64toBlob(encodedData, recordData.value.mimeType)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
<div class="d-flex flex-1 pr-20 pl-50">
|
||||
|
||||
<div class="tab mr-20 d-flex align-center cursor-pointer" (click)="changeRoute('/home/events')"
|
||||
<div *ngIf="p.userPermission([permissionList.Agenda]) || p.userPermission([permissionList.Gabinete])" class="tab mr-20 d-flex align-center cursor-pointer" (click)="changeRoute('/home/events')"
|
||||
[class.active]="locationPathname() == '/home/events'">
|
||||
|
||||
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="font-40" src='assets/images/icons-nav-home-active-black.svg'></ion-icon>
|
||||
|
||||
@@ -6,13 +6,13 @@ import { LoginUserRespose } from 'src/app/models/user.model';
|
||||
import { ProfilePage } from 'src/app/modals/profile/profile.page';
|
||||
import { StorageService } from '../../services/storage.service';
|
||||
import { SessionStore } from 'src/app/store/session.service';
|
||||
//import { NotificationsService } from '../../services/notifications.service';
|
||||
import { environment } from 'src/environments/environment';
|
||||
import { EventTrigger } from '../../services/eventTrigger.service';
|
||||
import { ThemeService } from '../../services/theme.service';
|
||||
import { interval } from 'rxjs';
|
||||
import { RouteService } from 'src/app/services/route.service';
|
||||
import { PermissionList } from 'src/app/models/permissionList';
|
||||
import { PermissionService } from 'src/app/services/permission.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-header',
|
||||
@@ -43,7 +43,8 @@ export class HeaderPage implements OnInit {
|
||||
//private notificationsService: NotificationsService,
|
||||
private eventrigger: EventTrigger,
|
||||
public ThemeService: ThemeService,
|
||||
public RouteService: RouteService
|
||||
public RouteService: RouteService,
|
||||
public p: PermissionService,
|
||||
) {
|
||||
this.loggeduser = SessionStore.user;
|
||||
router.events.subscribe((val) => {
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
export const environment = {
|
||||
production: true,
|
||||
|
||||
apiURL: 'https://gabinetedigital.dyndns.info/GabineteDigital.Services/V5/api/',
|
||||
apiChatUrl: 'https://gabinetedigitalchat.dyndns.info/api/v1/',
|
||||
apiWsChatUrl: 'wss://gabinetedigitalchat.dyndns.info/websocket',
|
||||
//apiChatUrl: 'https://www.tabularium.pt/api/v1/',
|
||||
|
||||
production: true,
|
||||
domain: 'gabinetedigital.local',
|
||||
defaultuser: '',//paulo.pinto paulo.pinto@gabinetedigital.local
|
||||
defaultuserpwd: '', //tabteste@006,
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
|
||||
export const environment = {
|
||||
production: false,
|
||||
/* apiURL: 'https://gabinetedigital.dyndns.info/GabineteDigital.Services/V5/api/',
|
||||
apiChatUrl: 'https://gabinetedigitalchat.dyndns.info/api/v1/',
|
||||
apiWsChatUrl: 'wss://gabinetedigitalchat.dyndns.info/websocket', */
|
||||
//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/',
|
||||
apiWsChatUrl: 'wss://www.tabularium.pt/websocket',
|
||||
/* apiChatUrl: 'http://chat.gabinetedigital.local:3000/api/v1/', */
|
||||
|
||||
Reference in New Issue
Block a user