mirror of
https://github.com/Zagrios/bs-manager.git
synced 2026-07-03 14:08:25 +02:00
[feature-136] fix some bugs
This commit is contained in:
@@ -220,18 +220,20 @@ export class LocalModelsManagerService {
|
||||
});
|
||||
}
|
||||
|
||||
public deleteModels(models: BsmLocalModel[]): Observable<Progression>{
|
||||
return new Observable<Progression>(subscriber => {
|
||||
public deleteModels(models: BsmLocalModel[]): Observable<Progression<BsmLocalModel[]>>{
|
||||
return new Observable<Progression<BsmLocalModel[]>>(subscriber => {
|
||||
(async () => {
|
||||
const progression: Progression = {
|
||||
|
||||
const progression: Progression<BsmLocalModel[]> = {
|
||||
total: models.length,
|
||||
current: 0,
|
||||
data: null
|
||||
data: []
|
||||
};
|
||||
|
||||
for(const model of models){
|
||||
await unlinkPath(model.path);
|
||||
progression.current += 1;
|
||||
progression.data.push(model);
|
||||
progression.current = progression.data.length;
|
||||
subscriber.next(progression);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ export const LinkButton = motion(forwardRef((props: Props, ref) => {
|
||||
})()
|
||||
|
||||
return (
|
||||
<div ref={ref} className={props.className} title={props.title ? t(props.title) : undefined} onClick={e => {e.preventDefault(); !props.disabled && props.onClick?.()}} style={{pointerEvents: props.disabled ? "none" : "auto"}}>
|
||||
<div ref={ref} className={props.className} title={props.title ? t(props.title) : undefined} onClick={e => {e.preventDefault(); e.stopPropagation(); !props.disabled && props.onClick?.()}} style={{pointerEvents: props.disabled ? "none" : "auto"}}>
|
||||
<span className="absolute top-0 left-0 h-full w-full rounded-full brightness-50 opacity-75 dark:opacity-20 dark:filter-none" style={{backgroundColor: linkedColor}}/>
|
||||
<BsmIcon className="p-1 absolute top-0 left-0 h-full w-full !bg-transparent -rotate-45 brightness-150" icon={props.linked ? "link" : "unlink"} style={{color: linkedColor}} />
|
||||
</div>
|
||||
|
||||
@@ -58,13 +58,12 @@ export const ModelsGrid = forwardRef(({className, version, type, search, active,
|
||||
loadModels();
|
||||
},
|
||||
deleteSelectedModels: () => {
|
||||
modelsManager.deleteModels(!modelsSelected?.length ? models : modelsSelected, version).then(deleted => {
|
||||
if(!deleted){ return; }
|
||||
const newModels = models.filter(m => !modelsSelected.some(d => d.hash === m.hash));
|
||||
modelsManager.deleteModels(!modelsSelected?.length ? models : modelsSelected, version).then(deletedModels => {
|
||||
if(!deletedModels?.length){ return; }
|
||||
const newModels = models.filter(m => !deletedModels.some(d => d.hash === m.hash));
|
||||
setModels(() => newModels);
|
||||
modelsSelected$.next([]);
|
||||
});
|
||||
|
||||
}
|
||||
}), [modelsSelected, models]);
|
||||
|
||||
@@ -85,7 +84,7 @@ export const ModelsGrid = forwardRef(({className, version, type, search, active,
|
||||
|
||||
useOnUpdate(() => {
|
||||
|
||||
if(!active){ return; }
|
||||
if(!active && !models){ return; }
|
||||
|
||||
const onLinkStateChangeCb = (action: VersionLinkerAction) => {
|
||||
if(!equal(version, action.version) || !action.relativeFolder.includes(MODEL_TYPE_FOLDERS[type])){ return; }
|
||||
@@ -155,7 +154,7 @@ export const ModelsGrid = forwardRef(({className, version, type, search, active,
|
||||
|
||||
const handleDelete = (model: BsmLocalModel) => {
|
||||
modelsManager.deleteModels([model], version).then(deleted => {
|
||||
if(!deleted){ return; }
|
||||
if(!deleted?.length){ return; }
|
||||
setModels(prev => prev.filter(m => m.hash !== model.hash));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -128,9 +128,9 @@ export class ModelsManagerService {
|
||||
|
||||
}
|
||||
|
||||
public async deleteModels(models: BsmLocalModel[], version?: BSVersion): Promise<boolean>{
|
||||
public async deleteModels(models: BsmLocalModel[], version?: BSVersion): Promise<BsmLocalModel[]>{
|
||||
|
||||
if(!models){ return Promise.resolve(false); }
|
||||
if(!models){ return Promise.resolve([]); }
|
||||
|
||||
const askModal = models.length > 1 || !this.config.get<boolean>(ModelsManagerService.REMEMBER_CHOICE_DELETE_MODEL_KEY);
|
||||
|
||||
@@ -148,20 +148,22 @@ export class ModelsManagerService {
|
||||
})();
|
||||
|
||||
const res = await this.modalService.openModal(DeleteModelsModal, { models, linked });
|
||||
if(res.exitCode !== ModalExitCode.COMPLETED){ return false; }
|
||||
if(res.exitCode !== ModalExitCode.COMPLETED){ return Promise.resolve([]); }
|
||||
}
|
||||
|
||||
const showProgressBar = this.progressBar.require();
|
||||
|
||||
const progress$ = this.ipc.sendV2<Progression>("delete-models", {args: models}).pipe(map(progress => (progress.current / progress.total) * 100));
|
||||
const obs$ = this.ipc.sendV2<Progression<BsmLocalModel[]>>("delete-models", {args: models});
|
||||
|
||||
const progress$ =obs$.pipe(map(progress => (progress.current / progress.total) * 100));
|
||||
|
||||
if(showProgressBar){ this.progressBar.show(progress$); }
|
||||
|
||||
return lastValueFrom(progress$)
|
||||
.then(() => true)
|
||||
return lastValueFrom(obs$)
|
||||
.then(({data}) => data ?? [])
|
||||
.catch(() => {
|
||||
this.notifications.notifyError({title: "notifications.types.error", desc: "notifications.common.msg.error-occurred", duration: 3000});
|
||||
return false;
|
||||
return [];
|
||||
})
|
||||
.finally(() => this.progressBar.hide(true));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user