Skip to content

Commit c9c5786

Browse files
committedJul 4, 2022
Merge branch 'development' into main
2 parents 5d9b516 + 2f1dac6 commit c9c5786

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed
 

‎src/api/cfclient.nim

+5-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export CfApiError
88

99
const
1010
chunkSize = 10 ## how many ids a request should be chunked to.
11+
retries = 10 ## how often batch requests are retried until they succeed
1112

1213
proc sortTo[T, X](s: seq[T], x: seq[X], pred: proc (x: T): X): seq[T] =
1314
## sort `s` so that the order of its items matches `x`.
@@ -112,7 +113,7 @@ proc fetchAddonFiles*(projectId: int): Future[seq[CfAddonFile]] {.async.} =
112113
cfcache.putAddonFiles(data)
113114
return data
114115

115-
proc fetchAddonFilesChunks(fileIds: seq[int], fallback = true): Future[seq[CfAddonFile]] {.async.} =
116+
proc fetchAddonFilesChunks(fileIds: seq[int], tries = 1): Future[seq[CfAddonFile]] {.async.} =
116117
## get all addons with their given `fileIds`.
117118
if fileIds.len == 0:
118119
return @[]
@@ -122,8 +123,8 @@ proc fetchAddonFilesChunks(fileIds: seq[int], fallback = true): Future[seq[CfAdd
122123
return data
123124
except CfApiError as e:
124125
# fallback to looking up the ids individually
125-
if fallback:
126-
return all(fileIds.map((x) => fetchAddonFilesChunks(@[x], fallback = true))).await.flatten()
126+
if tries < retries:
127+
return all(fileIds.map((x) => fetchAddonFilesChunks(@[x], tries = tries + 1))).await.flatten()
127128
raise newException(CfApiError, e.msg)
128129

129130
proc fetchAddonFiles*(fileIds: seq[int], chunk = true): Future[seq[CfAddonFile]] {.async.} =
@@ -154,7 +155,7 @@ proc fetchAddonFiles*(fileIds: seq[int], chunk = true): Future[seq[CfAddonFile]]
154155
if fileIds.len != result.len:
155156
let currentIds = result.map((x) => x.fileId)
156157
let missingIds = fileIds.filter((x) => x notin currentIds)
157-
result = result.concat(all(missingIds.map((x) => fetchAddonFilesChunks(@[x], fallback = false))).await.flatten())
158+
result = result.concat(all(missingIds.map((x) => fetchAddonFilesChunks(@[x]))).await.flatten())
158159
# sort so the output is deterministic
159160
result = result.sortTo(fileIds, (x) => x.fileId)
160161

0 commit comments

Comments
 (0)
Please sign in to comment.