package com.example.administrator.searchpicturetool.model;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import com.example.administrator.searchpicturetool.model.db.DBManager;
import com.example.administrator.searchpicturetool.model.bean.NewRecommendContent;
import com.example.administrator.searchpicturetool.util.RecommendComparator;
import com.jude.utils.JUtils;
import java.util.Collections;
import java.util.List;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindListener;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by wenhuaijun on 2016/2/12 0012.
* 目前给推荐列表提供测试数据
*/
public class RecommendModel {
public static Observable<List<NewRecommendContent>> getRecommendsFromDB(final Context context){
return Observable.create(new Observable.OnSubscribe<List<NewRecommendContent>>() {
@Override
public void call(Subscriber<? super List<NewRecommendContent>> subscriber) {
JUtils.Log("call Thead: "+Thread.currentThread().toString());
subscriber.onNext(DBManager.getInstance(context).getRecomendContentfromDB()); ;
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
}
public static void getRecommendsFromNet(final Context context,Subscriber<List<NewRecommendContent>> subscriber){
BmobQuery<NewRecommendContent> queryContent = new BmobQuery<>();
queryContent.setLimit(1000);
queryContent.findObjects(context, new FindListener<NewRecommendContent>() {
@Override
public void onSuccess(final List<NewRecommendContent> newRecommendContents) {
JUtils.Log("newRecommendContents length: "+newRecommendContents.size());
new Thread(new Runnable() {
@Override
public void run() {
Handler handler = new Handler(Looper.getMainLooper());
DBManager.getInstance(context).deleteAllRecommendContents();
DBManager.getInstance(context).addAllRecomendContents(newRecommendContents);
List<NewRecommendContent> recommendContents =DBManager.getInstance(context).getRandomRecomendFromDB();
Collections.sort(recommendContents, new RecommendComparator());
handler.post(new Runnable() {
@Override
public void run() {
subscriber.onNext(recommendContents);
}
});
DBManager.getInstance(context).deleteAllRecommendContents();
DBManager.getInstance(context).addAllRecomendContents(recommendContents);
}
}).start();
}
@Override
public void onError(int i, String s) {
subscriber.onError(new Throwable(i + " " + s));
}
});
/* return Observable.create(new Observable.OnSubscribe<List<NewRecommendContent>>() {
@Override
public void call(Subscriber<? super List<NewRecommendContent>> subscriber) {
JUtils.Log("-----call--");
BmobQuery<NewRecommendContent> queryContent = new BmobQuery<>();
queryContent.findObjects(context, new FindListener<NewRecommendContent>() {
@Override
public void onSuccess(List<NewRecommendContent> newRecommendContents) {
DBManager.getInstance(context).deleteAllRecommendContents();
DBManager.getInstance(context).addAllRecomendContents(newRecommendContents);
newRecommendContents =DBManager.getInstance(context).getRandomRecomendFromDB();
Collections.sort(newRecommendContents, new RecommendComparator());
JUtils.Log("call--onNext");
subscriber.onNext(newRecommendContents);
subscriber.onCompleted();
JUtils.Log("call--onSuccess---finish");
}
@Override
public void onError(int i, String s) {
subscriber.onError(new Throwable(i + " " + s));
subscriber.onCompleted();
JUtils.Log("call--onError");
}
});
}
}).doOnNext(new Action1<List<NewRecommendContent>>() {
@Override
public void call(List<NewRecommendContent> newRecommendContents) {
JUtils.Log("doOnNext");
DBManager.getInstance(context).deleteAllRecommendContents();
DBManager.getInstance(context).addAllRecomendContents(newRecommendContents);
JUtils.Log("doOnNext---finish");
}
});*/
}
/*public static Observable<List<Object>> getRecommends2(final Context context){
return Observable.create(subscriber1 -> {
BmobQuery<RecommendTip> queryTip = new BmobQuery<>();
queryTip.findObjects(context, new FindListener<RecommendTip>() {
@Override
public void onSuccess(List<RecommendTip> list) {
for (RecommendTip recommendTip : list) {
subscriber1.onNext(recommendTip);
}
subscriber1.onCompleted();
}
@Override
public void onError(int i, String s) {
subscriber1.onError(new Throwable(i+" "+s));
}
});
})
.mergeWith(Observable.create(subscriber1 -> {
BmobQuery<RecommendContent> queryContent = new BmobQuery<>();
queryContent.findObjects(context, new FindListener<RecommendContent>() {
@Override
public void onSuccess(List<RecommendContent> list) {
for (RecommendTip recommendContent : list) {
subscriber1.onNext(recommendContent);
}
subscriber1.onCompleted();
}
@Override
public void onError(int i, String s) {
subscriber1.onError(new Throwable(i+" "+s));
}
});
}))
.toList()
.doOnNext(list -> Collections.sort(list, new RecommendComparator()));
}*/
}