package com.gmail.dpierron.calibre.gui;
import com.gmail.dpierron.calibre.configuration.ConfigurationManager;
import com.gmail.dpierron.calibre.datamodel.Book;
import com.gmail.dpierron.calibre.datamodel.DataModel;
import com.gmail.dpierron.calibre.datamodel.Tag;
import com.gmail.dpierron.calibre.opds.Catalog;
import com.gmail.dpierron.tools.i18n.Localization;
import com.gmail.dpierron.calibre.opf.OpfOutput;
import com.gmail.dpierron.tools.Helper;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
/**
* @author David
*/
public class ReprocessEpubMetadataDialog extends javax.swing.JDialog {
private final static Logger logger = LogManager.getLogger(Catalog.class);
int maxScale;
double to30000;
int pos;
int position;
boolean stopThread = false;
boolean removeCss = false;
boolean restoreCss = false;
File defaultStyleSheet = null;
String onlyForTag = null;
/**
* Creates new form GenerateCatalogDialog
*/
public ReprocessEpubMetadataDialog(java.awt.Frame parent, boolean modal, boolean removeCss, boolean restoreCss, File defaultStyleSheet, String onlyForTag) {
super(parent, modal);
setLocationRelativeTo(parent);
initComponents();
this.removeCss = removeCss;
this.restoreCss = restoreCss;
this.defaultStyleSheet = defaultStyleSheet;
this.onlyForTag = onlyForTag;
}
public void start() {
Runnable runnable = new Runnable() {
public void run() {
try {
ReprocessEpubMetadataDialog.this.run();
} finally {
ReprocessEpubMetadataDialog.this.setVisible(false);
}
}
};
new Thread(runnable).start();
setVisible(true);
}
private void run() {
jProgress.setValue(0);
ConfigurationManager.getCurrentProfile().getDatabaseFolder();
DataModel.setUseLanguagesAsTags(ConfigurationManager.getCurrentProfile().getLanguageAsTag());
DataModel.preloadDataModel();
java.util.List<Book> books = null;
if (Helper.isNullOrEmpty(onlyForTag)) {
books = DataModel.getListOfBooks();
} else {
Tag theTag = null;
for (Tag tag : DataModel.getListOfTags()) {
if (tag.getName().equalsIgnoreCase(onlyForTag)) {
theTag = tag;
break;
}
}
if (theTag != null) {
books = DataModel.getMapOfBooksByTag().get(theTag);
}
}
setMaxScale(books.size());
for (Book book : books) {
if (stopThread)
break;
lblBookTitle.setText(book.getTitle());
OpfOutput opfOutput = new OpfOutput(book, removeCss, restoreCss, defaultStyleSheet);
try {
opfOutput.processEPubFile();
} catch (IOException e) {
String message = Localization.Main.getText("gui.error.tools.processEpubMetadataOfAllBooks", book.getTitle(), e.getMessage());
logger.error(message, e);
JOptionPane.showMessageDialog(this, message);
message = Localization.Main.getText("gui.error.tools.processEpubMetadataOfAllBooks2");
int result = JOptionPane.showConfirmDialog(this, message, "", JOptionPane.YES_NO_OPTION);
if (result != JOptionPane.YES_OPTION)
return;
}
incPosition();
}
if (!stopThread) {
String message = Localization.Main.getText("gui.finished.tools.processEpubMetadataOfAllBooks");
JOptionPane.showMessageDialog(this, message);
}
}
@Override
public void pack() {
super.pack();
Rectangle oldbounds = getBounds();
oldbounds.width += 10;
oldbounds.height += 10;
setBounds(oldbounds);
}
public void setMaxScale(long maxScale) {
if (maxScale > 30000) {
to30000 = 30000d / maxScale;
this.maxScale = 30000;
} else
this.maxScale = (int) maxScale;
jProgress.setMaximum(this.maxScale);
}
public void incPosition() {
position++;
int newPos;
if (to30000 > 0)
newPos = (int) (position * to30000);
else
newPos = position;
if (newPos > pos) {
jProgress.setValue(newPos + 8);
pos = newPos;
}
}
public void errorOccured(String message, Throwable error) {
String msg;
String title;
if (error != null) {
title = message;
if (Helper.isNullOrEmpty(title))
title = error.getClass().getName();
msg = Helper.getStackTrace(error);
} else {
msg = message;
title = "";
}
JOptionPane.showMessageDialog(this, msg, title, JOptionPane.ERROR_MESSAGE);
logger.error(message, error);
}
/**
* This method is called from within the constructor to reset the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed"
// <editor-fold defaultstate="collapsed"
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jProgress = new javax.swing.JProgressBar();
cmdCancel = new javax.swing.JButton();
lblBookTitle = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle(Localization.Main.getText("gui.tools.processEpubMetadataOfAllBooks")); // NOI18N
getContentPane().setLayout(new java.awt.GridBagLayout());
jProgress.setMaximum(61);
jProgress.setPreferredSize(new java.awt.Dimension(300, 19));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
getContentPane().add(jProgress, gridBagConstraints);
cmdCancel.setText("cmdCancel");
cmdCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdCancelActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
getContentPane().add(cmdCancel, gridBagConstraints);
lblBookTitle.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblBookTitle.setText("lblBookTitle");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
getContentPane().add(lblBookTitle, gridBagConstraints);
lblBookTitle.getAccessibleContext().setAccessibleName("null");
pack();
}// </editor-fold>//GEN-END:initComponents
private void cmdCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdCancelActionPerformed
stopThread = true;
}//GEN-LAST:event_cmdCancelActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cmdCancel;
private javax.swing.JProgressBar jProgress;
private javax.swing.JLabel lblBookTitle;
// End of variables declaration//GEN-END:variables
}