Skip to content

Commit

Permalink
feat(sync-move-flow): enable move directory now
Browse files Browse the repository at this point in the history
  • Loading branch information
ElonH committed Jun 1, 2020
1 parent 2512fc5 commit 7e7dd78
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/app/@dataflow/rclone/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ export * from './operations-copyfile-flow';
export * from './operations-movefile-flow';
export * from './operations-deletefile-flow';
export * from './sync-copy-flow';
export * from './sync-move-flow';
30 changes: 30 additions & 0 deletions src/app/@dataflow/rclone/sync-move-flow.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { IRcloneServer } from '../extra';
import { CombErr } from '../core';
import { AsyncPostFlow, AsyncPostFlowParamsNode } from './async-post-flow';

export interface SyncMoveFlowParamsNode extends AsyncPostFlowParamsNode {
/** a remote name string eg "drive:src" for the source */
srcFs: string;
/** a remote name string eg "drive:dst" for the destination */
dstFs: string;
/** delete empty src directories if set */
deleteEmptySrcDirs: boolean;
}
export interface SyncMoveFlowInNode extends SyncMoveFlowParamsNode, IRcloneServer {}

export abstract class SyncMoveFlow extends AsyncPostFlow<
SyncMoveFlowInNode,
SyncMoveFlowParamsNode
> {
// public prerequest$: Observable<CombErr<SyncMoveFlowInNode>>;
protected cmd: string = 'sync/move';
protected params = (pre: CombErr<SyncMoveFlowInNode>): SyncMoveFlowParamsNode => {
if (pre[1].length !== 0) return {} as any;
return {
srcFs: pre[0].srcFs,
dstFs: pre[0].dstFs,
deleteEmptySrcDirs: pre[0].deleteEmptySrcDirs,
};
};
protected cacheSupport: boolean = false;
}
35 changes: 35 additions & 0 deletions src/app/pages/manager/tasks/tasks.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import {
OperationsDeletefileFlow,
SyncCopyFlow,
SyncCopyFlowInNode,
SyncMoveFlow,
SyncMoveFlowInNode,
} from 'src/app/@dataflow/rclone';
import {
ClipboardService,
Expand Down Expand Up @@ -218,6 +220,38 @@ export class TaskService {
});
}

private syncMove$: SyncMoveFlow;
private deploySyncMove() {
const outer = this;
const taskReal$ = outer.post$.pipe(filter((x) => x.oper === 'move' && x.srcItem.IsDir));
this.syncMove$ = new (class extends SyncMoveFlow {
public prerequest$ = taskReal$.pipe(
withLatestFrom(outer.connectService.listCmd$.verify(this.cmd)),
map(
([item, cmdNode]): CombErr<SyncMoveFlowInNode> => {
if (cmdNode[1].length !== 0) return [{}, cmdNode[1]] as any;
return [
{
...cmdNode[0],
srcFs: `${item.srcRemote}:${item.srcItem.Path}`,
dstFs: `${item.dst.remote}:${[item.dst.path, item.srcItem.Name].join('/')}`,
deleteEmptySrcDirs: false,
},
[],
];
}
)
);
})();
this.syncMove$.deploy();
this.syncMove$
.getOutput()
.pipe(zip(taskReal$))
.subscribe((x) => {
this.postAfter(...x);
});
}

private detailTrigger = new Subject<number>();
public detail$: TasksPoolFlow;
private deployDetail() {
Expand Down Expand Up @@ -257,6 +291,7 @@ export class TaskService {
this.deployMoveFile();
this.deployDeleteFile();
this.deploySyncCopy();
this.deploySyncMove();
this.deployDetail();
}
}

0 comments on commit 7e7dd78

Please sign in to comment.