import {Injectable} from '@angular/core'; import {NetworkService} from '../model/network/network.service'; import {CreateSharingDTO, SharingDTO} from '../../../common/entities/SharingDTO'; import {Router, RoutesRecognized} from '@angular/router'; import {BehaviorSubject} from 'rxjs'; import {QueryParams} from '../../../common/QueryParams'; @Injectable() export class ShareService { public sharing: BehaviorSubject; param: string = null; queryParam: string = null; sharingKey: string = null; inited = false; public ReadyPR: Promise; private resolve: () => void; constructor(private _networkService: NetworkService, private router: Router) { this.sharing = new BehaviorSubject(null); this.ReadyPR = new Promise((resolve: () => void) => { if (this.inited === true) { return resolve(); } this.resolve = resolve; }); this.router.events.subscribe(val => { if (val instanceof RoutesRecognized) { this.param = val.state.root.firstChild.params[QueryParams.gallery.sharingKey_long] || null; this.queryParam = val.state.root.firstChild.queryParams[QueryParams.gallery.sharingKey_short] || null; const changed = this.sharingKey !== this.param || this.queryParam; if (changed) { this.sharingKey = this.param || this.queryParam; this.getSharing(); } if (this.resolve) { this.resolve(); this.inited = true; } } }); } public wait(): Promise { return this.ReadyPR; } public createSharing(dir: string, includeSubfolders: boolean, valid: number): Promise { return this._networkService.postJson('/share/' + dir, { createSharing: { includeSubfolders: includeSubfolders, valid: valid } }); } public updateSharing(dir: string, sharingId: number, includeSubfolders: boolean, password: string, valid: number): Promise { return this._networkService.putJson('/share/' + dir, { updateSharing: { id: sharingId, includeSubfolders: includeSubfolders, valid: valid, password: password } }); } public getSharingKey() { return this.sharingKey; } public isSharing(): boolean { return this.sharingKey != null; } public async getSharing(): Promise { const sharing = await this._networkService.getJson('/share/' + this.getSharingKey()); this.sharing.next(sharing); return sharing; } }