* allow changing of mapped video files for subtitle upload
This commit is contained in:
parent
e29b07c186
commit
edfd04a6a9
|
@ -34,6 +34,7 @@ import javax.swing.Icon;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JList;
|
import javax.swing.JList;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
|
@ -41,6 +42,7 @@ import javax.swing.JTable;
|
||||||
import javax.swing.ListCellRenderer;
|
import javax.swing.ListCellRenderer;
|
||||||
import javax.swing.SwingWorker;
|
import javax.swing.SwingWorker;
|
||||||
import javax.swing.event.CellEditorListener;
|
import javax.swing.event.CellEditorListener;
|
||||||
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||||
import javax.swing.table.AbstractTableModel;
|
import javax.swing.table.AbstractTableModel;
|
||||||
import javax.swing.table.DefaultTableCellRenderer;
|
import javax.swing.table.DefaultTableCellRenderer;
|
||||||
import javax.swing.table.TableCellEditor;
|
import javax.swing.table.TableCellEditor;
|
||||||
|
@ -66,7 +68,7 @@ public class SubtitleUploadDialog extends JDialog {
|
||||||
|
|
||||||
private final OpenSubtitlesClient database;
|
private final OpenSubtitlesClient database;
|
||||||
|
|
||||||
private ExecutorService checkExecutorService;
|
private ExecutorService checkExecutorService = Executors.newFixedThreadPool(2);
|
||||||
private ExecutorService uploadExecutorService;
|
private ExecutorService uploadExecutorService;
|
||||||
|
|
||||||
public SubtitleUploadDialog(OpenSubtitlesClient database, Window owner) {
|
public SubtitleUploadDialog(OpenSubtitlesClient database, Window owner) {
|
||||||
|
@ -155,7 +157,7 @@ public class SubtitleUploadDialog extends JDialog {
|
||||||
SubtitleMapping mapping = model.getData()[table.convertRowIndexToModel(row)];
|
SubtitleMapping mapping = model.getData()[table.convertRowIndexToModel(row)];
|
||||||
|
|
||||||
Object originalIdentity = mapping.getIdentity();
|
Object originalIdentity = mapping.getIdentity();
|
||||||
File video = mapping.getVideo();
|
File video = mapping.getVideo() != null ? mapping.getVideo() : mapping.getSubtitle();
|
||||||
String input = showInputDialog("Enter movie / series name:", stripReleaseInfo(FileUtilities.getName(video)), String.format("%s/%s", video.getParentFile().getName(), video.getName()), SubtitleUploadDialog.this);
|
String input = showInputDialog("Enter movie / series name:", stripReleaseInfo(FileUtilities.getName(video)), String.format("%s/%s", video.getParentFile().getName(), video.getName()), SubtitleUploadDialog.this);
|
||||||
if (input != null && input.length() > 0) {
|
if (input != null && input.length() > 0) {
|
||||||
List<Movie> options = database.searchMovie(input, Locale.ENGLISH);
|
List<Movie> options = database.searchMovie(input, Locale.ENGLISH);
|
||||||
|
@ -165,15 +167,10 @@ public class SubtitleUploadDialog extends JDialog {
|
||||||
dialog.setVisible(true);
|
dialog.setVisible(true);
|
||||||
Movie selectedValue = dialog.getSelectedValue();
|
Movie selectedValue = dialog.getSelectedValue();
|
||||||
if (selectedValue != null) {
|
if (selectedValue != null) {
|
||||||
for (SubtitleMapping it : model.getData()) {
|
mapping.setIdentity(selectedValue);
|
||||||
if (originalIdentity == it.getIdentity() || (originalIdentity != null && originalIdentity.equals(it.getIdentity()))) {
|
|
||||||
if (model.isCellEditable(table.convertRowIndexToModel(row), table.convertColumnIndexToModel(column))) {
|
|
||||||
it.setIdentity(selectedValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mapping.getIdentity() != null && mapping.getLanguage() != null) {
|
if (mapping.getIdentity() != null && mapping.getLanguage() != null) {
|
||||||
mapping.setState(SubtitleMapping.Status.UploadReady);
|
mapping.setState(SubtitleMapping.Status.CheckPending);
|
||||||
|
startChecking();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,6 +183,60 @@ public class SubtitleUploadDialog extends JDialog {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
table.setDefaultEditor(File.class, new TableCellEditor() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean stopCellEditing() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldSelectCell(EventObject evt) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeCellEditorListener(CellEditorListener listener) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCellEditable(EventObject evt) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getCellEditorValue() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancelCellEditing() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addCellEditorListener(CellEditorListener evt) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
|
||||||
|
SubtitleMappingTableModel model = (SubtitleMappingTableModel) table.getModel();
|
||||||
|
SubtitleMapping mapping = model.getData()[table.convertRowIndexToModel(row)];
|
||||||
|
|
||||||
|
JFileChooser chooser = new JFileChooser(mapping.getSubtitle().getParentFile());
|
||||||
|
chooser.setFileFilter(new FileNameExtensionFilter("Video files", VIDEO_FILES.extensions()));
|
||||||
|
chooser.setMultiSelectionEnabled(false);
|
||||||
|
|
||||||
|
if (chooser.showOpenDialog(getWindow(SubtitleUploadDialog.this)) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
if (chooser.getSelectedFile() != null) {
|
||||||
|
mapping.setVideo(chooser.getSelectedFile());
|
||||||
|
mapping.setState(SubtitleMapping.Status.CheckPending);
|
||||||
|
startChecking();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,18 +256,16 @@ public class SubtitleUploadDialog extends JDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startChecking() {
|
public void startChecking() {
|
||||||
checkExecutorService = Executors.newFixedThreadPool(2);
|
|
||||||
|
|
||||||
SubtitleMapping[] data = ((SubtitleMappingTableModel) subtitleMappingTable.getModel()).getData();
|
SubtitleMapping[] data = ((SubtitleMappingTableModel) subtitleMappingTable.getModel()).getData();
|
||||||
for (SubtitleMapping it : data) {
|
for (SubtitleMapping it : data) {
|
||||||
if (it.getSubtitle() != null && it.getVideo() != null) {
|
if (it.getSubtitle() != null && it.getVideo() != null) {
|
||||||
|
if (it.getStatus() == SubtitleMapping.Status.CheckPending) {
|
||||||
checkExecutorService.submit(new CheckTask(it));
|
checkExecutorService.submit(new CheckTask(it));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
it.setState(SubtitleMapping.Status.IllegalInput);
|
it.setState(SubtitleMapping.Status.IllegalInput);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checkExecutorService.shutdown();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Action uploadAction = new AbstractAction("Upload", ResourceManager.getIcon("dialog.continue")) {
|
private final Action uploadAction = new AbstractAction("Upload", ResourceManager.getIcon("dialog.continue")) {
|
||||||
|
@ -474,7 +523,7 @@ public class SubtitleUploadDialog extends JDialog {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isCellEditable(int row, int column) {
|
public boolean isCellEditable(int row, int column) {
|
||||||
return (EnumSet.of(SubtitleMapping.Status.IdentificationRequired, SubtitleMapping.Status.UploadReady).contains(data[row].getStatus())) && (getColumnClass(column) == Movie.class || getColumnClass(column) == Language.class);
|
return (column == 0 || column == 1 || column == 3) && EnumSet.of(SubtitleMapping.Status.IdentificationRequired, SubtitleMapping.Status.UploadReady, SubtitleMapping.Status.IllegalInput).contains(data[row].getStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -551,6 +600,11 @@ public class SubtitleUploadDialog extends JDialog {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setVideo(File video) {
|
||||||
|
this.video = video;
|
||||||
|
firePropertyChange("video", null, this.video);
|
||||||
|
}
|
||||||
|
|
||||||
public void setIdentity(Object identity) {
|
public void setIdentity(Object identity) {
|
||||||
this.identity = identity;
|
this.identity = identity;
|
||||||
firePropertyChange("identity", null, this.identity);
|
firePropertyChange("identity", null, this.identity);
|
||||||
|
|
Loading…
Reference in New Issue