Package org.gudy.azureus2.platform.win32

Source Code of org.gudy.azureus2.platform.win32.PlatformManagerUpdateChecker

/*
* Created on 07-May-2004
* Created by Paul Gardner
* Copyright (C) 2004, 2005, 2006 Aelitis, 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.
*
* 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.platform.win32;

/**
* @author parg
*
*/

import java.io.*;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.net.*;

import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.core3.html.HTMLUtils;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.platform.*;
import org.gudy.azureus2.plugins.utils.resourcedownloader.*;
import org.gudy.azureus2.pluginsimpl.local.utils.resourcedownloader.*;
import org.gudy.azureus2.plugins.*;
import org.gudy.azureus2.plugins.update.*;
import org.gudy.azureus2.pluginsimpl.update.sf.*;

public class
PlatformManagerUpdateChecker
  implements Plugin, UpdatableComponent
{
  private static final LogIDs LOGID = LogIDs.CORE;
  public static final String UPDATE_NAME  = "Platform-specific support";
 
  public static final int  RD_SIZE_RETRIES  = 3;
  public static final int  RD_SIZE_TIMEOUT  = 10000;
 
  protected PluginInterface      plugin_interface;
 
  public void
  initialize(
    PluginInterface  _plugin_interface)
  {
    plugin_interface  = _plugin_interface;
   
    plugin_interface.getPluginProperties().setProperty( "plugin.name", "Platform-Specific Support" );

    String  version = "1.0"// default version if plugin not present
   
    PlatformManager platform  = PlatformManagerFactory.getPlatformManager();

    if platform.getPlatformType() == PlatformManager.PT_WINDOWS ){

      if ( platform.hasCapability( PlatformManagerCapabilities.GetVersion )){
       
        try{
          version = platform.getVersion();
         
        }catch( Throwable e ){
         
          Debug.printStackTrace(e);
        }
      }
     
      plugin_interface.getUpdateManager().registerUpdatableComponent( this, false );
     
    }else{
     
      plugin_interface.getPluginProperties().setProperty( "plugin.version.info", "Not required for this platform" );
     
    }
   
    plugin_interface.getPluginProperties().setProperty( "plugin.version", version );
  }
 
  public String
  getName()
  {
    return( UPDATE_NAME );
  }
 
  public int
  getMaximumCheckTime()
  {
    return(( RD_SIZE_RETRIES * RD_SIZE_TIMEOUT )/1000);
  }
 
  public void
  checkForUpdate(
    final UpdateChecker  checker )
  {
    try{           
      SFPluginDetails  sf_details = SFPluginDetailsLoaderFactory.getSingleton().getPluginDetails( plugin_interface.getPluginID());
         
      String  current_version = plugin_interface.getPluginVersion();
     
      if (Logger.isEnabled())
        Logger.log(new LogEvent(LOGID,
            "PlatformManager:Win32 update check starts: current = "
                + current_version));
           
      boolean current_az_is_cvs  = Constants.isCVSVersion();
           
      String sf_plugin_version  = sf_details.getVersion();
     
      String sf_comp_version     = sf_plugin_version;
 
      if ( current_az_is_cvs ){
       
        String  sf_cvs_version = sf_details.getCVSVersion();
       
        if ( sf_cvs_version.length() > 0 ){
         
            // sf cvs version ALWAYS entry in _CVS
         
          sf_plugin_version  = sf_cvs_version;
         
          sf_comp_version = sf_plugin_version.substring(0,sf_plugin_version.length()-4);
        }
      }
     
      String  target_version  = null;     

      if (   sf_comp_version.length() == 0 ||
          !Character.isDigit(sf_comp_version.charAt(0))){
       
        if (Logger.isEnabled())
          Logger.log(new LogEvent(LOGID, LogEvent.LT_WARNING,
              "PlatformManager:Win32 no valid version to check against ("
                  + sf_comp_version + ")"));

      }else if ( Constants.compareVersions( current_version, sf_comp_version ) < 0 ){
       
        target_version  = sf_comp_version;
      }
 
      checker.reportProgress( "Win32: current = " + current_version + ", latest = " + sf_comp_version );
     
      if (Logger.isEnabled())
        Logger.log(new LogEvent(LOGID,
            "PlatformManager:Win32 update required = "
                + (target_version != null)));
     
      if ( target_version != null ){
         
        String target_download    = sf_details.getDownloadURL();
   
        if ( current_az_is_cvs ){
         
          String  sf_cvs_version = sf_details.getCVSVersion();
         
          if ( sf_cvs_version.length() > 0 ){
                       
            target_download  = sf_details.getCVSDownloadURL();
          }
        }       

        ResourceDownloaderFactory rdf = ResourceDownloaderFactoryImpl.getSingleton();
       
        ResourceDownloader direct_rdl = rdf.create( new URL( target_download ));
     
        String  torrent_download = Constants.AELITIS_TORRENTS;
       
        int  slash_pos = target_download.lastIndexOf("/");
       
        if ( slash_pos == -1 ){
         
          torrent_download += target_download;
         
        }else{
         
          torrent_download += target_download.substring( slash_pos + 1 );
        }
       
        torrent_download  += ".torrent";
       
        ResourceDownloader torrent_rdl = rdf.create( new URL( torrent_download ));

        torrent_rdl  = rdf.getSuffixBasedDownloader( torrent_rdl );
       
          // create an alternate downloader with torrent attempt first
       
        ResourceDownloader alternate_rdl = rdf.getAlternateDownloader( new ResourceDownloader[]{ torrent_rdl, direct_rdl });

          // get size here so it is cached
       
        rdf.getTimeoutDownloader(rdf.getRetryDownloader(alternate_rdl,RD_SIZE_RETRIES),RD_SIZE_TIMEOUT).getSize();
       
     
        List  update_desc = new ArrayList();
       
        List  desc_lines = HTMLUtils.convertHTMLToText( "", sf_details.getDescription());
               
        update_desc.addAll( desc_lines );
               
        List  comment_lines = HTMLUtils.convertHTMLToText( "    ", sf_details.getComment());
       
        update_desc.addAll( comment_lines );

        String[]  update_d = new String[update_desc.size()];
       
        update_desc.toArray( update_d );

        final Update  update =
          checker.addUpdate(
            UPDATE_NAME,
            update_d,
            target_version,
            alternate_rdl,
            Update.RESTART_REQUIRED_YES );
       
        update.setDescriptionURL(sf_details.getInfoURL());
       
        alternate_rdl.addListener(
            new ResourceDownloaderAdapter()
            {
              public boolean
              completed(
                final ResourceDownloader  downloader,
                InputStream          data )
              { 
                installUpdate( checker, update, downloader, data );
                 
                return( true );
             
             
              public void
              failed(
                ResourceDownloader      downloader,
                ResourceDownloaderException e )
              {
                Debug.out( downloader.getName() + " failed", e );
               
                update.complete( false );
              }
            });
      }
    }catch( Throwable e ){
     
      Debug.printStackTrace( e );
     
      checker.reportProgress( "Failed to load plugin details for the platform manager: " + Debug.getNestedExceptionMessage(e));
     
      checker.failed();
     
    }finally{
     
      checker.completed();
    }
  }
 
  protected void
  installUpdate(
    UpdateChecker    checker,
    Update         update,
    ResourceDownloader  rd,
    InputStream      data )
  {
    ZipInputStream zip = null;
   
    try {
      data = update.verifyData( data, true );

      rd.reportActivity( "Data verified successfully" );
     
      UpdateInstaller installer = checker.createInstaller();

      zip = new ZipInputStream(data);

      ZipEntry entry = null;

      while ((entry = zip.getNextEntry()) != null) {

        String name = entry.getName();

        if (name.toLowerCase().startsWith("windows/")) {

          // win32 only files

          name = name.substring(8);

          // skip the directory entry

          if (name.length() > 0) {

            rd.reportActivity("Adding update action for '" + name + "'");

            if (Logger.isEnabled())
              Logger.log(new LogEvent(LOGID,
                  "PlatformManager:Win32 adding action for '" + name + "'"));

            installer.addResource(name, zip, false);

            installer.addMoveAction(name, installer.getInstallDir()
                + File.separator + name);
          }
        }
      }
     
      update.complete( true );
     
    } catch (Throwable e) {

      update.complete( false );
     
      rd.reportActivity("Update install failed:" + e.getMessage());
     
    }finally{
     
      if ( zip != null ){
       
        try{
          zip.close();
         
        }catch( Throwable e ){
        }
      }
    }
  }
 
  protected List
  splitMultiLine(
    String    indent,
    String    text )
  {
    int    pos = 0;
   
    String  lc_text = text.toLowerCase();
   
    List  lines = new ArrayList();
   
    while( true ){
     
      String  line;
     
      int  p1 = lc_text.indexOf( "<br>", pos );
     
      if ( p1 == -1 ){
       
        line = text.substring(pos);
       
      }else{
       
        line = text.substring(pos,p1);
       
        pos = p1+4;
      }
     
      lines.add( indent + line );
     
      if ( p1 == -1 ){
       
        break;
      }
    }
   
    return( lines );
  }
}
TOP

Related Classes of org.gudy.azureus2.platform.win32.PlatformManagerUpdateChecker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.