Package com.aelitis.azureus.plugins.sharing.hoster

Source Code of com.aelitis.azureus.plugins.sharing.hoster.ShareHosterPlugin

/*
* File    : ShareHosterPlugin.java
* Created : 05-Jan-2004
* By      : parg
*
* Azureus - a Java Bittorrent client
*
* 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
*/

package com.aelitis.azureus.plugins.sharing.hoster;

/**
* @author parg
*
*/

import java.util.*;

import org.gudy.azureus2.plugins.*;
import org.gudy.azureus2.plugins.logging.*;
import org.gudy.azureus2.plugins.torrent.*;
import org.gudy.azureus2.plugins.tracker.*;
import org.gudy.azureus2.plugins.utils.DelayedTask;
import org.gudy.azureus2.plugins.sharing.*;
import org.gudy.azureus2.plugins.download.*;

import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.Debug;

public class
ShareHosterPlugin
  implements Plugin, PluginListener, ShareManagerListener
{
  protected PluginInterface  plugin_interface;
  protected LoggerChannel    log;
  protected Tracker      tracker;
  protected ShareManager    share_manager;
  protected DownloadManager  download_manager;

  protected Map        resource_dl_map = new HashMap();
  protected Map        resource_tt_map = new HashMap();
 
  protected Download      download_being_removed;
  protected TrackerTorrent  torrent_being_removed;
     
  public static void
  load(
    PluginInterface    plugin_interface )
  {
    plugin_interface.getPluginProperties().setProperty( "plugin.version",   "1.0" );
    plugin_interface.getPluginProperties().setProperty( "plugin.name",     "Share Hoster" );
  }
 
  public void
  initialize(
    PluginInterface _plugin_interface )
  {
    plugin_interface = _plugin_interface;
   
    log  = plugin_interface.getLogger().getChannel("ShareHosterPlugin");
   
    log.log( LoggerChannel.LT_INFORMATION, "ShareHosterPlugin: initialisation starts");
   
    plugin_interface.addListener( this );
  }
 
  public void
  initializationComplete()
  {
    final DelayedTask dt = plugin_interface.getUtilities().createDelayedTask(new Runnable()
      {
        public void
        run()
        {
          initialise();
        }
      });
   
    dt.queue();
  }
 
  protected void
  initialise()
  {
    log.log( LoggerChannel.LT_INFORMATION, "ShareHosterPlugin: initialisation complete");
   
    Thread.currentThread().setPriority( Thread.MIN_PRIORITY );
   
    try{
      tracker  =  plugin_interface.getTracker();
 
      download_manager = plugin_interface.getDownloadManager();
     
      share_manager = plugin_interface.getShareManager();
           
      share_manager.addListener( this );
     
      share_manager.initialise();
     
    }catch( ShareException e ){
     
      Debug.printStackTrace( e );
     
      log.log( e );
     
    }finally{
     
      plugin_interface.getPluginManager().firePluginEvent( PluginEvent.PEV_INITIAL_SHARING_COMPLETE );
    }
  }
 
  public void
  closedownInitiated()
  {
  }
 
  public void
  closedownComplete()
  {
  }
 
  public void
  resourceAdded(
    final ShareResource    resource )
  {
    log.log( LoggerChannel.LT_INFORMATION, "Resource added:".concat(resource.getName()));
   
    try{
     
      resource.addDeletionListener(
        new ShareResourceWillBeDeletedListener()
        {
          public void
          resourceWillBeDeleted(
            ShareResource  resource )
         
            throws ShareResourceDeletionVetoException
          {
            canResourceBeDeleted( resource );
          }
        });
     
      Download  new_download = null;
     
      int  type = resource.getType();
     
      if ( type == ShareResource.ST_FILE ){
       
        ShareResourceFile  file_resource = (ShareResourceFile)resource;
       
        ShareItem  item = file_resource.getItem();
   
        Torrent torrent = item.getTorrent();
       
        Download  download = download_manager.getDownload( torrent );
       
        if ( download == null ){
         
          new_download = download_manager.addNonPersistentDownload( torrent, item.getTorrentFile(), file_resource.getFile());
        }
      }else if ( type == ShareResource.ST_DIR ){
     
        ShareResourceDir  dir_resource = (ShareResourceDir)resource;
       
        ShareItem  item = dir_resource.getItem();
       
        Torrent torrent = item.getTorrent();
       
        Download  download = download_manager.getDownload( torrent );
       
        if ( download == null ){
         
          new_download = download_manager.addNonPersistentDownload( torrent, item.getTorrentFile(), dir_resource.getDir());
        }
      }
     
      if ( new_download != null ){

        final Download  f_new_download = new_download;
       
        resource_dl_map.put( resource, new_download );
       
        resource.addChangeListener(
          new ShareResourceListener()
          {
            public void
            shareResourceChanged(
              ShareResource      resource,
              ShareResourceEvent    event )
            {
              if ( event.getType() == ShareResourceEvent.ET_ATTRIBUTE_CHANGED ){
           
                TorrentAttribute  attribute = (TorrentAttribute)event.getData();
               
                // System.out.println( "sh: res -> ds: " + attribute.getName() + "/" + resource.getAttribute( attribute ));
               
                f_new_download.setAttribute(
                    attribute,
                    resource.getAttribute( attribute ));
              }
            }
          });
         
        TorrentAttribute[]  attributes = resource.getAttributes();
       
        for (int i=0;i<attributes.length;i++){
         
          TorrentAttribute  ta = attributes[i];
               
          new_download.setAttribute( ta,  resource.getAttribute( ta ));
        }
       
        new_download.addAttributeListener(
          new DownloadAttributeListener() {
            public void attributeEventOccurred(Download d, TorrentAttribute attr, int event_type){
              resource.setAttribute(attr, d.getAttribute(attr));
            }
          },
          plugin_interface.getTorrentManager().getAttribute(TorrentAttribute.TA_CATEGORY),
          DownloadAttributeListener.WRITTEN
        );
       
        Torrent  dl_torrent = new_download.getTorrent();
       
        if ( dl_torrent != null ){
         
          TrackerTorrent  tt = tracker.host(dl_torrent, false );
         
          tt.addRemovalListener(
              new TrackerTorrentWillBeRemovedListener()
              {
                public void
                torrentWillBeRemoved(
                  TrackerTorrent  tt )
               
                  throws TrackerTorrentRemovalVetoException
                {
                  if ( tt != torrent_being_removed ){
                   
                    throw( new TrackerTorrentRemovalVetoException(
                        MessageText.getString("plugin.sharing.torrent.remove.veto")));
                  }
                }               
              });
         
          resource_tt_map.put( resource, tt );
        }
       
        new_download.addDownloadWillBeRemovedListener(
            new DownloadWillBeRemovedListener()
            {
              public void
              downloadWillBeRemoved(
                Download  dl )
             
                throws DownloadRemovalVetoException
              {
                if ( dl != download_being_removed ){
                 
                  throw( new DownloadRemovalVetoException(
                        MessageText.getString("plugin.sharing.download.remove.veto")));
                }
              }
            });
      }
     
    }catch( Throwable e ){
     
      Debug.printStackTrace( e );
    }
  }
 
  protected void
  canResourceBeDeleted(
    ShareResource  resource )
 
    throws ShareResourceDeletionVetoException
  {
    Download  dl = (Download)resource_dl_map.get(resource);
   
    if ( dl != null ){
     
      try{
        download_being_removed  = dl;
       
        dl.canBeRemoved();
       
      }catch( DownloadRemovalVetoException e ){
       
        throw( new ShareResourceDeletionVetoException( e.getMessage()));
       
      }finally{
       
        download_being_removed  = null;
      }
    }
   
    TrackerTorrent  tt = (TrackerTorrent)resource_tt_map.get(resource);
   
    if ( tt != null ){
   
      try{
        torrent_being_removed  = tt;
       
        tt.canBeRemoved();
       
      }catch( TrackerTorrentRemovalVetoException e ){
       
        throw( new ShareResourceDeletionVetoException( e.getMessage()));
       
      }finally{
       
        torrent_being_removed  = null;
      }
    } 
  }
 
  public void
  resourceModified(
    ShareResource    old_resource,
    ShareResource    new_resource )
  {
    log.log( LoggerChannel.LT_INFORMATION, "Resource modified:".concat(old_resource.getName()));
         
    resourceDeleted( old_resource );
     
    resourceAdded( new_resource );
  }
 
  public void
  resourceDeleted(
    ShareResource    resource )
  {
    log.log( LoggerChannel.LT_INFORMATION, "Resource deleted:".concat(resource.getName()));
       
    Download  dl = (Download)resource_dl_map.get(resource);
   
    if ( dl != null ){
     
      try{
        download_being_removed  = dl;
       
          // the resource has gone! stop torrent if running to permit
          // deletion
       
        try{
          dl.stop();
         
        }catch( Throwable e ){
         
          // ignore this as it might already be stopped
        }
       
        dl.remove();
       
      }catch( Throwable e ){
       
        Debug.printStackTrace( e );
       
      }finally{
       
        download_being_removed  = null;
      }
     
      resource_dl_map.remove( resource );
   
   
    TrackerTorrent  tt = (TrackerTorrent)resource_tt_map.get(resource);
   
    if ( tt != null ){
     
      try{
        torrent_being_removed  = tt;
       
        tt.remove();
       
      }catch( Throwable e ){
       
        Debug.printStackTrace( e );
       
      }finally{
       
        torrent_being_removed  = null;
      }
     
      resource_tt_map.remove( resource );
   
  }

  public void
  reportProgress(
    int    percent_complete )
  {
  }
 
  public void
  reportCurrentTask(
    String  task_description )
  {
    log.log( LoggerChannel.LT_INFORMATION, "Current Task:".concat(task_description) );
  }
}
TOP

Related Classes of com.aelitis.azureus.plugins.sharing.hoster.ShareHosterPlugin

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.