* allow to use xattr metaobject as template for testing format expressions against

This commit is contained in:
Reinhard Pointner 2012-10-27 04:57:24 +00:00
parent 130fd657c0
commit 06edf38d3f
1 changed files with 36 additions and 2 deletions

View File

@ -3,6 +3,7 @@ package net.sourceforge.filebot.ui.rename;
import static net.sourceforge.filebot.MediaTypes.*; import static net.sourceforge.filebot.MediaTypes.*;
import static net.sourceforge.filebot.Settings.*;
import static net.sourceforge.filebot.ui.NotificationLogging.*; import static net.sourceforge.filebot.ui.NotificationLogging.*;
import static net.sourceforge.tuned.ui.TunedUtilities.*; import static net.sourceforge.tuned.ui.TunedUtilities.*;
@ -28,6 +29,7 @@ import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.Compilable; import javax.script.Compilable;
import javax.script.ScriptException; import javax.script.ScriptException;
@ -57,6 +59,8 @@ import net.miginfocom.swing.MigLayout;
import net.sourceforge.filebot.ResourceManager; import net.sourceforge.filebot.ResourceManager;
import net.sourceforge.filebot.format.ExpressionFormat; import net.sourceforge.filebot.format.ExpressionFormat;
import net.sourceforge.filebot.format.MediaBindingBean; import net.sourceforge.filebot.format.MediaBindingBean;
import net.sourceforge.filebot.media.MediaDetection;
import net.sourceforge.filebot.media.MetaAttributes;
import net.sourceforge.filebot.mediainfo.MediaInfo; import net.sourceforge.filebot.mediainfo.MediaInfo;
import net.sourceforge.filebot.mediainfo.MediaInfo.StreamKind; import net.sourceforge.filebot.mediainfo.MediaInfo.StreamKind;
import net.sourceforge.filebot.mediainfo.MediaInfoException; import net.sourceforge.filebot.mediainfo.MediaInfoException;
@ -243,6 +247,13 @@ class BindingDialog extends JDialog {
public Object getInfoObject() { public Object getInfoObject() {
try { try {
// try known object
Object model = infoTextField.getClientProperty("model");
if (model != null) {
return model;
}
// or parse user input
return infoObjectFormat.parseObject(infoTextField.getText()); return infoObjectFormat.parseObject(infoTextField.getText());
} catch (Exception e) { } catch (Exception e) {
return null; return null;
@ -257,7 +268,6 @@ class BindingDialog extends JDialog {
return file.isAbsolute() ? file : null; return file.isAbsolute() ? file : null;
} }
protected final Action approveAction = new AbstractAction("Use Bindings", ResourceManager.getIcon("dialog.continue")) { protected final Action approveAction = new AbstractAction("Use Bindings", ResourceManager.getIcon("dialog.continue")) {
@Override @Override
@ -383,7 +393,31 @@ class BindingDialog extends JDialog {
if (chooser.showOpenDialog(getWindow(evt.getSource())) == JFileChooser.APPROVE_OPTION) { if (chooser.showOpenDialog(getWindow(evt.getSource())) == JFileChooser.APPROVE_OPTION) {
// update text field // update text field
mediaFileTextField.setText(chooser.getSelectedFile().getAbsolutePath()); File file = chooser.getSelectedFile();
// set file
mediaFileTextField.setText(file.getAbsolutePath());
// reset known model
infoTextField.putClientProperty("model", null);
infoTextField.setEnabled(true);
// set info object from xattr if possible
if (useExtendedFileAttributes()) {
try {
MetaAttributes xattr = new MetaAttributes(file);
try {
Object object = xattr.getMetaData();
infoTextField.setText(infoObjectFormat.format(object));
infoTextField.putClientProperty("model", object);
infoTextField.setEnabled(false);
} catch (Exception e) {
// ignore invalid data
}
} catch (Throwable e) {
Logger.getLogger(MediaDetection.class.getClass().getName()).warning("Failed to read xattr: " + e.getMessage());
}
}
} }
} }
}; };