/** * */ package com.aelitis.azureus.ui.swt.subscriptions; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.*; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.gudy.azureus2.core3.util.*; import org.gudy.azureus2.ui.swt.Utils; import org.gudy.azureus2.ui.swt.views.*; import com.aelitis.azureus.core.cnetwork.ContentNetwork; import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory; import com.aelitis.azureus.core.messenger.ClientMessageContext; import com.aelitis.azureus.core.subs.*; import com.aelitis.azureus.ui.common.ToolBarEnabler; import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT; import com.aelitis.azureus.ui.swt.browser.*; import com.aelitis.azureus.ui.swt.browser.listener.*; import com.aelitis.azureus.ui.swt.mdi.MdiEntrySWT; import com.aelitis.azureus.ui.swt.mdi.MultipleDocumentInterfaceSWT; import com.aelitis.azureus.util.*; public class SubscriptionView extends AbstractIView implements IViewExtension, OpenCloseSearchDetailsListener, ToolBarEnabler { private Subscription subs; private Composite parent_composite; private Composite composite; //private Label info_lab; //private Label info_lab2; //private StyledText json_area; //private Composite controls; private Browser mainBrowser; private Browser detailsBrowser; private final SubscriptionMDIEntry mdiInfo; public SubscriptionView( Subscription _subs) { subs = _subs; this.mdiInfo = (SubscriptionMDIEntry) subs.getUserData(SubscriptionManagerUI.SUB_ENTRYINFO_KEY); } protected void refreshView() { String key = "Subscription_" + ByteFormatter.encodeString(subs.getPublicKey()); MultipleDocumentInterfaceSWT mdi = UIFunctionsManagerSWT.getUIFunctionsSWT().getMDISWT(); if (mdi != null) { MdiEntrySWT entry = mdi.getEntrySWT(key); if (entry != null) { IView view = entry.getIView(); if (view instanceof SubscriptionView) { SubscriptionView subsView = (SubscriptionView) view; subsView.updateBrowser( false ); } } } } public void delete() { super.delete(); } public void initialize( Composite _parent_composite ) { parent_composite = _parent_composite; composite = new Composite( parent_composite, SWT.NULL ); composite.setLayout(new FormLayout()); //GridData grid_data = new GridData(GridData.FILL_BOTH ); //composite.setLayoutData(grid_data); //FormData data; // control area /* controls = new Composite(composite, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.marginHeight = 0; layout.marginWidth = 0; controls.setLayout(layout); data = new FormData(); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); data.top = new FormAttachment(0,0); controls.setLayoutData(data); GridData grid_data; info_lab = new Label( controls, SWT.NULL ); grid_data = new GridData(GridData.FILL_HORIZONTAL); info_lab.setLayoutData(grid_data); info_lab2 = new Label( controls, SWT.NULL ); grid_data = new GridData(GridData.FILL_HORIZONTAL); info_lab2.setLayoutData(grid_data); json_area = new StyledText(controls,SWT.BORDER); grid_data = new GridData(GridData.FILL_HORIZONTAL); grid_data.heightHint = 50; json_area.setLayoutData(grid_data); json_area.setWordWrap(true); */ subs.addListener( new SubscriptionListener() { public void subscriptionChanged( Subscription subs ) { Utils.execSWTThread( new Runnable() { public void run() { updateInfo(); } }); } public void subscriptionDownloaded( Subscription subs, boolean auto ) { if ( auto ){ updateBrowser( true ); } } }); updateInfo(); } protected void createBrowsers() { if (mainBrowser != null && !mainBrowser.isDisposed()) { return; } try{ mainBrowser = new Browser(composite,Utils.getInitialBrowserStyle(SWT.NONE)); mainBrowser.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { ((Browser)e.widget).setUrl("about:blank"); ((Browser)e.widget).setVisible(false); while (!e.display.isDisposed() && e.display.readAndDispatch()); } }); BrowserContext context = new BrowserContext("browser-window" + Math.random(), mainBrowser, null, true); context.addListener(new BrowserContext.loadingListener(){ public void browserLoadingChanged(boolean loading, String url) { if (mdiInfo.spinnerImage != null) { mdiInfo.spinnerImage.setVisible(loading); } } }); context.addMessageListener(new TorrentListener()); context.addMessageListener(new VuzeListener()); context.addMessageListener(new DisplayListener(mainBrowser)); context.addMessageListener(new ConfigListener(mainBrowser)); context.addMessageListener( new MetaSearchListener( this )); ContentNetwork contentNetwork = ContentNetworkManagerFactory.getSingleton().getContentNetwork( context.getContentNetworkID()); // contentNetwork won't be null because a new browser context // has the default content network String url = contentNetwork.getSubscriptionURL(subs.getID()); Boolean edit_mode = (Boolean)subs.getUserData( SubscriptionManagerUI.SUB_EDIT_MODE_KEY ); if ( edit_mode != null ){ if ( edit_mode.booleanValue()){ url += SubscriptionManagerUI.EDIT_MODE_MARKER; } subs.setUserData( SubscriptionManagerUI.SUB_EDIT_MODE_KEY, null ); } mainBrowser.setUrl(url); mainBrowser.setData("StartURL", url); FormData data = new FormData(); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); data.top = new FormAttachment(composite,0); data.bottom = new FormAttachment(100,0); mainBrowser.setLayoutData(data); detailsBrowser = new Browser(composite,Utils.getInitialBrowserStyle(SWT.NONE)); detailsBrowser.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { ((Browser)e.widget).setUrl("about:blank"); ((Browser)e.widget).setVisible(false); while (!e.display.isDisposed() && e.display.readAndDispatch()); } }); BrowserContext detailsContext = new BrowserContext("browser-window" + Math.random(), detailsBrowser, null, false); detailsContext.addListener(new BrowserContext.loadingListener(){ public void browserLoadingChanged(boolean loading, String url) { if (mdiInfo.spinnerImage != null) { mdiInfo.spinnerImage.setVisible(loading); } } }); ClientMessageContext.torrentURLHandler url_handler = new ClientMessageContext.torrentURLHandler() { public void handleTorrentURL( final String url ) { Utils.execSWTThreadWithObject( "SMUI", new AERunnableObject() { public Object runSupport() { String subscriptionId = (String)detailsBrowser.getData("subscription_id"); String subscriptionResultId = (String)detailsBrowser.getData("subscription_result_id"); if ( subscriptionId != null && subscriptionResultId != null ){ Subscription subs = SubscriptionManagerFactory.getSingleton().getSubscriptionByID( subscriptionId ); if ( subs != null ){ subs.addPotentialAssociation( subscriptionResultId, url ); } } return( null ); } }, 10*1000 ); } }; detailsContext.setTorrentURLHandler( url_handler ); TorrentListener torrent_listener = new TorrentListener(); torrent_listener.setTorrentURLHandler( url_handler ); detailsContext.addMessageListener( torrent_listener ); detailsContext.addMessageListener(new VuzeListener()); detailsContext.addMessageListener(new DisplayListener(detailsBrowser)); detailsContext.addMessageListener(new ConfigListener(detailsBrowser)); url = "about:blank"; detailsBrowser.setUrl(url); detailsBrowser.setData("StartURL", url); final ExternalLoginCookieListener cookieListener = new ExternalLoginCookieListener(new CookiesListener() { public void cookiesFound(String cookies) { detailsBrowser.setData("current-cookies", cookies); } },detailsBrowser); cookieListener.hook(); data = new FormData(); data.left = new FormAttachment(0,0); data.right = new FormAttachment(100,0); data.top = new FormAttachment(mainBrowser,0); data.bottom = new FormAttachment(100,0); detailsBrowser.setLayoutData(data); mainBrowser.setVisible( true ); detailsBrowser.setVisible( false ); //detailsBrowser.set mainBrowser.getParent().layout(true,true); }catch( Throwable e ){ Debug.printStackTrace(e); } } public void refreshToolBar(Map<String, Boolean> list) { list.put("share", true); list.put("remove", true); } public boolean toolBarItemActivated(String itemKey) { if (itemKey.equals("remove")) { mdiInfo.removeWithConfirm(); } return false; } protected void destroyBrowsers() { if ( mainBrowser != null ){ mainBrowser.dispose(); mainBrowser = null; } if ( detailsBrowser != null ){ detailsBrowser.dispose(); detailsBrowser = null; } } public void closeSearchResults(final Map params) { Utils.execSWTThread(new AERunnable() { public void runSupport() { detailsBrowser.setVisible(false); FormData gd = (FormData) mainBrowser.getLayoutData(); gd.bottom = new FormAttachment(100, 0); mainBrowser.setLayoutData(gd); mainBrowser.getParent().layout(true); detailsBrowser.setUrl("about:blank"); //mainBrowser.setUrl( (String)mainBrowser.getData( "StartURL" )); } }); } public void openSearchResults(final Map params) { Utils.execSWTThread(new AERunnable() { public void runSupport() { String url = MapUtils.getMapString(params, "url", "http://google.com/search?q=" + Math.random()); if (UrlFilter.getInstance().urlCanRPC(url)) { url = ConstantsVuze.getDefaultContentNetwork().appendURLSuffix(url, false, true); } //Gudy, Not Tux, Listener Added String listenerAdded = (String) detailsBrowser.getData("g.nt.la"); if(listenerAdded == null) { detailsBrowser.setData("g.nt.la",""); detailsBrowser.addProgressListener(new ProgressListener() { public void changed(ProgressEvent event) {} public void completed(ProgressEvent event) { Browser search = (Browser) event.widget; String execAfterLoad = (String) search.getData("execAfterLoad"); //Erase it, so that it's only used once after the page loads search.setData("execAfterLoad",null); if(execAfterLoad != null && ! execAfterLoad.equals("")) { //String execAfterLoadDisplay = execAfterLoad.replaceAll("'","\\\\'"); //search.execute("alert('injecting script : " + execAfterLoadDisplay + "');"); boolean result = search.execute(execAfterLoad); //System.out.println("Injection : " + execAfterLoad + " (" + result + ")"); } } }); } //Store the "css" match string in the search cdp browser object String execAfterLoad = MapUtils.getMapString(params, "execAfterLoad", null); detailsBrowser.setData("execAfterLoad",execAfterLoad); detailsBrowser.setData("subscription_id", MapUtils.getMapString(params, "subs_id", null)); detailsBrowser.setData("subscription_result_id", MapUtils.getMapString(params, "subs_rid", null)); detailsBrowser.setUrl(url); detailsBrowser.setData("StartURL", url); detailsBrowser.setVisible(true); FormData data = (FormData) mainBrowser.getLayoutData(); data.bottom = null; data.height = MapUtils.getMapInt(params, "top-height", 120); //mainBrowser.setLayoutData(data); mainBrowser.getParent().layout(true,true); } }); } protected void updateBrowser( final boolean is_auto ) { if ( mainBrowser != null && !mainBrowser.isDisposed() ){ Utils.execSWTThread( new Runnable() { public void run() { if ( mainBrowser != null && !mainBrowser.isDisposed() && mainBrowser.isVisible()){ String url = (String)mainBrowser.getData( "StartURL" ); // see if end of edit process indicated by the subscription being // re-downloaded on auto-mode if ( is_auto && url.endsWith( SubscriptionManagerUI.EDIT_MODE_MARKER )){ url = url.substring(0,url.lastIndexOf( SubscriptionManagerUI.EDIT_MODE_MARKER )); mainBrowser.setData( "StartURL", url ); } mainBrowser.setUrl( url ); } } }); } } protected void updateInfo() { /* String engine_str = ""; try{ Engine engine = subs.getEngine(); engine_str = engine.getString(); }catch( Throwable e ){ engine_str = Debug.getNestedExceptionMessage(e); Debug.out(e); } info_lab.setText( "ID=" + subs.getID() + ", version=" + subs.getVersion() + ", subscribed=" + subs.isSubscribed() + ", public=" + subs.isPublic() + ", mine=" + subs.isMine() + ", popularity=" + subs.getCachedPopularity() + ", associations=" + subs.getAssociationCount() + ", engine=" + engine_str ); SubscriptionHistory history = subs.getHistory(); info_lab2.setText( "History: " + "enabled=" + history.isEnabled() + ", auto=" + history.isAutoDownload() + ", last_scan=" + new SimpleDateFormat().format(new Date( history.getLastScanTime())) + ", next_scan=" + new SimpleDateFormat().format(new Date( history.getNextScanTime())) + ", last_new=" + new SimpleDateFormat().format(new Date( history.getLastNewResultTime())) + ", read=" + history.getNumRead() + " ,unread=" + history.getNumUnread() + ", error=" + history.getLastError() + " [af=" + history.isAuthFail() + "]" ); try{ json_area.setText( subs.getJSON()); }catch( Throwable e ){ e.printStackTrace(); } */ } public Composite getComposite() { return( composite ); } public String getFullTitle() { return( subs.getName()); } public void resizeMainBrowser() { if ( mainBrowser != null ){ Utils.execSWTThreadLater(0, new Runnable() { public void run() { if ( mainBrowser != null && ! mainBrowser.isDisposed() && mainBrowser.isVisible()){ FormData data = (FormData) mainBrowser.getLayoutData(); data.bottom = new FormAttachment(100,-1); mainBrowser.getParent().layout(true); Utils.execSWTThreadLater(0, new Runnable() { public void run() { if ( mainBrowser != null && ! mainBrowser.isDisposed() && mainBrowser.isVisible()){ FormData data = (FormData) mainBrowser.getLayoutData(); data.bottom = new FormAttachment(100,0); mainBrowser.getParent().layout(true); } } } ); } } }); } } public void resizeSecondaryBrowser() { // TODO Auto-generated method stub } public Menu getPrivateMenu() { return null; } public void viewActivated() { createBrowsers(); } public void viewDeactivated() { if (mdiInfo.spinnerImage != null) { mdiInfo.spinnerImage.setVisible(false); } destroyBrowsers(); } }