package com.qiwenge.android.utils;
import com.google.gson.Gson;
import com.liuguangqiang.framework.utils.GsonUtils;
import com.liuguangqiang.framework.utils.Logs;
import com.qiwenge.android.entity.Chapter;
import com.qiwenge.android.listeners.ChapterListener;
import com.qiwenge.android.utils.http.JHttpClient;
import com.qiwenge.android.utils.http.JsonResponseHandler;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import rx.Observer;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by Eric on 16/1/12.
*/
public class ChapterStore {
public static void getChapter(String bookId, String chapterId, ChapterListener listener) {
File file = OfflineUtils.getOfflineFile(bookId, chapterId);
if (file != null && file.exists()) {
getChapterForLocal(file, listener);
} else {
getChapterFromServer(chapterId, listener);
}
}
private static void getChapterForLocal(final File file, final ChapterListener listener) {
Logs.i("getChapterForLocal");
rx.Observable.create(new rx.Observable.OnSubscribe<Chapter>() {
@Override
public void call(Subscriber<? super Chapter> subscriber) {
try {
String json = getStringFromFile(file);
String result = GsonUtils.getResult(json, "result");
Chapter chapter = GsonUtils.getModel(result, Chapter.class);
Logs.i(chapter.title);
subscriber.onNext(chapter);
subscriber.onCompleted();
} catch (Exception e) {
e.printStackTrace();
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Chapter>() {
@Override
public void onCompleted() {
listener.onFinish();
}
@Override
public void onError(Throwable e) {
listener.onFailure();
}
@Override
public void onNext(Chapter chapter) {
listener.onSuccess(chapter);
}
});
}
private static String convertStreamToString(InputStream is) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
reader.close();
return sb.toString();
}
private static String getStringFromFile(File file) throws Exception {
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
String result = convertStreamToString(bufferedInputStream);
bufferedInputStream.close();
return result;
}
private static void getChapterFromServer(String chapterId, final ChapterListener listener) {
Logs.i("getChapterFromServer");
String url = ApiUtils.getChapter(chapterId);
JHttpClient.get(url, null, new JsonResponseHandler<Chapter>(Chapter.class, false) {
@Override
public void onSuccess(final Chapter result) {
listener.onSuccess(result);
}
@Override
public void onStart() {
listener.onStart();
}
@Override
public void onFailure(String msg) {
listener.onFailure();
}
@Override
public void onFinish() {
listener.onFinish();
}
});
}
}