package com.limegroup.gnutella.gui; import javax.swing.SwingUtilities; import com.limegroup.gnutella.browser.ExternalControl; /** * JNI based GetURL AppleEvent handler for Mac OS X */ public final class GURLHandler { static { System.loadLibrary("GURL"); } private static final GURLHandler INSTANCE = new GURLHandler(); private boolean registered = false; private boolean enabled = false; private String url; private GURLHandler() { } public static GURLHandler getInstance() { return INSTANCE; } /** Called by the native code */ private void callback(final String url) { if ( enabled && ExternalControl.isInitialized() ) { Runnable runner = new Runnable() { public void run() { try { ExternalControl.handleMagnetRequest(url); } catch(Throwable t) { // Make sure we catch any errors. GUIMediator.showInternalError(t); } } }; SwingUtilities.invokeLater(runner); } else { this.url = url; } } /** * */ public void enable() { ExternalControl.enqueueMagnetRequest(url); this.url = null; this.enabled = true; } /** Registers the GetURL AppleEvent handler. */ public void register() { if (!registered) { if (InstallEventHandler() == 0) { registered = true; } } } /** We're nice guys and remove the GetURL AppleEvent handler although this never happens */ protected void finalize() throws Throwable { if (registered) { RemoveEventHandler(); } } private synchronized final native int InstallEventHandler(); private synchronized final native int RemoveEventHandler(); }