Skip to content

Commit

Permalink
feat(sync-copy-flow): enable copy directory now
Browse files Browse the repository at this point in the history
sync/copy: Copy files from source to dest, skipping already copied
  • Loading branch information
ElonH committed Jun 1, 2020
1 parent b6d3ffd commit 2512fc5
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
Expand Up @@ -11,3 +11,4 @@ export * from './async-post-flow';
export * from './operations-copyfile-flow';
export * from './operations-movefile-flow';
export * from './operations-deletefile-flow';
export * from './sync-copy-flow';
31 changes: 31 additions & 0 deletions src/app/@dataflow/rclone/sync-copy-flow.ts
@@ -0,0 +1,31 @@
import { IRcloneServer } from '../extra';
import { CombErr } from '../core';
import { AsyncPostFlow, AsyncPostFlowParamsNode } from './async-post-flow';

export interface SyncCopyFlowParamsNode 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;
}
export interface SyncCopyFlowInNode
extends SyncCopyFlowParamsNode,
IRcloneServer {}

export abstract class SyncCopyFlow extends AsyncPostFlow<
SyncCopyFlowInNode,
SyncCopyFlowParamsNode
> {
// public prerequest$: Observable<CombErr<SyncCopyFlowInNode>>;
protected cmd: string = 'sync/copy';
protected params = (
pre: CombErr<SyncCopyFlowInNode>
): SyncCopyFlowParamsNode => {
if (pre[1].length !== 0) return {} as any;
return {
srcFs: pre[0].srcFs,
dstFs: pre[0].dstFs,
};
};
protected cacheSupport: boolean = false;
}
34 changes: 34 additions & 0 deletions src/app/pages/manager/tasks/tasks.service.ts
Expand Up @@ -7,6 +7,8 @@ import {
OperationsMovefileFlowInNode,
OperationsDeletefileFlowInNode,
OperationsDeletefileFlow,
SyncCopyFlow,
SyncCopyFlowInNode,
} from 'src/app/@dataflow/rclone';
import {
ClipboardService,
Expand Down Expand Up @@ -185,6 +187,37 @@ export class TaskService {
});
}

private syncCopy$: SyncCopyFlow;
private deploySyncCopy() {
const outer = this;
const taskReal$ = outer.post$.pipe(filter((x) => x.oper === 'copy' && x.srcItem.IsDir));
this.syncCopy$ = new (class extends SyncCopyFlow {
public prerequest$ = taskReal$.pipe(
withLatestFrom(outer.connectService.listCmd$.verify(this.cmd)),
map(
([item, cmdNode]): CombErr<SyncCopyFlowInNode> => {
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('/')}`,
},
[],
];
}
)
);
})();
this.syncCopy$.deploy();
this.syncCopy$
.getOutput()
.pipe(zip(taskReal$))
.subscribe((x) => {
this.postAfter(...x);
});
}

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

0 comments on commit 2512fc5

Please sign in to comment.