better handling of start time beginning in the future
This commit is contained in:
		@@ -380,17 +380,17 @@ public class LoadingBar {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   private static void showLoadingBar(LocalTime startTime, LocalTime endTime) {
 | 
					   private static void showLoadingBar(LocalTime startTime, LocalTime endTime) {
 | 
				
			||||||
      long initialMinutes = startTime.until(endTime, ChronoUnit.MINUTES);
 | 
					      long totalMinutes = startTime.until(endTime, ChronoUnit.MINUTES);
 | 
				
			||||||
      System.out.print(minutesToTimeString(initialMinutes) + " gesamt; Endzeit: " + TIME_FORMATTER.format(endTime) + "\n");
 | 
					      long passedMinutes = startTime.until(LocalTime.now().truncatedTo(ChronoUnit.MINUTES), ChronoUnit.MINUTES);
 | 
				
			||||||
      long passedMinutes = startTime.until(LocalTime.now(), ChronoUnit.MINUTES);
 | 
					      if (passedMinutes > totalMinutes) {
 | 
				
			||||||
      if (passedMinutes > initialMinutes) {
 | 
					         passedMinutes = totalMinutes;
 | 
				
			||||||
         passedMinutes = initialMinutes;
 | 
					 | 
				
			||||||
      } else if (passedMinutes < 0) {
 | 
					      } else if (passedMinutes < 0) {
 | 
				
			||||||
         System.out.println(fillLoadingBar(initialMinutes, 0, false));
 | 
					         var now = LocalTime.now().truncatedTo(ChronoUnit.SECONDS);
 | 
				
			||||||
         return;
 | 
					         System.out.println("!ACHTUNG! Startzeit \"" + startTime + ":00\" liegt in der Zukunft von jetzt an (" + now + ") gesehen.");
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      while (passedMinutes < initialMinutes) {
 | 
					      System.out.println(minutesToTimeString(totalMinutes) + " gesamt; Endzeit: " + TIME_FORMATTER.format(endTime));
 | 
				
			||||||
         System.out.print(fillLoadingBar(initialMinutes, passedMinutes, true));
 | 
					      while (passedMinutes < totalMinutes) {
 | 
				
			||||||
 | 
					         System.out.print(fillLoadingBar(totalMinutes, passedMinutes, true));
 | 
				
			||||||
         try {
 | 
					         try {
 | 
				
			||||||
            var now = LocalTime.now();
 | 
					            var now = LocalTime.now();
 | 
				
			||||||
            var oneMinuteLater = now.plusMinutes(1).truncatedTo(ChronoUnit.MINUTES);
 | 
					            var oneMinuteLater = now.plusMinutes(1).truncatedTo(ChronoUnit.MINUTES);
 | 
				
			||||||
@@ -402,15 +402,15 @@ public class LoadingBar {
 | 
				
			|||||||
         }
 | 
					         }
 | 
				
			||||||
         passedMinutes++;
 | 
					         passedMinutes++;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      System.out.println(fillLoadingBar(initialMinutes, passedMinutes, false));
 | 
					      System.out.println(fillLoadingBar(totalMinutes, passedMinutes, false));
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   private static String fillLoadingBar(long initialMinutes, long passedMinutes, boolean progressive) {
 | 
					   private static String fillLoadingBar(long totalMinutes, long passedMinutes, boolean progressive) {
 | 
				
			||||||
 | 
					      var nonNegativePassedMinutes = passedMinutes < 0 ? 0 : passedMinutes;
 | 
				
			||||||
      BigDecimal wholePercentage = BigDecimal.valueOf(100)
 | 
					      BigDecimal wholePercentage = BigDecimal.valueOf(100)
 | 
				
			||||||
         .multiply(BigDecimal.valueOf(passedMinutes) // kind of reverse dreisatz to avoid to have e.g. 99.9999 instead of 100 %
 | 
					         .multiply( // kind of reverse dreisatz to avoid to have e.g. 99.9999 instead of 100 %
 | 
				
			||||||
         .divide(BigDecimal.valueOf(initialMinutes), MathContext.DECIMAL64));
 | 
					            BigDecimal.valueOf(nonNegativePassedMinutes).divide(BigDecimal.valueOf(totalMinutes), MathContext.DECIMAL64));
 | 
				
			||||||
      long remainingMinutes = initialMinutes - passedMinutes;
 | 
					 | 
				
			||||||
      int numberOfEquals = wholePercentage.intValue();
 | 
					      int numberOfEquals = wholePercentage.intValue();
 | 
				
			||||||
      var sb = new StringBuilder("[");
 | 
					      var sb = new StringBuilder("[");
 | 
				
			||||||
      for (int i = 0; i < LINE_LENGTH; i++) {
 | 
					      for (int i = 0; i < LINE_LENGTH; i++) {
 | 
				
			||||||
@@ -420,8 +420,9 @@ public class LoadingBar {
 | 
				
			|||||||
            sb.append("-");
 | 
					            sb.append("-");
 | 
				
			||||||
         }
 | 
					         }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      long remainingMinutes = totalMinutes - nonNegativePassedMinutes;
 | 
				
			||||||
      sb.append("] ").append(PERCENTAGE_FORMAT.format(wholePercentage)).append("% ")
 | 
					      sb.append("] ").append(PERCENTAGE_FORMAT.format(wholePercentage)).append("% ")
 | 
				
			||||||
          .append(minutesToTimeString(passedMinutes)).append(" - ").append(minutesToTimeString(remainingMinutes));
 | 
					          .append(minutesToTimeString(nonNegativePassedMinutes)).append(" - ").append(minutesToTimeString(remainingMinutes));
 | 
				
			||||||
      if (progressive) {
 | 
					      if (progressive) {
 | 
				
			||||||
         sb.append("\r");
 | 
					         sb.append("\r");
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user