package com.jbidwatcher.auction; /* * Copyright (c) 2000-2007, CyberFOX Software, Inc. All Rights Reserved. * * Developed by mrs (Morgan Schweers) */ import com.jbidwatcher.util.config.JConfig; import com.jbidwatcher.util.queue.MQFactory; import com.jbidwatcher.util.queue.MessageQueue; import com.jbidwatcher.util.http.Http; import com.jbidwatcher.util.ByteBuffer; import java.net.*; /** @noinspection MagicNumber,Singleton*/ public class ThumbnailLoader implements MessageQueue.Listener { private static ThumbnailLoader sInstance = null; private ThumbnailLoader() { } public void messageAction(Object deQ) { AuctionInfo ai = (AuctionInfo) deQ; String thumbnail = ai.getThumbnailURL(); // eBay has started including a 64x64 image instead of the 96x96 ones they used to have, // but it's named '*6464.jpg' instead of '*.jpg'. if(thumbnail == null) thumbnail = ai.getAlternateSiteThumbnail(); ByteBuffer thumbnailImage = getThumbnailByURL(thumbnail); // If we retrieved 'something', but it was 0 bytes long, it's not a thumbnail. if(thumbnailImage != null && thumbnailImage.getLength() == 0) thumbnailImage = null; String imgPath = Thumbnail.getValidImagePath(ai.getIdentifier(), thumbnailImage); ai.setThumbnail(imgPath); MQFactory.getConcrete("redraw").enqueue(ai.getIdentifier()); } private ByteBuffer getThumbnailByURL(String url) { ByteBuffer tmpThumb; try { tmpThumb = downloadThumbnail(JConfig.getURL(url)); } catch (Exception ignored) { tmpThumb = null; } return tmpThumb; } public static ByteBuffer downloadThumbnail(URL img) { ByteBuffer tmpThumb = Http.net().getURL(img); // There's a specific image which is just 'click here to // view item'. Boring, and misleading. if(tmpThumb.getCRC() == 0xAEF9E727 || tmpThumb.getCRC() == 0x3D7BF54E || tmpThumb.getCRC() == 0x076AE9FB || tmpThumb.getCRC() == 0x0E1AE309 || tmpThumb.getCRC() == Long.parseLong(JConfig.queryConfiguration("thumbnail.crc", "0"), 16) || tmpThumb.getCRC() == 0x5DAB591F) { tmpThumb = null; } return tmpThumb; } public static void start() { if(sInstance == null) { MQFactory.getConcrete("thumbnail").registerListener(sInstance = new ThumbnailLoader()); } } }