pass browse UUID from UI for correct dispatching. Allow multiple concurrent browses

pull/53/head
Zlatin Balevsky 2020-10-20 06:02:22 +01:00
parent 5174810621
commit 0873d472e8
No known key found for this signature in database
GPG Key ID: A72832072D525E41
4 changed files with 12 additions and 10 deletions

View File

@ -25,7 +25,7 @@ class BrowseManager {
private final EventBus eventBus private final EventBus eventBus
private final Persona me private final Persona me
private final Executor browserThread = Executors.newSingleThreadExecutor() private final Executor browserThread = Executors.newCachedThreadPool()
BrowseManager(I2PConnector connector, EventBus eventBus, Persona me) { BrowseManager(I2PConnector connector, EventBus eventBus, Persona me) {
this.connector = connector this.connector = connector
@ -37,7 +37,7 @@ class BrowseManager {
browserThread.execute({ browserThread.execute({
Endpoint endpoint = null Endpoint endpoint = null
try { try {
eventBus.publish(new BrowseStatusEvent(host : e.host, status : BrowseStatus.CONNECTING)) eventBus.publish(new BrowseStatusEvent(host : e.host, status : BrowseStatus.CONNECTING, uuid: e.uuid))
endpoint = connector.connect(e.host.destination) endpoint = connector.connect(e.host.destination)
OutputStream os = endpoint.getOutputStream() OutputStream os = endpoint.getOutputStream()
os.write("BROWSE\r\n".getBytes(StandardCharsets.US_ASCII)) os.write("BROWSE\r\n".getBytes(StandardCharsets.US_ASCII))
@ -60,7 +60,7 @@ class BrowseManager {
boolean chat = headers.containsKey("Chat") && Boolean.parseBoolean(headers['Chat']) boolean chat = headers.containsKey("Chat") && Boolean.parseBoolean(headers['Chat'])
// at this stage, start pulling the results // at this stage, start pulling the results
UUID uuid = UUID.randomUUID() UUID uuid = e.uuid
eventBus.publish(new BrowseStatusEvent(host: e.host, status : BrowseStatus.FETCHING, eventBus.publish(new BrowseStatusEvent(host: e.host, status : BrowseStatus.FETCHING,
totalResults : results, uuid : uuid)) totalResults : results, uuid : uuid))
log.info("Starting to fetch $results results with uuid $uuid") log.info("Starting to fetch $results results with uuid $uuid")
@ -90,11 +90,11 @@ class BrowseManager {
} }
} }
eventBus.publish(new BrowseStatusEvent(host: e.host, status : BrowseStatus.FINISHED)) eventBus.publish(new BrowseStatusEvent(host: e.host, status : BrowseStatus.FINISHED, uuid : uuid))
} catch (Exception bad) { } catch (Exception bad) {
log.log(Level.WARNING, "browse failed", bad) log.log(Level.WARNING, "browse failed", bad)
eventBus.publish(new BrowseStatusEvent(host: e.host, status : BrowseStatus.FAILED)) eventBus.publish(new BrowseStatusEvent(host: e.host, status : BrowseStatus.FAILED, uuid : e.uuid))
} finally { } finally {
endpoint?.close() endpoint?.close()
} }

View File

@ -4,5 +4,6 @@ import com.muwire.core.Event
import com.muwire.core.Persona import com.muwire.core.Persona
class UIBrowseEvent extends Event { class UIBrowseEvent extends Event {
UUID uuid
Persona host Persona host
} }

View File

@ -30,7 +30,8 @@ class BrowseController {
void register() { void register() {
core.eventBus.register(BrowseStatusEvent.class, this) core.eventBus.register(BrowseStatusEvent.class, this)
core.eventBus.register(UIResultBatchEvent.class, this) core.eventBus.register(UIResultBatchEvent.class, this)
core.eventBus.publish(new UIBrowseEvent(host : model.host)) model.uuid = UUID.randomUUID()
core.eventBus.publish(new UIBrowseEvent(host : model.host, uuid: model.uuid))
} }
void mvcGroupDestroy() { void mvcGroupDestroy() {
@ -39,12 +40,12 @@ class BrowseController {
} }
void onBrowseStatusEvent(BrowseStatusEvent e) { void onBrowseStatusEvent(BrowseStatusEvent e) {
if (e.uuid != model.uuid)
return
runInsideUIAsync { runInsideUIAsync {
model.status = e.status model.status = e.status
if (e.status == BrowseStatus.FETCHING) { if (e.status == BrowseStatus.FETCHING)
model.totalResults = e.totalResults model.totalResults = e.totalResults
model.uuid = e.uuid
}
} }
} }

View File

@ -18,7 +18,7 @@ class BrowseModel {
@Observable boolean chatActionEnabled @Observable boolean chatActionEnabled
@Observable int totalResults @Observable int totalResults
@Observable int resultCount @Observable int resultCount
UUID uuid volatile UUID uuid
def results = [] def results = []
} }