1 /* 2 * Created on Jul 9, 2009 3 * Created by Paul Gardner 4 * 5 * Copyright (C) Azureus Software, Inc, All Rights Reserved. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 */ 19 20 21 package com.aelitis.azureus.core.content; 22 23 import org.gudy.azureus2.core3.util.Base32; 24 import org.gudy.azureus2.core3.util.SystemTime; 25 import org.gudy.azureus2.plugins.download.Download; 26 27 import com.aelitis.azureus.core.cnetwork.ContentNetwork; 28 29 public abstract class 30 RelatedContent 31 { 32 public static final int VERSION_NA = -1; // not applicable 33 public static final int VERSION_INITIAL = 0; 34 public static final int VERSION_BETTER_SCRAPE = 1; 35 36 public final static String[] NO_TAGS = {}; 37 38 final private String title; 39 final private byte[] hash; 40 final private String tracker; 41 final private long size; 42 43 private int version; 44 private int date; 45 private int seeds_leechers; 46 private byte content_network; 47 48 private byte[] related_to_hash; 49 50 private byte[] tracker_keys; 51 private byte[] ws_keys; 52 53 private String[] tags; 54 private byte nets; 55 56 private long changed_locally_on; 57 58 public RelatedContent( int _version, byte[] _related_to_hash, String _title, byte[] _hash, String _tracker, byte[] _tracker_keys, byte[] _ws_keys, String[] _tags, byte _nets, long _size, int _date, int _seeds_leechers, byte _cnet )59 RelatedContent( 60 int _version, 61 byte[] _related_to_hash, 62 String _title, 63 byte[] _hash, 64 String _tracker, 65 byte[] _tracker_keys, 66 byte[] _ws_keys, 67 String[] _tags, 68 byte _nets, 69 long _size, 70 int _date, 71 int _seeds_leechers, 72 byte _cnet ) 73 { 74 version = _version; 75 related_to_hash = _related_to_hash; 76 title = _title; 77 hash = _hash; 78 tracker = _tracker; 79 tracker_keys = _tracker_keys; 80 ws_keys = _ws_keys; 81 tags = _tags; 82 nets = _nets; 83 size = _size; 84 date = _date; 85 seeds_leechers = _seeds_leechers; 86 content_network = _cnet; 87 setChangedLocallyOn(0); 88 } 89 90 public RelatedContent( String _title, byte[] _hash, String _tracker, long _size, int _date, int _seeds_leechers, byte _cnet )91 RelatedContent( 92 String _title, 93 byte[] _hash, 94 String _tracker, 95 long _size, 96 int _date, 97 int _seeds_leechers, 98 byte _cnet ) 99 { 100 // legacy constructor as referenced from plugin - remove oneday! 101 102 this( VERSION_NA, _title, _hash, _tracker, null, null, null, RelatedContentManager.NET_PUBLIC, _size, _date, _seeds_leechers, _cnet ); 103 } 104 105 public RelatedContent( String _title, byte[] _hash, String _tracker, byte[] _tracker_keys, byte[] _ws_keys, String[] _tags, byte _nets, long _size, int _date, int _seeds_leechers, byte _cnet )106 RelatedContent( 107 String _title, 108 byte[] _hash, 109 String _tracker, 110 byte[] _tracker_keys, 111 byte[] _ws_keys, 112 String[] _tags, 113 byte _nets, 114 long _size, 115 int _date, 116 int _seeds_leechers, 117 byte _cnet ) 118 { 119 // legacy constructor as referenced from plugin - remove once 5711 + plugin update released 120 121 this( VERSION_NA, _title, _hash, _tracker, _tracker_keys, _ws_keys, _tags, _nets, _size, _date, _seeds_leechers, _cnet ); 122 } 123 124 public RelatedContent( int _version, String _title, byte[] _hash, String _tracker, byte[] _tracker_keys, byte[] _ws_keys, String[] _tags, byte _nets, long _size, int _date, int _seeds_leechers, byte _cnet )125 RelatedContent( 126 int _version, 127 String _title, 128 byte[] _hash, 129 String _tracker, 130 byte[] _tracker_keys, 131 byte[] _ws_keys, 132 String[] _tags, 133 byte _nets, 134 long _size, 135 int _date, 136 int _seeds_leechers, 137 byte _cnet ) 138 { 139 version = _version; 140 title = _title; 141 hash = _hash; 142 tracker = _tracker; 143 tracker_keys = _tracker_keys; 144 ws_keys = _ws_keys; 145 tags = _tags; 146 nets = _nets; 147 size = _size; 148 date = _date; 149 seeds_leechers = _seeds_leechers; 150 content_network = _cnet; 151 setChangedLocallyOn(0); 152 } 153 154 public int getVersion()155 getVersion() 156 { 157 return( version ); 158 } 159 160 protected void setVersion( int _version )161 setVersion( 162 int _version ) 163 { 164 version = _version; 165 } 166 167 protected void setRelatedToHash( byte[] h )168 setRelatedToHash( 169 byte[] h ) 170 { 171 related_to_hash = h; 172 // Intentionally not called, since setRelatedToHash gets called after 173 // constructing all the RelatedContent objects 174 // setChangedLocallyOn(0); 175 } 176 177 public byte[] getRelatedToHash()178 getRelatedToHash() 179 { 180 return( related_to_hash ); 181 } 182 183 public abstract Download getRelatedToDownload()184 getRelatedToDownload(); 185 186 public String getTitle()187 getTitle() 188 { 189 return( title ); 190 } 191 192 public abstract int getRank()193 getRank(); 194 195 public byte[] getHash()196 getHash() 197 { 198 return( hash ); 199 } 200 201 public abstract int getLevel()202 getLevel(); 203 204 public abstract boolean isUnread()205 isUnread(); 206 207 public abstract void setUnread( boolean unread )208 setUnread( 209 boolean unread ); 210 211 public abstract int getLastSeenSecs()212 getLastSeenSecs(); 213 214 public String getTracker()215 getTracker() 216 { 217 return( tracker ); 218 } 219 220 public byte[] getTrackerKeys()221 getTrackerKeys() 222 { 223 return( tracker_keys ); 224 } 225 226 public byte[] getWebSeedKeys()227 getWebSeedKeys() 228 { 229 return( ws_keys ); 230 } 231 232 public String[] getTags()233 getTags() 234 { 235 return( tags==null?NO_TAGS:tags ); 236 } 237 238 protected void setTags( String[] _tags )239 setTags( 240 String[] _tags ) 241 { 242 tags = _tags; 243 setChangedLocallyOn(0); 244 } 245 246 public String[] getNetworks()247 getNetworks() 248 { 249 return( RelatedContentManager.convertNetworks( nets )); 250 } 251 252 protected byte getNetworksInternal()253 getNetworksInternal() 254 { 255 return( nets ); 256 } 257 258 protected void setNetworksInternal( byte n )259 setNetworksInternal( 260 byte n ) 261 { 262 nets = n; 263 } 264 265 public long getSize()266 getSize() 267 { 268 return( size ); 269 } 270 271 public long getPublishDate()272 getPublishDate() 273 { 274 return( date*60*60*1000L ); 275 } 276 277 protected int getDateHours()278 getDateHours() 279 { 280 return( date ); 281 } 282 283 protected void setDateHours( int _date )284 setDateHours( 285 int _date ) 286 { 287 date = _date; 288 setChangedLocallyOn(0); 289 } 290 291 public int getLeechers()292 getLeechers() 293 { 294 if ( seeds_leechers == -1 ){ 295 296 return( -1 ); 297 } 298 299 return( seeds_leechers&0xffff ); 300 } 301 302 public int getSeeds()303 getSeeds() 304 { 305 if ( seeds_leechers == -1 ){ 306 307 return( -1 ); 308 } 309 310 return( (seeds_leechers>>16) & 0xffff ); 311 } 312 313 protected int getSeedsLeechers()314 getSeedsLeechers() 315 { 316 return( seeds_leechers ); 317 } 318 319 protected void setSeedsLeechers( int _sl )320 setSeedsLeechers( 321 int _sl ) 322 { 323 seeds_leechers = _sl; 324 setChangedLocallyOn(0); 325 } 326 327 public long getContentNetwork()328 getContentNetwork() 329 { 330 return((content_network&0xff)==0xff?ContentNetwork.CONTENT_NETWORK_UNKNOWN:(content_network&0xff)); 331 } 332 333 protected void setContentNetwork( long cnet )334 setContentNetwork( 335 long cnet ) 336 { 337 content_network = (byte)cnet; 338 setChangedLocallyOn(0); 339 } 340 341 public long getChangedLocallyOn()342 getChangedLocallyOn() 343 { 344 return changed_locally_on; 345 } 346 347 /** 348 * 349 * @param _changed_locally_on 0 == current time 350 */ 351 public void setChangedLocallyOn(long _changed_locally_on)352 setChangedLocallyOn(long _changed_locally_on) 353 { 354 changed_locally_on = (_changed_locally_on == 0) ? SystemTime.getCurrentTime() : _changed_locally_on; 355 } 356 357 public abstract void delete()358 delete(); 359 360 public String getString()361 getString() 362 { 363 return( "title=" + title + ", ver=" + version + ", hash=" + (hash==null?"null":Base32.encode( hash )) + ", tracker=" + tracker +", date=" + date + ", sl=" + seeds_leechers + ", cnet=" + content_network + ", nets=" + nets ); 364 } 365 } 366