Package com.aelitis.azureus.activities

Source Code of com.aelitis.azureus.activities.VuzeActivitiesEntry

/**
* Created on Jan 28, 2008
*
* Copyright 2008 Vuze, Inc.  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; version 2 of the License only.
*
* 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
*/

package com.aelitis.azureus.activities;

import java.util.HashMap;
import java.util.Map;

import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.global.GlobalManager;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.torrent.TOTorrentException;
import org.gudy.azureus2.core3.torrent.TOTorrentFactory;
import org.gudy.azureus2.core3.util.*;

import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.cnetwork.ContentNetwork;
import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory;
import com.aelitis.azureus.core.torrent.PlatformTorrentUtils;
import com.aelitis.azureus.ui.common.table.TableColumnCore;
import com.aelitis.azureus.ui.common.table.TableColumnSortObject;
import com.aelitis.azureus.ui.selectedcontent.SelectedContentV3;
import com.aelitis.azureus.ui.utils.ImageBytesDownloader;
import com.aelitis.azureus.ui.utils.ImageBytesDownloader.ImageDownloaderListener;
import com.aelitis.azureus.util.*;

/**
*
* Comparable implementation sorts on timestamp.<P>
* equals() implementation compares IDs
*
* @author TuxPaper
* @created Jan 28, 2008
*
*/
public class VuzeActivitiesEntry
  implements TableColumnSortObject
{
  private String text;

  private String iconID;

  private String id;

  private long timestamp;

  private String typeID;

  private String assetHash;

  private String assetImageURL;

  private DownloadManager dm;

  public Object urlInfo;

  public TableColumnCore tableColumn;

  private byte[] imageBytes;

  private boolean showThumb = true;

  private String torrentName;

  private TOTorrent torrent;

  private boolean isDRM;

  private boolean isPlatformContent;
 
  private boolean playable;
 
  private long readOn;

  private GlobalManager gm = null;
 
  private long contentNetworkID = ContentNetwork.CONTENT_NETWORK_VUZE;

  public VuzeActivitiesEntry(long timestamp, String text, String typeID) {
    this.setText(text);
    this.timestamp = timestamp;
    this.setTypeID(typeID, true);
  }

  public VuzeActivitiesEntry(long timestamp, String text, String icon,
      String id, String typeID, String assetHash) {
    this.timestamp = timestamp;
    this.setText(text);
    this.setIconID(icon);
    this.setID(id);
    this.setTypeID(typeID, true);
    this.setAssetHash(assetHash);
  }

  /**
   *
   */
  public VuzeActivitiesEntry() {
    this.timestamp = SystemTime.getCurrentTime();
  }

  /**
   * @param platformEntry
   */
  public void loadFromExternalMap(Map platformEntry) {
    timestamp = SystemTime.getCurrentTime()
        - MapUtils.getMapLong(platformEntry, "age-ms", 0);
    setIconID(MapUtils.getMapString(platformEntry, "icon-url",
        MapUtils.getMapString(platformEntry, "icon-id", null)));
    setTypeID(MapUtils.getMapString(platformEntry, "type-id", null), true);
    setAssetHash(MapUtils.getMapString(platformEntry, "related-asset-hash",
        null));
    setAssetImageURL(MapUtils.getMapString(platformEntry, "related-image-url",
        null));
    setDRM(MapUtils.getMapBoolean(platformEntry, "no-play", false));
    setTorrentName(MapUtils.getMapString(platformEntry, "related-asset-name",
        null));
    setReadOn(MapUtils.getMapLong(platformEntry, "readOn", 0));
    loadCommonFromMap(platformEntry);
  }

  public void loadFromInternalMap(Map map) {
    timestamp = MapUtils.getMapLong(map, "timestamp", 0);
    if (timestamp == 0) {
      timestamp = SystemTime.getCurrentTime();
    }
    setAssetHash(MapUtils.getMapString(map, "assetHash", null));
    setIconID(MapUtils.getMapString(map, "icon", null));
    setTypeID(MapUtils.getMapString(map, "typeID", null), true);
    setShowThumb(MapUtils.getMapLong(map, "showThumb", 1) == 1);
    setAssetImageURL(MapUtils.getMapString(map, "assetImageURL", null));
    setImageBytes(MapUtils.getMapByteArray(map, "imageBytes", null));
    setDRM(MapUtils.getMapBoolean(map, "isDRM", false));
    setReadOn(MapUtils.getMapLong(map, "readOn", SystemTime.getCurrentTime()));
    loadCommonFromMap(map);
  }

  public void loadCommonFromMap(Map map) {
    if (!isPlatformContent) {
      setIsPlatformContent(MapUtils.getMapBoolean(map, "is-platform",
          isPlatformContent));
    }
    if (!playable) {
      setPlayable(MapUtils.getMapBoolean(map, "playable", false));
    }
    setID(MapUtils.getMapString(map, "id", null));
    setText(MapUtils.getMapString(map, "text", null));
    Map torrentMap = MapUtils.getMapMap(map, "torrent", null);
    if (torrentMap != null) {
      TOTorrent torrent = null;
      try {
        torrent = TOTorrentFactory.deserialiseFromMap(torrentMap);
        setTorrent(torrent);
      } catch (TOTorrentException e) {
      }
    }
    if (dm == null && torrentName == null) {
      setTorrentName(MapUtils.getMapString(map, "torrent-name", null));
    }
    setContentNetworkID(MapUtils.getMapLong(map, "contentNetworkID",
        contentNetworkID));
  }

  // @see java.lang.Object#equals(java.lang.Object)
  public boolean equals(Object obj) {
    if ((obj instanceof VuzeActivitiesEntry) && id != null) {
      return id.equals(((VuzeActivitiesEntry) obj).id);
    }
    return super.equals(obj);
  }

  // @see java.lang.Comparable#compareTo(java.lang.Object)
  public int compareTo(Object obj) {
    if (obj instanceof VuzeActivitiesEntry) {
      VuzeActivitiesEntry otherEntry = (VuzeActivitiesEntry) obj;

      long x = (timestamp - otherEntry.timestamp);
      return x == 0 ? 0 : x > 0 ? 1 : -1;
    }
    // we are bigger
    return 1;
  }

  public void setAssetImageURL(final String url) {
    if (url == null && assetImageURL == null) {
      return;
    }
    if (url == null || url.length() == 0) {
      assetImageURL = null;
      VuzeActivitiesManager.triggerEntryChanged(VuzeActivitiesEntry.this);
      return;
    }
    if (url.equals(assetImageURL)) {
      return;
    }

    assetImageURL = url;
    ImageBytesDownloader.loadImage(url, new ImageDownloaderListener() {
      public void imageDownloaded(byte[] image) {
        setImageBytes(image);
        VuzeActivitiesManager.triggerEntryChanged(VuzeActivitiesEntry.this);
      }
    });
  }

  public String getAssetImageURL() {
    return assetImageURL;
  }

  public Map toDeletedMap() {
    Map map = new HashMap();
    map.put("timestamp", new Long(timestamp));
    map.put("id", id);
    return map;
  }

  public Map toMap() {
    Map map = new HashMap();
    map.put("timestamp", new Long(timestamp));
    if (assetHash != null) {
      map.put("assetHash", assetHash);
    }
    map.put("icon", getIconID());
    map.put("id", id);
    map.put("text", getText());
    map.put("typeID", getTypeID());
    map.put("assetImageURL", assetImageURL);
    map.put("showThumb", new Long(getShowThumb() ? 1 : 0));
    if (imageBytes != null) {
      map.put("imageBytes", imageBytes);
    } else if (dm != null) {
      byte[] thumbnail = PlatformTorrentUtils.getContentThumbnail(dm.getTorrent());
      if (thumbnail != null) {
        map.put("imageBytes", thumbnail);
      }
    }

    if (torrent != null && (dm == null || assetHash == null)) {
      try {
        // make a copy of the torrent

        Map torrent_map = torrent.serialiseToMap();
       
        TOTorrent torrent_to_send = TOTorrentFactory.deserialiseFromMap( torrent_map );

        Map  vuze_map = (Map)torrent_map.get( "vuze" );
       
        // remove any non-standard stuff (e.g. resume data)

        torrent_to_send.removeAdditionalProperties();

        torrent_map = torrent_to_send.serialiseToMap();
       
        if ( vuze_map != null ){
         
          torrent_map.put( "vuze", vuze_map );
        }
       
        map.put("torrent", torrent_map );
      } catch (TOTorrentException e) {
        Debug.outNoStack("VuzeActivityEntry.toMap: " + e.toString());
      }
    }
    map.put("isDRM", new Long(isDRM() ? 1 : 0));
    if (torrentName != null) {
      map.put("torrent-name", torrentName);
    }
   
    map.put("is-platform", new Long(isPlatformContent ? 1 : 0));
   
    if (playable) {
      map.put("playable", new Long(playable ? 1 : 0));
    }
   
    map.put("readOn", new Long(readOn));
   
    map.put("contentNetworkID", new Long(contentNetworkID));

    return map;
  }

  public long getTimestamp() {
    return timestamp;
  }

  public void setTimestamp(long timestamp) {
    if (this.timestamp == timestamp) {
      return;
    }
    this.timestamp = timestamp;
    if (tableColumn != null) {
      tableColumn.setLastSortValueChange(SystemTime.getCurrentTime());
    }
  }

  /**
   * @param typeID the typeID to set
   */
  public void setTypeID(String typeID, boolean autoSetIcon) {
    this.typeID = typeID;
    if (getIconID() == null && typeID != null) {
      setIconID("image.vuze-entry." + typeID.toLowerCase());
    }
  }

  /**
   * @return the typeID
   */
  public String getTypeID() {
    return typeID;
  }

  /**
   * @param iconID the iconID to set
   */
  public void setIconID(String iconID) {
    if (iconID != null && iconID.indexOf("image.") < 0
        && !iconID.startsWith("http")) {
      iconID = "image.vuze-entry." + iconID;
    }
    this.iconID = iconID;
  }

  /**
   * @return the iconID
   */
  public String getIconID() {
    return iconID;
  }

  /**
   * @param text the text to set
   */
  public void setText(String text) {
    this.text = text;
  }

  /**
   * @return the text
   */
  public String getText() {
    return text;
  }

  /**
   * @param id the id to set
   */
  public void setID(String id) {
    this.id = id;
  }

  /**
   * @return the id
   */
  public String getID() {
    return id;
  }

  /**
   * @param assetHash the assetHash to set
   */
  public void setAssetHash(String assetHash) {
    this.assetHash = assetHash;
    if (assetHash != null) {
      try {
        if (gm == null) {
          gm = AzureusCoreFactory.getSingleton().getGlobalManager();
        }
        setDownloadManager(gm.getDownloadManager(new HashWrapper(
            Base32.decode(assetHash))));
      } catch (Exception e) {
        setDownloadManager(null);
        Debug.out("Core not ready", e);
      }
    } else {
      setDownloadManager(null);
    }
  }

  /**
   * @return the assetHash
   */
  public String getAssetHash() {
    return assetHash;
  }

  /**
   * @param dm the dm to set
   */
  public void setDownloadManager(DownloadManager dm) {
    if (this.dm == dm) {
      return;
    }
    if (gm == null) {
      try {
        gm = AzureusCoreFactory.getSingleton().getGlobalManager();
      } catch (Exception e) {
        // ignore
      }
    }
   
    this.dm = dm;
    if (dm != null) {
      setTorrent(dm.getTorrent());
    }
  }

  /**
   * @return the dm
   */
  public DownloadManager getDownloadManger() {
    if (gm != null && !gm.contains(dm)) {
      setDownloadManager(null);
      return null;
    }
    return dm;
  }

  /**
   * @param imageBytes the imageBytes to set
   */
  public void setImageBytes(byte[] imageBytes) {
    this.imageBytes = imageBytes;
  }

  /**
   * @return the imageBytes
   */
  public byte[] getImageBytes() {
    return imageBytes;
  }

  /**
   * @param showThumb the showThumb to set
   */
  public void setShowThumb(boolean showThumb) {
    this.showThumb = showThumb;
  }

  /**
   * @return the showThumb
   */
  public boolean getShowThumb() {
    return showThumb;
  }

  /**
   * Independant for {@link #getDownloadManger()}.  This will be written to
   * the map.
   *
   * @return Only returns TOTorrent set via {@link #setTorrent(TOTorrent)}
   *
   * @since 3.0.5.3
   */
  public TOTorrent getTorrent() {
    return torrent;
  }

  /**
   * Not needed if you {@link #setDownloadManager(DownloadManager)}. This will
   * be written the map.
   *
   * @param torrent
   *
   * @since 3.0.5.3
   */
  public void setTorrent(TOTorrent torrent) {
    this.torrent = torrent;

    try {
      assetHash = torrent.getHashWrapper().toBase32String();
    } catch (Exception e) {
    }
   
    setContentNetworkID(PlatformTorrentUtils.getContentNetworkID(torrent));

    setDRM(torrent == null ? false : PlatformTorrentUtils.isContentDRM(torrent));
    setIsPlatformContent(torrent == null ? false
        : PlatformTorrentUtils.isContent(torrent, true));
  }

  public boolean isDRM() {
    return isDRM;
  }

  public void setDRM(boolean isDRM) {
    this.isDRM = isDRM;
  }

  public String getTorrentName() {
    if (torrentName == null) {
      if (dm != null) {
        return PlatformTorrentUtils.getContentTitle2(dm);
      }
      if (torrent != null) {
        return TorrentUtils.getLocalisedName(torrent);
      }
    }
    return torrentName;
  }

  public void setTorrentName(String torrentName) {
    this.torrentName = torrentName;
  }

  public SelectedContentV3 createSelectedContentObject()
      throws Exception {

    boolean ourContent = DataSourceUtils.isPlatformContent(this);
   
    SelectedContentV3 sc = new SelectedContentV3();
    if (assetHash == null) {
      // Contains no content
      return sc;
    }

    dm = getDownloadManger();
    if (dm != null) {
      sc.setDisplayName(PlatformTorrentUtils.getContentTitle2(dm));
      sc.setDownloadManager(dm);
      return sc;
    }else{
      if ( torrent != null ){
        sc.setTorrent( torrent );
      }
    }

    sc.setDisplayName(getTorrentName());
    if (sc.getDisplayName() == null) {
      TOTorrent torrent = getTorrent();
      if (torrent != null) {
        sc.setDisplayName(TorrentUtils.getLocalisedName(torrent));
        sc.setHash(torrent.getHashWrapper().toBase32String(), ourContent);
      }
    }
   
    if (sc.getHash() == null ){
     
      if ( assetHash != null ){

        sc.setHash(assetHash, true);
      }
    }

    sc.setThumbURL(assetImageURL);
    sc.setImageBytes(imageBytes);

    return sc;

  }

  public boolean isPlatformContent() {
    return isPlatformContent;
  }

  public void setIsPlatformContent(boolean isPlatformContent) {
    this.isPlatformContent = isPlatformContent;
  }

  public boolean isPlayable() {
    // our variable is an override
    if (playable)  {
      return true;
    }
    // use torrent so we don't recurse
    return PlayUtils.canPlayDS(DataSourceUtils.getTorrent(this), -1);
  }

  public void setPlayable(boolean playable) {
    this.playable = playable;
  }

  public long getReadOn() {
    return readOn;
  }

  public void setReadOn(long readOn) {
    if (this.readOn == readOn) {
      return;
    }
    this.readOn = readOn;
    VuzeActivitiesManager.triggerEntryChanged(VuzeActivitiesEntry.this);   
  }
 
  public void setRead(boolean read) {
    long now = SystemTime.getCurrentTime();
    if (read) {
      setReadOn(now);
    } else {
      setReadOn(now * -1);
    }
  }
 
  public boolean isRead() {
    return readOn > 0;
  }
 
  public boolean canFlipRead() {
    long ofs = SystemTime.getOffsetTime(-300);
    if (readOn > 0) {
      return ofs > readOn;
    } else {
      return ofs > (-1 * readOn);
    }
  }

  public long getContentNetworkID() {
    return contentNetworkID;
  }
 
  public ContentNetwork getContentNetwork() {
    ContentNetwork cn = ContentNetworkManagerFactory.getSingleton().getContentNetwork(contentNetworkID);
    if (cn == null) {
      cn = ConstantsVuze.getDefaultContentNetwork();
    }
    return cn;
  }

  public void setContentNetworkID(long contentNetworkID) {
    this.contentNetworkID = contentNetworkID;
  }
}
TOP

Related Classes of com.aelitis.azureus.activities.VuzeActivitiesEntry

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.