001package org.intellimate.izou.system.sound; 002 003import org.intellimate.izou.addon.AddOnModel; 004 005import java.time.LocalTime; 006import java.time.temporal.ChronoUnit; 007import java.util.ArrayList; 008import java.util.List; 009import java.util.concurrent.Future; 010 011/** 012 * @author LeanderK 013 * @version 1.0 014 */ 015public class MutingManager { 016 private final AddOnModel muting; 017 private final List<IzouSoundLine> mutingLines; 018 private final SoundManager soundManager; 019 private LocalTime limit = null; 020 private Future limitFuture; 021 022 public MutingManager(SoundManager soundManager, AddOnModel muting, IzouSoundLine line) { 023 this.muting = muting; 024 this.soundManager = soundManager; 025 mutingLines = new ArrayList<>(); 026 mutingLines.add(line); 027 soundManager.muteOthers(muting); 028 } 029 030 public AddOnModel getMuting() { 031 return muting; 032 } 033 034 public synchronized void add(IzouSoundLine line) { 035 if (limit != null) { 036 limit = null; 037 limitFuture.cancel(true); 038 } 039 mutingLines.add(line); 040 } 041 042 public synchronized void cancel() { 043 soundManager.unmute(); 044 } 045 046 public synchronized boolean isTimeOut() { 047 return limit != null && LocalTime.now().isAfter(limit); 048 } 049 050 public synchronized MutingManager remove(IzouSoundLine line) { 051 mutingLines.remove(line); 052 if (mutingLines.isEmpty()) { 053 limit = LocalTime.now().plus(2000L, ChronoUnit.MILLIS); 054 limitFuture = soundManager.getMain().getThreadPoolManager().getAddOnsThreadPool().submit(() -> { 055 try { 056 Thread.sleep(2000); 057 soundManager.unmute(); 058 } catch (InterruptedException ignored) { 059 } 060 }); 061 return this; 062 } 063 return this; 064 } 065}