package com.targroup.coolapkconsole.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v7.graphics.Palette;
import com.bumptech.glide.Glide;
import com.targroup.coolapkconsole.R;
import com.targroup.coolapkconsole.activities.DetailActivity;
import com.targroup.coolapkconsole.activities.SplashActivity;
import com.targroup.coolapkconsole.model.AppDetail;
import com.targroup.coolapkconsole.model.AppItem;
import com.targroup.coolapkconsole.model.DownloadStatItem;
import com.targroup.coolapkconsole.model.UserSave;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by Trumeet on 2017/4/2.
*/
public class CoolapkApi {
public static Observable<Boolean> checkLogin (final Context context) {
return Observable.create(new Observable.OnSubscribe<Boolean>() {
@Override
public void call(Subscriber<? super Boolean> subscriber) {
try {
subscriber.onStart();
Document loginDocument = JsoupUtil.getDocument("developer.coolapk.com", true);
Elements cardElements = JsoupUtil.select(loginDocument, "div[class=mdl-card__supporting-text]");
String alertText = cardElements.text();
if (cardElements.size() > 0 && "你还没有登录,请先登录!".equals(alertText)) {
subscriber.onNext(Boolean.FALSE);
} else if ("你没有权限登录开发者中心,请先申请开发者认证!".equals(alertText)) {
UserSave.logout(context.getApplicationContext());
throw new SecurityException("User no permission to access developer console");
} else {
subscriber.onNext(Boolean.TRUE);
}
subscriber.onCompleted();
} catch (Exception e) {
subscriber.onError(e);
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public static Observable<Object> getAppDetail (final Context context,
final AppItem appItem) {
return Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call (Subscriber<? super Object> subscriber) {
try {
subscriber.onStart();
Document detailDoc = JsoupUtil.getDocument("developer.coolapk.com/do?c=apk&m=edit&id="+
appItem.getId()
, true);
String type = detailDoc.select("select[name=softtype]").select("[selected]").text();
String catid = detailDoc.select("select[name=catid]").select("[selected]").text();
String keywords = detailDoc.select("input[class=mdl-textfield__input][name=keywords]").attr("value");
Elements detailElements = detailDoc.select("script[id=ue-apk-editor]");
String detail = detailElements.select("p").html();
String language = detailDoc.select("select[name=language]").select("[selected]").text();
Elements imageDiv = detailDoc.select("div[id=apkImageUploaderList]");
ArrayList<String> imageUrls = new ArrayList<>();
for (Element element : imageDiv) {
imageUrls.add(element.select("img").attr("src"));
}
Elements downloads = detailDoc.select("div[id^=apk_edit__tab-panel-3]");
Elements downloadsTr = downloads.select("tbody").get(0).select("tr");
AppDetail mDetail = new AppDetail();
for (Element element : downloadsTr) {
Elements td = element.select("td");
DownloadStatItem item = new DownloadStatItem();
item.setmDate(td.get(0).text());
item.setmAppName(td.get(1).text());
item.setmVersion(td.get(2).text());
item.setmDownloads(td.get(3).text());
item.setmDownloadsStation(td.get(3).text());
item.setmDownloadsOutsideStation(td.get(4).text());
item.setmDownloadsNew(td.get(5).text());
item.setmInstalls(td.get(6).text());
item.setmInstallsNew(td.get(7).text());
item.setmSize(td.get(8).text());
mDetail.getmStats().add(item);
}
Collections.sort(mDetail.getmStats(), new Comparator<DownloadStatItem>() {
@Override
public int compare(DownloadStatItem downloadStatItem
, DownloadStatItem t1) {
int date1 = Integer.parseInt(downloadStatItem.getmDate());
int date2 = Integer.parseInt(t1.getmDate());
if (date1 > date2)
return 1;
if (date1 < date2)
return -1;
return 0;
}
});
mDetail.setType(type);
mDetail.setCatId(catid);
mDetail.setKeyWords(keywords.split(","));
mDetail.setDetail(detail);
mDetail.setImageUrls(imageUrls);
mDetail.setLanguage(language);
subscriber.onNext(mDetail);
Bitmap icon = Glide.with(context)
.load(appItem.getIcon())
.asBitmap()
.into(125, 125).get();
subscriber.onNext(icon);
int color = Palette.from(icon)
.generate().getVibrantColor(context.getResources()
.getColor(R.color.colorPrimary));
subscriber.onNext(color);
subscriber.onCompleted();
} catch (Exception e) {
subscriber.onError(e);
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
}