package com.thankcreate.care.tool.converter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import org.json.JSONException; import org.json.JSONObject; import android.R.string; import com.thankcreate.care.App; import com.thankcreate.care.tool.misc.PreferenceHelper; import com.thankcreate.care.tool.misc.StringTool; import com.thankcreate.care.viewmodel.CommentViewModel; import com.thankcreate.care.viewmodel.EntryType; import com.thankcreate.care.viewmodel.FriendViewModel; import com.thankcreate.care.viewmodel.ItemViewModel; import com.thankcreate.care.viewmodel.MainViewModel; import com.thankcreate.care.viewmodel.PictureItemViewModel; public class SinaWeiboConverter { public static CommentViewModel convertCommentToCommon(JSONObject comment) { if(comment == null) return null; CommentViewModel model = new CommentViewModel(); try { model.content = comment.optString("text"); model.id = comment.optString("id"); JSONObject user = comment.optJSONObject("user"); if(user == null) return null; model.iconURL = user.optString("profile_image_url"); model.uid = user.optString("id"); model.title = user.optString("name"); model.type = EntryType.SinaWeibo; String rawTime = comment.optString("created_at"); model.time = convertSinaWeiboDateStringToDate(rawTime); } catch (Exception e) { return null; } return model; } public static FriendViewModel convertFriendToCommon(JSONObject user) { if(user == null) return null; FriendViewModel model = new FriendViewModel(); try { model.name = user.optString("screen_name"); model.description = user.optString("description"); model.avatar = user.optString("profile_image_url"); model.avatar2 = user.optString("avatar_large"); model.ID = user.optString("id"); model.firstCharactor =StringTool.converterToFirstSpell(model.name.toLowerCase()); } catch (Exception e) { e.printStackTrace(); return null; } return model; } public static ItemViewModel convertStatusToCommon(JSONObject status, MainViewModel mainViewModel) { if(status == null) return null; ItemViewModel model = new ItemViewModel(); try { convertPictureToCommon(status, mainViewModel); JSONObject user = status.optJSONObject("user"); if(user == null) return null; model.iconURL = user.optString("profile_image_url"); model.largeIconURL = user.optString("avatar_large"); model.title = user.optString("name"); model.content = status.optString("text"); model.imageURL = status.optString("thumbnail_pic"); model.midImageURL = status.optString("bmiddle_pic"); model.fullImageURL = status.optString("original_pic"); String rawTimeString = status.optString("created_at"); model.time = convertSinaWeiboDateStringToDate(rawTimeString); model.ID = status.optString("id"); model.type = EntryType.SinaWeibo; model.sharedCount = status.optString("reposts_count"); model.commentCount = status.optString("comments_count"); JSONObject forward = status.optJSONObject("retweeted_status"); if(forward != null) { model.forwardItem = new ItemViewModel(); JSONObject forwardUser = forward.optJSONObject("user"); if(forwardUser == null) return null; model.forwardItem.iconURL = forwardUser.optString("profile_image_url"); model.forwardItem.largeIconURL = forwardUser.optString("avatar_large"); model.forwardItem.title = forwardUser.optString("name"); model.forwardItem.content = forward.optString("text"); model.forwardItem.imageURL = forward.optString("thumbnail_pic"); model.forwardItem.midImageURL = forward.optString("bmiddle_pic"); model.forwardItem.fullImageURL = forward.optString("original_pic"); String forwardRawTimeString = forward.optString("created_at"); model.forwardItem.time = convertSinaWeiboDateStringToDate(forwardRawTimeString); model.forwardItem.ID = forward.optString("id"); model.forwardItem.type = EntryType.SinaWeibo; model.forwardItem.sharedCount = forward.optString("reposts_count"); model.forwardItem.commentCount = forward.optString("comments_count"); } } catch (Exception e) { e.printStackTrace(); return null; } return model; } public static void convertPictureToCommon(JSONObject status, MainViewModel mainViewModel) { if(status == null) return; PictureItemViewModel model = new PictureItemViewModel(); try { String useFowardPictureString = PreferenceHelper.getString("Global_NeedFetchImageInRetweet", "True"); if(useFowardPictureString.equalsIgnoreCase("True")) { JSONObject forward = status.optJSONObject("retweeted_status"); if(forward != null) { // 这里之所以重新又变得这么冗余了,是因为用户还是觉得转发图里还是要有本人的评论 // 修改了description的显示方式 2012/1/11 PictureItemViewModel forwardModel = new PictureItemViewModel(); JSONObject forwardUser = forward.optJSONObject("user"); if(forwardUser != null) { forwardModel.title = forwardUser.optString("name"); } forwardModel.smallURL = forward.optString("thumbnail_pic"); forwardModel.middleURL = forward.optString("bmiddle_pic"); forwardModel.largeURL = forward.optString("original_pic"); forwardModel.ID = forward.optString("id"); forwardModel.type = EntryType.SinaWeibo; forwardModel.description = status.optString("text") + "//@" + forwardUser.optString("name") + ": " + forward.optString("text"); // 这个时间应该是转发的时间 String forwardRawTimeString = status.optString("created_at"); forwardModel.time = convertSinaWeiboDateStringToDate(forwardRawTimeString); if(!StringTool.isNullOrEmpty(forwardModel.smallURL)) { App.mainViewModel.sinaWeiboPictureItems.add(forwardModel); } } } model.smallURL = status.optString("thumbnail_pic"); model.middleURL = status.optString("bmiddle_pic"); model.largeURL = status.optString("original_pic"); model.ID = status.optString("id"); model.type = EntryType.SinaWeibo; model.description = status.optString("text"); String rawTimeString = status.optString("created_at"); model.time = convertSinaWeiboDateStringToDate(rawTimeString); JSONObject user = status.optJSONObject("user"); if(user != null) { model.title = user.optString("name"); } if(!StringTool.isNullOrEmpty(model.smallURL)) { App.mainViewModel.sinaWeiboPictureItems.add(model); } } catch (Exception e) { e.printStackTrace(); } } // 新浪的祼格式是这样的 // Fri Oct 05 11:38:16 +0800 2012 // SimpleDateFormat必须做缓存,否则你会死得很惨 // 这玩意儿不做缓存的话几乎在虚拟机上跑不动 public static SimpleDateFormat sdf; public static Date convertSinaWeiboDateStringToDate(String rawDate) { if(StringTool.isNullOrEmpty(rawDate)) return new Date(); if(sdf == null) sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss Z yyyy", Locale.ENGLISH); Date resultDate = null; try { resultDate = sdf.parse(rawDate); } catch (ParseException e) { resultDate = new Date(); } finally { return resultDate; } } }