Merge pull request #13900 from abextm/timetracking-formatfailure
timetracking: don't fail rendering overview with dead contracts
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user