xp tracker: don't add duplicate entries if nothing changes
This commit is contained in:
@@ -24,9 +24,11 @@
|
||||
*/
|
||||
package net.runelite.http.service.xp;
|
||||
|
||||
import net.runelite.http.api.hiscore.HiscoreResult;
|
||||
import net.runelite.http.api.xp.XpData;
|
||||
import net.runelite.http.service.xp.beans.XpEntity;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
@@ -35,4 +37,54 @@ public interface XpMapper
|
||||
XpMapper INSTANCE = Mappers.getMapper(XpMapper.class);
|
||||
|
||||
XpData xpEntityToXpData(XpEntity xpEntity);
|
||||
|
||||
@Mapping(source = "attack.experience", target = "attack_xp")
|
||||
@Mapping(source = "defence.experience", target = "defence_xp")
|
||||
@Mapping(source = "strength.experience", target = "strength_xp")
|
||||
@Mapping(source = "hitpoints.experience", target = "hitpoints_xp")
|
||||
@Mapping(source = "ranged.experience", target = "ranged_xp")
|
||||
@Mapping(source = "prayer.experience", target = "prayer_xp")
|
||||
@Mapping(source = "magic.experience", target = "magic_xp")
|
||||
@Mapping(source = "cooking.experience", target = "cooking_xp")
|
||||
@Mapping(source = "woodcutting.experience", target = "woodcutting_xp")
|
||||
@Mapping(source = "fletching.experience", target = "fletching_xp")
|
||||
@Mapping(source = "fishing.experience", target = "fishing_xp")
|
||||
@Mapping(source = "firemaking.experience", target = "firemaking_xp")
|
||||
@Mapping(source = "crafting.experience", target = "crafting_xp")
|
||||
@Mapping(source = "smithing.experience", target = "smithing_xp")
|
||||
@Mapping(source = "mining.experience", target = "mining_xp")
|
||||
@Mapping(source = "herblore.experience", target = "herblore_xp")
|
||||
@Mapping(source = "agility.experience", target = "agility_xp")
|
||||
@Mapping(source = "thieving.experience", target = "thieving_xp")
|
||||
@Mapping(source = "slayer.experience", target = "slayer_xp")
|
||||
@Mapping(source = "farming.experience", target = "farming_xp")
|
||||
@Mapping(source = "runecraft.experience", target = "runecraft_xp")
|
||||
@Mapping(source = "hunter.experience", target = "hunter_xp")
|
||||
@Mapping(source = "construction.experience", target = "construction_xp")
|
||||
|
||||
@Mapping(source = "overall.rank", target = "overall_rank")
|
||||
@Mapping(source = "attack.rank", target = "attack_rank")
|
||||
@Mapping(source = "defence.rank", target = "defence_rank")
|
||||
@Mapping(source = "strength.rank", target = "strength_rank")
|
||||
@Mapping(source = "hitpoints.rank", target = "hitpoints_rank")
|
||||
@Mapping(source = "ranged.rank", target = "ranged_rank")
|
||||
@Mapping(source = "prayer.rank", target = "prayer_rank")
|
||||
@Mapping(source = "magic.rank", target = "magic_rank")
|
||||
@Mapping(source = "cooking.rank", target = "cooking_rank")
|
||||
@Mapping(source = "woodcutting.rank", target = "woodcutting_rank")
|
||||
@Mapping(source = "fletching.rank", target = "fletching_rank")
|
||||
@Mapping(source = "fishing.rank", target = "fishing_rank")
|
||||
@Mapping(source = "firemaking.rank", target = "firemaking_rank")
|
||||
@Mapping(source = "crafting.rank", target = "crafting_rank")
|
||||
@Mapping(source = "smithing.rank", target = "smithing_rank")
|
||||
@Mapping(source = "mining.rank", target = "mining_rank")
|
||||
@Mapping(source = "herblore.rank", target = "herblore_rank")
|
||||
@Mapping(source = "agility.rank", target = "agility_rank")
|
||||
@Mapping(source = "thieving.rank", target = "thieving_rank")
|
||||
@Mapping(source = "slayer.rank", target = "slayer_rank")
|
||||
@Mapping(source = "farming.rank", target = "farming_rank")
|
||||
@Mapping(source = "runecraft.rank", target = "runecraft_rank")
|
||||
@Mapping(source = "hunter.rank", target = "hunter_rank")
|
||||
@Mapping(source = "construction.rank", target = "construction_rank")
|
||||
XpData hiscoreResultToXpData(HiscoreResult hiscoreResult);
|
||||
}
|
||||
|
||||
@@ -26,8 +26,10 @@ package net.runelite.http.service.xp;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.Instant;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.http.api.hiscore.HiscoreEndpoint;
|
||||
import net.runelite.http.api.hiscore.HiscoreResult;
|
||||
import net.runelite.http.api.xp.XpData;
|
||||
import net.runelite.http.service.hiscore.HiscoreResultBuilder;
|
||||
import net.runelite.http.service.hiscore.HiscoreService;
|
||||
import net.runelite.http.service.xp.beans.PlayerEntity;
|
||||
@@ -39,6 +41,7 @@ import org.sql2o.Connection;
|
||||
import org.sql2o.Sql2o;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class XpTrackerService
|
||||
{
|
||||
@Autowired
|
||||
@@ -61,6 +64,19 @@ public class XpTrackerService
|
||||
{
|
||||
PlayerEntity playerEntity = findOrCreatePlayer(username);
|
||||
|
||||
XpEntity currentXp = findXpAtTime(username, Instant.now());
|
||||
if (currentXp != null)
|
||||
{
|
||||
XpData hiscoreData = XpMapper.INSTANCE.hiscoreResultToXpData(hiscoreResult);
|
||||
XpData existingData = XpMapper.INSTANCE.xpEntityToXpData(currentXp);
|
||||
|
||||
if (hiscoreData.equals(existingData))
|
||||
{
|
||||
log.debug("Hiscore for {} already up to date", username);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
con.createQuery("insert into xp (player,attack_xp,defence_xp,strength_xp,hitpoints_xp,ranged_xp,prayer_xp,magic_xp,cooking_xp,woodcutting_xp,"
|
||||
+ "fletching_xp,fishing_xp,firemaking_xp,crafting_xp,smithing_xp,mining_xp,herblore_xp,agility_xp,thieving_xp,slayer_xp,farming_xp,"
|
||||
+ "runecraft_xp,hunter_xp,construction_xp,attack_rank,defence_rank,strength_rank,hitpoints_rank,ranged_rank,prayer_rank,magic_rank,"
|
||||
|
||||
Reference in New Issue
Block a user