final Engine engine = getEngineFromId(engine_id);
if ( engine != null && engine instanceof WebEngine){
final WebEngine webEngine = (WebEngine) engine;
Utils.execSWTThread( new Runnable() {
public void run() {
new ExternalLoginWindow(
new ExternalLoginListener()
{
private String previous_cookies;
private boolean search_done;
public void
canceled(
ExternalLoginWindow window )
{
/* gouss doesn't wan't anything on cancel
if ( !outcome_informed ){
outcome_informed = true;
Map params = getParams( webEngine );
params.put( "error", "operation cancelled" );
sendBrowserMessage("metasearch", "engineFailed", params );
}
*/
}
public void
cookiesFound(
ExternalLoginWindow window,
String cookies )
{
if ( handleCookies( cookies, false )){
window.close();
}
}
public void
done(
ExternalLoginWindow window,
String cookies )
{
handleCookies( cookies, true );
/*
if ( !outcome_informed ){
outcome_informed = true;
Map params = getParams( webEngine );
sendBrowserMessage("metasearch", "engineCompleted", params );
}
*/
}
private boolean
handleCookies(
String cookies,
boolean force_if_ready )
{
if ( search_done ){
return( false );
}
String[] required = webEngine.getRequiredCookies();
boolean skip_search = required.length == 0 && !force_if_ready;
if ( CookieParser.cookiesContain( required, cookies )){
webEngine.setCookies(cookies);
if ( previous_cookies == null || !previous_cookies.equals( cookies )){
previous_cookies = cookies;
if ( !skip_search ){
// search operation will report outcome
search_done = true;
search( decodedMap, webEngine );
}
}
}
return( search_done );
}
/*
protected Map
getParams(
Engine engine )
{
Map params = new HashMap();
params.put("id", new Long(engine.getId()));
params.put("name", engine.getName());
params.put("favicon", engine.getIcon());
params.put("dl_link_css", engine.getDownloadLinkCSS());
params.put("shareable", new Boolean( engine.isShareable()));
if ( sid != null ){
params.put( "sid", sid );
}
return( params );
}
*/
},
webEngine.getName(),
webEngine.getLoginPageUrl(),
false,
webEngine.getAuthMethod(),
engine.isMine());
}
});
}else{
Map params = new HashMap();
if ( sid != null ){
params.put( "sid", sid );
}
params.put( "error", "engine not found or not a web engine" );
sendBrowserMessage("metasearch", "engineFailed", params );
}
} else if(OP_GET_LOGIN_COOKIES.equals(opid)) {
final Map decodedMap = message.getDecodedMap();
final String url = ((String) decodedMap.get("url")).replaceAll("%s", "");
Utils.execSWTThread( new Runnable() {
public void run() {
new ExternalLoginWindow(
new ExternalLoginListener()
{
public void canceled(ExternalLoginWindow window) {
sendBrowserMessage("metasearch", "setCookiesFailed", new HashMap() );
};
public void cookiesFound(ExternalLoginWindow window, String cookies) {};
public void done(ExternalLoginWindow window, String cookies) {
String[] cookieNames = CookieParser.getCookiesNames(cookies);
Map params = new HashMap();
params.put("cookieNames", cookieNames);
params.put("currentCookie",cookies);
params.put("cookieMethod", window.proxyCaptureModeRequired()?WebEngine.AM_PROXY:WebEngine.AM_TRANSPARENT );
sendBrowserMessage("metasearch", "setCookies", params );
};
},
url,
url,
true,
WebEngine.AM_PROXY,
true );
}
});
} else if(OP_GET_ENGINES.equals(opid)) {
String subscriptionId = null;
try {
final Map decodedMap = message.getDecodedMap();
subscriptionId = ((String)decodedMap.get("subs_id"));
} catch(Exception e) {
//No parameters
}
Engine[] engines = null;
if ( subscriptionId != null ){
engines = new Engine[0];
Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( subscriptionId );
if ( subs != null ){
try{
Engine engine = subs.getEngine();
if ( engine != null ){
engines = new Engine[]{ engine };
}
}catch( Throwable e ){
Debug.out( e );
}
}
}
if ( engines == null ){
engines = metaSearchManager.getMetaSearch().getEngines( true, true );
}
List params = new ArrayList();
for(int i = 0 ; i < engines.length ; i++) {
Engine engine = engines[i];
if ( !engine.isActive() || engine.getSource() == Engine.ENGINE_SOURCE_UNKNOWN ){
// don't skip if this is an explicit get
if ( subscriptionId == null ){
continue;
}
}
Map engineMap = new HashMap();
engineMap.put("id", new Long(engine.getId()));
engineMap.put("name", engine.getName());
engineMap.put("favicon", engine.getIcon());
engineMap.put("dl_link_css", engine.getDownloadLinkCSS());
engineMap.put("selected", Engine.SEL_STATE_STRINGS[ engine.getSelectionState()]);
engineMap.put("type", Engine.ENGINE_SOURCE_STRS[ engine.getSource()]);
engineMap.put("shareable", new Boolean( engine.isShareable()));
params.add(engineMap);
}
sendBrowserMessage("metasearch", "enginesUsed",params);
} else if(OP_GET_ALL_ENGINES.equals(opid)) {
Engine[] engines = metaSearchManager.getMetaSearch().getEngines( false, true );
List params = new ArrayList();
for(int i = 0 ; i < engines.length ; i++) {
Engine engine = engines[i];
if ( engine.getSource() == Engine.ENGINE_SOURCE_UNKNOWN ){
continue;
}
Map engineMap = new HashMap();
engineMap.put("id", new Long(engine.getId()));
engineMap.put("name", engine.getName());
engineMap.put("favicon", engine.getIcon());
engineMap.put("dl_link_css", engine.getDownloadLinkCSS());
engineMap.put("selected", Engine.SEL_STATE_STRINGS[ engine.getSelectionState()]);
engineMap.put("type", Engine.ENGINE_SOURCE_STRS[ engine.getSource()]);
engineMap.put("shareable", new Boolean( engine.isShareable()));
params.add(engineMap);
}
sendBrowserMessage("metasearch", "engineList",params);
} else if( OP_SET_SELECTED_ENGINES.equals(opid)){
Map decodedMap = message.getDecodedMap();
List template_ids = (List)decodedMap.get( "template_ids" );
long[] ids = new long[template_ids.size()];
for (int i=0;i<ids.length;i++ ){
Map m = (Map)template_ids.get(i);
ids[i] = ((Long)m.get("id")).longValue();
}
boolean auto = ((Boolean)decodedMap.get( "auto" )).booleanValue();
// there's some code that attempts to switch to 'auto=true' on first use as
// when 3110 defaults to false and the decision was made to switch this
// disable the behaviour if we are customised
Boolean is_default = (Boolean)decodedMap.get( "set_default" );
boolean skip = false;
if ( is_default != null && is_default.booleanValue()){
if ( CustomizationManagerFactory.getSingleton().getActiveCustomization() != null ){
skip = true;
}
}
try{
if ( !skip ){
metaSearchManager.setSelectedEngines( ids, auto );
}
Map params = new HashMap();
sendBrowserMessage("metasearch", "setSelectedCompleted",params);
}catch( Throwable e ){
Map params = new HashMap();
params.put("error",Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "setSelectedFailed",params);
}
} else if( OP_CHANGE_ENGINE_SELECTION.equals(opid)){
Map decodedMap = message.getDecodedMap();
MetaSearch ms = metaSearchManager.getMetaSearch();
Engine[] engines = ms.getEngines( false, true );
Set selected = new HashSet();
for (int i=0;i<engines.length;i++){
Engine e = engines[i];
if ( e.getSelectionState() == Engine.SEL_STATE_MANUAL_SELECTED ){
selected.add( new Long( e.getId()));
}
}
List l_engines = (List)decodedMap.get( "engines" );
for (int i=0;i<l_engines.size();i++){
Map map = (Map)l_engines.get(i);
long id = ((Long)map.get("id")).longValue();
String str = (String)map.get( "selected");
if ( str.equalsIgnoreCase( Engine.SEL_STATE_STRINGS[Engine.SEL_STATE_MANUAL_SELECTED])){
selected.add( new Long( id ));
}else if ( str.equalsIgnoreCase( Engine.SEL_STATE_STRINGS[Engine.SEL_STATE_DESELECTED])){
selected.remove( new Long( id ));
}
}
long[] ids = new long[selected.size()];
Iterator it = selected.iterator();
int pos = 0;
while( it.hasNext()){
long id = ((Long)it.next()).longValue();
ids[pos++] = id;
}
try{
metaSearchManager.setSelectedEngines( ids, metaSearchManager.isAutoMode());
Map params = new HashMap();
sendBrowserMessage("metasearch", "changeEngineSelectionCompleted",params);
}catch( Throwable e ){
Map params = new HashMap();
params.put("error",Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "changeEngineSelectionFailed",params);
}
} else if(OP_GET_AUTO_MODE.equals(opid)) {
boolean mode = metaSearchManager.isAutoMode();
Map params = new HashMap();
params.put( "auto", new Boolean( mode ));
boolean custom = CustomizationManagerFactory.getSingleton().getActiveCustomization() != null;
params.put( "is_custom", new Boolean( custom ));
sendBrowserMessage("metasearch", "getAutoModeResult",params);
} else if( OP_SAVE_TEMPLATE.equals(opid)){
Map decodedMap = message.getDecodedMap();
String type_str = (String)decodedMap.get( "type" );
String name = (String)decodedMap.get( "name" );
Long l_id = (Long)decodedMap.get( "id" );
long id = l_id == null?-1:l_id.longValue();
String json = (String)decodedMap.get( "value" );
String cookies = (String)decodedMap.get( "current_cookie" );
try{
Engine engine =
metaSearchManager.addEngine(
id,
type_str.equals( "json" )?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
name,
json );
engine.setMine( true );
if(cookies!= null && engine instanceof WebEngine) {
WebEngine we = (WebEngine) engine;
we.setCookies(cookies);
}
Map params = new HashMap();
params.put( "id", new Long( engine.getId() ));
sendBrowserMessage( "metasearch", "saveTemplateCompleted", params );
}catch( Throwable e ){
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put("error",Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "saveTemplateFailed",params);
}
} else if( OP_LOAD_TEMPLATE.equals(opid)){
Map decodedMap = message.getDecodedMap();
long id = ((Long)decodedMap.get( "id" )).longValue();
Engine engine = metaSearchManager.getMetaSearch().getEngine( id );
if ( engine == null ){
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put("error","Template not found");
sendBrowserMessage("metasearch", "loadTemplateFailed",params);
}else{
try{
Map params = new HashMap();
params.put("id", new Long(engine.getId()));
params.put("name", engine.getName());
params.put("type", Engine.ENGINE_TYPE_STRS[ engine.getType()]);
params.put("value", JSONObject.escape( engine.exportToJSONString()));
params.put("shareable", new Boolean( engine.isShareable()));
params.put("uid", engine.getUID());
params.put("supports_direct_download",
new Boolean( engine.supportsField( Engine.FIELD_TORRENTLINK ) ||
engine.supportsField( Engine.FIELD_DOWNLOADBTNLINK )));
params.put( "auto_dl_supported", new Boolean( engine.getAutoDownloadSupported() == Engine.AUTO_DL_SUPPORTED_YES ));
sendBrowserMessage( "metasearch", "loadTemplateCompleted", params );
}catch( Throwable e ){
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put("error",Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "loadTemplateFailed",params);
}
}
} else if( OP_DELETE_TEMPLATE.equals(opid)){
Map decodedMap = message.getDecodedMap();
long id = ((Long)decodedMap.get( "id" )).longValue();
Engine engine = metaSearchManager.getMetaSearch().getEngine( id );
if ( engine == null ){
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put( "error", "Template not found" );
sendBrowserMessage("metasearch", "deleteTemplateFailed",params);
}else if ( engine.getSource() != Engine.ENGINE_SOURCE_LOCAL ){
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put( "error", "Template is not local" );
sendBrowserMessage("metasearch", "deleteTemplateFailed",params);
}else{
engine.delete();
Map params = new HashMap();
params.put( "id", new Long( id ));
sendBrowserMessage( "metasearch", "deleteTemplateCompleted", params );
}
} else if( OP_TEST_TEMPLATE.equals(opid)){
Map decodedMap = message.getDecodedMap();
final long id = ((Long)decodedMap.get( "id" )).longValue();
long match_count = ((Long)decodedMap.get( "max_matches" )).longValue();
String searchText = (String) decodedMap.get("searchText");
String headers = (String) decodedMap.get("headers");
final Long sid = (Long)decodedMap.get( "sid" );
Engine engine = metaSearchManager.getMetaSearch().getEngine( id );
if ( engine == null ){
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put( "error", "Template not found" );
if ( sid != null )params.put( "sid", sid );
sendBrowserMessage("metasearch", "testTemplateFailed",params);
}else{
SearchParameter parameter = new SearchParameter("s",searchText);
SearchParameter[] parameters = new SearchParameter[] {parameter};
try{
engine.search(
parameters,
new HashMap(),
(int)match_count,
(int)match_count,
headers,
new ResultListener()
{
private String content;
private List matches = new ArrayList();
public void
contentReceived(
Engine engine,
String _content )
{
content = _content;
}
public void
matchFound(
Engine engine,
String[] fields)
{
matches.add( fields );
}
public void
resultsReceived(
Engine engine,
Result[] results )
{
}
public void
resultsComplete(
Engine engine )
{
Map params = new HashMap();
params.put( "id", new Long( id ));
if ( sid != null )params.put( "sid", sid );
params.put( "content", JSONObject.escape( content ));
JSONArray l_matches = new JSONArray();
params.put( "matches", l_matches );
for (int i=0;i<matches.size();i++){
String[] match = (String[])matches.get(i);
JSONArray l_match = new JSONArray();
l_matches.add( l_match );
for (int j=0;j<match.length;j++){
l_match.add( match[j] );
}
}
sendBrowserMessage( "metasearch", "testTemplateCompleted", params );
}
public void
engineFailed(
Engine engine,
Throwable e )
{
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put( "error", Debug.getNestedExceptionMessage( e ));
if ( sid != null )params.put( "sid", sid );
sendBrowserMessage("metasearch", "testTemplateFailed",params);
}
public void
engineRequiresLogin(
Engine engine,
Throwable e )
{
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put( "error", Debug.getNestedExceptionMessage( e ));
if ( sid != null )params.put( "sid", sid );
sendBrowserMessage("metasearch", "testTemplateRequiresLogin",params);
}
});
}catch( SearchException e ){
// listener handles
}
}
} else if ( OP_EXPORT_TEMPLATE.equals(opid)){
Map decodedMap = message.getDecodedMap();
final long id = ((Long)decodedMap.get( "id" )).longValue();
final Engine engine = metaSearchManager.getMetaSearch().getEngine( id );
if ( engine == null ){
Map params = new HashMap();
params.put( "error", "template '" + id + "' not found" );
sendBrowserMessage("metasearch", "exportTemplateFailed",params);
}else{
final Shell shell = Utils.findAnyShell();
shell.getDisplay().asyncExec(
new AERunnable()
{
public void
runSupport()
{
FileDialog dialog =
new FileDialog( shell, SWT.SYSTEM_MODAL | SWT.SAVE );
dialog.setFilterPath( TorrentOpener.getFilterPathData() );
dialog.setText(MessageText.getString("metasearch.export.select.template.file"));
dialog.setFilterExtensions(new String[] {
"*.vuze",
"*.vuz",
Constants.FILE_WILDCARD
});
dialog.setFilterNames(new String[] {
"*.vuze",
"*.vuz",
Constants.FILE_WILDCARD
});
String path = TorrentOpener.setFilterPathData( dialog.open());
if ( path != null ){
String lc = path.toLowerCase();
if ( !lc.endsWith( ".vuze" ) && !lc.endsWith( ".vuz" )){
path += ".vuze";
}
try{
engine.exportToVuzeFile( new File( path ));
Map params = new HashMap();
params.put( "id", new Long( id ));
sendBrowserMessage( "metasearch", "exportTemplateCompleted", params );
}catch( Throwable e ){
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put( "error", "save failed: " + Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "exportTemplateFailed",params);
}
}else{
Map params = new HashMap();
params.put( "id", new Long( id ));
params.put( "error", "operation cancelled" );
sendBrowserMessage("metasearch", "exportTemplateFailed",params);
}
}
});
}
}else if ( OP_IMPORT_TEMPLATE.equals(opid)){
final Shell shell = Utils.findAnyShell();
shell.getDisplay().asyncExec(
new AERunnable()
{
public void
runSupport()
{
FileDialog dialog =
new FileDialog( shell, SWT.SYSTEM_MODAL | SWT.OPEN );
dialog.setFilterPath( TorrentOpener.getFilterPathData() );
dialog.setText(MessageText.getString("metasearch.import.select.template.file"));
dialog.setFilterExtensions(new String[] {
"*.vuze",
"*.vuz",
Constants.FILE_WILDCARD
});
dialog.setFilterNames(new String[] {
"*.vuze",
"*.vuz",
Constants.FILE_WILDCARD
});
String path = TorrentOpener.setFilterPathData( dialog.open());
if ( path != null ){
VuzeFileHandler vfh = VuzeFileHandler.getSingleton();
VuzeFile vf = vfh.loadAndHandleVuzeFile( path, VuzeFileComponent.COMP_TYPE_METASEARCH_TEMPLATE );
if ( vf == null ){
Map params = new HashMap();
params.put( "error", "invalid .vuze file" );
sendBrowserMessage("metasearch", "importTemplateFailed",params);
}else{
VuzeFileComponent[] comps = vf.getComponents();
for (int i=0;i<comps.length;i++){
VuzeFileComponent comp = comps[i];
if ( comp.getType() == VuzeFileComponent.COMP_TYPE_METASEARCH_TEMPLATE ){
Engine engine = (Engine)comp.getData( Engine.VUZE_FILE_COMPONENT_ENGINE_KEY );
if ( engine != null ){
Map params = new HashMap();
params.put( "id", new Long( engine.getId()));
sendBrowserMessage( "metasearch", "importTemplateCompleted", params );
return;
}
}
}
Map params = new HashMap();
params.put( "error", "invalid search template file" );
sendBrowserMessage("metasearch", "importTemplateFailed",params);
}
}else{
Map params = new HashMap();
// don't change this message as the UI uses it!
params.put( "error", "operation cancelled" );
sendBrowserMessage("metasearch", "importTemplateFailed",params);
}
}
});
}else if ( OP_OPEN_SEARCH_RESULTS.equals(opid)){
Map decodedMap = message.getDecodedMap();
openCloseSearchDetailsListener.openSearchResults(decodedMap);
}else if ( OP_CLOSE_SEARCH_RESULTS.equals(opid)){
Map decodedMap = message.getDecodedMap();
openCloseSearchDetailsListener.closeSearchResults(decodedMap);
}else if(OP_LOAD_TORRENT.equals(opid)) {
Map decodedMap = message.getDecodedMap();
String torrentUrl = (String) decodedMap.get( "torrent_url" );
String referer_str = (String) decodedMap.get( "referer_url" );
if ( UrlFilter.getInstance().isWhitelisted( torrentUrl )){
ContentNetwork cn = ContentNetworkManagerFactory.getSingleton().getContentNetworkForURL( torrentUrl );
if ( cn == null ){
cn = ConstantsVuze.getDefaultContentNetwork();
}
torrentUrl = cn.appendURLSuffix( torrentUrl, false, true );
}
try {
Map headers = UrlUtils.getBrowserHeaders( referer_str );
String subscriptionId = ((String)decodedMap.get("subs_id"));
String subscriptionResultId = ((String)decodedMap.get("subs_rid"));
if ( subscriptionId != null ){
Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( subscriptionId );
if ( subs != null ){
try{
Engine engine = subs.getEngine();
if ( engine != null && engine instanceof WebEngine ){
WebEngine webEngine = (WebEngine) engine;
if ( webEngine.isNeedsAuth()){
headers.put( "Cookie",webEngine.getCookies());
}
}
}catch( Throwable e ){
Debug.out( e );
}
if ( subscriptionResultId != null ){
subs.addPotentialAssociation( subscriptionResultId, torrentUrl );
}
}
}else{
try{
long engineID = ((Long)decodedMap.get("engine_id")).longValue();
Engine engine = metaSearchManager.getMetaSearch().getEngine( engineID );
if ( engine != null ){
engine.addPotentialAssociation( torrentUrl );
}
if ( engine != null && engine instanceof WebEngine ){
WebEngine webEngine = (WebEngine) engine;
if ( webEngine.isNeedsAuth()){
headers.put( "Cookie",webEngine.getCookies());
}
}
}catch( Throwable e ){
Debug.printStackTrace(e);