mirror of
https://github.com/Zagrios/bs-manager.git
synced 2026-07-03 14:08:25 +02:00
Merge branch 'master' into feature/add-changelog-modal/178
This commit is contained in:
@@ -13,7 +13,7 @@ import { ConfigurationService } from "./configuration.service";
|
||||
import { ArchiveProgress } from "shared/models/archive.interface";
|
||||
import { map, last, catchError } from "rxjs/operators";
|
||||
import { ProgressionInterface } from "shared/models/progress-bar";
|
||||
import { VersionFolderLinkerService, VersionLinkerActionType } from "./version-folder-linker.service";
|
||||
import { FolderLinkState, VersionFolderLinkerService, VersionLinkerActionType } from "./version-folder-linker.service";
|
||||
|
||||
export class MapsManagerService {
|
||||
private static instance: MapsManagerService;
|
||||
@@ -176,6 +176,10 @@ export class MapsManagerService {
|
||||
}
|
||||
|
||||
public $mapsLinkingPending(version: BSVersion): Observable<boolean> {
|
||||
return this.linker.$isVersionFolderPending(version, MapsManagerService.RELATIVE_MAPS_FOLDER);
|
||||
return this.linker.$isPending(version, MapsManagerService.RELATIVE_MAPS_FOLDER);
|
||||
}
|
||||
|
||||
public $mapsFolderLinkState(version: BSVersion): Observable<FolderLinkState> {
|
||||
return this.linker.$folderLinkedState(version, MapsManagerService.RELATIVE_MAPS_FOLDER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { MSModelType } from "shared/models/models/model-saber.model";
|
||||
import { IpcService } from "../ipc.service";
|
||||
import { VersionFolderLinkerService, VersionLinkerActionListener, VersionLinkerActionType } from "../version-folder-linker.service";
|
||||
import { FolderLinkState, VersionFolderLinkerService, VersionLinkerActionListener, VersionLinkerActionType } from "../version-folder-linker.service";
|
||||
import { MODEL_TYPE_FOLDERS } from "shared/models/models/constants";
|
||||
import { Observable, lastValueFrom, map } from "rxjs";
|
||||
import { BSVersion } from "shared/bs-version.interface";
|
||||
@@ -49,7 +49,11 @@ export class ModelsManagerService {
|
||||
}
|
||||
|
||||
public $modelsLinkingPending(version: BSVersion, type: MSModelType): Observable<boolean> {
|
||||
return this.versionFolderLinked.$isVersionFolderPending(version, MODEL_TYPE_FOLDERS[type]);
|
||||
return this.versionFolderLinked.$isPending(version, MODEL_TYPE_FOLDERS[type]);
|
||||
}
|
||||
|
||||
public $modelsLinkingState(version: BSVersion, type: MSModelType): Observable<FolderLinkState> {
|
||||
return this.versionFolderLinked.$folderLinkedState(version, MODEL_TYPE_FOLDERS[type]);
|
||||
}
|
||||
|
||||
public onModelsFolderLinked(callback: VersionLinkerActionListener): void {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { LinkOptions, UnlinkOptions } from "main/services/folder-linker.service";
|
||||
import { map, distinctUntilChanged, filter, mergeMap, shareReplay } from "rxjs/operators";
|
||||
import { BehaviorSubject, Observable } from "rxjs";
|
||||
import { BehaviorSubject, Observable, of } from "rxjs";
|
||||
import { BSVersion } from "shared/bs-version.interface";
|
||||
import { IpcService } from "./ipc.service";
|
||||
import { ProgressBarService } from "./progress-bar.service";
|
||||
@@ -62,6 +62,13 @@ export class VersionFolderLinkerService {
|
||||
return this.ipcService.sendV2<boolean, VersionLinkerAction>("link-version-folder-action", { args: action });
|
||||
}
|
||||
|
||||
private get currentAction$(): Observable<VersionLinkerAction> {
|
||||
return this._queue$.pipe(
|
||||
map(actions => actions.at(0)),
|
||||
distinctUntilChanged()
|
||||
);
|
||||
}
|
||||
|
||||
public linkVersionFolder(action: VersionLinkFolderAction): Promise<boolean> {
|
||||
const promise = new Promise<boolean>(resolve => {
|
||||
const callBack: VersionLinkerActionListener = (performedAction, linked) => {
|
||||
@@ -122,12 +129,33 @@ export class VersionFolderLinkerService {
|
||||
return this.ipcService.sendV2("is-version-folder-linked", { args: { version, relativeFolder } });
|
||||
}
|
||||
|
||||
public isPending(version: BSVersion, relativeFolder: string): Observable<boolean> {
|
||||
return this.queue$.pipe(map(queue => queue.length > 0 && queue.some(action => action.version === version && action.relativeFolder === relativeFolder), distinctUntilChanged()));
|
||||
public $folderLinkedState(version: BSVersion, relativeFolder: string): Observable<FolderLinkState> {
|
||||
return this._queue$.pipe(
|
||||
mergeMap(queue => {
|
||||
const currentAction = queue.at(0);
|
||||
if(currentAction && equal(currentAction.version, version) && currentAction.relativeFolder === relativeFolder) {
|
||||
return of(FolderLinkState.Processing)
|
||||
}
|
||||
|
||||
if(queue.some(action => equal(action.version, version) && action.relativeFolder === relativeFolder)) {
|
||||
return of(FolderLinkState.Pending);
|
||||
}
|
||||
|
||||
return this.isVersionFolderLinked(version, relativeFolder).pipe(
|
||||
map(linked => linked ? FolderLinkState.Linked : FolderLinkState.Unlinked)
|
||||
);
|
||||
}),
|
||||
distinctUntilChanged(),
|
||||
shareReplay(1)
|
||||
);
|
||||
}
|
||||
|
||||
public isProcessing(version: BSVersion, relativeFolder: string): Observable<boolean> {
|
||||
return this.currentAction$.pipe(map(action => action && action.version === version && action.relativeFolder === relativeFolder));
|
||||
public $isPending(version: BSVersion, relativeFolder: string): Observable<boolean> {
|
||||
return this.$folderLinkedState(version, relativeFolder).pipe(map(state => state === FolderLinkState.Pending));
|
||||
}
|
||||
|
||||
public $isProcessing(version: BSVersion, relativeFolder: string): Observable<boolean> {
|
||||
return this.$folderLinkedState(version, relativeFolder).pipe(map(state => state === FolderLinkState.Processing));
|
||||
}
|
||||
|
||||
public getLinkedFolders(version: BSVersion, options?: { relative?: boolean }): Observable<string[]> {
|
||||
@@ -137,27 +165,6 @@ export class VersionFolderLinkerService {
|
||||
public relinkAllVersionsFolders(): Observable<void> {
|
||||
return this.ipcService.sendV2("relink-all-versions-folders");
|
||||
}
|
||||
|
||||
public $isVersionFolderPending(version: BSVersion, relativeFolder: string): Observable<boolean> {
|
||||
return this.queue$.pipe(
|
||||
mergeMap(async queue => {
|
||||
return queue.some(q => q.relativeFolder.includes(relativeFolder) && equal(q.version, version));
|
||||
}),
|
||||
distinctUntilChanged(),
|
||||
shareReplay(1)
|
||||
);
|
||||
}
|
||||
|
||||
public get currentAction$(): Observable<VersionLinkerAction> {
|
||||
return this._queue$.pipe(
|
||||
map(actions => actions.at(0)),
|
||||
distinctUntilChanged()
|
||||
);
|
||||
}
|
||||
|
||||
public get queue$(): Observable<VersionLinkerAction[]> {
|
||||
return this._queue$.asObservable();
|
||||
}
|
||||
}
|
||||
|
||||
export const enum VersionLinkerActionType {
|
||||
@@ -182,3 +189,10 @@ export interface VersionUnlinkFolderAction extends VersionLinkerAction {
|
||||
}
|
||||
|
||||
export type VersionLinkerActionListener = (action: VersionLinkerAction, linked: boolean) => void;
|
||||
|
||||
export enum FolderLinkState {
|
||||
Linked,
|
||||
Unlinked,
|
||||
Pending,
|
||||
Processing
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user