Created
May 10, 2018 08:53
-
-
Save vihuela/d60e603f1403062b31c3d31cefa7be45 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun getScheduleList(view: IView, success: (d: List<TreeNode<*>>) -> Unit, failure: () -> Unit) { | |
running = getBehavior(running) | |
Observable.just(source) | |
.doOnSubscribe { | |
source.clear() | |
} | |
.defPolicy(this) | |
.bindToBehavior(running!!) | |
.observeOn(Schedulers.io()) | |
.flatMap { | |
//轮播图 | |
ApiCacheProvider.IMPL.getSelectCourseBanner(Api.IMPL.getSelectCourseBanner("app_banner").compose(UoocTransformer()), | |
DynamicKey("app_banner"), | |
EvictDynamicKey(ApiUtils.isRxCacheEvict) | |
) | |
} | |
.flatMap { | |
val data = arrayListOf<AdvertisementItem>().apply { | |
it.data?.data?.app_banner?.forEach { | |
add(AdvertisementItem(it.activity1_title, it.activity1_app_h5_url, it.activity1_img_url)) | |
if (it.type == "20") { | |
add(AdvertisementItem(it.activity2_title, it.activity2_app_h5_url, it.activity2_img_url)) | |
} | |
} | |
} | |
if (data.isNotEmpty()) { | |
val typeBanner = TreeNode(Type8(data)) | |
source.add(typeBanner) | |
} | |
//微专业 | |
ApiCacheProvider.IMPL.profession(Api.IMPL.profession().compose(UoocTransformer()), | |
EvictProvider(ApiUtils.isRxCacheEvict)) | |
} | |
.flatMap { | |
//微专业 | |
if (it.data.code == 1) { | |
it.data?.data?.profession?.forEachIndexed { index, course -> | |
if (course.course_list != null && course.course_list.isNotEmpty()) { | |
if (index == 0) source.add(TreeNode(Type0(getString(R.string.ic_micro)))) | |
val parentNode = TreeNode(Type2(course.name, course.app_desc_img)) | |
course.course_list.forEachIndexed { indexSub, it -> | |
val item = ScheduleItem( | |
it.id, | |
it.cover_img, | |
it.parent_name, | |
"${it.uname}/${it.org_name}", | |
it.finished_task_cnt, | |
it.course_task_cnt, | |
it.online ?: "") | |
if (it.course_live == 1) { | |
item.livingItem = ScheduleItem.LivingItem(it.id) | |
} | |
parentNode.addChild(TreeNode(Type3(item))) | |
//正在直播 | |
if (item.livingItem != null) { | |
parentNode.addChild(TreeNode(Type13(item.livingItem!!, false))) | |
} | |
} | |
source.add(parentNode) | |
source.add(TreeNode(Type12())) | |
} | |
} | |
} | |
//第二课堂 | |
it.data?.data?.course?.forEachIndexed { index, course -> | |
if (index == 0) source.add(TreeNode(Type0(getString(R.string.main_schedule_job_courses)))) | |
val item = ScheduleItem( | |
course.id, | |
course.cover_img, | |
course.parent_name, | |
"${course.uname}/${course.org_name}", | |
course.finished_task_cnt, | |
course.course_task_cnt, | |
course.online ?: "") | |
if (course.course_live == 1) { | |
item.livingItem = ScheduleItem.LivingItem(course.id) | |
} | |
source.add(TreeNode(Type7(item))) | |
//正在直播 | |
if (item.livingItem != null) { | |
source.add(TreeNode(Type13(item.livingItem!!))) | |
} | |
} | |
//检查所有学分课 | |
val r = it.data?.data?.profession?.isNotEmpty() == true || it.data?.data?.course?.isNotEmpty() == true | |
Observables.combineLatest( | |
//学分课 | |
Observables.combineLatest( | |
ApiCacheProvider.IMPL.getSelectCourseList(//开课中学分课 | |
Api.IMPL.getSelectCourseList("learn", 1).compose(UoocTransformer()), | |
DynamicKey("learn${1}"), | |
EvictDynamicKey(ApiUtils.isRxCacheEvict)), | |
ApiCacheProvider.IMPL.getSelectCourseList(//未开始学分课 | |
Api.IMPL.getSelectCourseList("nostart", 1).compose(UoocTransformer()), | |
DynamicKey("nostart${1}"), | |
EvictDynamicKey(ApiUtils.isRxCacheEvict)), | |
ApiCacheProvider.IMPL.getSelectCourseList(//已结束学分课 | |
Api.IMPL.getSelectCourseList("finish", 1).compose(UoocTransformer()), | |
DynamicKey("finish${1}"), | |
EvictDynamicKey(ApiUtils.isRxCacheEvict))), | |
//是否已存在微专业或第二课堂 | |
Observable.just(r)) | |
} | |
.flatMap { | |
val learnData = it.first.first.data?.data?.data | |
val noStartData = it.first.second.data?.data?.data | |
val finishData = it.first.third.data?.data?.data | |
currentCreditCourseMode = when { | |
learnData?.isNotEmpty() == true -> "learn" | |
noStartData?.isNotEmpty() == true -> "nostart" | |
finishData?.isNotEmpty() == true -> "finish" | |
else -> "learn" | |
} | |
val currentCreditData = when { | |
learnData?.isNotEmpty() == true -> learnData | |
noStartData?.isNotEmpty() == true -> noStartData | |
finishData?.isNotEmpty() == true -> finishData | |
else -> learnData | |
} | |
//获取到学分课数据 | |
if (currentCreditData?.isNotEmpty() == true) { | |
source.add(TreeNode(Type9())) | |
source.add(TreeNode(Type1(getString(R.string.main_schedule_credit_courses), when (currentCreditCourseMode) { | |
"learn" -> getString(R.string.main_schedule_course_start) | |
"nostart" -> getString(R.string.main_schedule_course_wait) | |
"finish" -> getString(R.string.main_schedule_course_end) | |
else -> getString(R.string.main_schedule_course_start) | |
}))) | |
val t = arrayListOf<ScheduleItem>() | |
setCreditCourseData(currentCreditData, currentCreditCourseMode, t) | |
t.forEach { | |
val element = TreeNode(when (currentCreditCourseMode) { | |
"learn" -> Type4(it) | |
"nostart" -> Type5(it) | |
"finish" -> Type6(it) | |
else -> Type4(it) | |
}) | |
source.add(element) | |
//正在直播 | |
if (it.livingItem != null) { | |
source.add(TreeNode(Type13(it.livingItem!!))) | |
} | |
} | |
} else { | |
when (it.second) { | |
false -> { | |
//不存在微专业或第二课堂 | |
source.add(TreeNode(Type10())) | |
} | |
} | |
} | |
Observable.just(source) | |
} | |
.map { | |
expandAllItem(source) | |
source | |
} | |
.observeOn(AndroidSchedulers.mainThread()) | |
.subscribe( | |
{ | |
currentLoadPage = 2 | |
success.invoke(source) | |
}, { | |
failure.invoke() | |
//异常时可能存在轮播图 | |
if (source.isNotEmpty()) { | |
currentLoadPage = 2 | |
//未登陆 | |
if (!AccountUtil.getAccount().isLogin) { | |
source.add(TreeNode(Type11())) | |
} | |
success.invoke(source) | |
} else { | |
it.parse({ error, message -> | |
when (error) { | |
Error.NetWork, Error.Server, Error.Internal, Error.UnKnow -> { | |
view.showMessageFromNet(error, message) | |
} | |
Error.Invalid -> { | |
when (message) { | |
"未登录" -> { | |
source.add(TreeNode(Type11())) | |
success.invoke(source) | |
} | |
else -> { | |
view.showMessage(message) | |
} | |
} | |
} | |
} | |
}) | |
} | |
}) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment