Merge pull request #13900 from abextm/timetracking-formatfailure

timetracking: don't fail rendering overview with dead contracts
This commit is contained in:
Jordan
2021-07-20 07:02:25 +00:00
committed by GitHub
2 changed files with 67 additions and 19 deletions

View File

@@ -31,10 +31,10 @@ import java.time.Instant;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Stream; import java.util.stream.Stream;
import javax.annotation.Nullable;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.timetracking.clocks.ClockManager; import net.runelite.client.plugins.timetracking.clocks.ClockManager;
import net.runelite.client.plugins.timetracking.farming.CropState;
import net.runelite.client.plugins.timetracking.farming.FarmingContractManager; import net.runelite.client.plugins.timetracking.farming.FarmingContractManager;
import net.runelite.client.plugins.timetracking.farming.FarmingTracker; import net.runelite.client.plugins.timetracking.farming.FarmingTracker;
import net.runelite.client.plugins.timetracking.hunter.BirdHouseTracker; import net.runelite.client.plugins.timetracking.hunter.BirdHouseTracker;
@@ -124,14 +124,13 @@ class OverviewTabPanel extends TabContentPanel
} }
farmingOverviews.forEach((patchType, panel) -> farmingOverviews.forEach((patchType, panel) ->
updateItemPanel(panel, farmingTracker.getSummary(patchType), farmingTracker.getCompletionTime(patchType), null)); updateItemPanel(panel, farmingTracker.getSummary(patchType), farmingTracker.getCompletionTime(patchType)));
updateItemPanel(birdHouseOverview, birdHouseTracker.getSummary(), birdHouseTracker.getCompletionTime(), null); updateItemPanel(birdHouseOverview, birdHouseTracker.getSummary(), birdHouseTracker.getCompletionTime());
updateItemPanel(farmingContractOverview, farmingContractManager.getSummary(), farmingContractManager.getCompletionTime(), updateContractPanel();
farmingContractManager.getContractName());
} }
private void updateItemPanel(OverviewItemPanel panel, SummaryState summary, long completionTime, @Nullable String farmingContract) private void updateItemPanel(OverviewItemPanel panel, SummaryState summary, long completionTime)
{ {
switch (summary) switch (summary)
{ {
@@ -151,10 +150,7 @@ class OverviewTabPanel extends TabContentPanel
break; break;
} }
case EMPTY: case EMPTY:
panel.updateStatus(farmingContract == null ? "Empty" : farmingContract, Color.GRAY); panel.updateStatus("Empty", Color.GRAY);
break;
case OCCUPIED:
panel.updateStatus(farmingContract == null ? "" : farmingContract, Color.RED);
break; break;
case UNKNOWN: case UNKNOWN:
default: default:
@@ -162,4 +158,45 @@ class OverviewTabPanel extends TabContentPanel
break; break;
} }
} }
private void updateContractPanel()
{
switch (farmingContractManager.getSummary())
{
case COMPLETED:
case IN_PROGRESS:
switch (farmingContractManager.getContractCropState())
{
case HARVESTABLE:
case GROWING:
long duration = farmingContractManager.getCompletionTime() - Instant.now().getEpochSecond();
if (duration <= 0)
{
farmingContractOverview.updateStatus("Ready", ColorScheme.PROGRESS_COMPLETE_COLOR);
return;
}
farmingContractOverview.updateStatus("Ready " + getFormattedEstimate(duration, config.timeFormatMode()), Color.GRAY);
return;
case DISEASED:
farmingContractOverview.updateStatus("Diseased", CropState.DISEASED.getColor());
return;
case DEAD:
farmingContractOverview.updateStatus("Dead", CropState.DEAD.getColor());
return;
}
// fallthrough
case UNKNOWN:
default:
farmingContractOverview.updateStatus("Unknown", Color.GRAY);
return;
case EMPTY:
farmingContractOverview.updateStatus(farmingContractManager.getContractName(), Color.GRAY);
return;
case OCCUPIED:
farmingContractOverview.updateStatus(farmingContractManager.getContractName(), Color.RED);
return;
}
}
} }

View File

@@ -24,13 +24,16 @@
*/ */
package net.runelite.client.plugins.timetracking; package net.runelite.client.plugins.timetracking;
import java.time.DateTimeException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle; import java.time.format.TextStyle;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Locale; import java.util.Locale;
import javax.swing.JPanel; import javax.swing.JPanel;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class TabContentPanel extends JPanel public abstract class TabContentPanel extends JPanel
{ {
private static final DateTimeFormatter DATETIME_FORMATTER_24H = DateTimeFormatter.ofPattern("HH:mm"); private static final DateTimeFormatter DATETIME_FORMATTER_24H = DateTimeFormatter.ofPattern("HH:mm");
@@ -72,17 +75,25 @@ public abstract class TabContentPanel extends JPanel
} }
else else
{ {
StringBuilder sb = new StringBuilder(); try
LocalDateTime endTime = LocalDateTime.now().plus(remainingSeconds, ChronoUnit.SECONDS);
LocalDateTime currentTime = LocalDateTime.now();
if (endTime.getDayOfWeek() != currentTime.getDayOfWeek())
{ {
sb.append(endTime.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.getDefault())).append(" "); StringBuilder sb = new StringBuilder();
} LocalDateTime endTime = LocalDateTime.now().plus(remainingSeconds, ChronoUnit.SECONDS);
sb.append("at "); LocalDateTime currentTime = LocalDateTime.now();
sb.append(formatter.format(endTime)); if (endTime.getDayOfWeek() != currentTime.getDayOfWeek())
{
sb.append(endTime.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.getDefault())).append(" ");
}
sb.append("at ");
sb.append(formatter.format(endTime));
return sb.toString(); return sb.toString();
}
catch (DateTimeException e)
{
log.warn("error formatting absolute time: now + {}", remainingSeconds, e);
return "Invalid";
}
} }
} }