loottracker: Run database related code in the subscription (#1780)

This commit is contained in:
Owain van Brakel
2019-10-14 11:18:31 +02:00
committed by Kyle
parent 4b592bfb99
commit 9e8f165601

View File

@@ -352,7 +352,6 @@ public class LootTrackerPlugin extends Plugin
@Override
protected void startUp() throws Exception
{
Completable.fromAction(this::initDatabase).subscribeOn(Schedulers.io()).subscribe();
addSubscriptions();
ignoredItems = Text.fromCSV(config.getIgnoredItems());
@@ -372,106 +371,110 @@ public class LootTrackerPlugin extends Plugin
clientToolbar.addNavigation(navButton);
AccountSession accountSession = sessionManager.getAccountSession();
if (accountSession != null || this.localPersistence)
{
clientThread.invokeLater(() ->
Completable.fromAction(this::initDatabase)
.subscribeOn(Schedulers.io())
.subscribe(() ->
{
switch (client.getGameState())
AccountSession accountSession = sessionManager.getAccountSession();
if (accountSession != null || this.localPersistence)
{
case STARTING:
case UNKNOWN:
return false;
}
executor.submit(() ->
{
if (this.syncPanel && lootTrackerClient != null)
{
if (accountSession != null)
{
lootTrackerClient = new LootTrackerClient(accountSession.getUuid());
}
try
{
lootRecords = lootTrackerClient.get();
}
catch (IOException e)
{
log.debug("Unable to look up loot", e);
return;
}
log.info("Loaded {} remote data entries", lootRecords.size());
}
if (this.localPersistence)
{
DSLContext dslContext = databaseManager.getDsl();
Result<Record> records = dslContext
.selectDistinct(
LOOTTRACKEREVENTS.UNIQUEID
).select(
LOOTTRACKEREVENTS.EVENTID,
LOOTTRACKEREVENTS.TYPE,
LOOTTRACKEREVENTS.TIME,
USER.USERNAME
)
.from(LOOTTRACKEREVENTS)
.join(LOOTTRACKERLINK).on(LOOTTRACKERLINK.EVENTUNIQUEID.eq(LOOTTRACKEREVENTS.UNIQUEID))
.join(USER).on(LOOTTRACKERLINK.USERUNIQUEID.eq(USER.UNIQUEID))
.fetch();
for (Record record : records)
{
Result<Record2<Integer, Integer>> drops = dslContext
.select(
LOOTTRACKERLOOT.ITEMID,
LOOTTRACKERLOOT.QUANTITY
)
.from(LOOTTRACKERLOOT)
.join(LOOTTRACKERLINK).on(LOOTTRACKERLOOT.UNIQUEID.eq(LOOTTRACKERLINK.DROPUNIQUEID))
.where(LOOTTRACKERLINK.EVENTUNIQUEID.eq(record.getValue(LOOTTRACKEREVENTS.UNIQUEID)))
.fetch();
final List<GameItem> gameItems = new ArrayList<>();
for (Record drop : drops)
{
GameItem gameItem = new GameItem();
gameItem.setId(drop.getValue(LOOTTRACKERLOOT.ITEMID));
gameItem.setQty(drop.getValue(LOOTTRACKERLOOT.QUANTITY));
gameItems.add(gameItem);
}
LootRecord lootRecord = new LootRecord();
lootRecord.setEventId(record.getValue(LOOTTRACKEREVENTS.EVENTID));
lootRecord.setUsername(record.getValue(USER.USERNAME));
lootRecord.setType(record.getValue(LOOTTRACKEREVENTS.TYPE, LootRecordType.class));
lootRecord.setDrops(gameItems);
lootRecord.setTime(record.getValue(LOOTTRACKEREVENTS.TIME).toInstant());
lootRecords.add(lootRecord);
}
if (lootRecords.size() > 0)
{
log.info("Loaded {} locally stored loot records", lootRecords.size());
}
}
Collection<LootRecord> finalLootRecords = lootRecords;
clientThread.invokeLater(() ->
{
Collection<LootTrackerRecord> records = convertToLootTrackerRecord(finalLootRecords);
SwingUtilities.invokeLater(() -> panel.addRecords(records));
switch (client.getGameState())
{
case STARTING:
case UNKNOWN:
return false;
}
executor.submit(() ->
{
if (this.syncPanel && lootTrackerClient != null)
{
if (accountSession != null)
{
lootTrackerClient = new LootTrackerClient(accountSession.getUuid());
}
try
{
lootRecords = lootTrackerClient.get();
}
catch (IOException e)
{
log.debug("Unable to look up loot", e);
return;
}
log.info("Loaded {} remote data entries", lootRecords.size());
}
if (this.localPersistence)
{
DSLContext dslContext = databaseManager.getDsl();
Result<Record> records = dslContext
.selectDistinct(
LOOTTRACKEREVENTS.UNIQUEID
).select(
LOOTTRACKEREVENTS.EVENTID,
LOOTTRACKEREVENTS.TYPE,
LOOTTRACKEREVENTS.TIME,
USER.USERNAME
)
.from(LOOTTRACKEREVENTS)
.join(LOOTTRACKERLINK).on(LOOTTRACKERLINK.EVENTUNIQUEID.eq(LOOTTRACKEREVENTS.UNIQUEID))
.join(USER).on(LOOTTRACKERLINK.USERUNIQUEID.eq(USER.UNIQUEID))
.fetch();
for (Record record : records)
{
Result<Record2<Integer, Integer>> drops = dslContext
.select(
LOOTTRACKERLOOT.ITEMID,
LOOTTRACKERLOOT.QUANTITY
)
.from(LOOTTRACKERLOOT)
.join(LOOTTRACKERLINK).on(LOOTTRACKERLOOT.UNIQUEID.eq(LOOTTRACKERLINK.DROPUNIQUEID))
.where(LOOTTRACKERLINK.EVENTUNIQUEID.eq(record.getValue(LOOTTRACKEREVENTS.UNIQUEID)))
.fetch();
final List<GameItem> gameItems = new ArrayList<>();
for (Record drop : drops)
{
GameItem gameItem = new GameItem();
gameItem.setId(drop.getValue(LOOTTRACKERLOOT.ITEMID));
gameItem.setQty(drop.getValue(LOOTTRACKERLOOT.QUANTITY));
gameItems.add(gameItem);
}
LootRecord lootRecord = new LootRecord();
lootRecord.setEventId(record.getValue(LOOTTRACKEREVENTS.EVENTID));
lootRecord.setUsername(record.getValue(USER.USERNAME));
lootRecord.setType(record.getValue(LOOTTRACKEREVENTS.TYPE, LootRecordType.class));
lootRecord.setDrops(gameItems);
lootRecord.setTime(record.getValue(LOOTTRACKEREVENTS.TIME).toInstant());
lootRecords.add(lootRecord);
}
if (lootRecords.size() > 0)
{
log.info("Loaded {} locally stored loot records", lootRecords.size());
}
}
Collection<LootRecord> finalLootRecords = lootRecords;
clientThread.invokeLater(() ->
{
Collection<LootTrackerRecord> records = convertToLootTrackerRecord(finalLootRecords);
SwingUtilities.invokeLater(() -> panel.addRecords(records));
});
});
return true;
});
});
return true;
}
});
}
}
@Override