/*
* 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 mediathek.config.MVConfig;
import mediathek.daten.DatenDownload;
import mediathek.tool.EscBeenden;
import mediathek.tool.MVMessageDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
@SuppressWarnings("serial")
public class DialogContinueDownload extends JDialog {
public enum DownloadResult {
CANCELLED, CONTINUE, RESTART_WITH_NEW_NAME
}
private DownloadResult result;
private boolean isNewName = false;
private MVPanelDownloadZiel mVPanelDownloadZiel;
private Timer countdownTimer = null;
private final boolean direkterDownload;
final private JFrame parent;
public DialogContinueDownload(JFrame pparent, DatenDownload datenDownload, boolean ddirekterDownload) {
// "weiterführen"
// true: dann kann der bereits gestartete Download weitergeführt werden, nur direkte Downloads
// false: dann kann der Download nur neu gestartet werden, die existierende Datei wird gelöscht
super(pparent, true);
initComponents();
this.parent = pparent;
this.direkterDownload = ddirekterDownload;
if (!direkterDownload) {
jButtonWeiter.setText("Überschreiben");
if (!datenDownload.checkAufrufBauen()) {
// nur für Downloads mit Programm
jPanelNewName.setVisible(false);
}
}
mVPanelDownloadZiel = new MVPanelDownloadZiel(null, datenDownload, false);
jPanelPath.setLayout(new BorderLayout(0, 0));
jPanelPath.add(mVPanelDownloadZiel, BorderLayout.CENTER);
if (parent != null) {
setLocationRelativeTo(parent);
}
String dialogText = "<html>Der Film \""
+ datenDownload.arr[DatenDownload.DOWNLOAD_TITEL]
+ "\" existiert bereits.<br>Wie möchten Sie fortfahren?</html>";
jLabel1.setText(dialogText);
jButtonNeuerName.addActionListener(e -> {
isNewName = mVPanelDownloadZiel.setPfadName_geaendert();
if (!direkterDownload && !isNewName) {
// dann gibts es nur Überschreiben oder anderer Name, sonst zickt ffmpeg
MVMessageDialog.showMessageDialog(parent, "Der Dateiname wurde nicht geändert!",
"Datei existiert bereits!", JOptionPane.ERROR_MESSAGE);
} else {
result = DownloadResult.RESTART_WITH_NEW_NAME;
beenden();
}
});
jButtonAbbrechen.addActionListener(e -> abbrechen());
new EscBeenden(this) {
@Override
public void beenden_() {
abbrechen();
}
};
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent evt) {
abbrechen();
}
});
jButtonWeiter.addActionListener(e -> {
result = DownloadResult.CONTINUE;
beenden();
});
//start the countdown...
countdownTimer = new Timer(0, new CountdownAction());
countdownTimer.setRepeats(true);
countdownTimer.start();
pack();
getRootPane().setDefaultButton(jButtonWeiter);
}
/**
* Return the result of the user selection made in the dialog.
*
* @return A {@link mediathek.gui.dialog.DialogContinueDownload.DownloadResult} result.
*/
public DownloadResult getResult() {
return result;
}
/**
* Check if a new name was specified.
*
* @return A new name needs to be used.
*/
public boolean isNewName() {
return isNewName;
}
private void abbrechen() {
result = DownloadResult.CANCELLED;
beenden();
}
private void beenden() {
if (countdownTimer != null) {
countdownTimer.stop();
}
// mVPanelDownloadZiel.saveComboPfad();
dispose();
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jButtonWeiter = new javax.swing.JButton();
jButtonAbbrechen = new javax.swing.JButton();
jPanelNewName = new javax.swing.JPanel();
jButtonNeuerName = new javax.swing.JButton();
jPanelPath = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle("Download weiterführen");
jButtonWeiter.setText("Weiterführen in XXX");
jButtonAbbrechen.setText("Abbrechen");
jPanelNewName.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 255), 2));
jButtonNeuerName.setText("Mit diesem Namen neu Starten");
javax.swing.GroupLayout jPanelPathLayout = new javax.swing.GroupLayout(jPanelPath);
jPanelPath.setLayout(jPanelPathLayout);
jPanelPathLayout.setHorizontalGroup(
jPanelPathLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 527, Short.MAX_VALUE)
);
jPanelPathLayout.setVerticalGroup(
jPanelPathLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 124, Short.MAX_VALUE)
);
javax.swing.GroupLayout jPanelNewNameLayout = new javax.swing.GroupLayout(jPanelNewName);
jPanelNewName.setLayout(jPanelNewNameLayout);
jPanelNewNameLayout.setHorizontalGroup(
jPanelNewNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelNewNameLayout.createSequentialGroup()
.addContainerGap(285, Short.MAX_VALUE)
.addComponent(jButtonNeuerName)
.addContainerGap())
.addComponent(jPanelPath, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
jPanelNewNameLayout.setVerticalGroup(
jPanelNewNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelNewNameLayout.createSequentialGroup()
.addComponent(jPanelPath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButtonNeuerName)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jLabel1.setText("<html>Die Filmdatei existiert bereits.<br>Wie möchten Sie forfahren?</html>");
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(jLabel1)
.addComponent(jPanelNewName, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jButtonAbbrechen)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonWeiter)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonWeiter)
.addComponent(jButtonAbbrechen))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanelNewName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(16, 16, 16))
);
pack();
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButtonAbbrechen;
private javax.swing.JButton jButtonNeuerName;
private javax.swing.JButton jButtonWeiter;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanelNewName;
private javax.swing.JPanel jPanelPath;
// End of variables declaration//GEN-END:variables
/**
* Implements the countdown based on Swing Timer for automatic placement on EDT.
*/
private class CountdownAction implements ActionListener {
private int w = MVConfig.getInt(MVConfig.Configs.SYSTEM_PARAMETER_DOWNLOAD_WEITERFUEHREN_IN_SEKUNDEN);
@Override
public void actionPerformed(ActionEvent e) {
if (w > 0) {
if (!direkterDownload) {
jButtonWeiter.setText("Überschreiben in " + w + 's');
} else {
jButtonWeiter.setText("Weiterführen in " + w + 's');
}
if (countdownTimer != null) {
countdownTimer.setDelay(1000);
}
} else {
result = DownloadResult.CONTINUE;
beenden();
}
w--;
}
}
}