From 4bccd7d6ce453e0b81f4f3cc21acafa106b74a5d Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Thu, 28 Jun 2018 15:55:52 +0200
Subject: [PATCH] [enh] sync: refactoring (force typage + rename method)

---
 app/modules/crawler/lib/sync.ts             |  9 +++++----
 app/modules/crawler/lib/sync/ChunkGetter.ts |  2 +-
 app/modules/crawler/lib/sync/Watcher.ts     | 18 ++++++++++++------
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/app/modules/crawler/lib/sync.ts b/app/modules/crawler/lib/sync.ts
index 7e50d0b78..02dc0cf56 100644
--- a/app/modules/crawler/lib/sync.ts
+++ b/app/modules/crawler/lib/sync.ts
@@ -56,10 +56,10 @@ export class Synchroniser extends stream.Duplex {
 
     // Wrapper to also push event stream
     this.watcher = new EventWatcher(interactive ? new MultimeterWatcher() : new LoggerWatcher(this.logger))
-    this.watcher.on('downloadChange', (pct: number) => this.push({ download: pct }))
-    this.watcher.on('savedChange',    (pct: number) => this.push({ saved: pct }))
-    this.watcher.on('appliedChange',  (pct: number) => this.push({ applied: pct }))
-    this.watcher.on('certChange',     (pct: number) => this.push({ sbx_cert: pct }))
+    this.watcher.onEvent('downloadChange', (pct: number) => this.push({ download: pct }))
+    this.watcher.onEvent('storageChange',  (pct: number) => this.push({ saved: pct }))
+    this.watcher.onEvent('appliedChange',  (pct: number) => this.push({ applied: pct }))
+    this.watcher.onEvent('sbxChange',      (pct: number) => this.push({ sandbox: pct }))
 
     if (interactive) {
       this.logger.mute();
@@ -300,6 +300,7 @@ export class Synchroniser extends stream.Duplex {
 
       // Finished blocks
       this.watcher.downloadPercent(100.0);
+      this.watcher.storagePercent(100.0);
       this.watcher.appliedPercent(100.0);
 
       if (logInterval) {
diff --git a/app/modules/crawler/lib/sync/ChunkGetter.ts b/app/modules/crawler/lib/sync/ChunkGetter.ts
index 3d534196c..ed9c01cce 100644
--- a/app/modules/crawler/lib/sync/ChunkGetter.ts
+++ b/app/modules/crawler/lib/sync/ChunkGetter.ts
@@ -199,7 +199,7 @@ export class ChunkGetter {
                     return block
                   }))
                   this.writtenChunks++
-                  this.watcher.savedPercent(Math.round(this.writtenChunks / this.numberOfChunksToDownload * 100));
+                  this.watcher.storagePercent(Math.round(this.writtenChunks / this.numberOfChunksToDownload * 100));
                 }
 
                 // Returns a promise of file content
diff --git a/app/modules/crawler/lib/sync/Watcher.ts b/app/modules/crawler/lib/sync/Watcher.ts
index e4ad34c28..ae11418a7 100644
--- a/app/modules/crawler/lib/sync/Watcher.ts
+++ b/app/modules/crawler/lib/sync/Watcher.ts
@@ -5,12 +5,14 @@ const multimeter   = require('multimeter')
 export interface Watcher {
   writeStatus(str: string): void
   downloadPercent(pct?: number): number
-  savedPercent(pct?: number): number
+  storagePercent(pct?: number): number
   appliedPercent(pct?: number): number
   sbxPercent(pct?: number): number
   end(): void
 }
 
+export type EventName = 'downloadChange'|'storageChange'|'appliedChange'|'sbxChange'
+
 export class EventWatcher extends events.EventEmitter implements Watcher {
 
   constructor(private innerWatcher:Watcher) {
@@ -25,8 +27,8 @@ export class EventWatcher extends events.EventEmitter implements Watcher {
     return this.change('downloadChange', (pct) => this.innerWatcher.downloadPercent(pct), pct)
   }
 
-  savedPercent(pct?: number): number {
-    return this.change('savedChange', (pct) => this.innerWatcher.savedPercent(pct), pct)
+  storagePercent(pct?: number): number {
+    return this.change('storageChange', (pct) => this.innerWatcher.storagePercent(pct), pct)
   }
 
   appliedPercent(pct?: number): number {
@@ -37,7 +39,7 @@ export class EventWatcher extends events.EventEmitter implements Watcher {
     return this.change('sbxChange', (pct) => this.innerWatcher.sbxPercent(pct), pct)
   }
 
-  change(changeName: string, method: (pct?: number) => number, pct?: number) {
+  change(changeName: EventName, method: (pct?: number) => number, pct?: number) {
     if (pct !== undefined && method() < pct) {
       this.emit(changeName, pct || 0)
     }
@@ -47,6 +49,10 @@ export class EventWatcher extends events.EventEmitter implements Watcher {
   end(): void {
     this.innerWatcher.end()
   }
+
+  onEvent(e: EventName, cb: (pct: number) => void) {
+    this.on(e, cb)
+  }
 }
 
 export class MultimeterWatcher implements Watcher {
@@ -102,7 +108,7 @@ export class MultimeterWatcher implements Watcher {
     return this.downloadBar.percent(pct)
   }
 
-  savedPercent(pct:number) {
+  storagePercent(pct:number) {
     return this.savedBar.percent(pct)
   }
 
@@ -159,7 +165,7 @@ export class LoggerWatcher implements Watcher {
     return this.change('downPct', pct)
   }
 
-  savedPercent(pct:number) {
+  storagePercent(pct:number) {
     return this.change('savedPct', pct)
   }
 
-- 
GitLab