From d810af37d2f2f24de4a736b630f30805bc868085 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Fri, 25 Apr 2014 06:59:18 +0000 Subject: [PATCH] + xattr support for Mac OSX --- build.xml | 4 + lib/native/mac-x86_64/libxattrj.dylib | Bin 0 -> 19596 bytes lib/xattrj.jar | Bin 0 -> 17890 bytes source/net/filebot/MetaAttributeView.java | 128 ++++++++++++------ .../net/filebot/cli/ScriptShellMethods.java | 16 ++- source/net/filebot/media/MetaAttributes.java | 4 +- .../net/filebot/ui/rename/HistoryDialog.java | 9 +- 7 files changed, 114 insertions(+), 47 deletions(-) create mode 100644 lib/native/mac-x86_64/libxattrj.dylib create mode 100644 lib/xattrj.jar diff --git a/build.xml b/build.xml index 49b63a4f..98c635b1 100644 --- a/build.xml +++ b/build.xml @@ -181,6 +181,10 @@ + + + + diff --git a/lib/native/mac-x86_64/libxattrj.dylib b/lib/native/mac-x86_64/libxattrj.dylib new file mode 100644 index 0000000000000000000000000000000000000000..51687e4044ac4f9bd11ae92b64a887e284b7a622 GIT binary patch literal 19596 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 literal 0 HcmV?d00001 diff --git a/lib/xattrj.jar b/lib/xattrj.jar new file mode 100644 index 0000000000000000000000000000000000000000..12ed6d4a9ecc33a20990a55ca23b5fe73e59e3f7 GIT binary patch literal 17890 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 z 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 MZvzj%LjeH%KU;~!A^-pY literal 0 HcmV?d00001 diff --git a/source/net/filebot/MetaAttributeView.java b/source/net/filebot/MetaAttributeView.java index 74dbb4ef..8a207dca 100644 --- a/source/net/filebot/MetaAttributeView.java +++ b/source/net/filebot/MetaAttributeView.java @@ -10,13 +10,30 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.UserDefinedFileAttributeView; import java.util.AbstractMap; +import java.util.Arrays; import java.util.LinkedHashSet; +import java.util.List; import java.util.Set; +import org.securityvision.xattrj.Xattrj; + +import com.sun.jna.Platform; + public class MetaAttributeView extends AbstractMap { - private final UserDefinedFileAttributeView attributeView; - private final Charset encoding; + // UserDefinedFileAttributeView (for Windows and Linux) OR 3rd party Xattrj (for Mac) because UserDefinedFileAttributeView is not supported (Oracle Java 7/8) + private Object xattr; + private File file; + private Charset encoding; + + private static Xattrj MacXattrSupport; + + private static synchronized Xattrj getMacXattrSupport() throws Throwable { + if (MacXattrSupport == null) { + MacXattrSupport = new Xattrj(); + } + return MacXattrSupport; + } public MetaAttributeView(File file) throws IOException { Path path = file.getCanonicalFile().toPath(); @@ -28,49 +45,98 @@ public class MetaAttributeView extends AbstractMap { path = link; } - attributeView = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); - if (attributeView == null) { - throw new IOException("UserDefinedFileAttributeView is not supported"); + xattr = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class); + + // try 3rd party Xattrj library + if (xattr == null) { + if (Platform.isMac()) { + try { + xattr = getMacXattrSupport(); + } catch (Throwable e) { + throw new IOException("Unable to load library: xattrj", e); + } + } else { + throw new IOException("UserDefinedFileAttributeView is not supported"); + } } - encoding = Charset.forName("UTF-8"); + + this.file = path.toFile(); + this.encoding = Charset.forName("UTF-8"); } @Override public String get(Object key) { try { - ByteBuffer buffer = ByteBuffer.allocate(attributeView.size(key.toString())); - attributeView.read(key.toString(), buffer); - buffer.flip(); + if (xattr instanceof UserDefinedFileAttributeView) { + UserDefinedFileAttributeView attributeView = (UserDefinedFileAttributeView) xattr; + ByteBuffer buffer = ByteBuffer.allocate(attributeView.size(key.toString())); + attributeView.read(key.toString(), buffer); + buffer.flip(); - return encoding.decode(buffer).toString(); - } catch (IOException e) { - return null; + return encoding.decode(buffer).toString(); + } + + if (xattr instanceof Xattrj) { + Xattrj macXattr = (Xattrj) xattr; + return macXattr.readAttribute(file, key.toString()); + } + } catch (Exception e) { + // ignore } + + return null; } @Override public String put(String key, String value) { try { - if (value == null || value.isEmpty()) { - attributeView.delete(key); - } else { - attributeView.write(key, encoding.encode(value)); + if (xattr instanceof UserDefinedFileAttributeView) { + UserDefinedFileAttributeView attributeView = (UserDefinedFileAttributeView) xattr; + if (value == null || value.isEmpty()) { + attributeView.delete(key); + } else { + attributeView.write(key, encoding.encode(value)); + } } - } catch (IOException e) { + + if (xattr instanceof Xattrj) { + Xattrj macXattr = (Xattrj) xattr; + if (value == null || value.isEmpty()) { + macXattr.removeAttribute(file, key); + } else { + macXattr.writeAttribute(file, key, value); + } + } + } catch (Exception e) { throw new IllegalStateException(e); } + return null; // since we don't know the old value } + public List list() throws IOException { + if (xattr instanceof UserDefinedFileAttributeView) { + UserDefinedFileAttributeView attributeView = (UserDefinedFileAttributeView) xattr; + return attributeView.list(); + } + + if (xattr instanceof Xattrj) { + Xattrj macXattr = (Xattrj) xattr; + return Arrays.asList(macXattr.listAttributes(file)); + } + + return null; + } + @Override public Set> entrySet() { try { Set> entries = new LinkedHashSet>(); - for (String name : attributeView.list()) { + for (String name : this.list()) { entries.add(new AttributeEntry(name)); } return entries; - } catch (IOException e) { + } catch (Exception e) { throw new IllegalStateException(e); } } @@ -78,28 +144,10 @@ public class MetaAttributeView extends AbstractMap { @Override public void clear() { try { - for (String it : attributeView.list()) { - attributeView.delete(it); + for (String key : this.list()) { + this.put(key, null); } - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - @Override - public int size() { - try { - return attributeView.list().size(); - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - @Override - public boolean isEmpty() { - try { - return attributeView.list().isEmpty(); - } catch (IOException e) { + } catch (Exception e) { throw new IllegalStateException(e); } } diff --git a/source/net/filebot/cli/ScriptShellMethods.java b/source/net/filebot/cli/ScriptShellMethods.java index 26eabd56..edcc7dd1 100644 --- a/source/net/filebot/cli/ScriptShellMethods.java +++ b/source/net/filebot/cli/ScriptShellMethods.java @@ -24,6 +24,7 @@ import java.util.Map; import net.filebot.MediaTypes; import net.filebot.MetaAttributeView; +import net.filebot.Settings; import net.filebot.media.MediaDetection; import net.filebot.media.MetaAttributes; import net.filebot.similarity.NameSimilarityMetric; @@ -362,17 +363,24 @@ public class ScriptShellMethods { public static MetaAttributeView getXattr(File self) { try { - return new MetaAttributeView(self); + if (Settings.useExtendedFileAttributes()) { + return new MetaAttributeView(self); + } } catch (Exception e) { - return null; + // ignore } + return null; } public static Object getMetadata(File self) { try { - return new MetaAttributes(self); + if (Settings.useExtendedFileAttributes()) { + return new MetaAttributes(self); + } } catch (Exception e) { - return null; + // ignore } + return null; } + } diff --git a/source/net/filebot/media/MetaAttributes.java b/source/net/filebot/media/MetaAttributes.java index db54c5e2..3cd67f68 100644 --- a/source/net/filebot/media/MetaAttributes.java +++ b/source/net/filebot/media/MetaAttributes.java @@ -61,8 +61,8 @@ public class MetaAttributes { } public void clear() { - metaAttributeView.remove(FILENAME_KEY); - metaAttributeView.remove(METADATA_KEY); + metaAttributeView.put(FILENAME_KEY, null); + metaAttributeView.put(METADATA_KEY, null); } } diff --git a/source/net/filebot/ui/rename/HistoryDialog.java b/source/net/filebot/ui/rename/HistoryDialog.java index 80b0ec26..d4ef5bc7 100644 --- a/source/net/filebot/ui/rename/HistoryDialog.java +++ b/source/net/filebot/ui/rename/HistoryDialog.java @@ -68,6 +68,8 @@ import net.filebot.History; import net.filebot.History.Element; import net.filebot.History.Sequence; import net.filebot.ResourceManager; +import net.filebot.Settings; +import net.filebot.media.MetaAttributes; import net.filebot.ui.transfer.FileExportHandler; import net.filebot.ui.transfer.FileTransferablePolicy; import net.filebot.ui.transfer.LoadAction; @@ -534,8 +536,13 @@ class HistoryDialog extends JDialog { for (Entry entry : getRenameMap(directory).entrySet()) { try { - moveRename(entry.getKey(), entry.getValue()); + File destination = moveRename(entry.getKey(), entry.getValue()); count++; + + // remove xattr that may have been set + if (Settings.useExtendedFileAttributes()) { + new MetaAttributes(destination).clear(); + } } catch (Exception e) { Logger.getLogger(HistoryDialog.class.getName()).log(Level.SEVERE, e.getMessage(), e); }