/* * Created on 20 mai 2004 * Created by Olivier Chalouhi * * Copyright (C) 2004, 2005, 2006 Aelitis SAS, 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. * * 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 ( see the LICENSE file ). * * 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 * * AELITIS, SAS au capital de 46,603.30 euros, * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. */ package org.gudy.azureus2.ui.swt.updater2; import java.util.Map; import org.eclipse.swt.SWT; import org.gudy.azureus2.core3.config.COConfigurationManager; import org.gudy.azureus2.core3.logging.*; import org.gudy.azureus2.core3.util.AEVerifier; import org.gudy.azureus2.core3.util.Constants; import org.gudy.azureus2.platform.PlatformManager; import org.gudy.azureus2.platform.PlatformManagerCapabilities; import org.gudy.azureus2.platform.PlatformManagerFactory; import com.aelitis.azureus.core.versioncheck.VersionCheckClient; import org.gudy.azureus2.plugins.update.UpdateChecker; /** * @author Olivier Chalouhi * */ public class SWTVersionGetter { private static final LogIDs LOGID = LogIDs.GUI; private String platform; private int currentVersion; private int latestVersion; private UpdateChecker checker; private String[] mirrors; private String infoURL; public SWTVersionGetter( UpdateChecker _checker ) { this.platform = COConfigurationManager.getStringParameter("ConfigView.section.style.swt.library.selection"); if (this.platform == null || this.platform.length() == 0) { this.platform = SWT.getPlatform(); } this.currentVersion = SWT.getVersion(); this.latestVersion = 0; checker = _checker; } public boolean needsUpdate() { try { downloadLatestVersion(); String msg = "SWT: current version = " + currentVersion + ", latest version = " + latestVersion; checker.reportProgress( msg ); if (Logger.isEnabled()) Logger.log(new LogEvent(LOGID, msg)); return latestVersion > currentVersion; } catch(Exception e) { e.printStackTrace(); return false; } } private void downloadLatestVersion() { if (Logger.isEnabled()) Logger.log(new LogEvent(LOGID, "Requesting latest SWT version " + "and url from version check client.")); Map reply = VersionCheckClient.getSingleton().getVersionCheckInfo(VersionCheckClient.REASON_CHECK_SWT); String msg = "SWT version check received:"; boolean done = false; if ( Constants.isOSX_10_5_OrHigher ){ String target_lib = COConfigurationManager.getStringParameter( "ConfigView.section.style.swt.library.selection" ); String current_lib = SWT.getPlatform(); if ( target_lib.equalsIgnoreCase( current_lib )){ byte[] version_bytes = (byte[])reply.get( "swt_version_" + target_lib ); if ( version_bytes != null ){ latestVersion = Integer.parseInt( new String( version_bytes ) ); msg += " version=" + latestVersion; byte[] url_bytes = (byte[])reply.get( "swt_url_" + target_lib ); if ( url_bytes != null ){ mirrors = new String[] { new String( url_bytes ) }; msg += " url=" + mirrors[0]; } done = true; } }else{ byte[] url_bytes = (byte[])reply.get( "swt_url_" + target_lib ); if ( url_bytes != null ){ msg += " (platform switch from " + current_lib + " to " + target_lib + ")"; mirrors = new String[] { new String( url_bytes ) }; msg += " url=" + mirrors[0]; latestVersion = Integer.MAX_VALUE; done = true; } } } if ( !done ){ byte[] version_bytes = (byte[])reply.get( "swt_version" ); if( version_bytes != null ) { latestVersion = Integer.parseInt( new String( version_bytes ) ); msg += " version=" + latestVersion; } byte[] url_bytes = (byte[])reply.get( "swt_url" ); if( url_bytes != null ) { mirrors = new String[] { new String( url_bytes ) }; msg += " url=" + mirrors[0]; } } byte[] info_bytes = (byte[])reply.get( "swt_info_url" ); if ( info_bytes != null ){ byte[] sig = (byte[])reply.get( "swt_info_sig" ); if ( sig == null ){ Logger.log( new LogEvent( LogIDs.LOGGER, "swt info signature check failed - missing signature" )); }else{ try{ infoURL = new String( info_bytes ); try{ AEVerifier.verifyData( infoURL, sig ); }catch( Throwable e ){ Logger.log( new LogEvent( LogIDs.LOGGER, "swt info signature check failed", e )); infoURL = null; } }catch ( Exception e ){ Logger.log(new LogEvent(LOGID, "swt info_url", e)); } } } if (Logger.isEnabled()) Logger.log(new LogEvent(LOGID, msg)); } /** * @return Returns the latestVersion. */ public int getLatestVersion() { return latestVersion; } public int getCurrentVersion() { return currentVersion; } /** * @return Returns the platform. */ public String getPlatform() { return platform; } /** * @return Returns the mirrors. */ public String[] getMirrors() { return mirrors; } public String getInfoURL() { return infoURL; } }