Преглед на файлове

feat(nsis-compat-updater): expose download progress event

evshiron преди 8 години
родител
ревизия
db359ab028
променени са 2 файла, в които са добавени 20 реда и са изтрити 3 реда
  1. 15 0
      packages/nsis-compat-updater/README.md
  2. 5 3
      packages/nsis-compat-updater/src/lib/NsisCompatUpdater.ts

+ 15 - 0
packages/nsis-compat-updater/README.md

@@ -40,6 +40,17 @@ interface IVersion {
     updaters: IUpdater[];
 }
 
+interface IStreamProgress {
+    percentage: number;
+    transferred: number;
+    length: number;
+    remaining: number;
+    eta: number;
+    runtime: number;
+    delta: number;
+    speed: number;
+}
+
 ```
 
 ### `new NsisCompatUpdater(feed: string, version: string, arch: 'x86' | 'x64')`
@@ -48,6 +59,10 @@ interface IVersion {
 const updater = new NsisCompatUpdater(feed, version, arch);
 ```
 
+### `updater.onDownloadProgress.subscribe((state: IStreamProgress) => void)`
+
+### `updater.onDownloadProgress.unsubscribe((state: IStreamProgress) => void)`
+
 ### `updater.checkForUpdates(): Promise<IVersion | null>`
 
 Returns an instance of `IVersion` if new version is available, otherwise `null`.

+ 5 - 3
packages/nsis-compat-updater/src/lib/NsisCompatUpdater.ts

@@ -13,6 +13,8 @@ const debug = require('debug/src/browser')('nsis-compat-updater');
 const got = require('got');
 const progressStream = require('progress-stream');
 
+import { Event } from './Event';
+
 interface IInstaller {
     arch: string;
     path: string;
@@ -54,6 +56,8 @@ interface IStreamProgress {
 
 export class NsisCompatUpdater {
 
+    public onDownloadProgress: Event<IStreamProgress> = new Event('downloadProgress');
+
     protected versionInfo: IVersionInfo;
 
     constructor(protected seed: string, protected currentVersion: string, protected currentArch: 'x86' | 'x64') {
@@ -269,9 +273,7 @@ export class NsisCompatUpdater {
             time: 1000,
         });
 
-        progress.on('progress', onProgress ? onProgress : (state: IStreamProgress) => {
-            debug('in handleProgress', 'state.speed', state.speed);
-        });
+        progress.on('progress', this.onDownloadProgress.trigger);
 
         await new Promise((resolve, reject) => {
             stream.pipe(progress)