package com.aelitis.azureus.ui.swt.player; import java.util.HashMap; import java.util.Map; import org.gudy.azureus2.core3.util.AESemaphore; import org.gudy.azureus2.plugins.PluginException; import org.gudy.azureus2.plugins.installer.InstallablePlugin; import org.gudy.azureus2.plugins.installer.PluginInstallationListener; import org.gudy.azureus2.plugins.installer.PluginInstaller; import org.gudy.azureus2.plugins.installer.StandardPlugin; import org.gudy.azureus2.plugins.update.Update; import org.gudy.azureus2.plugins.update.UpdateCheckInstance; import org.gudy.azureus2.plugins.update.UpdateCheckInstanceListener; import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader; import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderAdapter; import com.aelitis.azureus.core.AzureusCoreFactory; public class PlayerInstaller { private PlayerInstallerListener listener; private PluginInstaller installer; private volatile UpdateCheckInstance instance; private boolean cancelled; public PlayerInstaller() { } public void setListener(PlayerInstallerListener listener) { this.listener = listener; } public void cancel() { UpdateCheckInstance to_cancel = null; synchronized( this ){ cancelled = true; to_cancel = instance; } if ( to_cancel != null ){ to_cancel.cancel(); } } public boolean install() { try{ installer = AzureusCoreFactory.getSingleton().getPluginManager().getPluginInstaller(); StandardPlugin sp = installer.getStandardPlugin( "azemp" ); Map<Integer, Object> properties = new HashMap<Integer, Object>(); properties.put( UpdateCheckInstance.PT_UI_STYLE, UpdateCheckInstance.PT_UI_STYLE_NONE ); properties.put(UpdateCheckInstance.PT_UI_DISABLE_ON_SUCCESS_SLIDEY, true); final AESemaphore sem = new AESemaphore("emp install"); final boolean[] result = new boolean[1]; instance = installer.install( new InstallablePlugin[]{ sp }, false, properties, new PluginInstallationListener() { public void completed() { result[0] = true; if(listener != null) { listener.finished(); } sem.release(); } public void cancelled() { result[0] = false; if(listener != null) { listener.finished(); } sem.release(); } public void failed( PluginException e ) { result[0] = false; if(listener != null) { listener.finished(); } sem.release(); } }); boolean kill_it; synchronized( this ){ kill_it = cancelled; } if ( kill_it ){ instance.cancel(); return( false ); } instance.addListener( new UpdateCheckInstanceListener() { public void cancelled( UpdateCheckInstance instance ) { } public void complete( UpdateCheckInstance instance ) { Update[] updates = instance.getUpdates(); for ( final Update update: updates ){ ResourceDownloader[] rds = update.getDownloaders(); for ( ResourceDownloader rd: rds ){ rd.addListener( new ResourceDownloaderAdapter() { public void reportActivity( ResourceDownloader downloader, String activity ) { } public void reportPercentComplete( ResourceDownloader downloader, int percentage ) { if(listener != null) { listener.progress(percentage); } } }); } } } }); sem.reserve(); return result[0]; }catch( Throwable e ){ } return false; } }