Wait for process termination when sending notifications
This commit is contained in:
@@ -40,8 +40,8 @@ import java.nio.file.Path;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
@@ -215,14 +215,23 @@ public class Notifier
|
|||||||
|
|
||||||
executorService.submit(() ->
|
executorService.submit(() ->
|
||||||
{
|
{
|
||||||
final boolean success = sendCommand(commands)
|
try
|
||||||
.map(process -> process.exitValue() == 0)
|
|
||||||
.orElse(false);
|
|
||||||
|
|
||||||
if (!success)
|
|
||||||
{
|
{
|
||||||
sendTrayNotification(title, message, type);
|
Process notificationProcess = sendCommand(commands);
|
||||||
|
|
||||||
|
boolean exited = notificationProcess.waitFor(500, TimeUnit.MILLISECONDS);
|
||||||
|
if (exited && notificationProcess.exitValue() == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
catch (IOException | InterruptedException ex)
|
||||||
|
{
|
||||||
|
log.debug("error sending notification", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// fall back to tray notification
|
||||||
|
sendTrayNotification(title, message, type);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,25 +267,21 @@ public class Notifier
|
|||||||
commands.add(script);
|
commands.add(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendCommand(commands);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<Process> sendCommand(final List<String> commands)
|
|
||||||
{
|
|
||||||
log.debug("Sending command {}", commands);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return Optional.of(new ProcessBuilder(commands.toArray(new String[commands.size()]))
|
sendCommand(commands);
|
||||||
.redirectErrorStream(true)
|
|
||||||
.start());
|
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ex)
|
||||||
{
|
{
|
||||||
log.warn(null, ex);
|
log.warn("error sending notification", ex);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Optional.empty();
|
private static Process sendCommand(final List<String> commands) throws IOException
|
||||||
|
{
|
||||||
|
return new ProcessBuilder(commands.toArray(new String[commands.size()]))
|
||||||
|
.redirectErrorStream(true)
|
||||||
|
.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void storeIcon()
|
private void storeIcon()
|
||||||
|
|||||||
Reference in New Issue
Block a user