/* * 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.dialogEinstellungen; import mSearch.daten.DatenFilm; import mSearch.tool.Listener; import mediathek.config.Daten; import mediathek.controller.MVUsedUrl; import mediathek.daten.DatenDownload; import mediathek.gui.PanelVorlage; import mediathek.gui.dialog.DialogAddDownload; import mediathek.gui.dialog.DialogZiel; import mediathek.tool.GuiFunktionen; import mediathek.tool.MVMessageDialog; import mediathek.tool.MVRun; import mediathek.tool.TModel; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedWriter; import java.io.File; import java.io.OutputStreamWriter; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.LinkedList; @SuppressWarnings("serial") public class PanelErledigteUrls extends PanelVorlage { private boolean abo; public PanelErledigteUrls(Daten d, JFrame parentComponent) { super(d, parentComponent); initComponents(); jTable1.addMouseListener(new BeobMausTabelle()); jButtonLoeschen.setEnabled(false); jButtonExport.addActionListener((ActionEvent e) -> export()); } public void initAbo() { abo = true; Listener.addListener(new Listener(Listener.EREIGNIS_LISTE_ERLEDIGTE_ABOS, PanelErledigteUrls.class.getSimpleName()) { @Override public void ping() { if (jToggleButtonLaden.isSelected()) { jTable1.setModel(new TModel(daten.erledigteAbos.getObjectData(), MVUsedUrl.title)); setsum(); } } }); jButtonLoeschen.addActionListener((ActionEvent e) -> { int ret = JOptionPane.showConfirmDialog(parentComponent, "Alle Einträge werden gelöscht.", "Löschen?", JOptionPane.YES_NO_OPTION); if (ret == JOptionPane.OK_OPTION) { daten.erledigteAbos.alleLoeschen(); } }); jToggleButtonLaden.addActionListener((ActionEvent e) -> { if (jToggleButtonLaden.isSelected()) { jButtonLoeschen.setEnabled(true); jTable1.setModel(new TModel(daten.erledigteAbos.getObjectData(), MVUsedUrl.title)); setsum(); } else { jButtonLoeschen.setEnabled(false); jTable1.setModel(new TModel(null, MVUsedUrl.title)); setsum(); } }); } public void initHistory() { abo = false; Listener.addListener(new Listener(Listener.EREIGNIS_LISTE_HISTORY_GEAENDERT, PanelErledigteUrls.class.getSimpleName()) { @Override public void ping() { if (jToggleButtonLaden.isSelected()) { jTable1.setModel(new TModel(daten.history.getObjectData(), MVUsedUrl.title)); setsum(); } } }); jButtonLoeschen.addActionListener((ActionEvent e) -> { int ret = JOptionPane.showConfirmDialog(parentComponent, "Alle Einträge werden gelöscht.", "Löschen?", JOptionPane.YES_NO_OPTION); if (ret == JOptionPane.OK_OPTION) { daten.history.alleLoeschen(); } }); jToggleButtonLaden.addActionListener((ActionEvent e) -> { if (jToggleButtonLaden.isSelected()) { jButtonLoeschen.setEnabled(true); jTable1.setModel(new TModel(daten.history.getObjectData(), MVUsedUrl.title)); setsum(); } else { jButtonLoeschen.setEnabled(false); jTable1.setModel(new TModel(null, MVUsedUrl.title)); setsum(); } }); } private void setsum() { if (jTable1.getRowCount() <= 0) { jLabelSum.setText(""); } else { jLabelSum.setText("Anzahl: " + jTable1.getRowCount()); } } private void export() { MVRun mVRun; if (jTable1.getModel().getRowCount() <= 0) { return; } DialogZiel dialog = new DialogZiel(parentComponent, true, GuiFunktionen.getHomePath() + File.separator + "Mediathek-Filme.txt", "Filmtitel speichern"); dialog.setVisible(true); if (!dialog.ok) { return; } mVRun = new MVRun(daten.getMediathekGui(), "Datei: \"" + dialog.ziel + "\" erstellen"); mVRun.setVisible(true); new Thread(new Export_(dialog.ziel, mVRun)).start(); } private class Export_ implements Runnable { String ziel; MVRun mVRun; public Export_(final String ziel, MVRun mVRun) { this.ziel = ziel; this.mVRun = mVRun; } @Override public synchronized void run() { exportListe(); } private void exportListe() { LinkedList<MVUsedUrl> liste; if (abo) { liste = daten.erledigteAbos.getSortList(); } else { liste = daten.history.getSortList(); } Path logFilePath = Paths.get(ziel); try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(logFilePath)))) { bw.newLine(); bw.write(MVUsedUrl.getHeaderString()); bw.newLine(); bw.newLine(); for (MVUsedUrl entry : liste) { bw.write(entry.getString()); bw.newLine(); } bw.newLine(); // bw.flush(); } catch (Exception ex) { SwingUtilities.invokeLater(() -> MVMessageDialog.showMessageDialog(null, "Datei konnte nicht geschrieben werden!", "Fehler beim Schreiben", JOptionPane.ERROR_MESSAGE)); } finally { mVRun.dispose(); } } } // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jButtonLoeschen = new javax.swing.JButton(); jToggleButtonLaden = new javax.swing.JToggleButton(); jButtonExport = new javax.swing.JButton(); jLabelSum = new javax.swing.JLabel(); jTable1.setModel(new TModel()); jScrollPane1.setViewportView(jTable1); jButtonLoeschen.setText("Liste löschen"); jToggleButtonLaden.setText("Laden"); jButtonExport.setText("Liste exportieren"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 554, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jToggleButtonLaden) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabelSum) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButtonExport) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonLoeschen))) .addContainerGap()) ); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jButtonLoeschen, jToggleButtonLaden}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 283, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) .addComponent(jToggleButtonLaden) .addComponent(jLabelSum) .addComponent(jButtonExport) .addComponent(jButtonLoeschen)) .addContainerGap()) ); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonExport; private javax.swing.JButton jButtonLoeschen; private javax.swing.JLabel jLabelSum; private javax.swing.JTable jTable1; private javax.swing.JToggleButton jToggleButtonLaden; // End of variables declaration//GEN-END:variables public class BeobMausTabelle extends MouseAdapter { //rechhte Maustaste in der Tabelle BeobLoeschen beobLoeschen = new BeobLoeschen(); BeobUrl beobUrl = new BeobUrl(); private Point p; DatenFilm film; @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 = jTable1.rowAtPoint(p); if (nr >= 0) { jTable1.setRowSelectionInterval(nr, nr); String url = jTable1.getValueAt(jTable1.convertRowIndexToModel(nr), MVUsedUrl.USED_URL_URL).toString(); film = daten.getListeFilme().getFilmByUrl(url); } JPopupMenu jPopupMenu = new JPopupMenu(); //löschen JMenuItem item = new JMenuItem("Url aus der Liste löschen"); item.addActionListener(beobLoeschen); jPopupMenu.add(item); //Url item = new JMenuItem("URL kopieren"); item.addActionListener(beobUrl); jPopupMenu.add(item); // Infos anzeigen item = new JMenuItem("Infos zum Film anzeigen"); item.addActionListener(new BeobInfo()); jPopupMenu.add(item); if (film == null) { item.setEnabled(false); } // Download anlegen item = new JMenuItem("Download noch einmal anlegen"); item.addActionListener(new BeobDownload()); jPopupMenu.add(item); if (film == null) { item.setEnabled(false); } jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); } private class BeobDownload implements ActionListener { @Override public void actionPerformed(ActionEvent e) { DatenDownload datenDownload = daten.getListeDownloads().getDownloadUrlFilm(film.arr[DatenFilm.FILM_URL]); if (datenDownload != null) { int ret = JOptionPane.showConfirmDialog(parentComponent, "Download für den Film existiert bereits.\n" + "Noch einmal anlegen?", "Anlegen?", JOptionPane.YES_NO_OPTION); if (ret != JOptionPane.OK_OPTION) { return; } } // weiter DialogAddDownload dialog = new DialogAddDownload(daten.getMediathekGui(), daten, film, null, ""); dialog.setVisible(true); } } private class BeobInfo implements ActionListener { @Override public void actionPerformed(ActionEvent e) { Daten.filmInfo.updateCurrentFilm(film); Daten.filmInfo.showInfo(); } } private class BeobUrl implements ActionListener { @Override public void actionPerformed(ActionEvent e) { int selectedTableRow = jTable1.getSelectedRow(); if (selectedTableRow >= 0) { String del = jTable1.getValueAt(jTable1.convertRowIndexToModel(selectedTableRow), MVUsedUrl.USED_URL_URL).toString(); if (abo) { GuiFunktionen.copyToClipboard(del); } else { GuiFunktionen.copyToClipboard(del); } } } } private class BeobLoeschen implements ActionListener { @Override public void actionPerformed(ActionEvent e) { int selectedTableRow = jTable1.getSelectedRow(); if (selectedTableRow >= 0) { String del = jTable1.getValueAt(jTable1.convertRowIndexToModel(selectedTableRow), MVUsedUrl.USED_URL_URL).toString(); if (abo) { daten.erledigteAbos.urlAusLogfileLoeschen(del); } else { daten.history.urlAusLogfileLoeschen(del); } } } } } }