@@ -8,6 +8,7 @@ var log = require('loglevel');
88var cache = require ( './cache' ) ;
99var config = require ( './config' ) ;
1010var client = require ( './leetcode_client' ) ;
11+ var queue = require ( './queue' ) ;
1112var h = require ( './helper' ) ;
1213
1314var KEY_USER = '.user' ;
@@ -37,17 +38,38 @@ var core = {};
3738core . getProblems = function ( cb ) {
3839 var problems = cache . get ( KEY_PROBLEMS ) ;
3940 if ( problems ) {
40- log . debug ( 'loading from all .json' ) ;
41+ log . debug ( 'loading from problems .json' ) ;
4142 return cb ( null , problems ) ;
4243 }
4344
44- log . debug ( 'running getProblems' ) ;
4545 var user = this . getUser ( ) ;
46- client . getProblems ( 'algorithms' , user , function ( e , problems ) {
46+ var CATEGORIES = [ 'algorithms' , 'database' , 'shell' ] ;
47+ var KEY_TMP = '.tmp' ;
48+
49+ var doTask = function ( category , taskDone ) {
50+ log . debug ( category + ': running getProblems' ) ;
51+ client . getProblems ( category , user , function ( e , problems ) {
52+ if ( e ) {
53+ log . debug ( category + ': failed to getProblems: ' + e ) ;
54+ } else {
55+ log . debug ( category + ': getProblems got ' +
56+ problems . length + ' problems' ) ;
57+ problems = cache . get ( KEY_TMP ) . concat ( problems ) ;
58+ cache . set ( KEY_TMP , problems ) ;
59+ }
60+ return taskDone ( e ) ;
61+ } ) ;
62+ } ;
63+
64+ cache . set ( KEY_TMP , [ ] ) ;
65+ queue . run ( CATEGORIES , doTask , function ( e ) {
4766 if ( e ) return cb ( e ) ;
4867
4968 saveUser ( user ) ;
69+ var problems = cache . get ( KEY_TMP ) ;
5070 cache . set ( KEY_PROBLEMS , problems ) ;
71+ cache . del ( KEY_TMP ) ;
72+
5173 return cb ( null , problems ) ;
5274 } ) ;
5375} ;
0 commit comments