From: <pga...@vu...> - 2014-10-21 22:46:08
|
Revision: 40925 Author: pgardner Date: 2014-10-21 22:45:58 +0000 (Tue, 21 Oct 2014) Log Message: ----------- Modified Paths: -------------- client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPluginBeta.java client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginView.java client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginViewBetaChat.java client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginViewInstance.java Added Paths: ----------- client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPluginViewInterface.java Modified: client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java =================================================================== --- client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java 2014-10-21 22:45:44 UTC (rev 40924) +++ client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java 2014-10-21 22:45:58 UTC (rev 40925) @@ -72,6 +72,7 @@ import com.aelitis.azureus.core.util.CopyOnWriteList; import com.aelitis.azureus.core.util.bloom.BloomFilter; import com.aelitis.azureus.core.util.bloom.BloomFilterFactory; +import com.aelitis.azureus.core.vuzefile.VuzeFileHandler; import com.aelitis.azureus.plugins.magnet.MagnetPlugin; import com.aelitis.azureus.plugins.magnet.MagnetPluginProgressListener; import com.aelitis.azureus.plugins.net.buddy.tracker.BuddyPluginTracker; @@ -245,6 +246,7 @@ private BuddyPluginBeta beta_plugin; + private BuddyPluginViewInterface swt_ui; public static void load( @@ -549,7 +551,7 @@ if ( instance.getUIType() == UIInstance.UIT_SWT ){ try{ - Class.forName( "com.aelitis.azureus.plugins.net.buddy.swt.BuddyPluginView").getConstructor( + swt_ui = (BuddyPluginViewInterface)Class.forName( "com.aelitis.azureus.plugins.net.buddy.swt.BuddyPluginView").getConstructor( new Class[]{ BuddyPlugin.class, UIInstance.class, String.class } ).newInstance( new Object[]{ BuddyPlugin.this, instance, VIEW_ID } ); @@ -3434,6 +3436,12 @@ } } + protected BuddyPluginViewInterface + getSWTUI() + { + return( swt_ui ); + } + protected void rethrow( String reason, @@ -3453,61 +3461,83 @@ throw( new BuddyPluginException( reason, e )); } } - - + public InputStream handleURLProtocol( - AZPluginConnection connection, + AZPluginConnection connection, String arg_str ) throws IPCException { - String[] args = arg_str.split( "&" ); - - String pk = null; - String category_or_tag = "All"; - byte[] hash = null; - - for (String arg: args ){ + if ( arg_str.toLowerCase( Locale.US ).startsWith( "chat:" )){ - String[] bits = arg.split( "=" ); - - String lhs = bits[0]; - String rhs = UrlUtils.decode( bits[1] ); - - if ( lhs.equals( "pk" )){ + //azplug:?id=azbuddy&arg=chat%3Aanon%3Fmonkey%2520magic + + if ( !beta_enabled_param.getValue()){ - pk = rhs; + throw( new IPCException( "Decentralized chat not enabled" )); + } - }else if ( lhs.equals( "cat" )){ + try{ + beta_plugin.handleURI( arg_str ); - category_or_tag = rhs; + // return an empty .vuze file to keep things happy... - }else if ( lhs.equals( "hash" )){ + return( new ByteArrayInputStream( VuzeFileHandler.getSingleton().create().exportToBytes() )); + + }catch( Throwable e ){ - hash = Base32.decode(rhs); - } - } - - if ( pk == null ){ + throw( new IPCException( e )); + } + + }else{ + String[] args = arg_str.split( "&" ); - throw( new IPCException( "Public key missing from '" + arg_str + "'" )); - } - - BuddyPluginBuddy buddy = getBuddyFromPublicKey( pk ); - - if ( buddy == null ){ + String pk = null; + String category_or_tag = "All"; + byte[] hash = null; - throw( new IPCException( "Buddy with public key '" + pk + "' not found" )); - } - - if ( hash == null ){ + for (String arg: args ){ + + String[] bits = arg.split( "=" ); + + String lhs = bits[0]; + String rhs = UrlUtils.decode( bits[1] ); + + if ( lhs.equals( "pk" )){ + + pk = rhs; + + }else if ( lhs.equals( "cat" )){ + + category_or_tag = rhs; + + }else if ( lhs.equals( "hash" )){ + + hash = Base32.decode(rhs); + } + } - return( handleUPRSS( connection, buddy, category_or_tag )); + if ( pk == null ){ + + throw( new IPCException( "Public key missing from '" + arg_str + "'" )); + } - }else{ + BuddyPluginBuddy buddy = getBuddyFromPublicKey( pk ); + + if ( buddy == null ){ + + throw( new IPCException( "Buddy with public key '" + pk + "' not found" )); + } - return( handleUPTorrent( connection, buddy, category_or_tag, hash )); + if ( hash == null ){ + + return( handleUPRSS( connection, buddy, category_or_tag )); + + }else{ + + return( handleUPTorrent( connection, buddy, category_or_tag, hash )); + } } } Modified: client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPluginBeta.java =================================================================== --- client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPluginBeta.java 2014-10-21 22:45:44 UTC (rev 40924) +++ client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPluginBeta.java 2014-10-21 22:45:58 UTC (rev 40925) @@ -41,12 +41,15 @@ import org.gudy.azureus2.core3.util.TimerEvent; import org.gudy.azureus2.core3.util.TimerEventPerformer; import org.gudy.azureus2.core3.util.TimerEventPeriodic; +import org.gudy.azureus2.core3.util.UrlUtils; import org.gudy.azureus2.plugins.PluginEvent; import org.gudy.azureus2.plugins.PluginEventListener; import org.gudy.azureus2.plugins.PluginInterface; import org.gudy.azureus2.plugins.ui.config.BooleanParameter; +import com.aelitis.azureus.core.proxy.impl.AEPluginProxyHandler; import com.aelitis.azureus.core.util.CopyOnWriteList; +import com.aelitis.azureus.plugins.net.buddy.swt.BuddyPluginViewBetaChat; public class BuddyPluginBeta @@ -234,6 +237,55 @@ } } + public boolean + isI2PAvailable() + { + return( AEPluginProxyHandler.hasPluginProxyForNetwork( AENetworkClassifier.AT_I2P, false )); + } + + public void + handleURI( + String url_str ) + + throws Exception + { + BuddyPluginViewInterface ui = plugin.getSWTUI(); + + if ( ui == null ){ + + throw( new Exception( "UI unavailable" )); + } + + int pos = url_str.indexOf( '?' ); + + String key = ""; + + if ( pos != -1 ){ + + key = UrlUtils.decode( url_str.substring( pos+1 )); + } + + String network; + + if ( url_str.toLowerCase( Locale.US ).startsWith( "chat:anon" )){ + + if ( !plugin.getBeta().isI2PAvailable()){ + + throw( new Exception( "I2P unavailable" )); + } + + network = AENetworkClassifier.AT_I2P; + + }else{ + + network = AENetworkClassifier.AT_PUBLIC; + } + + ChatInstance chat = plugin.getBeta().getChat(network, key); + + ui.openChat( chat ); + } + public ChatInstance getChat( String network, Added: client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPluginViewInterface.java =================================================================== --- client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPluginViewInterface.java (rev 0) +++ client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/BuddyPluginViewInterface.java 2014-10-21 22:45:58 UTC (rev 40925) @@ -0,0 +1,33 @@ +/* + * Created on Oct 21, 2014 + * Created by Paul Gardner + * + * Copyright 2014 Azureus Software, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + + +package com.aelitis.azureus.plugins.net.buddy; + +import com.aelitis.azureus.plugins.net.buddy.BuddyPluginBeta.ChatInstance; + +public interface +BuddyPluginViewInterface +{ + public void + openChat( + ChatInstance chat ); +} Modified: client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginView.java =================================================================== --- client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginView.java 2014-10-21 22:45:44 UTC (rev 40924) +++ client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginView.java 2014-10-21 22:45:58 UTC (rev 40925) @@ -46,6 +46,8 @@ import com.aelitis.azureus.plugins.net.buddy.BuddyPluginAdapter; import com.aelitis.azureus.plugins.net.buddy.BuddyPluginBuddy; import com.aelitis.azureus.plugins.net.buddy.BuddyPluginListener; +import com.aelitis.azureus.plugins.net.buddy.BuddyPluginViewInterface; +import com.aelitis.azureus.plugins.net.buddy.BuddyPluginBeta.ChatInstance; import com.aelitis.azureus.plugins.net.buddy.tracker.BuddyPluginTracker; import com.aelitis.azureus.plugins.net.buddy.tracker.BuddyPluginTrackerListener; import com.aelitis.azureus.ui.swt.imageloader.ImageLoader; @@ -53,7 +55,7 @@ public class BuddyPluginView - implements UISWTViewEventListener + implements UISWTViewEventListener, BuddyPluginViewInterface { private BuddyPlugin plugin; private UISWTInstance ui_instance; @@ -177,6 +179,33 @@ return true; } + public void + openChat( + final ChatInstance chat ) + { + final Display display = Display.getDefault(); + + if ( display.isDisposed()){ + + return; + } + + display.asyncExec( + new Runnable() + { + public void + run() + { + if ( display.isDisposed()){ + + return; + } + + new BuddyPluginViewBetaChat( plugin, chat ); + } + }); + } + protected class statusUpdater implements BuddyPluginTrackerListener Modified: client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginViewBetaChat.java =================================================================== --- client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginViewBetaChat.java 2014-10-21 22:45:44 UTC (rev 40924) +++ client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginViewBetaChat.java 2014-10-21 22:45:58 UTC (rev 40925) @@ -44,7 +44,6 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; @@ -100,7 +99,6 @@ protected BuddyPluginViewBetaChat( BuddyPlugin _plugin, - Display _display, ChatInstance _chat ) { plugin = _plugin; @@ -194,11 +192,26 @@ widgetSelected( SelectionEvent e ) { - URL url = (URL)mi_open.getData(); + String url_str = (String)mi_open.getData(); - if ( url != null ){ + if ( url_str != null ){ - TorrentOpener.openTorrent( url.toExternalForm()); + String lc_url_str = url_str.toLowerCase( Locale.US ); + + if ( lc_url_str.startsWith( "chat:" )){ + + try{ + plugin.getBeta().handleURI( url_str ); + + }catch( Throwable f ){ + + Debug.out( f ); + } + + }else{ + + TorrentOpener.openTorrent( url_str ); + } } } }); @@ -216,11 +229,11 @@ widgetSelected( SelectionEvent e ) { - URL url = (URL)mi_copy_clip.getData(); + String url_str = (String)mi_copy_clip.getData(); - if ( url != null ){ + if ( url_str != null ){ - ClipboardCopy.copyToClipBoard( url.toExternalForm()); + ClipboardCopy.copyToClipBoard( url_str ); } } }); @@ -246,9 +259,7 @@ String url_str = (String)sr.data; if ( url_str != null ){ - - URL url = new URL( url_str ); - + String str = url_str; if ( str.length() > 50 ){ @@ -259,9 +270,9 @@ str = lu.getLocalisedMessageText( "azbuddy.dchat.open.in.vuze" ) + ": " + str; mi_open.setText( str); - mi_open.setData( url ); + mi_open.setData( url_str ); - mi_copy_clip.setData( url ); + mi_copy_clip.setData( url_str ); e.doit = true; } @@ -1122,8 +1133,20 @@ try{ String url_str = protocol + msg.substring( pos, end ); - URL url = new URL( url_str ); - + if ( protocol.equalsIgnoreCase( "chat" )){ + + if ( url_str.toLowerCase( Locale.US ).startsWith( "chat:anon" )){ + + if ( !plugin.getBeta().isI2PAvailable()){ + + throw( new Exception( "Anonymous chat unavailable" )); + } + } + }else{ + + URL url = new URL( url_str ); + } + StyleRange styleRange = new StyleRange(); styleRange.start = start+pos-protocol.length(); styleRange.length = url_str.length(); Modified: client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginViewInstance.java =================================================================== --- client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginViewInstance.java 2014-10-21 22:45:44 UTC (rev 40924) +++ client/trunk/azureus2/src/com/aelitis/azureus/plugins/net/buddy/swt/BuddyPluginViewInstance.java 2014-10-21 22:45:58 UTC (rev 40925) @@ -253,7 +253,7 @@ // anonymous beta channel - boolean i2p_enabled = AEPluginProxyHandler.hasPluginProxyForNetwork( AENetworkClassifier.AT_I2P, false ); + boolean i2p_enabled = plugin.getBeta().isI2PAvailable(); label = new Label( main, SWT.NULL ); @@ -335,7 +335,7 @@ { if ( !display.isDisposed()){ - BuddyPluginViewBetaChat chat = new BuddyPluginViewBetaChat( plugin, display, inst ); + BuddyPluginViewBetaChat chat = new BuddyPluginViewBetaChat( plugin, inst ); create_button.setEnabled( true ); @@ -423,7 +423,7 @@ { if ( !display.isDisposed()){ - BuddyPluginViewBetaChat chat = new BuddyPluginViewBetaChat( plugin, display, inst ); + BuddyPluginViewBetaChat chat = new BuddyPluginViewBetaChat( plugin, inst ); chat.addDisposeListener( new DisposeListener() @@ -453,7 +453,8 @@ if ( !button.isDisposed()){ button.setEnabled( true ); - } } + } + } }); Debug.out( e ); |