File tree Expand file tree Collapse file tree 3 files changed +60
-3
lines changed
Expand file tree Collapse file tree 3 files changed +60
-3
lines changed Original file line number Diff line number Diff line change 1+ import PromiseQueue from '../../helpers/PromiseQueueHellper' ;
2+
13const fs = require ( 'fs' ) ;
24const path = require ( 'path' ) ;
35
46import FsHelper from '../../helpers/FsHelper' ;
57
6- const APP_FOLDER = 'YadroTimeTracker ' ;
8+ const APP_FOLDER = 'YadroTimeTracker_test ' ;
79const PROFILE_FOLDER = 'profile1' ;
810
911export default abstract class AbstractFileRepository < T = any > {
1012 folderWithProfile : string = 'profile1' ;
1113 fileName : string = 'defaultFileName.json' ;
1214
15+ writeFileQueue = new PromiseQueue ( ) ;
16+
1317 private static get appDataFolder ( ) {
1418 return process . env . APPDATA || '' ;
1519 }
@@ -37,6 +41,13 @@ export default abstract class AbstractFileRepository<T = any> {
3741
3842 public save ( data : T ) {
3943 FsHelper . mkdirIfNotExists ( AbstractFileRepository . profileFolder ) ;
40- return FsHelper . writeFile ( this . filePath , data ) ;
44+ this . writeFileQueue . add ( ( ) =>
45+ FsHelper . writeFile ( this . filePath , data ) . catch ( ( ) => {
46+ console . error (
47+ `AbstractFileRepository: can't save file ${ this . fileName } ${ this . filePath } `
48+ ) ;
49+ } )
50+ ) ;
51+ this . writeFileQueue . run ( ) ;
4152 }
4253}
Original file line number Diff line number Diff line change 1+ interface PromiseQueueItem {
2+ execute : ( ) => Promise < any > ;
3+ resolve : ( value : any ) => void ;
4+ reject : < T extends Error > ( err : T ) => void ;
5+ }
6+
7+ export default class PromiseQueue {
8+ private queue : PromiseQueueItem [ ] = [ ] ;
9+ private pendingPromise : boolean = false ;
10+
11+ add ( promise : ( ) => Promise < any > ) {
12+ return new Promise ( ( resolve , reject ) => {
13+ this . queue . push ( {
14+ execute : promise ,
15+ resolve,
16+ reject,
17+ } ) ;
18+ } ) ;
19+ }
20+
21+ run ( ) {
22+ if ( this . pendingPromise ) {
23+ return ;
24+ }
25+
26+ const item = this . queue . shift ( ) ;
27+
28+ if ( ! item ) {
29+ return ;
30+ }
31+
32+ this . pendingPromise = true ;
33+ item
34+ ?. execute ( )
35+ . then ( ( value ) => {
36+ item . resolve ( value ) ;
37+ } )
38+ . catch ( ( err ) => {
39+ item ?. reject ( err ) ;
40+ } )
41+ . finally ( ( ) => {
42+ this . pendingPromise = false ;
43+ this . run ( ) ;
44+ } ) ;
45+ }
46+ }
Original file line number Diff line number Diff line change @@ -183,7 +183,7 @@ export default class TaskStore {
183183 }
184184
185185 private setupReminder ( task ?: TaskModel ) {
186- if ( this . interval ) {
186+ if ( this . interval !== undefined ) {
187187 clearInterval ( this . interval ) ;
188188 }
189189 if ( task ) {
You can’t perform that action at this time.
0 commit comments