idle reconnects for notifications
This commit is contained in:
parent
71073874eb
commit
80febf97d3
2
jslib
2
jslib
|
@ -1 +1 @@
|
||||||
Subproject commit 74b31daf1463502f72fa311d91ea68b11e109423
|
Subproject commit 3d02a1ecb8cdb945f3bee2fbb6921b40286575a1
|
|
@ -47,6 +47,7 @@ import { RouterService } from './services/router.service';
|
||||||
const BroadcasterSubscriptionId = 'AppComponent';
|
const BroadcasterSubscriptionId = 'AppComponent';
|
||||||
// Hack due to Angular 5.2 bug
|
// Hack due to Angular 5.2 bug
|
||||||
const swal: SweetAlert = _swal as any;
|
const swal: SweetAlert = _swal as any;
|
||||||
|
const IdleTimeout = 60000 * 5; // 5 minutes
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
|
@ -61,6 +62,8 @@ export class AppComponent implements OnDestroy, OnInit {
|
||||||
});
|
});
|
||||||
|
|
||||||
private lastActivity: number = null;
|
private lastActivity: number = null;
|
||||||
|
private idleTimer: number = null;
|
||||||
|
private isIdle = false;
|
||||||
|
|
||||||
constructor(private angulartics2GoogleAnalytics: Angulartics2GoogleAnalytics,
|
constructor(private angulartics2GoogleAnalytics: Angulartics2GoogleAnalytics,
|
||||||
private broadcasterService: BroadcasterService, private userService: UserService,
|
private broadcasterService: BroadcasterService, private userService: UserService,
|
||||||
|
@ -90,9 +93,8 @@ export class AppComponent implements OnDestroy, OnInit {
|
||||||
switch (message.command) {
|
switch (message.command) {
|
||||||
case 'loggedIn':
|
case 'loggedIn':
|
||||||
case 'loggedOut':
|
case 'loggedOut':
|
||||||
this.notificationsService.updateConnection();
|
|
||||||
break;
|
|
||||||
case 'unlocked':
|
case 'unlocked':
|
||||||
|
this.notificationsService.updateConnection();
|
||||||
break;
|
break;
|
||||||
case 'logout':
|
case 'logout':
|
||||||
this.logOut(!!message.expired);
|
this.logOut(!!message.expired);
|
||||||
|
@ -101,6 +103,7 @@ export class AppComponent implements OnDestroy, OnInit {
|
||||||
await this.lockService.lock();
|
await this.lockService.lock();
|
||||||
break;
|
break;
|
||||||
case 'locked':
|
case 'locked':
|
||||||
|
this.notificationsService.updateConnection();
|
||||||
this.router.navigate(['lock']);
|
this.router.navigate(['lock']);
|
||||||
break;
|
break;
|
||||||
case 'syncStarted':
|
case 'syncStarted':
|
||||||
|
@ -181,5 +184,29 @@ export class AppComponent implements OnDestroy, OnInit {
|
||||||
|
|
||||||
this.lastActivity = now;
|
this.lastActivity = now;
|
||||||
this.storageService.save(ConstantsService.lastActiveKey, now);
|
this.storageService.save(ConstantsService.lastActiveKey, now);
|
||||||
|
|
||||||
|
// Idle states
|
||||||
|
if (this.isIdle) {
|
||||||
|
this.isIdle = false;
|
||||||
|
this.idleStateChanged();
|
||||||
|
}
|
||||||
|
if (this.idleTimer != null) {
|
||||||
|
window.clearTimeout(this.idleTimer);
|
||||||
|
this.idleTimer = null;
|
||||||
|
}
|
||||||
|
this.idleTimer = window.setTimeout(() => {
|
||||||
|
if (!this.isIdle) {
|
||||||
|
this.isIdle = true;
|
||||||
|
this.idleStateChanged();
|
||||||
|
}
|
||||||
|
}, IdleTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
private idleStateChanged() {
|
||||||
|
if (this.isIdle) {
|
||||||
|
this.notificationsService.disconnectFromInactivity();
|
||||||
|
} else {
|
||||||
|
this.notificationsService.reconnectFromActivity();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,8 +115,8 @@ const authService = new AuthService(cryptoService, apiService,
|
||||||
userService, tokenService, appIdService, i18nService, platformUtilsService, messagingService);
|
userService, tokenService, appIdService, i18nService, platformUtilsService, messagingService);
|
||||||
const exportService = new ExportService(folderService, cipherService, apiService);
|
const exportService = new ExportService(folderService, cipherService, apiService);
|
||||||
const importService = new ImportService(cipherService, folderService, apiService, i18nService, collectionService);
|
const importService = new ImportService(cipherService, folderService, apiService, i18nService, collectionService);
|
||||||
const notificationsService = new NotificationsService(userService, tokenService, syncService, appIdService,
|
const notificationsService = new NotificationsService(userService, syncService, appIdService,
|
||||||
apiService);
|
apiService, cryptoService);
|
||||||
const environmentService = new EnvironmentService(apiService, storageService, notificationsService);
|
const environmentService = new EnvironmentService(apiService, storageService, notificationsService);
|
||||||
const auditService = new AuditService(cryptoFunctionService, apiService);
|
const auditService = new AuditService(cryptoFunctionService, apiService);
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
this.groupingsComponent.load(),
|
this.groupingsComponent.load(),
|
||||||
this.organizationsComponent.load(),
|
this.organizationsComponent.load(),
|
||||||
this.ciphersComponent.refresh(),
|
this.ciphersComponent.load(this.ciphersComponent.filter),
|
||||||
]);
|
]);
|
||||||
this.changeDetectorRef.detectChanges();
|
this.changeDetectorRef.detectChanges();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue