aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java130
1 files changed, 130 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java
new file mode 100644
index 000000000..05a4a8d2d
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java
@@ -0,0 +1,130 @@
+package org.wordpress.android.ui.posts;
+
+import org.wordpress.android.WordPress;
+import org.wordpress.android.analytics.AnalyticsTracker;
+import org.wordpress.android.models.Post;
+import org.wordpress.android.models.PostStatus;
+import org.wordpress.android.util.AnalyticsUtils;
+import org.wordpress.android.util.AppLog;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class PostUtils {
+
+ private static final HashSet<String> mShortcodeTable = new HashSet<>();
+
+ /*
+ * collapses shortcodes in the passed post content, stripping anything between the
+ * shortcode name and the closing brace
+ * ex: collapseShortcodes("[gallery ids="1206,1205,1191"]") -> "[gallery]"
+ */
+ public static String collapseShortcodes(final String postContent) {
+ // speed things up by skipping regex if content doesn't contain a brace
+ if (postContent == null || !postContent.contains("[")) {
+ return postContent;
+ }
+
+ String shortCode;
+ Pattern p = Pattern.compile("(\\[ *([^ ]+) [^\\[\\]]*\\])");
+ Matcher m = p.matcher(postContent);
+ StringBuffer sb = new StringBuffer();
+ while (m.find()) {
+ shortCode = m.group(2);
+ if (isKnownShortcode(shortCode)) {
+ m.appendReplacement(sb, "[" + shortCode + "]");
+ } else {
+ AppLog.d(AppLog.T.POSTS, "unknown shortcode - " + shortCode);
+ }
+ }
+ m.appendTail(sb);
+
+ return sb.toString();
+ }
+
+ private static boolean isKnownShortcode(String shortCode) {
+ if (shortCode == null) return false;
+
+ // populate on first use
+ if (mShortcodeTable.size() == 0) {
+ // default shortcodes
+ mShortcodeTable.add("audio");
+ mShortcodeTable.add("caption");
+ mShortcodeTable.add("embed");
+ mShortcodeTable.add("gallery");
+ mShortcodeTable.add("playlist");
+ mShortcodeTable.add("video");
+ mShortcodeTable.add("wp_caption");
+ // audio/video
+ mShortcodeTable.add("dailymotion");
+ mShortcodeTable.add("flickr");
+ mShortcodeTable.add("hulu");
+ mShortcodeTable.add("kickstarter");
+ mShortcodeTable.add("soundcloud");
+ mShortcodeTable.add("vimeo");
+ mShortcodeTable.add("vine");
+ mShortcodeTable.add("wpvideo");
+ mShortcodeTable.add("youtube");
+ // images and documents
+ mShortcodeTable.add("instagram");
+ mShortcodeTable.add("scribd");
+ mShortcodeTable.add("slideshare");
+ mShortcodeTable.add("slideshow");
+ mShortcodeTable.add("presentation");
+ mShortcodeTable.add("googleapps");
+ mShortcodeTable.add("office");
+ // other
+ mShortcodeTable.add("googlemaps");
+ mShortcodeTable.add("polldaddy");
+ mShortcodeTable.add("recipe");
+ mShortcodeTable.add("sitemap");
+ mShortcodeTable.add("twitter-timeline");
+ mShortcodeTable.add("upcomingevents");
+ }
+
+ return mShortcodeTable.contains(shortCode);
+ }
+
+ public static void trackSavePostAnalytics(Post post) {
+ PostStatus status = post.getStatusEnum();
+ switch (status) {
+ case PUBLISHED:
+ if (!post.isLocalDraft()) {
+ AnalyticsUtils.trackWithBlogDetails(
+ AnalyticsTracker.Stat.EDITOR_UPDATED_POST,
+ WordPress.getBlog(post.getLocalTableBlogId())
+ );
+ } else {
+ // Analytics for the event EDITOR_PUBLISHED_POST are tracked in PostUploadService
+ }
+ break;
+ case SCHEDULED:
+ if (!post.isLocalDraft()) {
+ AnalyticsUtils.trackWithBlogDetails(
+ AnalyticsTracker.Stat.EDITOR_UPDATED_POST,
+ WordPress.getBlog(post.getLocalTableBlogId())
+ );
+ } else {
+ Map<String, Object> properties = new HashMap<String, Object>();
+ properties.put("word_count", AnalyticsUtils.getWordCount(post.getContent()));
+ AnalyticsUtils.trackWithBlogDetails(
+ AnalyticsTracker.Stat.EDITOR_SCHEDULED_POST,
+ WordPress.getBlog(post.getLocalTableBlogId()),
+ properties
+ );
+ }
+ break;
+ case DRAFT:
+ AnalyticsUtils.trackWithBlogDetails(
+ AnalyticsTracker.Stat.EDITOR_SAVED_DRAFT,
+ WordPress.getBlog(post.getLocalTableBlogId())
+ );
+ break;
+ default:
+ // No-op
+ }
+ }
+}