package kr.kdev.dg1s.biowiki.util;
/**
* Enable WP.me-powered shortlinks for Posts, Pages, and Blogs on WordPress.com or Jetpack powered sites.
*
* Shortlinks are a quick way to get short and simple links to your posts, pages, and blogs.
* They use the wp.me domain so you can have more space to write on social media sites.
*
* See: https://github.com/Automattic/jetpack/blob/master/modules/shortlinks.php
*
*/
import android.text.TextUtils;
import kr.kdev.dg1s.biowiki.models.Blog;
import kr.kdev.dg1s.biowiki.models.Post;
import kr.kdev.dg1s.biowiki.models.PostStatus;
public class BWMeShortlinks {
/**
* Converts a base-10 number to base-62
*
* @param num base-10 number
* @return String base-62 number
*/
public static String wpme_dec2sixtwo(double num) {
if (num == 0)
return "0";
StringBuilder out;
try {
String index = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
out = new StringBuilder();
if (num < 0) {
out.append('-');
num = Math.abs(num);
}
double t = Math.floor(Math.log10(num) / Math.log10(62));
for (; t >= 0; t--) {
int a = (int) Math.floor(num / Math.pow(62, t));
out.append(index.substring(a, a + 1));
num = num - (a * Math.pow(62, t));
}
return out.toString();
} catch (IndexOutOfBoundsException e) {
AppLog.e(AppLog.T.UTILS, "Connot convert number " + num + " to base 62", e);
}
return null;
}
/**
* Returns The post shortlink
*
* @param blog Blog that contains the post or the page
* @param post Post or page we want calculate the shortlink
* @return String The blog shortlink or null (null is returned if the blog object is empty, or it's not a wpcom/jetpack blog, or in case of errors).
*/
public static String getPostShortlink(Blog blog, Post post) {
if (post == null || blog == null)
return null;
if (!blog.isDotcomFlag() && !blog.isJetpackPowered())
return null;
String postID = post.getRemotePostId();
if (postID == null)
return null;
String id = null;
String type = null;
String postName = StringUtils.notNullStr(post.getSlug());
if (post.getStatusEnum() == PostStatus.PUBLISHED && postName.length() > 0 && postName.length() <= 8 && !postName.contains("%") && !postName.contains("-")) {
id = postName;
type = "s";
} else {
try {
id = wpme_dec2sixtwo(Double.parseDouble(postID));
} catch (NumberFormatException e) {
AppLog.e(AppLog.T.UTILS, "Remote postID cannot be converted to double" + postID, e);
return null;
}
if (post.isPage()) {
type = "P";
} else {
type = "p";
}
}
//Calculate the blog shortlink
String blogShortlink = null;
try {
double blogID = blog.isDotcomFlag() ? blog.getRemoteBlogId() : Double.parseDouble(blog.getApi_blogid());
blogShortlink = wpme_dec2sixtwo(blogID);
} catch (NumberFormatException e) {
AppLog.e(AppLog.T.UTILS, "Remote Blog ID cannot be converted to double", e);
return null;
}
if (TextUtils.isEmpty(type) || TextUtils.isEmpty(id) || TextUtils.isEmpty(blogShortlink))
return null;
return "http://wp.me/" + type + blogShortlink + "-" + id;
}
/**
* Returns The blog shortlink
*
* @param blog Blog we want calculate the shortlink
* @return String The blog shortlink or null (null is returned if the blog object is empty, or it's not a wpcom/jetpack blog, or in case of errors).
*/
public static String getBlogShortlink(Blog blog) {
if (blog == null)
return null;
if (!blog.isDotcomFlag() && !blog.isJetpackPowered())
return null;
try {
double blogID = blog.isDotcomFlag() ? blog.getRemoteBlogId() : Double.parseDouble(blog.getApi_blogid());
String shortlink = wpme_dec2sixtwo(blogID);
String shortlinkWithProtocol = (shortlink == null) ? blog.getHomeURL() : "http://wp.me/" + shortlink;
return shortlinkWithProtocol;
} catch (NumberFormatException e) {
AppLog.e(AppLog.T.UTILS, "Remote Blog ID cannot be converted to double ", e);
return blog.getHomeURL();
}
}
}