1
0
mirror of https://github.com/mitb-archive/filebot synced 2025-03-09 13:59:49 -04:00

Make sure to not lock on Swing / AWT Window object

@see https://www.filebot.net/forums/viewtopic.php?f=11&t=5259&p=29747#p35519
This commit is contained in:
Reinhard Pointner 2018-08-28 19:25:18 +07:00
parent aa8125e7e4
commit b9572f4501
3 changed files with 17 additions and 17 deletions

View File

@ -161,9 +161,7 @@ class EpisodeListMatcher implements AutoCompleteMatcher {
synchronized (inputMemory) { synchronized (inputMemory) {
List<String> input = inputMemory.get(suggestion); List<String> input = inputMemory.get(suggestion);
if (input == null || suggestion == null || suggestion.isEmpty()) { if (input == null || suggestion == null || suggestion.isEmpty()) {
synchronized (parent) {
input = showMultiValueInputDialog(getQueryInputMessage("Please identify the following files:", "Enter series name:", files), suggestion, provider.getName(), parent); input = showMultiValueInputDialog(getQueryInputMessage("Please identify the following files:", "Enter series name:", files), suggestion, provider.getName(), parent);
}
inputMemory.put(suggestion, input); inputMemory.put(suggestion, input);
} }
@ -279,7 +277,7 @@ class EpisodeListMatcher implements AutoCompleteMatcher {
} }
// allow only one select dialog at a time // allow only one select dialog at a time
synchronized (parent) { synchronized (INPUT_DIALOG_LOCK) {
SwingUtilities.invokeAndWait(showSelectDialog); SwingUtilities.invokeAndWait(showSelectDialog);
SearchResult userSelection = showSelectDialog.get(); SearchResult userSelection = showSelectDialog.get();

View File

@ -229,9 +229,7 @@ class MovieMatcher implements AutoCompleteMatcher {
if (input == null || suggestion == null || suggestion.isEmpty()) { if (input == null || suggestion == null || suggestion.isEmpty()) {
File movieFolder = guessMovieFolder(movieFile); File movieFolder = guessMovieFolder(movieFile);
synchronized (parent) {
input = showInputDialog(getQueryInputMessage("Please identify the following files:", "Enter movie name:", movieFile), suggestion != null && suggestion.length() > 0 ? suggestion : getName(movieFile), movieFolder == null ? movieFile.getName() : String.join(" / ", movieFolder.getName(), movieFile.getName()), parent); input = showInputDialog(getQueryInputMessage("Please identify the following files:", "Enter movie name:", movieFile), suggestion != null && suggestion.length() > 0 ? suggestion : getName(movieFile), movieFolder == null ? movieFile.getName() : String.join(" / ", movieFolder.getName(), movieFile.getName()), parent);
}
inputMemory.put(suggestion, input); inputMemory.put(suggestion, input);
} }
@ -391,7 +389,7 @@ class MovieMatcher implements AutoCompleteMatcher {
return null; return null;
} }
synchronized (parent) { synchronized (INPUT_DIALOG_LOCK) {
SwingUtilities.invokeAndWait(showSelectDialog); SwingUtilities.invokeAndWait(showSelectDialog);
// cache selected value // cache selected value

View File

@ -226,7 +226,7 @@ public final class SwingUI {
return (frame.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0; return (frame.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0;
} }
public static List<String> showMultiValueInputDialog(final Object message, final String initialValue, final String title, final Component parent) { public static List<String> showMultiValueInputDialog(Object message, String initialValue, String title, Component parent) {
String input = showInputDialog(message, initialValue, title, parent); String input = showInputDialog(message, initialValue, title, parent);
if (input == null || input.isEmpty()) { if (input == null || input.isEmpty()) {
return emptyList(); return emptyList();
@ -252,15 +252,19 @@ public final class SwingUI {
return singletonList(input); return singletonList(input);
} }
public static String showInputDialog(final Object message, final String initialValue, final String title, final Component parent) { public static final Object INPUT_DIALOG_LOCK = new Object();
final StringBuilder buffer = new StringBuilder();
public static String showInputDialog(Object message, String initialValue, String title, Component parent) {
StringBuilder buffer = new StringBuilder();
synchronized (INPUT_DIALOG_LOCK) {
runOnEventDispatchThread(() -> { runOnEventDispatchThread(() -> {
Object value = JOptionPane.showInputDialog(parent, message, title, PLAIN_MESSAGE, null, null, initialValue); Object value = JOptionPane.showInputDialog(parent, message, title, PLAIN_MESSAGE, null, null, initialValue);
if (value != null) { if (value != null) {
buffer.append(value.toString().trim()); buffer.append(value.toString().trim());
} }
}); });
}
return buffer.length() == 0 ? null : buffer.toString(); return buffer.length() == 0 ? null : buffer.toString();
} }