diff --git a/src/main/java/listfix/view/GUIScreen.java b/src/main/java/listfix/view/GUIScreen.java index 2a7c2ae0..d2c14c88 100644 --- a/src/main/java/listfix/view/GUIScreen.java +++ b/src/main/java/listfix/view/GUIScreen.java @@ -10,8 +10,6 @@ import listfix.io.filters.SpecificPlaylistFileFilter; import listfix.io.playlists.LizzyPlaylistUtil; import listfix.json.JsonAppOptions; -import listfix.model.BatchRepair; -import listfix.model.BatchRepairItem; import listfix.model.PlaylistHistory; import listfix.model.playlists.Playlist; import listfix.model.playlists.PlaylistFactory; @@ -196,7 +194,6 @@ public boolean handleFileList(List fileList) _playlistDirectoryTree.getSelectionModel().addTreeSelectionListener(e -> { boolean hasSelected = _playlistDirectoryTree.getSelectionCount() > 0; _btnOpenSelected.setEnabled(hasSelected); - _btnDeepRepair.setEnabled(hasSelected); }); // addAt popup menu to playlist tree on right-click @@ -348,7 +345,6 @@ private void handleMouseEvent(MouseEvent e) if (_playlistDirectoryTree.getSelectionCount() > 0) { - _miClosestMatchesSearch.setEnabled(true); _miOpenSelectedPlaylists.setEnabled(true); boolean singleFileSelected = _playlistDirectoryTree.getSelectionCount() == 1; _miRenameSelectedItem.setEnabled(singleFileSelected @@ -359,7 +355,6 @@ private void handleMouseEvent(MouseEvent e) } else { - _miClosestMatchesSearch.setEnabled(false); _miOpenSelectedPlaylists.setEnabled(false); _miDeleteFile.setEnabled(false); _miRenameSelectedItem.setEnabled(false); @@ -492,7 +487,6 @@ private void initComponents() _miRemovePlaylistDirectory = new JMenuItem(); _miOpenSelectedPlaylists = new JMenuItem(); JMenuItem _miOpenSelectedPlaylistLocation = new JMenuItem(); - _miClosestMatchesSearch = new JMenuItem(); _miDeleteFile = new JMenuItem(); _miRenameSelectedItem = new JMenuItem(); JPanel _statusPanel = new JPanel(); @@ -513,7 +507,6 @@ private void initComponents() JButton _btnSetPlaylistsDir = new JButton(); JButton _btnRefresh = new JButton(); _btnOpenSelected = new JButton(); - _btnDeepRepair = new JButton(); _playlistPanel = new JPanel(); JPanel _gettingStartedPanel = new JPanel(); JPanel _verticalPanel = new JPanel(); @@ -567,10 +560,6 @@ private void initComponents() _miOpenSelectedPlaylistLocation.addActionListener(evt -> this.openPlaylistFoldersFromPlaylistTree()); _playlistTreeRightClickMenu.add(_miOpenSelectedPlaylistLocation); - _miClosestMatchesSearch.setText("Repair playlist"); - _miClosestMatchesSearch.addActionListener(evt -> _miClosestMatchesSearchActionPerformed()); - _playlistTreeRightClickMenu.add(_miClosestMatchesSearch); - _miDeleteFile.setMnemonic('D'); _miDeleteFile.setText("Delete file(s)"); _miDeleteFile.setToolTipText("Delete selected file(s)"); @@ -734,13 +723,6 @@ public void keyPressed(KeyEvent evt) _btnOpenSelected.addActionListener(evt -> GUIScreen.this.openTreeSelectedPlaylists()); _playlistsDirectoryButtonPanel.add(_btnOpenSelected); - _btnDeepRepair.setText("Repair"); - _btnDeepRepair.setToolTipText("Batch Repair"); - _btnDeepRepair.setEnabled(false); - _btnDeepRepair.setMargin(new Insets(2, 8, 2, 8)); - _btnDeepRepair.addActionListener(evt -> _btnDeepRepairActionPerformed()); - _playlistsDirectoryButtonPanel.add(_btnDeepRepair); - _playlistDirectoryPanel.add(_playlistsDirectoryButtonPanel, BorderLayout.PAGE_END); _leftSplitPane.setTopComponent(_playlistDirectoryPanel); @@ -1003,36 +985,6 @@ public void documentActivated(JDocumentComponent doc) pack(); }// //GEN-END:initComponents - private void runClosestMatchesSearchOnSelectedLists() throws IOException - { - _logger.debug("Run Closest Matches Search..."); - List files = this.getRecursiveSelectedFilesFromTreePlaylists(); - if (files.isEmpty()) - { - return; - } - BatchRepair br = new BatchRepair(_listFixController.getMediaLibrary(), files.get(0).toFile()); - br.setDescription("Closest Matches Search"); - for (Path file : files) - { - br.add(new BatchRepairItem(file.toFile(), this.getOptions())); - } - MultiListBatchClosestMatchResultsDialog dlg = new MultiListBatchClosestMatchResultsDialog(this, true, br, this.getOptions()); - if (!dlg.getUserCancelled()) - { - if (br.isEmpty()) - { - JOptionPane.showMessageDialog(this, new JTransparentTextArea("There was nothing to fix in the list(s) that were processed.")); - } - else - { - dlg.setLocationRelativeTo(this); - dlg.setVisible(true); - updatePlaylistDirectoryPanel(); - } - } - } - private void openTreeSelectedPlaylists() { this.getSelectedFilesFromTreePlaylists().forEach(toOpen -> { @@ -1051,24 +1003,6 @@ private void openTreeSelectedPlaylists() }); } - private List getRecursiveSelectedFilesFromTreePlaylists() throws IOException - { - List files = new ArrayList<>(); - for (Path file : this.getSelectedFilesFromTreePlaylists()) - { - if (Files.isRegularFile(file)) - { - files.add(file); - } - else - { - // We're dealing w/ a folder, get all the lists it contains. - files.addAll(PlaylistScanner.getAllPlaylists(file)); - } - } - return files; - } - private List getSelectedFilesFromTreePlaylists() { TreePath[] paths = this._playlistDirectoryTree.getSelectionPaths(); @@ -2095,30 +2029,6 @@ private void _btnAddPlaylistsDirActionPerformed() } } - private void _btnDeepRepairActionPerformed() - { - try - { - runClosestMatchesSearchOnSelectedLists(); - } - catch (IOException e) - { - throw new RuntimeException(e); - } - } - - private void _miClosestMatchesSearchActionPerformed() - { - try - { - runClosestMatchesSearchOnSelectedLists(); - } - catch (IOException e) - { - throw new RuntimeException(e); - } - } - private void _miReloadActionPerformed() { if (_playlistTabbedPane.getActiveTab() != null) @@ -2360,12 +2270,10 @@ private static URL getResourceUrl(String resourcePath) return url; } - private JButton _btnDeepRepair; private JButton _btnOpenSelected; private JDocumentTabbedPane _playlistTabbedPane; private JSplitPane _leftSplitPane; private JList _lstMediaLibraryDirs; - private JMenuItem _miClosestMatchesSearch; private JMenuItem _miDeleteFile; private JMenuItem _miOpenSelectedPlaylists; private JMenuItem _miRefreshDirectoryTree; diff --git a/src/main/java/listfix/view/dialogs/MultiListBatchClosestMatchResultsDialog.java b/src/main/java/listfix/view/dialogs/MultiListBatchClosestMatchResultsDialog.java deleted file mode 100644 index 29cc6411..00000000 --- a/src/main/java/listfix/view/dialogs/MultiListBatchClosestMatchResultsDialog.java +++ /dev/null @@ -1,296 +0,0 @@ -package listfix.view.dialogs; - -import listfix.io.IPlaylistOptions; -import listfix.model.BatchRepair; -import listfix.model.BatchRepairItem; -import listfix.model.playlists.Playlist; -import listfix.view.controls.ClosestMatchesSearchScrollableResultsPanel; -import listfix.view.controls.JTransparentTextArea; -import listfix.view.controls.PlaylistsList; -import listfix.view.support.DualProgressWorker; -import listfix.view.support.IPlaylistModifiedListener; -import listfix.view.support.ProgressWorker; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import javax.swing.*; -import javax.swing.table.TableCellEditor; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ItemEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.File; -import java.util.List; -import java.util.concurrent.ExecutionException; - -/** - * This is the results dialog we display when running a batch closest matches search on all entries in multiple playlists. - */ -public class MultiListBatchClosestMatchResultsDialog extends JDialog -{ - private final BatchRepair _batch; - private boolean _userCancelled = false; - private static final Logger _logger = LogManager.getLogger(MultiListBatchClosestMatchResultsDialog.class); - - private JButton _btnBrowse; - private JButton _btnSave; - private JCheckBox _chkBackup; - private PlaylistsList _pnlList; - private ClosestMatchesSearchScrollableResultsPanel _pnlResults; - private JTextField _txtBackup; - private final IPlaylistOptions filePathOptions; - - public MultiListBatchClosestMatchResultsDialog(Frame parent, boolean modal, BatchRepair br, IPlaylistOptions filePathOptions) - { - super(parent, br.getDescription(), modal); - this.filePathOptions = filePathOptions; - _batch = br; - initComponents(); - - getRootPane().setDefaultButton(_btnSave); - _txtBackup.setText(_batch.getDefaultBackupName()); - - // load and repair lists - final DualProgressDialog> pd = new DualProgressDialog<>(parent, "Finding Closest Matches...", "Please wait...", "Overall Progress:"); - DualProgressWorker dpw = new DualProgressWorker<>() - { - @Override - protected void process(List> chunks) - { - ProgressItem titem = new ProgressItem<>(true, -1, null); - ProgressItem oitem = new ProgressItem<>(false, -1, null); - getEffectiveItems(chunks, titem, oitem); - - if (titem.percentComplete >= 0) - { - pd.getTaskProgressBar().setValue(titem.percentComplete); - } - if (titem.state != null) - { - pd.getTaskLabel().setText(titem.state); - } - if (oitem.percentComplete >= 0) - { - pd.getOverallProgressBar().setValue(oitem.percentComplete); - } - if (oitem.state != null) - { - pd.getOverallLabel().setText(oitem.state); - } - } - - @Override - protected Void doInBackground() - { - _batch.performClosestMatchRepair(this, filePathOptions); - return null; - } - }; - pd.show(dpw); - - if (!dpw.getCancelled()) - { - ListSelectionModel lsm = _pnlList.getSelectionModel(); - lsm.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - lsm.addListSelectionListener(e -> { - if (e.getValueIsAdjusting()) - { - return; - } - updateSelectedPlaylist(); - }); - - _pnlList.initPlaylistsList(); - - for (BatchRepairItem item : _batch.getItems()) - { - IPlaylistModifiedListener listener = this::onPlaylistModified; - item.getPlaylist().addModifiedListener(listener); - } - - String listCountTxt; - if (_batch.getItems().size() == 1) - { - listCountTxt = "1 playlist"; - } - else - { - listCountTxt = String.format("%d playlists", _batch.getItems().size()); - } - _pnlList.setText(listCountTxt); - } - else - { - _userCancelled = true; - } - } - - private void onPlaylistModified(Playlist list) - { - _pnlList.playlistModified(list); - } - - private void updateSelectedPlaylist() - { - // Keep the table anchored left... - _pnlList.anchorLeft(); - int selIx = _pnlList.getSelectedModelRow(); - if (selIx >= 0) - { - BatchRepairItem item = _batch.getItem(selIx); - _pnlResults.setResults(item.getClosestMatches()); - } - } - - /** - * This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() - { - - JSplitPane jSplitPane1 = new JSplitPane(); - _pnlResults = new ClosestMatchesSearchScrollableResultsPanel(); - _pnlList = new PlaylistsList(_batch); - JPanel _pnlBackup = new JPanel(); - JPanel _pnlRight = new JPanel(); - _btnSave = new JButton(); - JButton _btnCancel = new JButton(); - JPanel _pnlLeft = new JPanel(); - _chkBackup = new JCheckBox(); - _txtBackup = new JTextField(); - _btnBrowse = new JButton(); - - setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); - addWindowListener(new WindowAdapter() - { - @Override - public void windowClosing(WindowEvent evt) - { - formWindowClosing(); - } - }); - - jSplitPane1.setDividerLocation(150); - jSplitPane1.setRightComponent(_pnlResults); - jSplitPane1.setLeftComponent(_pnlList); - - getContentPane().add(jSplitPane1, BorderLayout.CENTER); - - _pnlBackup.setLayout(new BorderLayout()); - - _btnSave.setText("Save All Repairs"); - _btnSave.addActionListener(this::_btnSaveActionPerformed); - _pnlRight.add(_btnSave); - - _btnCancel.setText("Cancel"); - _btnCancel.addActionListener(this::_btnCancelActionPerformed); - _pnlRight.add(_btnCancel); - - _pnlBackup.add(_pnlRight, BorderLayout.EAST); - - _chkBackup.setText("Backup original files to zip file:"); - _chkBackup.addItemListener(this::_chkBackuponChkBackupItemStateChanged); - _pnlLeft.add(_chkBackup); - - _txtBackup.setEnabled(false); - _txtBackup.setPreferredSize(new Dimension(200, 20)); - _pnlLeft.add(_txtBackup); - - _btnBrowse.setText("..."); - _btnBrowse.setEnabled(false); - _btnBrowse.addActionListener(this::_btnBrowseActionPerformed); - _pnlLeft.add(_btnBrowse); - - _pnlBackup.add(_pnlLeft, BorderLayout.WEST); - - getContentPane().add(_pnlBackup, BorderLayout.SOUTH); - - pack(); - } - - private void formWindowClosing() - { - _userCancelled = true; - } - - private void _btnSaveActionPerformed(ActionEvent ignore) - { - if (_pnlResults.getSelectedRow() > -1 && _pnlResults.getSelectedColumn() == 3) - { - TableCellEditor cellEditor = _pnlResults.getCellEditor(_pnlResults.getSelectedRow(), _pnlResults.getSelectedColumn()); - cellEditor.stopCellEditing(); - } - - ProgressWorker worker = new ProgressWorker<>() - { - @Override - protected Void doInBackground() throws Exception - { - _batch.save(filePathOptions, true, _chkBackup.isSelected(), _txtBackup.getText(), this); - return null; - } - }; - ProgressDialog pd = new ProgressDialog(null, true, worker, "Saving playlists..."); - pd.setVisible(true); - - try - { - worker.get(); - } - catch (InterruptedException ex) - { - // ignore, these happen when people cancel - should not be logged either. - } - catch (ExecutionException eex) - { - Throwable ex = eex.getCause(); - String msg = "An error occurred while saving: " + ex.getMessage(); - JOptionPane.showMessageDialog(MultiListBatchClosestMatchResultsDialog.this, new JTransparentTextArea(msg), "Save Error", JOptionPane.ERROR_MESSAGE); - _logger.error(ex); - return; - } - - setVisible(false); - } - - private void _btnCancelActionPerformed(ActionEvent ignore) - { - _userCancelled = true; - setVisible(false); - } - - private void _chkBackuponChkBackupItemStateChanged(ItemEvent ignore) - { - boolean isChecked = _chkBackup.isSelected(); - _txtBackup.setEnabled(isChecked); - _btnBrowse.setEnabled(isChecked); - if (isChecked) - { - _txtBackup.selectAll(); - _txtBackup.requestFocusInWindow(); - } - } - - private void _btnBrowseActionPerformed(ActionEvent ignore) - { - JFileChooser dlg = new JFileChooser(); - if (!_txtBackup.getText().isEmpty()) - { - dlg.setSelectedFile(new File(_txtBackup.getText())); - } - if (dlg.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) - { - _txtBackup.setText(dlg.getSelectedFile().getAbsolutePath()); - } - } - - public boolean getUserCancelled() - { - return _userCancelled; - } -}