package com.vuze.tests.swt;
import java.util.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.BrowserFunction;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.minicastle.util.Strings;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.ui.swt.Utils;
import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.AzureusCoreLifecycleAdapter;
public class testBrowserFunc
{
public static void main(String[] args) {
Display display = new Display();
AzureusCore core = AzureusCoreFactory.create();
core.addLifecycleListener(new AzureusCoreLifecycleAdapter() {
public void started(final AzureusCore core) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
open(core);
}
});
}
});
core.start();
while (!display.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
}
private static void open(final AzureusCore core) {
Display display = Display.getDefault();
final Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setLayout(new FillLayout());
final Browser b1 = new Browser(shell, SWT.NONE);
String s = "" +
"<SCRIPT type=\"text/javascript\">" +
"" +
"var btapp = {" +
"peer_id : eval(bt2vuze('peer_id')), " +
"settings : \n {" +
" all : function() { return eval(bt2vuze('settings.all')) }, \n" +
" keys : function() { return eval(bt2vuze('settings.keys')) }, \n" +
" get : function(key) { return eval(bt2vuze('settings.get', key)) }, \n" +
" set : function(key, val) { return eval(bt2vuze('settings.set', key, val)) }, \n" +
"},\n" +
"add : \n {" +
" torrent : function(tor) { return eval(bt2vuze('add.torrent', tor)) }, \n" +
" rss_feed : function() { return eval(bt2vuze('add.rss_feed')) }, \n" +
" rss_filter : function() { return eval(bt2vuze('add.rss_filter')) }, \n" +
"},\n" +
"events : \n {" +
" set : function(key, func) { return eval(bt2vuze('events.set', key, func)) }, \n" +
"},\n" +
"torrent : \n {" +
" all : function() { return eval(bt2vuze('torrent.all')) }, \n" +
" keys : function() { return eval(bt2vuze('torrent.keys')) }, \n" +
" get : function(key) { return eval(bt2vuze('torrent.get', key)) }, \n" +
"},\n" +
"}\n" +
// "var foo =btapp.peer_id; " +
// "alert(foo);\n" +
// "alert(btapp.settings.all());\n" +
"</script>\n" +
"<A HREF=\"\" ONCLICK=\"alert(btapp.peer_id); return false;\">peer_id</A><BR>" +
"<A HREF=\"\" ONCLICK=\"alert(btapp.settings.all()); return false;\">settings.all()</A><BR>" +
"<A HREF=\"\" ONCLICK=\"alert(btapp.settings.keys()); return false;\">settings.keys()</A><BR>" +
"<A HREF=\"\" ONCLICK=\"alert(btapp.settings.get('max_downloads')); return false;\">settings.get('max_downloads')</A><BR>" +
"<A HREF=\"\" ONCLICK=\"var foo = btapp.settings.all(); alert(foo.toString()); return false;\">Test1</A><BR>" +
"<A HREF=\"\" ONCLICK=\"alert(String(btapp.settings.all())); return false;\">Test1</A><BR>" +
"<A HREF=\"\" ONCLICK=\"alert(btapp.settings.all()); return false;\">Test1</A><BR>" +
"";
new BrowserFunction(b1, "btapp") {
public Object function(Object[] arguments) {
System.out.println("GOO");
return "{ id : 'foo' }";
}
};
new BrowserFunction(b1, "bt2vuze_peer_id") {
public Object function(Object[] arguments) {
System.out.println("GOO");
return "({ id : \"foo\" })";
}
};
new BrowserFunction(b1, "bt2vuze") {
public Object function(Object[] arguments) {
if (arguments.length == 0) {
return null;
}
if (!(arguments[0] instanceof String)) {
return null;
}
String func = (String) arguments[0];
String result = process(func, arguments);
System.out.println("Func " + Arrays.toString(arguments) + ": " + result);
return result;
}
private String process(String func, Object[] args) {
String lfunc = func.toLowerCase();
if (lfunc.equals("peer_id")) {
// We generate peer_id per torrent.. so just fudge this
return "('VuzeConstantPeerID')";
} else if (lfunc.equals("settings.all")) {
StringBuffer sb = new StringBuffer();
sb.append("({");
Map<String, Object> allSettings = getAllSettings();
boolean first = true;
for (Iterator<String> iter = allSettings.keySet().iterator(); iter.hasNext();) {
String key = iter.next();
if (first) {
first = false;
} else {
sb.append(", ");
}
sb.append('\"');
sb.append(key);
sb.append("\" : \"");
sb.append(allSettings.get(key));
sb.append('\"');
}
sb.append("})");
return sb.toString();
} else if (lfunc.equals("settings.keys")) {
StringBuffer sb = new StringBuffer();
sb.append("([");
Map<String, Object> allSettings = getAllSettings();
boolean first = true;
for (Iterator<String> iter = allSettings.keySet().iterator(); iter.hasNext();) {
String key = iter.next();
if (first) {
first = false;
} else {
sb.append(", ");
}
sb.append('\"');
sb.append(key);
sb.append('\"');
}
sb.append("])");
return sb.toString();
} else if (lfunc.equals("settings.get")) {
Map<String, Object> allSettings = getAllSettings();
Object object = allSettings.get(args[1]);
StringBuffer sb = new StringBuffer();
sb.append("(\"");
sb.append(object);
sb.append("\")");
return sb.toString();
} else if (lfunc.equals("settings.set")) {
} else if (lfunc.equals("add.torrent")) {
}
return null;
}
};
shell.open();
b1.setText(s);
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
display.dispose ();
core.stop();
}
protected static Map<String, Object> getAllSettings() {
Map<String, Object> map = new HashMap<String, Object>();
String[] keys = { "max_downloads", "max downloads" };
for (int i = 0; i < keys.length; i += 2) {
String btKey = keys[i];
String azKey = keys[i + 1];
map.put(btKey, COConfigurationManager.getParameter(azKey));
}
return map;
}
}