[feature-136] fix some bugs

This commit is contained in:
MathieuG-P
2023-05-21 16:21:22 +02:00
parent b9359d6b9c
commit bc2c716111
4 changed files with 22 additions and 19 deletions
@@ -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));