Package com.aelitis.azureus.ui.swt.browser.listener

Source Code of com.aelitis.azureus.ui.swt.browser.listener.TorrentListener

package com.aelitis.azureus.ui.swt.browser.listener;

import java.io.File;
import java.util.Map;

import org.eclipse.swt.widgets.Shell;

import org.bouncycastle.util.encoders.Base64;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.util.*;

import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.AzureusCoreRunningListener;
import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory;
import com.aelitis.azureus.core.messenger.ClientMessageContext;
import com.aelitis.azureus.core.messenger.ClientMessageContext.torrentURLHandler;
import com.aelitis.azureus.core.messenger.browser.BrowserMessage;
import com.aelitis.azureus.core.messenger.browser.listeners.AbstractBrowserMessageListener;
import com.aelitis.azureus.core.torrent.PlatformTorrentUtils;
import com.aelitis.azureus.ui.selectedcontent.DownloadUrlInfo;
import com.aelitis.azureus.ui.selectedcontent.DownloadUrlInfoContentNetwork;
import com.aelitis.azureus.ui.swt.utils.TorrentUIUtilsV3;
import com.aelitis.azureus.util.MapUtils;

public class TorrentListener
  extends AbstractBrowserMessageListener
{
  public static final String DEFAULT_LISTENER_ID = "torrent";

  public static final String OP_LOAD_TORRENT_OLD = "loadTorrent";

  public static final String OP_LOAD_TORRENT = "load-torrent";

  private ClientMessageContext.torrentURLHandler    torrentURLHandler;
 
  public TorrentListener(String id) {
    super(id);
  }

  public TorrentListener() {
    this(DEFAULT_LISTENER_ID);
  }

  public void
  setTorrentURLHandler(
    torrentURLHandler handler)
  {
    torrentURLHandler = handler;
  }
 
  public void setShell(Shell shell) {
  }

  public void handleMessage(final BrowserMessage message) {
    String opid = message.getOperationId();
    if (OP_LOAD_TORRENT.equals(opid) || OP_LOAD_TORRENT_OLD.equals(opid)) {
      final Map decodedMap = message.getDecodedMap();
      String url = MapUtils.getMapString(decodedMap, "url", null);
      final boolean playNow = MapUtils.getMapBoolean(decodedMap, "play-now", false);
      final boolean playPrepare = MapUtils.getMapBoolean(decodedMap, "play-prepare",
          false);
      final boolean bringToFront = MapUtils.getMapBoolean(decodedMap,
          "bring-to-front", true);
      if (url != null) {
        if ( torrentURLHandler != null ){
         
          try{
            torrentURLHandler.handleTorrentURL( url );
           
          }catch( Throwable e ){
           
            Debug.printStackTrace(e);
          }
        }
        final DownloadUrlInfo dlInfo = new DownloadUrlInfoContentNetwork(url,
            ContentNetworkManagerFactory.getSingleton().getContentNetwork(
                context.getContentNetworkID()));
        dlInfo.setReferer(message.getReferer());

        AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() {
          public void azureusCoreRunning(AzureusCore core) {
            TorrentUIUtilsV3.loadTorrent(dlInfo, playNow, playPrepare,
                bringToFront);
          }
        });
      } else {
        AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() {
          public void azureusCoreRunning(AzureusCore core) {
            loadTorrentByB64(core, message, MapUtils.getMapString(decodedMap,
                "b64", null));
          }
        });
      }
    } else {
      throw new IllegalArgumentException("Unknown operation: " + opid);
    }
  }

  public static boolean loadTorrentByB64(AzureusCore core, String b64) {
    return loadTorrentByB64(core, null, b64);
  }

  /**
   * @param mapString
   *
   * @since 3.0.1.7
   */
  private static boolean loadTorrentByB64(AzureusCore core,
      BrowserMessage message, String b64) {
    if (b64 == null) {
      return false;
    }

    byte[] decodedTorrent = Base64.decode(b64);

    File tempTorrentFile;
    try {
      tempTorrentFile = File.createTempFile("AZU", ".torrent");
      tempTorrentFile.deleteOnExit();
      String filename = tempTorrentFile.getAbsolutePath();
      FileUtil.writeBytesAsFile(filename, decodedTorrent);

      TOTorrent torrent = TorrentUtils.readFromFile(tempTorrentFile, false);
      // Security: Only allow torrents from whitelisted trackers
      if (!PlatformTorrentUtils.isPlatformTracker(torrent)) {
        Debug.out("stopped loading torrent because it's not in whitelist");
        return false;
      }

      String savePath = COConfigurationManager.getStringParameter("Default save path");
      if (savePath == null || savePath.length() == 0) {
        savePath = ".";
      }

      core.getGlobalManager().addDownloadManager(filename, savePath);
    } catch (Throwable t) {
      if (message != null) {
        message.debug("loadUrl error", t);
      } else {
        Debug.out(t);
      }
      return false;
    }
    return true;
  }
}
TOP

Related Classes of com.aelitis.azureus.ui.swt.browser.listener.TorrentListener

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.