package org.lodder.subtools.multisubdownloader;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import org.lodder.subtools.multisubdownloader.actions.FileListAction;
import org.lodder.subtools.multisubdownloader.framework.Container;
import org.lodder.subtools.multisubdownloader.framework.event.Emitter;
import org.lodder.subtools.multisubdownloader.gui.Menu;
import org.lodder.subtools.multisubdownloader.gui.actions.search.FileGuiSearchAction;
import org.lodder.subtools.multisubdownloader.gui.actions.search.TextGuiSearchAction;
import org.lodder.subtools.multisubdownloader.gui.dialog.Cancelable;
import org.lodder.subtools.multisubdownloader.gui.dialog.MappingEpisodeNameDialog;
import org.lodder.subtools.multisubdownloader.gui.dialog.PreferenceDialog;
import org.lodder.subtools.multisubdownloader.gui.dialog.ProgressDialog;
import org.lodder.subtools.multisubdownloader.gui.dialog.RenameDialog;
import org.lodder.subtools.multisubdownloader.gui.dialog.progress.fileindexer.IndexingProgressDialog;
import org.lodder.subtools.multisubdownloader.gui.dialog.progress.search.SearchProgressDialog;
import org.lodder.subtools.multisubdownloader.gui.extra.MemoryFolderChooser;
import org.lodder.subtools.multisubdownloader.gui.extra.MyPopupMenu;
import org.lodder.subtools.multisubdownloader.gui.extra.PopupListener;
import org.lodder.subtools.multisubdownloader.gui.extra.progress.StatusLabel;
import org.lodder.subtools.multisubdownloader.gui.extra.progress.StatusMessenger;
import org.lodder.subtools.multisubdownloader.gui.extra.table.SearchColumnName;
import org.lodder.subtools.multisubdownloader.gui.extra.table.CustomTable;
import org.lodder.subtools.multisubdownloader.gui.extra.table.VideoTableModel;
import org.lodder.subtools.multisubdownloader.gui.panels.LoggingPanel;
import org.lodder.subtools.multisubdownloader.gui.panels.ResultPanel;
import org.lodder.subtools.multisubdownloader.gui.panels.SearchFileInputPanel;
import org.lodder.subtools.multisubdownloader.gui.panels.SearchPanel;
import org.lodder.subtools.multisubdownloader.gui.panels.SearchTextInputPanel;
import org.lodder.subtools.multisubdownloader.gui.workers.DownloadWorker;
import org.lodder.subtools.multisubdownloader.gui.workers.RenameWorker;
import org.lodder.subtools.multisubdownloader.lib.ReleaseFactory;
import org.lodder.subtools.multisubdownloader.lib.SubtitleSelectionGUI;
import org.lodder.subtools.multisubdownloader.lib.control.subtitles.Filtering;
import org.lodder.subtools.multisubdownloader.settings.SettingsControl;
import org.lodder.subtools.multisubdownloader.settings.model.Settings;
import org.lodder.subtools.multisubdownloader.subtitleproviders.SubtitleProviderStore;
import org.lodder.subtools.multisubdownloader.util.Export;
import org.lodder.subtools.multisubdownloader.util.Import;
import org.lodder.subtools.sublibrary.ConfigProperties;
import org.lodder.subtools.sublibrary.Manager;
import org.lodder.subtools.sublibrary.ManagerException;
import org.lodder.subtools.sublibrary.OsCheck;
import org.lodder.subtools.sublibrary.OsCheck.OSType;
import org.lodder.subtools.sublibrary.model.Subtitle;
import org.lodder.subtools.sublibrary.model.VideoType;
import org.lodder.subtools.sublibrary.util.Files;
import org.lodder.subtools.sublibrary.util.StringUtils;
import org.lodder.subtools.sublibrary.util.XmlFileFilter;
import org.lodder.subtools.sublibrary.util.http.HttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class GUI extends JFrame implements PropertyChangeListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private final Container app;
private StatusLabel lblStatus;
private final SettingsControl settingsControl;
private ProgressDialog progressDialog;
private MyPopupMenu popupMenu;
private SearchPanel pnlSearchFile;
private SearchPanel pnlSearchText;
private JPanel pnlLogging;
private SearchTextInputPanel pnlSearchTextInput;
private SearchFileInputPanel pnlSearchFileInput;
private Menu menuBar;
private SearchProgressDialog searchProgressDialog;
private IndexingProgressDialog fileIndexerProgressDialog;
private static final Logger LOGGER = LoggerFactory.getLogger(GUI.class);
/**
* Create the application.
*/
public GUI(final SettingsControl settingsControl, Container app) {
this.app = app;
setTitle(ConfigProperties.getInstance().getProperty("name"));
/*
* setIconImage(Toolkit.getDefaultToolkit().getImage(
* getClass().getResource("/resources/Bierdopje_bigger.png")));
*/
this.settingsControl = settingsControl;
initialize();
restoreScreenSettings();
pnlSearchFile.getResultPanel().disableButtons();
pnlSearchText.getResultPanel().disableButtons();
checkUpdate(false);
initPopupMenu();
}
private void checkUpdate(final boolean showNoUpdate) {
Manager manager = (Manager) this.app.make("Manager");
UpdateAvailableDropbox u = new UpdateAvailableDropbox(manager);
if (u.checkProgram(settingsControl.getSettings().getUpdateCheckPeriod())) {
final JEditorPane editorPane = new JEditorPane();
editorPane.setPreferredSize(new Dimension(800, 50));
editorPane.setEditable(false);
editorPane.setContentType("text/html");
editorPane.setText("<html>" + Messages.getString("UpdateAppAvailable") + "!: </br><A HREF="
+ u.getUpdateUrl() + ">" + u.getUpdateUrl() + "</a></html>");
editorPane.addHyperlinkListener(new HyperlinkListener() {
@Override
public void hyperlinkUpdate(final HyperlinkEvent hyperlinkEvent) {
if (hyperlinkEvent.getEventType() == HyperlinkEvent.EventType.ACTIVATED
&& Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(hyperlinkEvent.getURL().toURI());
} catch (Exception e) {
LOGGER.error("", e);
}
}
}
});
JOptionPane.showMessageDialog(this, editorPane,
ConfigProperties.getInstance().getProperty("name"), JOptionPane.INFORMATION_MESSAGE);
} else if (showNoUpdate) {
JOptionPane.showMessageDialog(this, Messages.getString("MainWindow.NoUpdateAvailable")
+ ConfigProperties.getInstance().getProperty("version")
+ ConfigProperties.getInstance().getProperty(Messages.getString("MainWindow.Version")),
ConfigProperties.getInstance().getProperty("name"), JOptionPane.INFORMATION_MESSAGE);
}
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
MemoryFolderChooser.getInstance().setMemory(settingsControl.getSettings().getLastOutputDir());
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
close();
}
});
setBounds(100, 100, 925, 680);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final GridBagLayout gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[] {448, 0};
gridBagLayout.rowHeights = new int[] {0, 125, 15, 0};
gridBagLayout.columnWeights = new double[] {1.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[] {1.0, 1.0, 0.0, Double.MIN_VALUE};
getContentPane().setLayout(gridBagLayout);
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
GridBagConstraints gbc_tabbedPane = new GridBagConstraints();
gbc_tabbedPane.insets = new Insets(0, 0, 5, 0);
gbc_tabbedPane.fill = GridBagConstraints.BOTH;
gbc_tabbedPane.gridx = 0;
gbc_tabbedPane.gridy = 0;
getContentPane().add(tabbedPane, gbc_tabbedPane);
createFileSearchPanel();
tabbedPane.addTab(Messages.getString("MainWindow.SearchOnFile"), null, pnlSearchFile, null);
createTextSearchPanel();
tabbedPane.addTab(Messages.getString("MainWindow.SearchOnName"), null, pnlSearchText, null);
pnlLogging = new LoggingPanel();
final GridBagConstraints gbc_pnlLogging = new GridBagConstraints();
gbc_pnlLogging.fill = GridBagConstraints.BOTH;
gbc_pnlLogging.insets = new Insets(0, 0, 5, 0);
gbc_pnlLogging.gridx = 0;
gbc_pnlLogging.gridy = 1;
getContentPane().add(pnlLogging, gbc_pnlLogging);
lblStatus = new StatusLabel("");
StatusMessenger.instance.addListener(lblStatus);
final GridBagConstraints gbc_lblStatus = new GridBagConstraints();
gbc_lblStatus.anchor = GridBagConstraints.SOUTHWEST;
gbc_lblStatus.gridx = 0;
gbc_lblStatus.gridy = 2;
getContentPane().add(lblStatus, gbc_lblStatus);
createMenu();
setJMenuBar(menuBar);
}
private void createMenu() {
menuBar = new Menu();
menuBar.setShowOnlyFound(settingsControl.getSettings().isOptionsShowOnlyFound());
menuBar.setFileQuitAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
close();
}
});
menuBar.setViewFilenameAction(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
if (menuBar.isViewFilenameSelected()) {
customTable.unhideColumn(SearchColumnName.FILENAME);
} else {
customTable.hideColumn(SearchColumnName.FILENAME);
}
}
});
menuBar.setViewTypeAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
if (menuBar.isViewTitleSelected()) {
customTable.unhideColumn(SearchColumnName.TYPE);
} else {
customTable.hideColumn(SearchColumnName.TYPE);
}
}
});
menuBar.setViewTitleAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
if (menuBar.isViewTitleSelected()) {
customTable.unhideColumn(SearchColumnName.TITLE);
} else {
customTable.hideColumn(SearchColumnName.TITLE);
}
}
});
menuBar.setViewSeasonAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
if (menuBar.isViewSeasonSelected()) {
customTable.unhideColumn(SearchColumnName.SEASON);
} else {
customTable.hideColumn(SearchColumnName.SEASON);
}
}
});
menuBar.setViewEpisodeAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
if (menuBar.isViewEpisodeSelected()) {
customTable.unhideColumn(SearchColumnName.EPISODE);
} else {
customTable.hideColumn(SearchColumnName.EPISODE);
}
}
});
menuBar.setViewShowOnlyFoundAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
settingsControl.getSettings().setOptionsShowOnlyFound(menuBar.isShowOnlyFound());
((VideoTableModel) customTable.getModel()).setShowOnlyFound(settingsControl.getSettings()
.isOptionsShowOnlyFound());
}
});
menuBar.setViewClearLogAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
((LoggingPanel) pnlLogging).setLogText("");
}
});
menuBar.setEditRenameTVAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final RenameDialog rDialog =
new RenameDialog(getThis(), settingsControl.getSettings(), VideoType.EPISODE, (Manager) app.make("Manager"));
rDialog.setVisible(true);
}
});
menuBar.setEditRenameMovieAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final RenameDialog rDialog =
new RenameDialog(getThis(), settingsControl.getSettings(), VideoType.MOVIE, (Manager) app.make("Manager"));
rDialog.setVisible(true);
}
});
menuBar.setEditPreferencesAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final PreferenceDialog pDialog =
new PreferenceDialog(getThis(), settingsControl, (Emitter) app.make("EventEmitter"), (Manager) app.make("Manager"));
pDialog.setVisible(true);
}
});
menuBar.setTranslateShowNamesAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
showTranslateShowNames();
}
});
menuBar.setExportExclusionsAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
exportList(Export.ExportListType.EXCLUDE);
}
});
menuBar.setImportExclusionsAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
importList(Import.ImportListType.EXCLUDE);
}
});
menuBar.setExportPreferencesAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
exportList(Export.ExportListType.PREFERENCES);
}
});
menuBar.setImportPreferencesAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
importList(Import.ImportListType.PREFERENCES);
}
});
menuBar.setImportTranslationsAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
importList(Import.ImportListType.TRANSLATE);
}
});
menuBar.setExportTranslationsAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
exportList(Export.ExportListType.TRANSLATE);
}
});
menuBar.setCheckUpdateAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
checkUpdate(true);
}
});
menuBar.setAboutAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
showAbout();
}
});
}
private void createTextSearchPanel() {
Settings settings = this.settingsControl.getSettings();
/* resolve the SubtitleProviderStore from the Container */
SubtitleProviderStore subtitleProviderStore =
(SubtitleProviderStore) this.app.make("SubtitleProviderStore");
TextGuiSearchAction searchAction =
new TextGuiSearchAction(this, settings, subtitleProviderStore);
ResultPanel resultPanel = new ResultPanel();
pnlSearchTextInput = new SearchTextInputPanel();
pnlSearchText = new SearchPanel();
pnlSearchText.setResultPanel(resultPanel);
pnlSearchText.setInputPanel(pnlSearchTextInput);
resultPanel.showSelectFoundSubtitlesButton();
resultPanel.setTable(createSubtitleTable());
searchAction.setSearchPanel(pnlSearchText);
searchAction.setReleaseFactory(new ReleaseFactory(settings, (Manager) app.make("Manager")));
searchAction.setFiltering(new Filtering(settings));
searchAction.setSubtitleSelection(new SubtitleSelectionGUI(settings, this));
pnlSearchTextInput.setSearchAction(searchAction);
resultPanel.setDownloadAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
downloadText();
}
});
}
private CustomTable createSubtitleTable() {
CustomTable subtitleTable = new CustomTable();
subtitleTable.setModel(VideoTableModel.getDefaultSubtitleTableModel());
final RowSorter<TableModel> sorterSubtitle =
new TableRowSorter<TableModel>(subtitleTable.getModel());
subtitleTable.setRowSorter(sorterSubtitle);
subtitleTable.hideColumn(SearchColumnName.OBJECT);
return subtitleTable;
}
private void createFileSearchPanel() {
Settings settings = this.settingsControl.getSettings();
/* resolve the SubtitleProviderStore from the Container */
SubtitleProviderStore subtitleProviderStore =
(SubtitleProviderStore) this.app.make("SubtitleProviderStore");
FileGuiSearchAction searchAction =
new FileGuiSearchAction(this, settings, subtitleProviderStore);
ResultPanel resultPanel = new ResultPanel();
pnlSearchFileInput = new SearchFileInputPanel();
pnlSearchFileInput.setRecursiveSelected(settings.isOptionRecursive());
pnlSearchFile = new SearchPanel();
pnlSearchFile.setResultPanel(resultPanel);
pnlSearchFile.setInputPanel(pnlSearchFileInput);
resultPanel.setTable(createVideoTable());
searchAction.setFileListAction(new FileListAction(this.settingsControl.getSettings()));
searchAction.setReleaseFactory(new ReleaseFactory(this.settingsControl.getSettings(), (Manager) app.make("Manager")));
searchAction.setFiltering(new Filtering(this.settingsControl.getSettings()));
searchAction.setSearchPanel(pnlSearchFile);
pnlSearchFileInput.setSelectFolderAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
selectIncomingFolder();
}
});
pnlSearchFileInput.setSearchAction(searchAction);
resultPanel.setDownloadAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
download();
}
});
resultPanel.setMoveAction(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final int response =
JOptionPane.showConfirmDialog(
getThis(),
Messages.getString("MainWindow.OnlyMoveToLibraryStructure"), Messages.getString("MainWindow.Confirm"), //$NON-NLS-2$
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (response == JOptionPane.YES_OPTION) {
rename();
}
}
});
}
private CustomTable createVideoTable() {
CustomTable customTable = new CustomTable();
customTable.setModel(VideoTableModel.getDefaultVideoTableModel());
((VideoTableModel) customTable.getModel()).setShowOnlyFound(settingsControl.getSettings()
.isOptionsShowOnlyFound());
((VideoTableModel) customTable.getModel()).setSubtitleSelection(new SubtitleSelectionGUI(
settingsControl.getSettings(), this));
final RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(customTable.getModel());
customTable.setRowSorter(sorter);
customTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
int columnId = customTable.getColumnIdByName(SearchColumnName.FOUND);
customTable.getColumnModel().getColumn(columnId).setResizable(false);
customTable.getColumnModel().getColumn(columnId).setPreferredWidth(100);
customTable.getColumnModel().getColumn(columnId).setMaxWidth(100);
columnId = customTable.getColumnIdByName(SearchColumnName.SELECT);
customTable.getColumnModel().getColumn(columnId).setResizable(false);
customTable.getColumnModel().getColumn(columnId).setPreferredWidth(85);
customTable.getColumnModel().getColumn(columnId).setMaxWidth(85);
customTable.hideColumn(SearchColumnName.OBJECT);
customTable.hideColumn(SearchColumnName.SEASON);
customTable.hideColumn(SearchColumnName.EPISODE);
customTable.hideColumn(SearchColumnName.TYPE);
customTable.hideColumn(SearchColumnName.TITLE);
return customTable;
}
private void restoreScreenSettings() {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
if (settingsControl.getSettings().getScreenSettings().isHideEpisode()) {
customTable.hideColumn(SearchColumnName.EPISODE);
} else {
menuBar.setViewEpisodeSelected(true);
customTable.unhideColumn(SearchColumnName.EPISODE);
}
if (settingsControl.getSettings().getScreenSettings().isHideFilename()) {
customTable.hideColumn(SearchColumnName.FILENAME);
} else {
menuBar.setViewFileNameSelected(true);
customTable.unhideColumn(SearchColumnName.FILENAME);
}
if (settingsControl.getSettings().getScreenSettings().isHideSeason()) {
customTable.hideColumn(SearchColumnName.SEASON);
} else {
menuBar.setViewSeasonSelected(true);
customTable.unhideColumn(SearchColumnName.SEASON);
}
if (settingsControl.getSettings().getScreenSettings().isHideType()) {
customTable.hideColumn(SearchColumnName.TYPE);
} else {
menuBar.setViewTitleSelected(true);
customTable.unhideColumn(SearchColumnName.TYPE);
}
if (settingsControl.getSettings().getScreenSettings().isHideTitle()) {
customTable.hideColumn(SearchColumnName.TITLE);
} else {
menuBar.setViewTitleSelected(true);
customTable.unhideColumn(SearchColumnName.TITLE);
}
}
private void initPopupMenu() {
popupMenu = new MyPopupMenu();
JMenuItem menuItem = new JMenuItem(Messages.getString("MainWindow.Copy"));
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final CustomTable t = (CustomTable) popupMenu.getInvoker();
final DefaultTableModel model = (DefaultTableModel) t.getModel();
int col = t.columnAtPoint(popupMenu.getClickLocation());
int row = t.rowAtPoint(popupMenu.getClickLocation());
try {
StringSelection selection = new StringSelection((String) model.getValueAt(row, col));
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, null);
} catch (HeadlessException e) {
LOGGER.error("initPopupMenu",e);
}
}
});
popupMenu.add(menuItem);
// add the listener to the jtable
MouseListener popupListener = new PopupListener(popupMenu);
// add the listener specifically to the header
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
CustomTable subtitleTable = pnlSearchText.getResultPanel().getTable();
customTable.addMouseListener(popupListener);
customTable.getTableHeader().addMouseListener(popupListener);
subtitleTable.addMouseListener(popupListener);
subtitleTable.getTableHeader().addMouseListener(popupListener);
}
protected void showTranslateShowNames() {
final MappingEpisodeNameDialog tDialog = new MappingEpisodeNameDialog(this, settingsControl);
tDialog.setVisible(true);
}
private void showAbout() {
JOptionPane.showConfirmDialog(this, Messages.getString("MainWindow.AboutTitle"),
ConfigProperties.getInstance().getProperty("name"), JOptionPane.CLOSED_OPTION);
}
protected void rename() {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
RenameWorker renameWorker = new RenameWorker(customTable, settingsControl.getSettings(), (Manager) this.app.make("Manager"));
renameWorker.addPropertyChangeListener(this);
pnlSearchFile.getResultPanel().enableButtons();
progressDialog = new ProgressDialog(this, renameWorker);
progressDialog.setVisible(true);
renameWorker.execute();
}
private void download() {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
DownloadWorker downloadWorker = new DownloadWorker(customTable, settingsControl.getSettings(), (Manager) this.app.make("Manager"), this);
downloadWorker.addPropertyChangeListener(this);
pnlSearchFile.getResultPanel().disableButtons();
progressDialog = new ProgressDialog(this, downloadWorker);
progressDialog.setVisible(true);
downloadWorker.execute();
}
private void downloadText() {
CustomTable subtitleTable = pnlSearchText.getResultPanel().getTable();
final VideoTableModel model = (VideoTableModel) subtitleTable.getModel();
File path =
MemoryFolderChooser.getInstance().selectDirectory(getContentPane(),
Messages.getString("MainWindow.SelectFolder"));
for (int i = 0; i < model.getRowCount(); i++) {
if ((Boolean) model.getValueAt(i, subtitleTable.getColumnIdByName(SearchColumnName.SELECT))) {
final Subtitle subtitle =
(Subtitle) model
.getValueAt(i, subtitleTable.getColumnIdByName(SearchColumnName.OBJECT));
String filename = "";
if (!subtitle.getFilename().endsWith(".srt")) filename = subtitle.getFilename() + ".srt";
if (OsCheck.getOperatingSystemType() == OSType.Windows)
filename = StringUtils.removeIllegalWindowsChars(filename);
try {
if (HttpClient.isUrl(subtitle.getDownloadlink())) {
Manager manager = (Manager) this.app.make("Manager");
manager.store(subtitle.getDownloadlink(), new File(path, filename));
} else {
Files
.copy(new File(subtitle.getDownloadlink()), new File(path, subtitle.getFilename()));
}
} catch (IOException | ManagerException e) {
LOGGER.error("downloadText", e);
}
}
}
}
protected JFrame getThis() {
return this;
}
public void showErrorMessage(String message) {
JOptionPane.showConfirmDialog(this, message,
ConfigProperties.getInstance().getProperty("name"), JOptionPane.CLOSED_OPTION,
JOptionPane.ERROR_MESSAGE);
}
private void importList(Import.ImportListType listType) {
// Create a file chooser
final JFileChooser fc = new JFileChooser();
XmlFileFilter filter = new XmlFileFilter();
fc.setAcceptAllFileFilterUsed(false);
fc.setFileFilter(filter);
final int returnVal = fc.showOpenDialog(getThis());
if (returnVal == JFileChooser.APPROVE_OPTION) {
Import i = new Import(getThis(), settingsControl);
i.doImport(listType, fc.getSelectedFile());
}
}
private void exportList(Export.ExportListType listType) {
// Create a file chooser
final JFileChooser fc = new JFileChooser();
XmlFileFilter filter = new XmlFileFilter();
fc.setAcceptAllFileFilterUsed(false);
fc.setFileFilter(filter);
final int returnVal = fc.showSaveDialog(getThis());
if (returnVal == JFileChooser.APPROVE_OPTION) {
Export e = new Export(settingsControl);
File f = fc.getSelectedFile();
if (!XmlFileFilter.getExtension(f).equalsIgnoreCase("xml")) {
f = new File(f.toString() + ".xml");
}
e.doExport(listType, f);
}
}
private void selectIncomingFolder() {
File path =
MemoryFolderChooser.getInstance().selectDirectory(getThis(),
Messages.getString("MainWindow.SelectFolder"));
pnlSearchFileInput.setIncomingPath(path.getAbsolutePath());
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (event.getSource() instanceof DownloadWorker) {
final DownloadWorker downloadWorker = (DownloadWorker) event.getSource();
if (downloadWorker.isDone()) {
pnlSearchFile.getResultPanel().enableButtons();
progressDialog.setVisible(false);
} else {
final int progress = downloadWorker.getProgress();
progressDialog.updateProgress(progress);
StatusMessenger.instance.message(Messages.getString("MainWindow.StatusDownload"));
}
} else if (event.getSource() instanceof RenameWorker) {
final RenameWorker renameWorker = (RenameWorker) event.getSource();
if (renameWorker.isDone()) {
pnlSearchFile.getResultPanel().enableButtons();
progressDialog.setVisible(false);
} else {
final int progress = renameWorker.getProgress();
progressDialog.updateProgress(progress);
StatusMessenger.instance.message(Messages.getString("MainWindow.StatusRename"));
}
}
}
private void close() {
settingsControl.getSettings().setOptionRecursive(pnlSearchFileInput.isRecursiveSelected());
storeScreenSettings();
settingsControl.store();
}
private void storeScreenSettings() {
CustomTable customTable = pnlSearchFile.getResultPanel().getTable();
settingsControl.getSettings().getScreenSettings()
.setHideEpisode(customTable.isHideColumn(SearchColumnName.EPISODE));
settingsControl.getSettings().getScreenSettings()
.setHideFilename(customTable.isHideColumn(SearchColumnName.FILENAME));
settingsControl.getSettings().getScreenSettings()
.setHideSeason(customTable.isHideColumn(SearchColumnName.SEASON));
settingsControl.getSettings().getScreenSettings()
.setHideTitle(customTable.isHideColumn(SearchColumnName.TITLE));
settingsControl.getSettings().getScreenSettings()
.setHideType(customTable.isHideColumn(SearchColumnName.TYPE));
}
public ProgressDialog setProgressDialog(Cancelable worker) {
progressDialog = new ProgressDialog(this, worker);
return progressDialog;
}
public void showProgressDialog() {
this.progressDialog.setVisible(true);
}
public void hideProgressDialog() {
this.progressDialog.setVisible(false);
}
public void setStatusMessage(String message) {
StatusMessenger.instance.message(message);
}
public void updateProgressDialog(int progress) {
progressDialog.updateProgress(progress);
}
public SearchProgressDialog createSearchProgressDialog(Cancelable searchAction) {
searchProgressDialog = new SearchProgressDialog(this, searchAction);
return searchProgressDialog;
}
public void hideSearchProgressDialog() {
if (searchProgressDialog == null) return;
searchProgressDialog.setVisible(false);
}
public IndexingProgressDialog createFileIndexerProgressDialog(Cancelable searchAction) {
fileIndexerProgressDialog = new IndexingProgressDialog(this, searchAction);
return fileIndexerProgressDialog;
}
public void hideFileIndexerProgressDialog() {
if (fileIndexerProgressDialog == null) return;
fileIndexerProgressDialog.setVisible(false);
}
}