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.function.Function;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import net.runelite.api.ItemID;
import net.runelite.client.game.ItemManager;
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.FarmingTracker;
import net.runelite.client.plugins.timetracking.hunter.BirdHouseTracker;
@@ -124,14 +124,13 @@ class OverviewTabPanel extends TabContentPanel
}
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(farmingContractOverview, farmingContractManager.getSummary(), farmingContractManager.getCompletionTime(),
farmingContractManager.getContractName());
updateItemPanel(birdHouseOverview, birdHouseTracker.getSummary(), birdHouseTracker.getCompletionTime());
updateContractPanel();
}
private void updateItemPanel(OverviewItemPanel panel, SummaryState summary, long completionTime, @Nullable String farmingContract)
private void updateItemPanel(OverviewItemPanel panel, SummaryState summary, long completionTime)
{
switch (summary)
{
@@ -151,10 +150,7 @@ class OverviewTabPanel extends TabContentPanel
break;
}
case EMPTY:
panel.updateStatus(farmingContract == null ? "Empty" : farmingContract, Color.GRAY);
break;
case OCCUPIED:
panel.updateStatus(farmingContract == null ? "" : farmingContract, Color.RED);
panel.updateStatus("Empty", Color.GRAY);
break;
case UNKNOWN:
default:
@@ -162,4 +158,45 @@ class OverviewTabPanel extends TabContentPanel
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;
import java.time.DateTimeException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.time.temporal.ChronoUnit;
import java.util.Locale;
import javax.swing.JPanel;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class TabContentPanel extends JPanel
{
private static final DateTimeFormatter DATETIME_FORMATTER_24H = DateTimeFormatter.ofPattern("HH:mm");
@@ -72,17 +75,25 @@ public abstract class TabContentPanel extends JPanel
}
else
{
StringBuilder sb = new StringBuilder();
LocalDateTime endTime = LocalDateTime.now().plus(remainingSeconds, ChronoUnit.SECONDS);
LocalDateTime currentTime = LocalDateTime.now();
if (endTime.getDayOfWeek() != currentTime.getDayOfWeek())
try
{
sb.append(endTime.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.getDefault())).append(" ");
}
sb.append("at ");
sb.append(formatter.format(endTime));
StringBuilder sb = new StringBuilder();
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(" ");
}
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";
}
}
}