package jianshu.io.app.model.datapool;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import jianshu.io.app.model.JianshuSession;
import jianshu.io.app.model.UserInfoManager;
/**
* Created by Administrator on 2014/5/5.
*/
public abstract class DataPool {
protected final static String CURRENT_USER_SLUG = "meta#current_user_slug";
protected String mStartUrl;
protected boolean mIsAtTheEnd;
protected String mLoadMoreUrl;
public DataPool(String startUrl) {
mStartUrl = startUrl;
}
public Object[] refresh() throws IOException, LoginRequiredException {
onRefresh();
mIsAtTheEnd = false;
return load(mStartUrl);
}
protected abstract void onRefresh();
private Object[] load(String url) throws IOException, LoginRequiredException {
Object httpResult = JianshuSession.getsInstance().getSync(url, true);
if (httpResult instanceof String) {
Document doc = Jsoup.parse((String) httpResult);
if(doc.select("div.login-page").size() > 0) {
JianshuSession.getsInstance().validate();
if(JianshuSession.getsInstance().getState() instanceof JianshuSession.LogoutState) {
throw new LoginRequiredException();
}
}
parsePageUserInfo(doc);
return this.getItems(doc);
} else {
JianshuSession.getsInstance().validate();
if(JianshuSession.getsInstance().getState() instanceof JianshuSession.LogoutState) {
throw new LoginRequiredException();
}
}
return null;
}
protected abstract Object[] getItems(Document doc) throws IOException, LoginRequiredException;
private void parsePageUserInfo(Document doc) {
//页面中如果包含用户信息,说明是已登录的
String userId = null;
Elements userElements = doc.select(CURRENT_USER_SLUG);
if (userElements.size() > 0) {
Element userEl = userElements.get(0);
userId = userEl.attr("value");
}
if(userId != null) {
JianshuSession.getsInstance().notifyUserLogin();
} else {
JianshuSession.getsInstance().notifyUserLogout();
}
UserInfoManager.getsInstance().setUserId(userId);
}
public Object[] pull() throws IOException, LoginRequiredException {
if (!mIsAtTheEnd) {
return load(mLoadMoreUrl);
} else {
return null;
}
}
public boolean isAtTheEnd() {
return mIsAtTheEnd;
}
//清先登录
public class LoginRequiredException extends Exception {
}
}