package org.aisen.weibo.sina.support.cache; import java.util.List; import org.aisen.weibo.sina.support.db.SinaDB; import org.aisen.weibo.sina.support.utils.AppContext; import org.aisen.weibo.sina.support.utils.AppSettings; import org.aisen.weibo.sina.support.utils.CacheTimeUtils; import org.sina.android.bean.StatusComment; import org.sina.android.bean.StatusComments; import org.sina.android.bean.WeiBoUser; import com.m.common.params.Params; import com.m.common.settings.Setting; import com.m.common.utils.Logger; import com.m.support.cache.ICacheUtility; import com.m.support.sqlite.property.Extra; import com.m.support.sqlite.util.FieldUtils; import com.m.support.task.TaskException; import com.m.support.task.WorkTask; public class CommentCacheUtility implements ICacheUtility { private static final String TAG = CommentCacheUtility.class.getSimpleName(); public static Extra getExtra(Params params, Setting action, WeiBoUser user) { String key = null; // 提及的评论 if (action.getValue().equals("comments/mentions.json")) key = action.getDescription() + ":" + action.getValue() + ":" + params.getParameter("filter_by_author"); // 我发出的、我收到的 else key = action.getDescription() + ":" + action.getValue() + ":all"; Extra extra = new Extra(user.getIdstr(), key); return extra; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public <T> Cache<T> findCacheData(Setting action, Params params, Class<T> responseCls) { if (AppSettings.isDisableCache()) return null; if (!AppContext.isLogedin()) return null; Extra extra = getExtra(params, action, AppContext.getUser()); String key = extra.getKey(); String selection = String.format(" %s = ? and %s = ? ", FieldUtils.KEY, FieldUtils.OWNER); String[] selectionArgs = new String[] { key, AppContext.getUser().getIdstr() }; List<StatusComment> comments = SinaDB.getSqlite().selectAll(StatusComment.class, selection, selectionArgs, " id desc ", null); if (comments != null && comments.size() > 0) { Logger.d( TAG, String.format("load data success from CommentCacheUtility, key = %s", key)); StatusComments c = new StatusComments(comments); c.setCache(true); c.setExpired(CacheTimeUtils.isExpired(key, AppContext.getUser())); return new Cache((T) c, false); } return null; } @Override public void addCacheData(Setting action, Params params, Object responseObj) { // if (!AppContext.isLogedin()) // return; // // addCacheData(action, params, responseObj, AppContext.getUser()); } private void addCacheData(Setting action, Params params, Object responseObj, WeiBoUser user) { if (!AppContext.isLogedin()) return; List<StatusComment> comments = ((StatusComments) responseObj).getComments(); Extra extra = getExtra(params, action, AppContext.getUser()); String key = extra.getKey(); if (!params.containsKey("since_id") && !params.containsKey("max_id")) { CacheTimeUtils.saveTime(key, AppContext.getUser()); } Logger.d(TAG, String.format("save data to CommentCacheUtility, key = %s", key)); SinaDB.getSqlite().insertList(extra, comments); } public static void reset(final Params params, final Setting action, final List<StatusComment> datas, final WeiBoUser user) { new WorkTask<Void, Void, Void>() { @Override public Void workInBackground(Void... p) throws TaskException { Extra extra = getExtra(params, action, user); SinaDB.getSqlite().deleteAll(extra, StatusComment.class); CommentMemoryCacheUtility.reset(params, action, datas, user); StatusComments comments = new StatusComments(datas); new CommentCacheUtility().addCacheData(action, params, comments, user); return null; } }.execute(); } }