package org.wordpress.android.util;
import android.text.TextUtils;
/**
* routines related to the Photon API
* http://developer.wordpress.com/docs/photon/
*/
public class PhotonUtils {
private PhotonUtils() {
throw new AssertionError();
}
/*
* returns true if the passed url is an obvious "mshots" url
*/
public static boolean isMshotsUrl(final String imageUrl) {
return (imageUrl != null && imageUrl.contains("/mshots/"));
}
/*
* returns a photon url for the passed image with the resize query set to the passed
* dimensions - note that the passed quality parameter will only affect JPEGs
*/
public enum Quality {
HIGH,
MEDIUM,
LOW
}
public static String getPhotonImageUrl(String imageUrl, int width, int height) {
return getPhotonImageUrl(imageUrl, width, height, Quality.MEDIUM);
}
public static String getPhotonImageUrl(String imageUrl, int width, int height, Quality quality) {
if (TextUtils.isEmpty(imageUrl)) {
return "";
}
// make sure it's valid
int schemePos = imageUrl.indexOf("://");
if (schemePos == -1) {
return imageUrl;
}
// we have encountered some image urls that incorrectly have a # fragment part, which
// must be removed before removing the query string
int fragmentPos = imageUrl.indexOf("#");
if (fragmentPos > 0) {
imageUrl = imageUrl.substring(0, fragmentPos);
}
// remove existing query string since it may contain params that conflict with the passed ones
imageUrl = UrlUtils.removeQuery(imageUrl);
// if this is an "mshots" url, skip photon and return it with a query that sets the width/height
if (isMshotsUrl(imageUrl)) {
return imageUrl + "?w=" + width + "&h=" + height;
}
// strip=all removes EXIF and other non-visual data from JPEGs
String query = "?strip=all";
switch (quality) {
case HIGH:
query += "&quality=100";
break;
case LOW:
query += "&quality=35";
break;
default: // medium
query += "&quality=65";
break;
}
// if both width & height are passed use the "resize" param, use only "w" or "h" if just
// one of them is set
if (width > 0 && height > 0) {
query += "&resize=" + width + "," + height;
} else if (width > 0) {
query += "&w=" + width;
} else if (height > 0) {
query += "&h=" + height;
}
// return passed url+query if it's already a photon url
if (imageUrl.contains(".wp.com")) {
if (imageUrl.contains("i0.wp.com") || imageUrl.contains("i1.wp.com") || imageUrl.contains("i2.wp.com"))
return imageUrl + query;
}
// use wordpress.com as the host if image is on wordpress.com since it supports the same
// query params and, more importantly, can handle images in private blogs
if (imageUrl.contains("wordpress.com")) {
return imageUrl + query;
}
// must use https for https image urls
if (UrlUtils.isHttps(imageUrl)) {
return "https://i0.wp.com/" + imageUrl.substring(schemePos+3, imageUrl.length()) + query;
} else {
return "http://i0.wp.com/" + imageUrl.substring(schemePos+3, imageUrl.length()) + query;
}
}
}