* avoid GVFS initialization issues

This commit is contained in:
Reinhard Pointner 2013-02-03 06:50:54 +00:00
parent 0c46748575
commit 94013e2366
2 changed files with 15 additions and 10 deletions

View File

@ -3,15 +3,11 @@ package net.sourceforge.filebot.gio;
import com.sun.jna.Library; import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
interface GIOLibrary extends Library { interface GIOLibrary extends Library {
GIOLibrary INSTANCE = (GIOLibrary) Native.loadLibrary("gio-2.0", GIOLibrary.class);
void g_type_init(); void g_type_init();

View File

@ -5,26 +5,35 @@ package net.sourceforge.filebot.gio;
import java.io.File; import java.io.File;
import java.net.URI; import java.net.URI;
import com.sun.jna.Native;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
public class GVFS { public class GVFS {
private static GIOLibrary lib;
private static Pointer gvfs; private static Pointer gvfs;
private synchronized static GIOLibrary getLibrary() {
if (lib == null) {
lib = (GIOLibrary) Native.loadLibrary("gio-2.0", GIOLibrary.class);
}
return lib;
}
public synchronized static Pointer getDefaultVFS() { public synchronized static Pointer getDefaultVFS() {
if (gvfs == null) { if (gvfs == null) {
GIOLibrary.INSTANCE.g_type_init(); gvfs = getLibrary().g_vfs_get_default();
gvfs = GIOLibrary.INSTANCE.g_vfs_get_default();
} }
return gvfs; return gvfs;
} }
public static File getPathForURI(URI uri) { public static File getPathForURI(URI uri) {
Pointer gfile = GIOLibrary.INSTANCE.g_vfs_get_file_for_uri(getDefaultVFS(), uri.toString()); Pointer gfile = getLibrary().g_vfs_get_file_for_uri(getDefaultVFS(), uri.toString());
Pointer chars = GIOLibrary.INSTANCE.g_file_get_path(gfile); Pointer chars = getLibrary().g_file_get_path(gfile);
try { try {
if (chars != null) if (chars != null)
@ -32,8 +41,8 @@ public class GVFS {
else else
return null; return null;
} finally { } finally {
GIOLibrary.INSTANCE.g_object_unref(gfile); getLibrary().g_object_unref(gfile);
GIOLibrary.INSTANCE.g_free(chars); getLibrary().g_free(chars);
} }
} }