/* * Copyright 2012 The Stanford MobiSocial Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mobisocial.musubi.ui.util; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.PrintWriter; import mobisocial.musubi.model.MFeed; import mobisocial.musubi.model.MIdentity; import mobisocial.musubi.model.MObject; import mobisocial.musubi.model.helpers.FeedManager; import mobisocial.musubi.model.helpers.IdentitiesManager; import mobisocial.musubi.objects.PictureObj; import mobisocial.musubi.objects.StatusObj; import org.apache.commons.lang3.StringEscapeUtils; import org.json.JSONObject; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.util.Base64; import android.util.Log; public class FeedHTML { public static void writeHeader(FileOutputStream fo, FeedManager feedManager, MFeed feed) { PrintWriter w = new PrintWriter(fo); w.print("<html>"); w.print("<head>"); w.print("<title>"); w.print(StringEscapeUtils.escapeHtml4(UiUtil.getFeedNameFromMembersList(feedManager, feed))); w.print("</title>"); w.print("</head>"); w.print("<body>"); w.print("<h1>"); w.print(StringEscapeUtils.escapeHtml4(UiUtil.getFeedNameFromMembersList(feedManager, feed))); w.print("</h1>"); w.flush(); } public static void writeObj(FileOutputStream fo, Context context, IdentitiesManager identitiesManager, MObject object) { //TODO: it would be better to put the export code inside the obj handlers MIdentity ident = identitiesManager.getIdentityForId(object.identityId_); if(ident == null) return; PrintWriter w = new PrintWriter(fo); w.print("<div>"); w.print("<div style=\"float:left\">"); w.print("<img src=\"data:image/jpeg;base64,"); Bitmap thumb = UiUtil.safeGetContactThumbnail(context, identitiesManager, ident); ByteArrayOutputStream bos = new ByteArrayOutputStream(); thumb.compress(CompressFormat.JPEG, 90, bos); w.print(Base64.encodeToString(bos.toByteArray(), Base64.DEFAULT)); w.print("\">"); w.print("</div>"); w.print("<div>"); w.print("<h6>"); w.print(UiUtil.safeNameForIdentity(ident)); w.print("</h6>"); try { if(object.type_.equals(StatusObj.TYPE)) { w.print(new JSONObject(object.json_).getString(StatusObj.TEXT)); } else if(object.type_.equals(PictureObj.TYPE)) { w.print("<img src=\"data:image/jpeg;base64,"); w.print(Base64.encodeToString(object.raw_, Base64.DEFAULT)); w.print("\">"); } else { throw new RuntimeException("unsupported type " + object.type_); } } catch(Throwable t) { Log.e("HTML EXPORT", "failed to process obj", t); w.print("<i>only visibile in musubi</i>"); } w.print("</div>"); w.print("</div>"); w.print("</body>"); w.print("</html>"); w.flush(); } public static void writeFooter(FileOutputStream fo) { PrintWriter w = new PrintWriter(fo); w.print("</body>"); w.print("</html>"); w.flush(); } }