Skip to content

Commit 37d33ca

Browse files
committed
use async loadFile
1 parent 877306a commit 37d33ca

File tree

4 files changed

+42
-14
lines changed

4 files changed

+42
-14
lines changed

script/brave/work.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,7 @@ brave.on('timer', function (time)
2424
brave.push('wakeup')
2525
end
2626
end)
27+
28+
brave.on('loadFile', function (path)
29+
return util.loadFile(path)
30+
end)

script/pub/report.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
local pub = require 'pub.pub'
22
local await = require 'await'
3+
local util = require 'utility'
34

45
pub.on('log', function (params, brave)
56
log.raw(brave.id, params.level, params.msg, params.src, params.line, params.clock)

script/workspace/loading.lua

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ local config = require 'config.config'
66
local client = require 'client'
77
local util = require 'utility'
88
local furi = require 'file-uri'
9+
local pub = require 'pub'
910

1011
---@class workspace.loading
1112
---@field scp scope
@@ -75,14 +76,18 @@ function mt:loadFile(uri, libraryUri)
7576
end
7677
self.max = self.max + 1
7778
self:update()
79+
---@async
7880
self._stash[#self._stash+1] = function ()
79-
self.read = self.read + 1
8081
if files.getFile(uri) then
82+
self.read = self.read + 1
83+
self:update()
84+
self._cache[uri] = true
8185
files.addRef(uri)
8286
log.info(('Skip loaded file: %s'):format(uri))
8387
return
8488
end
85-
local content = util.loadFile(furi.decode(uri))
89+
local content = pub.awaitTask('loadFile', furi.decode(uri))
90+
self.read = self.read + 1
8691
self:update()
8792
if not content then
8893
return
@@ -102,14 +107,18 @@ function mt:loadFile(uri, libraryUri)
102107
elseif files.isDll(uri) then
103108
self.max = self.max + 1
104109
self:update()
110+
---@async
105111
self._stash[#self._stash+1] = function ()
106-
self.read = self.read + 1
107112
if files.getFile(uri) then
113+
self.read = self.read + 1
114+
self:update()
115+
self._cache[uri] = true
108116
files.addRef(uri)
109117
log.info(('Skip loaded file: %s'):format(uri))
110118
return
111119
end
112-
local content = util.loadFile(furi.decode(uri))
120+
local content = pub.awaitTask('loadFile', furi.decode(uri))
121+
self.read = self.read + 1
113122
self:update()
114123
if not content then
115124
return
@@ -129,28 +138,23 @@ function mt:loadFile(uri, libraryUri)
129138
await.delay()
130139
end
131140

132-
---@async
133141
function mt:loadStashed(max)
134142
for _ = 1, max do
135143
local loader = table.remove(self._stash)
136144
if not loader then
137-
return false
145+
return
138146
end
139-
loader()
140-
await.delay()
147+
await.call(loader)
141148
end
142-
return true
143149
end
144150

145151
---@async
146152
function mt:loadAll()
147-
while true do
153+
while self.read < self.max do
148154
log.info(('Loaded %d/%d files'):format(self.read, self.max))
149-
local suc = self:loadStashed(10)
155+
self:loadStashed(100)
150156
self:update()
151-
if not suc then
152-
break
153-
end
157+
await.sleep(0.1)
154158
end
155159
log.info('Loaded finish.')
156160
end

test/tclient/lclient.lua

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ local util = require 'utility'
33
local proto = require 'proto'
44
local await = require 'await'
55
local timer = require 'timer'
6+
local pub = require 'pub'
67

78
require 'provider'
89

@@ -36,6 +37,23 @@ function mt:_flushServer()
3637
files.reset()
3738
end
3839

40+
function mt:_localLoadFile()
41+
local awaitTask = pub.awaitTask
42+
---@async
43+
---@param name string
44+
---@param params any
45+
pub.awaitTask = function (name, params)
46+
if name == 'loadFile' then
47+
local path = params
48+
return util.loadFile(path)
49+
end
50+
return awaitTask(name, params)
51+
end
52+
self:gc(function ()
53+
pub.awaitTask = awaitTask
54+
end)
55+
end
56+
3957
---@async
4058
function mt:initialize(params)
4159
self:awaitRequest('initialize', params or {})
@@ -60,6 +78,7 @@ end
6078
function mt:start(callback)
6179
self:_fakeProto()
6280
self:_flushServer()
81+
self:_localLoadFile()
6382

6483
local finished = false
6584

0 commit comments

Comments
 (0)