package net.filebot.platform.gnome; import java.io.File; import java.net.URI; import com.sun.jna.Native; import com.sun.jna.Pointer; public class NativeGVFS implements GVFS { private static final LibGIO lib_gio = (LibGIO) Native.loadLibrary("gio-2.0", LibGIO.class); private static final Pointer gvfs = lib_gio.g_vfs_get_default(); public File getPathForURI(URI uri) { Pointer gfile = lib_gio.g_vfs_get_file_for_uri(gvfs, uri.toString()); Pointer chars = lib_gio.g_file_get_path(gfile); try { if (chars != null) { return new File(chars.getString(0)); } throw new IllegalArgumentException("Failed to locate local path: " + uri); } finally { lib_gio.g_object_unref(gfile); lib_gio.g_free(chars); } } @Override public String toString() { return String.format("%s [%s]", getClass().getSimpleName(), lib_gio); } }