/* * MediathekView * Copyright (C) 2008 W. Xaver * W.Xaver[at]googlemail.com * http://zdfmediathk.sourceforge.net/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package mediathek.gui.dialog; import mSearch.tool.FilenameUtils; import mSearch.tool.Listener; import mSearch.tool.Log; import mSearch.tool.SysMsg; import mediathek.config.Daten; import mediathek.config.Icons; import mediathek.config.MVConfig; import mediathek.daten.DatenMediaDB; import mediathek.file.GetFile; import mediathek.tool.*; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; @SuppressWarnings("serial") public class DialogMediaDB extends JDialog { private final JFrame parent; private final Daten daten; // private boolean init = false; private MVTable tabelleFilme; public DialogMediaDB(JFrame pparent) { super(pparent, false); daten = Daten.getInstance(); initComponents(); this.parent = pparent; this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { beenden(); } }); this.setTitle("Mediensammlung durchsuchen"); Listener.addListener(new Listener(Listener.EREIGNIS_MEDIA_DB_START, DialogMediaDB.class.getSimpleName()) { @Override public void ping() { // neue DB suchen makeIndex(true); jLabelSum.setText("0"); } }); Listener.addListener(new Listener(Listener.EREIGNIS_MEDIA_DB_STOP, DialogMediaDB.class.getSimpleName()) { @Override public void ping() { // neue DB liegt vor makeIndex(false); jLabelSum.setText(daten.getListeMediaDB().size() + ""); searchFilmInDb(); } }); tabelleFilme = new MVTable(MVTable.TableType.MEDIA_DB); jScrollPane3.setViewportView(tabelleFilme); TModelMediaDB modelFilm = new TModelMediaDB(new Object[][]{}, DatenMediaDB.COLUMN_NAMES); final CellRendererMediaDB cellRenderer = new CellRendererMediaDB(); tabelleFilme.setDefaultRenderer(Object.class, cellRenderer); tabelleFilme.setModel(modelFilm); tabelleFilme.addMouseListener(new BeobMausTabelle()); tabelleFilme.getSelectionModel().addListSelectionListener(new BeobTableSelect()); tabelleFilme.setAutoResizeMode(MVTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS); tabelleFilme.initTabelle(); progress.setVisible(false); progress.setIndeterminate(true); progress.setMaximum(0); progress.setMinimum(0); progress.setValue(0); jTextFieldSearch.addActionListener(e -> searchFilmInDb()); jTextFieldSearch.getDocument().addDocumentListener(new BeobDoc()); jButtonIndex.addActionListener(e -> daten.getListeMediaDB().createMediaDB("")); jButtonHelp.setIcon(Icons.ICON_BUTTON_HELP); jButtonHelp.addActionListener(e -> new DialogHilfe(parent, true, new GetFile().getHilfeSuchen(GetFile.PFAD_HILFETEXT_DIALOG_MEDIA_DB)).setVisible(true)); jButtonSearch.addActionListener(e -> searchFilmInDb()); jButtonBeenden.addActionListener(e -> beenden()); new EscBeenden(this) { @Override public void beenden_() { beenden(); } }; GuiFunktionen.setSize(MVConfig.Configs.SYSTEM_MEDIA_DB_DIALOG_GROESSE, this, parent); } @Override public void setVisible(boolean vis) { super.setVisible(vis); if (vis && daten.getListeMediaPath().isEmpty()) { JOptionPane.showMessageDialog(parent, "Erst in den Einstellungen eine Mediensammlung einrichten.", "Mediensammlung leer!", JOptionPane.ERROR_MESSAGE); } // if (!init) { // // beim ersten anzeigen den Index bauen // Daten.mVMediaDB.makeIndex(); // init = true; // } } public final void setVis() { this.setVisible(Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_MEDIA_DB_DIALOG_ANZEIGEN))); Listener.notify(Listener.EREIGNIS_DIALOG_MEDIA_DB, DialogMediaDB.class.getName()); } public void tabelleSpeichern() { if (tabelleFilme != null) { tabelleFilme.tabelleNachDatenSchreiben(); } } public void setFilter(String titel) { titel = FilenameUtils.replaceLeerDateiname(titel, false /*pfad*/, Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_USE_REPLACETABLE)), Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_ONLY_ASCII))); // mit den eingestellten Ersetzungen bearbeiten jTextFieldSearch.setText(titel); } private synchronized void searchFilmInDb() { TModelMediaDB model = new TModelMediaDB(new Object[][]{}, DatenMediaDB.COLUMN_NAMES); daten.getListeMediaDB().searchFilmInDB(model, jTextFieldSearch.getText()); tabelleFilme.getSpalten(); tabelleFilme.setModel(model); tabelleFilme.setSpalten(); jLabelSizeFound.setText(model.getRowCount() + ""); } private void makeIndex(boolean makeIndex) { progress.setVisible(makeIndex); jTextFieldSearch.setEnabled(!makeIndex); jButtonSearch.setEnabled(!makeIndex); jButtonIndex.setEnabled(!makeIndex); } private void zielordnerOeffnen() { int row = tabelleFilme.getSelectedRow(); if (row >= 0) { String s = (String) tabelleFilme.getModel().getValueAt(tabelleFilme.convertRowIndexToModel(row), DatenMediaDB.MEDIA_DB_PATH); DirOpenAction.zielordnerOeffnen(parent, s); } else { new HinweisKeineAuswahl().zeigen(parent); } } private void filmAbspielen_() { int row = tabelleFilme.getSelectedRow(); if (row >= 0) { String file = (String) tabelleFilme.getModel().getValueAt(tabelleFilme.convertRowIndexToModel(row), DatenMediaDB.MEDIA_DB_NAME); String path = (String) tabelleFilme.getModel().getValueAt(tabelleFilme.convertRowIndexToModel(row), DatenMediaDB.MEDIA_DB_PATH); OpenPlayerAction.filmAbspielen(parent, path + File.separator + file); } else { new HinweisKeineAuswahl().zeigen(parent); } } private void aktFilmSetzen() { int row = tabelleFilme.getSelectedRow(); if (row >= 0) { String file = (String) tabelleFilme.getModel().getValueAt(tabelleFilme.convertRowIndexToModel(row), DatenMediaDB.MEDIA_DB_NAME); String path = (String) tabelleFilme.getModel().getValueAt(tabelleFilme.convertRowIndexToModel(row), DatenMediaDB.MEDIA_DB_PATH); jTextFieldFilmTitle.setText(file); jTextFieldFilmPfad.setText(path); } else { jTextFieldFilmTitle.setText(""); jTextFieldFilmPfad.setText(""); } } private void filmLoeschen_() { String del = ""; int row = tabelleFilme.getSelectedRow(); if (row < 0) { new HinweisKeineAuswahl().zeigen(parent); return; } try { String file = (String) tabelleFilme.getModel().getValueAt(tabelleFilme.convertRowIndexToModel(row), DatenMediaDB.MEDIA_DB_NAME); String path = (String) tabelleFilme.getModel().getValueAt(tabelleFilme.convertRowIndexToModel(row), DatenMediaDB.MEDIA_DB_PATH); del = path + File.separator + file; File delFile = new File(del); if (!delFile.exists()) { MVMessageDialog.showMessageDialog(parent, "Die Datei existiert nicht!", "Film löschen", JOptionPane.ERROR_MESSAGE); return; } int ret = JOptionPane.showConfirmDialog(parent, delFile.getAbsolutePath(), "Film Löschen?", JOptionPane.YES_NO_OPTION); if (ret != JOptionPane.OK_OPTION) { return; } // und jetzt die Datei löschen SysMsg.sysMsg(new String[]{"Datei löschen: ", delFile.getAbsolutePath()}); if (!delFile.delete()) { throw new Exception(); } } catch (Exception ex) { MVMessageDialog.showMessageDialog(parent, "Konnte die Datei nicht löschen!", "Film löschen", JOptionPane.ERROR_MESSAGE); Log.errorLog(984512036, "Fehler beim löschen: " + del); } } private void beenden() { MVConfig.add(MVConfig.Configs.SYSTEM_MEDIA_DB_DIALOG_ANZEIGEN, Boolean.FALSE.toString()); setVis(); } // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jButtonBeenden = new javax.swing.JButton(); jButtonHelp = new javax.swing.JButton(); jTextFieldSearch = new javax.swing.JTextField(); jButtonSearch = new javax.swing.JButton(); jScrollPane3 = new javax.swing.JScrollPane(); javax.swing.JTable jTableFilm = new javax.swing.JTable(); javax.swing.JLabel jLabel1 = new javax.swing.JLabel(); jLabelSizeFound = new javax.swing.JLabel(); javax.swing.JLabel jLabel4 = new javax.swing.JLabel(); jButtonIndex = new javax.swing.JButton(); jLabelSum = new javax.swing.JLabel(); progress = new javax.swing.JProgressBar(); javax.swing.JLabel jLabel3 = new javax.swing.JLabel(); jTextFieldFilmTitle = new javax.swing.JTextField(); javax.swing.JLabel jLabel5 = new javax.swing.JLabel(); jTextFieldFilmPfad = new javax.swing.JTextField(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); jButtonBeenden.setText("Ok"); jButtonHelp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mediathek/res/muster/button-help.png"))); // NOI18N jButtonHelp.setToolTipText("Hilfe anzeigen"); jButtonSearch.setText("Suchen"); jTableFilm.setAutoCreateRowSorter(true); jTableFilm.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); jScrollPane3.setViewportView(jTableFilm); jLabel1.setText("Treffer:"); jLabelSizeFound.setText("0"); jLabel4.setText("Anzahl Medien gesamt:"); jButtonIndex.setText("Index neu aufbauen"); jLabelSum.setText("0"); jLabel3.setText("Titel:"); jTextFieldFilmTitle.setEditable(false); jLabel5.setText("Pfad:"); jTextFieldFilmPfad.setEditable(false); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 536, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jTextFieldSearch) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonSearch) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonHelp)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(progress, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonIndex) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonBeenden, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabelSum) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabelSizeFound)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldFilmTitle)) .addGroup(layout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextFieldFilmPfad))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButtonSearch)) .addComponent(jButtonHelp)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(jLabelSum)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(jLabelSizeFound))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 490, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(jTextFieldFilmTitle, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(jTextFieldFilmPfad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(progress, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButtonIndex) .addComponent(jButtonBeenden)) .addContainerGap()) ); layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jButtonHelp, jButtonSearch, jTextFieldSearch}); pack(); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonBeenden; private javax.swing.JButton jButtonHelp; private javax.swing.JButton jButtonIndex; private javax.swing.JButton jButtonSearch; private javax.swing.JLabel jLabelSizeFound; private javax.swing.JLabel jLabelSum; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JTextField jTextFieldFilmPfad; private javax.swing.JTextField jTextFieldFilmTitle; private javax.swing.JTextField jTextFieldSearch; private javax.swing.JProgressBar progress; // End of variables declaration//GEN-END:variables private class BeobTableSelect implements ListSelectionListener { @Override public void valueChanged(ListSelectionEvent event) { if (!event.getValueIsAdjusting()) { aktFilmSetzen(); } } } private class BeobDoc implements DocumentListener { @Override public void insertUpdate(DocumentEvent e ) { tus(); } @Override public void removeUpdate(DocumentEvent e ) { tus(); } @Override public void changedUpdate(DocumentEvent e ) { tus(); } private void tus() { Filter.checkPattern1(jTextFieldSearch); if (Boolean.parseBoolean(MVConfig.get(MVConfig.Configs.SYSTEM_MEDIA_DB_ECHTZEITSUCHE))) { searchFilmInDb(); } } } public class BeobMausTabelle extends MouseAdapter { private Point p; @Override public void mousePressed(MouseEvent arg0) { if (arg0.isPopupTrigger()) { showMenu(arg0); } } @Override public void mouseReleased(MouseEvent arg0) { if (arg0.isPopupTrigger()) { showMenu(arg0); } } private void showMenu(MouseEvent evt) { p = evt.getPoint(); int nr = tabelleFilme.rowAtPoint(p); if (nr >= 0) { tabelleFilme.setRowSelectionInterval(nr, nr); } JPopupMenu jPopupMenu = new JPopupMenu(); // Film abspielen JMenuItem itemPlayerDownload = new JMenuItem("gespeicherten Film (Datei) abspielen"); itemPlayerDownload.setIcon(Icons.ICON_MENUE_FILM_START); itemPlayerDownload.addActionListener(e -> filmAbspielen_()); jPopupMenu.add(itemPlayerDownload); // Film löschen JMenuItem itemDeleteDownload = new JMenuItem("gespeicherten Film (Datei) löschen"); itemDeleteDownload.setIcon(Icons.ICON_BUTTON_DEL); itemDeleteDownload.addActionListener(e -> filmLoeschen_()); jPopupMenu.add(itemDeleteDownload); // Zielordner öffnen JMenuItem itemOeffnen = new JMenuItem("Zielordner öffnen"); itemOeffnen.setIcon(Icons.ICON_MENUE_FILE_OPEN); jPopupMenu.add(itemOeffnen); itemOeffnen.addActionListener(arg0 -> zielordnerOeffnen()); jPopupMenu.addSeparator(); // Reset Tabelle JMenuItem itemResetTab = new JMenuItem("Tabelle zurücksetzen"); jPopupMenu.add(itemResetTab); itemResetTab.addActionListener(arg0 -> tabelleFilme.resetTabelle()); // ###################### // Menü anzeigen jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); } } }