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);
}
}
Boolean play_now = (Boolean)decodedMap.get( "play-now" );
if ( play_now != null && play_now.booleanValue()){
synchronized( MetaSearchListener.class ){
pending_play_now_urls.add( torrentUrl );
}
}
PluginInitializer.getDefaultInterface().getDownloadManager().addDownload(
new URL(torrentUrl),
headers );
Map params = new HashMap();
params.put("torrent_url",torrentUrl);
params.put("referer_url",referer_str);
sendBrowserMessage("metasearch", "loadTorrentCompleted",params);
} catch(Exception e) {
Map params = new HashMap();
params.put("torrent_url",torrentUrl);
params.put("referer_url",referer_str);
params.put( "error", e.getMessage() );
sendBrowserMessage("metasearch", "loadTorrentFailed",params);
}
}else if(OP_HAS_LOAD_TORRENT.equals(opid)) {
Map params = new HashMap();
params.put("result","1");
sendBrowserMessage("metasearch", "hasLoadTorrent",params);
}else if(OP_CREATE_SUBSCRIPTION.equals(opid)) {
Map decodedMap = message.getDecodedMap();
Long tid = (Long) decodedMap.get("tid");
String name = (String) decodedMap.get( "name" );
Boolean isPublic = (Boolean) decodedMap.get( "is_public" );
Map options = (Map)decodedMap.get( "options" );
Boolean isEnabled = (Boolean)options.get( "is_enabled" );
Boolean autoDownload = (Boolean)options.get( "auto_dl" );
Map result = new HashMap();
if ( tid != null )result.put( "tid", tid );
try{
JSONObject payload = new JSONObject();
// change this you need to change update too below
payload.put( "engine_id", decodedMap.get( "engine_id" ));
payload.put( "search_term", decodedMap.get( "search_term" ));
payload.put( "filters", decodedMap.get( "filters" ));
payload.put( "schedule", decodedMap.get( "schedule" ));
payload.put( "options", decodedMap.get( "options" ));
Subscription subs = SubscriptionManagerFactory.getSingleton().create(name, isPublic.booleanValue(), payload.toString());
subs.getHistory().setDetails(
isEnabled==null?true:isEnabled.booleanValue(),
autoDownload==null?false:autoDownload.booleanValue());
result.put( "id", subs.getID());
sendBrowserMessage( "metasearch", "createSubscriptionCompleted", result );
} catch( Throwable e ){
result.put( "error", "create failed: " + Debug.getNestedExceptionMessage(e));
sendBrowserMessage( "metasearch", "createSubscriptionFailed", result );
}
}else if( OP_READ_SUBSCRIPTION.equals(opid)){
Map decodedMap = message.getDecodedMap();
final Long tid = (Long) decodedMap.get("tid");
final String sid = (String) decodedMap.get("id");
Map result = new HashMap();
if ( tid != null )result.put( "tid", tid );
try{
Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( sid );
if ( subs == null ){
result.put( "error", "Subscription not found" );
sendBrowserMessage("metasearch", "readSubscriptionFailed",result);
}else{
boolean shareable = subs.isShareable();
// override public flag if not shareable
result.put( "id", subs.getID());
result.put( "name", subs.getName());
result.put( "is_public", new Boolean( shareable && subs.isPublic()));
result.put( "is_author", new Boolean( subs.isMine()));
result.put( "is_shareable", new Boolean( shareable ));
result.put( "auto_dl_supported", new Boolean( subs.isAutoDownloadSupported()));
SubscriptionHistory history = subs.getHistory();
Map options = new HashMap();
result.put( "options", options );
options.put( "is_enabled", new Boolean( history.isEnabled()));
options.put( "auto_dl", new Boolean( history.isAutoDownload()));
Map info = new HashMap();
result.put( "info", info );
info.put( "last_scan", new Long( history.getLastScanTime()));
info.put( "last_new", new Long( history.getLastNewResultTime()));
info.put( "num_unread", new Long( history.getNumUnread()));
info.put( "num_read", new Long( history.getNumRead()));
String json = subs.getJSON();
Map map = JSONUtils.decodeJSON( json );
result.put( "engine_id", map.get( "engine_id" ));
result.put( "search_term", map.get( "search_term" ));
result.put( "filters", map.get( "filters" ));
result.put( "schedule", map.get( "schedule" ));
sendBrowserMessage( "metasearch", "readSubscriptionCompleted", result );
}
} catch( Throwable e ){
result.put( "error", "read failed: " + Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "readSubscriptionFailed",result);
}
}else if (OP_UPDATE_SUBSCRIPTION.equals(opid)) {
Map decodedMap = message.getDecodedMap();
final Long tid = (Long) decodedMap.get("tid");
final String name = (String)decodedMap.get("name");
final Boolean isPublic = (Boolean)decodedMap.get( "is_public" );
final String sid = (String)decodedMap.get("id");
Map options = (Map)decodedMap.get( "options" );
Boolean isEnabled = (Boolean)options.get( "is_enabled" );
Boolean autoDownload = (Boolean)options.get( "auto_dl" );
Map result = new HashMap();
if ( tid != null )result.put( "tid", tid );
try{
Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( sid );
if ( subs == null ){
result.put( "error", "Subscription not found" );
sendBrowserMessage("metasearch", "updateSubscriptionFailed",result);
}else{
JSONObject payload = new JSONObject();
// change this you need to change create too above
payload.put( "engine_id", decodedMap.get( "engine_id" ));
payload.put( "search_term", decodedMap.get( "search_term" ));
payload.put( "filters", decodedMap.get( "filters" ));
payload.put( "schedule", decodedMap.get( "schedule" ));
payload.put( "options", decodedMap.get( "options" ));
boolean changed = subs.setDetails( name, isPublic.booleanValue(), payload.toString());
subs.getHistory().setDetails(
isEnabled==null?true:isEnabled.booleanValue(),
autoDownload==null?false:autoDownload.booleanValue());
if ( changed ){
subs.reset();
try{
subs.getManager().getScheduler().downloadAsync(subs, true);
}catch( Throwable e ){
Debug.out(e);
}
}
result.put( "id", subs.getID());
sendBrowserMessage( "metasearch", "updateSubscriptionCompleted", result );
}
} catch( Throwable e ){
result.put( "error", "update failed: " + Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "updateSubscriptionFailed",result);
}
}else if (OP_SUBSCRIPTION_SET_AUTODL.equals(opid)){
Map decodedMap = message.getDecodedMap();
String sid = (String)decodedMap.get("id");
Long tid = (Long) decodedMap.get("tid");
Boolean autoDownload = (Boolean)decodedMap.get( "auto_dl" );
Map result = new HashMap();
if ( tid != null )result.put( "tid", tid );
try{
Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( sid );
if ( subs == null ){
result.put( "error", "Subscription not found" );
sendBrowserMessage("metasearch", "setSubscriptionAutoDownloadFailed",result);
}else{
subs.getHistory().setAutoDownload( autoDownload.booleanValue());
sendBrowserMessage( "metasearch", "setSubscriptionAutoDownloadCompleted", result );
}
} catch( Throwable e ){
result.put( "error", "update failed: " + Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "setSubscriptionAutoDownloadFailed",result);
}
}else if(OP_READ_SUBSCRIPTION_RESULTS.equals(opid)) {
Map decodedMap = message.getDecodedMap();
final Long tid = (Long) decodedMap.get("tid");
final String sid = (String) decodedMap.get("id");
final Map result = new HashMap();
if ( tid != null )result.put( "tid", tid );
try{
final Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( sid );
if ( subs == null ){
result.put( "error", "Subscription not found" );
sendBrowserMessage("metasearch", "readSubscriptionResultsFailed",result);
}else{
result.put( "id", subs.getID());
if ( !handleSubscriptionAuth( subs, result )){
if ( subs.getHistory().getLastScanTime() == 0 ){
subs.getManager().getScheduler().download(
subs,
false,
new SubscriptionDownloadListener()
{
public void
complete(
Subscription subs )
{
if ( !handleSubscriptionAuth( subs, result )){
encodeResults( subs, result );
sendBrowserMessage( "metasearch", "readSubscriptionResultsCompleted", result );
openCloseSearchDetailsListener.resizeMainBrowser();
}
}
public void
failed(
Subscription subs,
SubscriptionException error )
{
result.put( "error", "read failed: " + Debug.getNestedExceptionMessage(error));
sendBrowserMessage( "metasearch", "readSubscriptionResultsFailed", result );
}
});
}else{
encodeResults( subs, result );
sendBrowserMessage( "metasearch", "readSubscriptionResultsCompleted", result );
openCloseSearchDetailsListener.resizeMainBrowser();
}
}
}
}catch( Throwable e ){
result.put( "error", "read failed: " + Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "readSubscriptionFailed",result);
}
}else if( OP_DELETE_SUBSCRIPTION_RESULTS.equals(opid)){
Map decodedMap = message.getDecodedMap();
String sid = (String)decodedMap.get("id");
List rids = (List)decodedMap.get( "rids" );
try{
Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( sid );
if ( subs == null ){
Map params = new HashMap();
params.put( "error", "Subscription not found" );
sendBrowserMessage("metasearch", "deleteSubscriptionResultsFailed",params);
}else{
String[] rids_a = (String[])rids.toArray( new String[rids.size()]);
subs.getHistory().deleteResults( rids_a );
Map result = new HashMap();
result.put( "rids", rids);
sendBrowserMessage( "metasearch", "deleteSubscriptionResultsCompleted", result );
}
} catch( Throwable e ){
Map params = new HashMap();
params.put( "error", "delete failed: " + Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "deleteSubscriptionResultsFailed",params);
}
}else if( OP_MARK_SUBSCRIPTION_RESULTS.equals(opid)){
Map decodedMap = message.getDecodedMap();
String sid = (String)decodedMap.get("id");
List rids = (List)decodedMap.get( "rids" );
List reads = (List)decodedMap.get( "reads" );
Map result = new HashMap();
try{
Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( sid );
if ( subs == null ){
result.put( "error", "Subscription not found" );
sendBrowserMessage("metasearch", "markSubscriptionResultsFailed",result);
}else{
String[] rids_a = (String[])rids.toArray( new String[rids.size()]);
boolean[] reads_a = new boolean[reads.size()];
for (int i=0;i<reads.size();i++){
reads_a[i] = ((Boolean)reads.get(i)).booleanValue();
}
subs.getHistory().markResults( rids_a, reads_a );
result.put( "rids", rids);
result.put( "reads", reads);
sendBrowserMessage( "metasearch", "markSubscriptionResultsCompleted", result );
}
} catch( Throwable e ){
result.put( "error", "mark failed: " + Debug.getNestedExceptionMessage(e));
sendBrowserMessage("metasearch", "markSubscriptionResultsFailed",result);
}
}else if( OP_DOWNLOAD_SUBSCRIPTION.equals(opid)) {
Map decodedMap = message.getDecodedMap();
final Long tid = (Long) decodedMap.get("tid");
final String sid = (String) decodedMap.get("id");
final Map result = new HashMap();
if ( tid != null )result.put( "tid", tid );
try{
Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( sid );
if ( subs == null ){
result.put( "error", "Subscription not found" );
sendBrowserMessage("metasearch", "downloadSubscriptionFailed", result );
}else{
result.put( "id", subs.getID());
if ( !handleSubscriptionAuth( subs, result )){
subs.getManager().getScheduler().download(
subs,
false,
new SubscriptionDownloadListener()
{
public void