diff --git a/build-logic/core/app/src/main/kotlin/AppPlugin.kt b/build-logic/core/app/src/main/kotlin/AppPlugin.kt index 7aa8afb06..b38a65a32 100644 --- a/build-logic/core/app/src/main/kotlin/AppPlugin.kt +++ b/build-logic/core/app/src/main/kotlin/AppPlugin.kt @@ -11,6 +11,9 @@ import org.gradle.kotlin.dsl.* import java.io.File /** + * + * 考虑到单模块调试,所以应该把通用的设置放在 BaseApplicationPlugin 里面,这里面只用来放特殊的设置 + * *@author ZhiQiang Tu *@time 2022/10/11 17:28 *@signature There are no stars in the hills. @@ -77,6 +80,7 @@ class AppPlugin : BasePlugin() { //多渠道包的输出目录,默认为new File(project.buildDir,"channel") outputDir = File(project.buildDir, "channel") //多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}-${buildTime} + //这个命名跟发版 CI 有对应关系,请不要随意修改 !!! apkNameFormat = "掌上重邮-\${versionName}-\${flavorName}-\${buildType}-\${buildTime}" //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false) fastMode = false diff --git a/build-logic/core/proguard-rules.pro b/build-logic/core/proguard-rules.pro index 19add783e..815db4c8f 100644 --- a/build-logic/core/proguard-rules.pro +++ b/build-logic/core/proguard-rules.pro @@ -4,10 +4,6 @@ # ##################################################################### #noinspection ShrinkerUnresolvedReference -#基线包使用,生成mapping.txtt --printmapping mapping.txt -#补丁包使用,应用mapping.txt -#-applymapping mapping.txt #-------------------------------------------定制化区域---------------------------------------------- #---------------------------------1.实体类--------------------------------- #原因:实体类数据,一定不能混淆,忽略了Serializable接口和Parcelable接口,实体类必须实现这两个接口 @@ -133,7 +129,7 @@ ## hotfix ## Sophix https://help.aliyun.com/document_detail/61082.html #基线包使用,生成mapping.txt --printmapping mapping.txt +#-printmapping mapping.txt # 后面已经生成混淆映射文件 #生成的mapping.txt在app/build/outputs/mapping/release路径下,移动到/app路径下 #修复后的项目使用,保证混淆结果一致 #-applymapping mapping.txt diff --git a/build-logic/core/versions/src/main/kotlin/config/Config.kt b/build-logic/core/versions/src/main/kotlin/config/Config.kt index 1d0c6ab02..14b6becb7 100644 --- a/build-logic/core/versions/src/main/kotlin/config/Config.kt +++ b/build-logic/core/versions/src/main/kotlin/config/Config.kt @@ -15,8 +15,8 @@ object Config { const val targetSdk = 33 const val compileSdk = targetSdk - const val versionCode = 81 // 线上80,开发81 - const val versionName = "6.6.1-beta" // 线上6.6.0,开发6.6.1 + const val versionCode = 81 // 线上81,开发82 + const val versionName = "6.6.1" // 线上6.6.1,开发6.6.2 val releaseAbiFilters = listOf("arm64-v8a") val debugAbiFilters = listOf("arm64-v8a","x86_64") diff --git a/module_course/api_course/src/main/java/com/mredrock/cyxbs/api/course/ILessonService.kt b/module_course/api_course/src/main/java/com/mredrock/cyxbs/api/course/ILessonService.kt index d35e4577a..6e44106c8 100644 --- a/module_course/api_course/src/main/java/com/mredrock/cyxbs/api/course/ILessonService.kt +++ b/module_course/api_course/src/main/java/com/mredrock/cyxbs/api/course/ILessonService.kt @@ -32,13 +32,10 @@ interface ILessonService : IProvider { set(value) = defaultSp.edit { putBoolean("是否使用本地课表数据", value) } } - object CourseDisallowLocalSaveException : RuntimeException("课表数据不被允许本地保存") - /** * 直接得到当前学号的课 * - 上游已主动切换成 io 线程 * - 在得不到这个人课表数据时会抛出异常,比如学号为空串时 - * - 在不允许使用本地缓存且得不到课表数据时抛出 [CourseDisallowLocalSaveException] 异常 */ fun getStuLesson(stuNum: String): Single> @@ -46,7 +43,6 @@ interface ILessonService : IProvider { * 得到当前登录人的课 * - 上游已主动切换成 io 线程 * - 在得不到这个人课表数据时会抛出异常 - * - 在不允许使用本地缓存且得不到课表数据时抛出 [CourseDisallowLocalSaveException] 异常 */ fun getSelfLesson(): Single> @@ -54,7 +50,6 @@ interface ILessonService : IProvider { * 得到当前关联人的课 * - 上游已主动切换成 io 线程 * - 在不存在关联人和得不到这个人课表数据时会抛出异常 - * - 在不允许使用本地缓存且得不到课表数据时抛出 [CourseDisallowLocalSaveException] 异常 */ fun getLinkLesson(): Single> @@ -63,7 +58,6 @@ interface ILessonService : IProvider { * - 上游已主动切换成 io 线程 * - 在得不到当前登录人课表数据时会抛出异常 * - 在不存在关联人和得不到这个人课表数据时会返回 emptyList() - * - 在不允许使用本地缓存且得不到课表数据时抛出 [CourseDisallowLocalSaveException] 异常 */ fun getSelfLinkLesson(): Single, List>> @@ -75,8 +69,10 @@ interface ILessonService : IProvider { * - 没登录时发送 emptyList() * - 没有连接网络并且不允许使用本地缓存时会一直不发送数据给下游 * - 不会抛出异常给下游 + * + * @param isForce 是否强制刷新,默认不进行强制刷新,会使用应用生命周期的缓存 */ - fun observeSelfLesson(): Observable> + fun observeSelfLesson(isForce: Boolean = false): Observable> /** * 这里提供 Calendar 与 [hashDay] 互换代码 diff --git a/module_course/api_course/src/main/java/com/mredrock/cyxbs/api/course/ILinkService.kt b/module_course/api_course/src/main/java/com/mredrock/cyxbs/api/course/ILinkService.kt index b5d5c28ac..f4bcad024 100644 --- a/module_course/api_course/src/main/java/com/mredrock/cyxbs/api/course/ILinkService.kt +++ b/module_course/api_course/src/main/java/com/mredrock/cyxbs/api/course/ILinkService.kt @@ -20,8 +20,12 @@ interface ILinkService : IProvider { fun getLinkStu(): Single /** - * 观察当前登录人的关联情况 - * - 不会抛异常 + * 观察当前登录人的我的关联数据 + * - 支持换账号登录后返回新登录人的数据 + * - 没登录返回的数据全为空串 + * - 第一次观察时会请求新的数据 + * - 使用了 distinctUntilChanged(),只会在数据更改了才会回调 + * - 上游不会抛出错误到下游 * * ## 注意 * - 观察后是一定有值发送下来的,请使用 [LinkStu.isNull] 来判断是否存在关联人 diff --git a/module_course/src/main/java/com/mredrock/cyxbs/course/page/course/model/StuLessonRepository.kt b/module_course/src/main/java/com/mredrock/cyxbs/course/page/course/model/StuLessonRepository.kt index 8a3df6ee2..4ca85d9f2 100644 --- a/module_course/src/main/java/com/mredrock/cyxbs/course/page/course/model/StuLessonRepository.kt +++ b/module_course/src/main/java/com/mredrock/cyxbs/course/page/course/model/StuLessonRepository.kt @@ -4,7 +4,6 @@ import androidx.annotation.WorkerThread import androidx.collection.ArrayMap import com.mredrock.cyxbs.api.account.IAccountService import com.mredrock.cyxbs.api.course.ILessonService -import com.mredrock.cyxbs.api.course.ILessonService.CourseDisallowLocalSaveException import com.mredrock.cyxbs.course.page.course.bean.StuLessonBean import com.mredrock.cyxbs.course.page.course.room.LessonDataBase import com.mredrock.cyxbs.course.page.course.room.StuLessonEntity @@ -19,7 +18,6 @@ import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.schedulers.Schedulers import kotlinx.coroutines.flow.flow import kotlinx.coroutines.rx3.asObservable -import retrofit2.HttpException /** * ... @@ -41,7 +39,7 @@ object StuLessonRepository { * - 没有连接网络并且不允许使用本地缓存时会一直不发送数据给下游 * - 不会抛出异常给下游 */ - fun observeSelfLesson(): Observable> { + fun observeSelfLesson(isForce: Boolean = false): Observable> { return IAccountService::class.impl .getUserService() .observeStuNumState() @@ -54,7 +52,7 @@ object StuLessonRepository { .observeLesson(stuNum) .doOnSubscribe { // 在开始订阅时异步请求一次云端数据,所以下游会先拿到本地数据库中的数据,如果远端数据更新了,整个流会再次通知 - refreshLesson(stuNum).unsafeSubscribeBy() + refreshLesson(stuNum, isForce).unsafeSubscribeBy() }.distinctUntilChanged() // 去重 .subscribeOn(Schedulers.io()) } else { @@ -65,7 +63,7 @@ object StuLessonRepository { emit(Unit) }.asObservable() .switchMap { - refreshLesson(stuNum) + refreshLesson(stuNum, isForce) .onErrorComplete() // 网络请求的异常全部吞掉 .toObservable() } @@ -108,7 +106,6 @@ object StuLessonRepository { /** * 得到某人的课,在得不到这个人课表数据时会抛出异常, - * 在不允许使用本地数据且得到课表数据失败时抛出 [CourseDisallowLocalSaveException] 异常 */ fun getLesson( stuNum: String, @@ -127,10 +124,7 @@ object StuLessonRepository { throw throwable } } else { - when (throwable) { - is HttpException -> throw CourseDisallowLocalSaveException - else -> throw throwable - } + throw throwable } } } diff --git a/module_course/src/main/java/com/mredrock/cyxbs/course/page/course/ui/home/viewmodel/HomeCourseViewModel.kt b/module_course/src/main/java/com/mredrock/cyxbs/course/page/course/ui/home/viewmodel/HomeCourseViewModel.kt index aca7896ab..fa48f0a4c 100644 --- a/module_course/src/main/java/com/mredrock/cyxbs/course/page/course/ui/home/viewmodel/HomeCourseViewModel.kt +++ b/module_course/src/main/java/com/mredrock/cyxbs/course/page/course/ui/home/viewmodel/HomeCourseViewModel.kt @@ -88,7 +88,7 @@ class HomeCourseViewModel : BaseViewModel() { */ private fun initObserve(): Disposable { // 自己课的观察流 - val selfLessonObservable = StuLessonRepository.observeSelfLesson() + val selfLessonObservable = StuLessonRepository.observeSelfLesson(true) // 关联人课的观察流 val linkLessonObservable = LinkRepository.observeLinkStudent() diff --git a/module_course/src/main/java/com/mredrock/cyxbs/course/page/link/model/LinkRepository.kt b/module_course/src/main/java/com/mredrock/cyxbs/course/page/link/model/LinkRepository.kt index 4ccbed597..dec7390d4 100644 --- a/module_course/src/main/java/com/mredrock/cyxbs/course/page/link/model/LinkRepository.kt +++ b/module_course/src/main/java/com/mredrock/cyxbs/course/page/link/model/LinkRepository.kt @@ -28,6 +28,7 @@ object LinkRepository { /** * 观察当前登录人的我的关联数据 * - 支持换账号登录后返回新登录人的数据 + * - 没登录返回 [LinkStuEntity.NULL] * - 第一次观察时会请求新的数据 * - 使用了 distinctUntilChanged(),只会在数据更改了才会回调 * - 上游不会抛出错误到下游 diff --git a/module_course/src/main/java/com/mredrock/cyxbs/course/service/LessonServiceImpl.kt b/module_course/src/main/java/com/mredrock/cyxbs/course/service/LessonServiceImpl.kt index 221867d96..ff06d1333 100644 --- a/module_course/src/main/java/com/mredrock/cyxbs/course/service/LessonServiceImpl.kt +++ b/module_course/src/main/java/com/mredrock/cyxbs/course/service/LessonServiceImpl.kt @@ -52,8 +52,8 @@ class LessonServiceImpl : ILessonService { } } - override fun observeSelfLesson(): Observable> { - return StuLessonRepository.observeSelfLesson() + override fun observeSelfLesson(isForce: Boolean): Observable> { + return StuLessonRepository.observeSelfLesson(isForce) .map { it.toLesson() } } diff --git a/module_main/src/main/java/com/mredrock/cyxbs/main/ui/course/utils/CourseHeaderHelper.kt b/module_main/src/main/java/com/mredrock/cyxbs/main/ui/course/utils/CourseHeaderHelper.kt index 4192cf3d8..881505dfd 100644 --- a/module_main/src/main/java/com/mredrock/cyxbs/main/ui/course/utils/CourseHeaderHelper.kt +++ b/module_main/src/main/java/com/mredrock/cyxbs/main/ui/course/utils/CourseHeaderHelper.kt @@ -9,7 +9,6 @@ import com.mredrock.cyxbs.lib.utils.service.impl import com.mredrock.cyxbs.config.config.SchoolCalendar import com.mredrock.cyxbs.lib.utils.extensions.toast import com.mredrock.cyxbs.lib.utils.utils.judge.NetworkUtil -import com.mredrock.cyxbs.main.BuildConfig import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers @@ -93,7 +92,12 @@ object CourseHeaderHelper { if (linkData.selfNum.isBlank()) { Observable.just(HintHeader("登录后即可查看课表")) } else { - observeHeader3(nowWeek, linkData.selfNum, linkData.linkNum, linkData.isBoy) + observeHeader3( + nowWeek, + linkData.selfNum, + if (linkData.isShowLink) linkData.linkNum else "", + linkData.isBoy + ) } } }