From ecb6a59e9e618d2078fff7777e5e318e327032a7 Mon Sep 17 00:00:00 2001 From: Michael Peter Christen Date: Sun, 28 Dec 2014 14:53:55 +0100 Subject: [PATCH] do not translate gif images into png images for thumbnails. Instead, stream the original to the search result thumb viewer. This has two reasons: - animated gifs cause 100% cpu and deadlocks in the jvm gif parser; a known bug which is obviously not yet fixed - animated gifs now appear in the search result also as animation --- htroot/ViewImage.java | 8 +++++++- htroot/yacysearchitem.java | 3 ++- source/net/yacy/search/query/QueryModifier.java | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/htroot/ViewImage.java b/htroot/ViewImage.java index d96545572..eed6dfc33 100644 --- a/htroot/ViewImage.java +++ b/htroot/ViewImage.java @@ -34,6 +34,7 @@ import java.net.MalformedURLException; import java.util.Map; import net.yacy.cora.document.id.DigestURL; +import net.yacy.cora.document.id.MultiProtocolURL; import net.yacy.cora.federate.yacy.CacheStrategy; import net.yacy.cora.protocol.ClientIdentification; import net.yacy.cora.protocol.Domains; @@ -143,7 +144,12 @@ public class ViewImage { } catch (final Exception e) {} } } - + + // gif images are not loaded because of an animated gif bug within jvm which sends java into an endless loop with high CPU + if (ext.equals("gif") && "gif".equals(MultiProtocolURL.getFileExtension(url.getFileName()))) { + return new ByteArrayInputStream(imgb); + } + // read image image = ImageParser.parse(urlString, imgb); diff --git a/htroot/yacysearchitem.java b/htroot/yacysearchitem.java index 69206fb26..433c1618a 100644 --- a/htroot/yacysearchitem.java +++ b/htroot/yacysearchitem.java @@ -296,11 +296,12 @@ public class yacysearchitem { try { image = theSearch.oneImageResult(item, timeout); final String imageUrlstring = image.imageUrl.toNormalform(true); + final String imageUrlExt = MultiProtocolURL.getFileExtension(imageUrlstring); final String target = sb.getConfig(imageUrlstring.matches(target_special_pattern) ? SwitchboardConstants.SEARCH_TARGET_SPECIAL : SwitchboardConstants.SEARCH_TARGET_DEFAULT, "_self"); final String license = URLLicense.aquireLicense(image.imageUrl); // this is just the license key to get the image forwarded through the YaCy thumbnail viewer, not an actual lawful license //sb.loader.loadIfNotExistBackground(image.imageUrl, 1024 * 1024 * 10, null, ClientIdentification.yacyIntranetCrawlerAgent); - prop.putHTML("content_item_hrefCache", "/ViewImage.png?maxwidth=128&maxheight=128&isStatic=true&quadratic=&url=" + imageUrlstring); + prop.putHTML("content_item_hrefCache", "/ViewImage." + ("gif".equals(imageUrlExt) ? "gif" : "png") + "?maxwidth=128&maxheight=128&isStatic=true&quadratic=&url=" + imageUrlstring); prop.putHTML("content_item_href", imageUrlstring); prop.putHTML("content_item_target", target); prop.put("content_item_code", license); diff --git a/source/net/yacy/search/query/QueryModifier.java b/source/net/yacy/search/query/QueryModifier.java index 242c32b42..a146ba4d8 100644 --- a/source/net/yacy/search/query/QueryModifier.java +++ b/source/net/yacy/search/query/QueryModifier.java @@ -320,7 +320,7 @@ public class QueryModifier { Date onDate = DateDetection.parseLine(onDescription); StringBuilder filterQuery = new StringBuilder(20); if (onDate != null) { - filterQuery.append(CollectionSchema.dates_in_content_sxt.getSolrFieldName()).append(":\"").append(org.apache.solr.schema.TrieDateField.formatExternal(onDate)).append('\"'); + filterQuery.append(CollectionSchema.dates_in_content_sxt.getSolrFieldName()).append(":\"").append(org.apache.solr.schema.TrieDateField.formatExternal(onDate)).append('\"'); } return filterQuery.toString();