/
BoxFetchListData.js
122 lines (94 loc) · 2.1 KB
/
BoxFetchListData.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import t from '../../lib/i18n-translate.js'
import f from 'active-lodash'
import xhr from 'xhr'
import setUrlParams from '../../lib/set-params-for-url.coffee'
import url from 'url'
import qs from 'qs'
var parseUrl = url.parse
var buildUrl = url.format
var buildQuery = qs.stringify
var parseQuery = qs.parse
module.exports = {
loadJob(job, callback) {
job.state = 'loading'
var currentQuery = parseQuery(
parseUrl(window.location.toString()).query
)
var parsedUrl = parseUrl(job.resource.list_meta_data_url, true)
delete parsedUrl.search
var url = setUrlParams(
buildUrl(parsedUrl),
currentQuery
)
xhr.get(
{
url: url,
json: true
},
(err, res, json) => {
if(err || res.statusCode > 400) {
// job.state = 'initial'
callback({
status: 'failure',
job: job
})
return
}
// job.resource.list_meta_data = json
// job.state = 'done'
callback({
status: 'success',
job: job,
json: json
})
}
)
},
loadJobs(jobQueue, callback) {
var pendingJobs = f.filter(
jobQueue,
(j) => j.state == 'initial'
)
f.each(
pendingJobs,
(j) => this.loadJob(j, callback)
)
},
todo(jobQueue, resources) {
var pendingJobs = f.filter(
jobQueue,
(j) => j.state != 'done'
)
var isPending = (resourceId) => {
var resource = f.find(
pendingJobs,
(j) => j.uuid == resourceId
)
return (resource ? true : false)
}
var resourcesTodo = f.filter(
resources,
(r) => !isPending(r.uuid) && !r.list_meta_data
)
var candidates = []
if(pendingJobs.length < 10) {
candidates = f.slice(
resourcesTodo,
0,
10 - pendingJobs.length
)
}
return pendingJobs.concat(
f.map(
candidates,
(c) => {
return {
state: 'initial',
uuid: c.uuid,
resource: c
}
}
)
)
}
}