Skip to content

Commit 5b70493

Browse files
Merge pull request #948 from StepicOrg/release/1.209
Release/1.209
2 parents 9dfb85a + cf34146 commit 5b70493

File tree

79 files changed

+1895
-272
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+1895
-272
lines changed

app/src/main/assets/css/wysiwyg.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
img {
4444
display: block;
4545
max-width: 100%;
46+
height: auto;
4647
&.wysiwyg-float-left,
4748
&.wysiwyg-float-right {
4849
display: inline-block;

app/src/main/java/org/stepic/droid/storage/dao/CourseDaoImpl.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ constructor(
3030
title = cursor.getString(DbStructureCourse.Columns.TITLE),
3131
description = cursor.getString(DbStructureCourse.Columns.DESCRIPTION),
3232
cover = cursor.getString(DbStructureCourse.Columns.COVER),
33+
acquiredSkills = DbParseHelper.parseStringToStringList(cursor.getString(DbStructureCourse.Columns.ACQUIRED_SKILLS)),
3334
certificate = cursor.getString(DbStructureCourse.Columns.CERTIFICATE),
3435
requirements = cursor.getString(DbStructureCourse.Columns.REQUIREMENTS),
3536
summary = cursor.getString(DbStructureCourse.Columns.SUMMARY),
@@ -100,6 +101,7 @@ constructor(
100101
values.put(DbStructureCourse.Columns.TITLE, course.title)
101102
values.put(DbStructureCourse.Columns.DESCRIPTION, course.description)
102103
values.put(DbStructureCourse.Columns.COVER, course.cover)
104+
values.put(DbStructureCourse.Columns.ACQUIRED_SKILLS, DbParseHelper.parseStringArrayToString(course.acquiredSkills?.toTypedArray()))
103105
values.put(DbStructureCourse.Columns.CERTIFICATE, course.certificate)
104106
values.put(DbStructureCourse.Columns.REQUIREMENTS, course.requirements)
105107
values.put(DbStructureCourse.Columns.SUMMARY, course.summary)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.stepic.droid.storage.migration
2+
3+
import androidx.room.migration.Migration
4+
import androidx.sqlite.db.SupportSQLiteDatabase
5+
import org.stepic.droid.storage.structure.DbStructureCourse
6+
7+
object MigrationFrom79To80 : Migration(79, 80) {
8+
override fun migrate(db: SupportSQLiteDatabase) {
9+
db.execSQL("ALTER TABLE ${DbStructureCourse.TABLE_NAME} ADD COLUMN ${DbStructureCourse.Columns.ACQUIRED_SKILLS} TEXT")
10+
}
11+
}

app/src/main/java/org/stepic/droid/storage/migration/Migrations.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ object Migrations {
210210
MigrationFrom75To76,
211211
MigrationFrom76To77,
212212
MigrationFrom77To78,
213-
MigrationFrom78To79
213+
MigrationFrom78To79,
214+
MigrationFrom79To80
214215
)
215216
}

app/src/main/java/org/stepic/droid/storage/structure/DbStructureCourse.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ object DbStructureCourse {
1010
const val TITLE = "title"
1111
const val DESCRIPTION = "description"
1212
const val COVER = "cover"
13+
const val ACQUIRED_SKILLS = "acquired_skills"
1314
const val CERTIFICATE = "certificate"
1415

1516
const val REQUIREMENTS = "requirements"

app/src/main/java/org/stepic/droid/util/DateTimeHelper.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import java.util.TimeZone
99

1010
object DateTimeHelper {
1111
const val DISPLAY_DATETIME_PATTERN = "dd MMMM yyyy HH:mm"
12+
const val DISPLAY_DATETIME_COMMA_PATTERN = "dd MMMM yyyy, HH:mm"
1213
const val DISPLAY_DAY_MONTH_PATTERN = "dd MMMM"
1314

1415
const val DISPLAY_MONTH_YEAR_NOMINAL_PATTERN = "LLLL yyyy"

app/src/main/java/org/stepik/android/cache/base/database/AppDatabase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ import org.stepik.android.domain.wishlist.model.WishlistEntry
6868
)
6969
abstract class AppDatabase : RoomDatabase() {
7070
companion object {
71-
const val VERSION = 79
71+
const val VERSION = 80
7272
const val NAME = "stepic_database.db"
7373
}
7474

app/src/main/java/org/stepik/android/data/announcement/repository/AnnouncementRepositoryImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ constructor(
2323
)
2424

2525
override fun getAnnouncements(announcementIds: List<Long>, sourceType: DataSourceType): Single<List<Announcement>> =
26-
delegate.get(announcementIds, sourceType, allowFallback = true)
26+
delegate.get(announcementIds, sourceType, allowFallback = false)
2727
}

app/src/main/java/org/stepik/android/domain/announcement/model/Announcement.kt

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ data class Announcement(
2626
@SerializedName("sent_date")
2727
val sentDate: Date?,
2828
@SerializedName("status")
29-
val status: String,
29+
val status: AnnouncementStatus,
3030
@SerializedName("is_restricted_by_score")
3131
val isRestrictedByScore: Boolean,
3232
@SerializedName("score_percent_min")
@@ -63,4 +63,33 @@ data class Announcement(
6363
val estimatedFinishDate: Date?,
6464
@SerializedName("notice_dates")
6565
val noticeDates: List<Date> = emptyList()
66-
) : Identifiable<Long>
66+
) : Identifiable<Long> {
67+
enum class AnnouncementStatus(val status: String) {
68+
@SerializedName("composing")
69+
COMPOSING("composing"),
70+
71+
@SerializedName("scheduled")
72+
SCHEDULED("scheduled"),
73+
74+
@SerializedName("queueing")
75+
QUEUEING("queueing"),
76+
77+
@SerializedName("queued")
78+
QUEUED("queued"),
79+
80+
@SerializedName("sending")
81+
SENDING("sending"),
82+
83+
@SerializedName("sent")
84+
SENT("sent"),
85+
86+
@SerializedName("aborted")
87+
ABORTED("aborted")
88+
}
89+
90+
val displayedStartDate: Date?
91+
get() = this.estimatedStartDate ?: this.startDate
92+
93+
val displayedFinishDate: Date?
94+
get() = this.estimatedFinishDate ?: this.sentDate
95+
}

app/src/main/java/org/stepik/android/domain/course_info/interactor/CourseInfoInteractor.kt

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.stepik.android.domain.course_info.interactor
22

33
import io.reactivex.Observable
4-
import io.reactivex.rxkotlin.Singles.zip
54
import org.stepik.android.domain.course_info.model.CourseInfoData
65
import org.stepik.android.domain.user.repository.UserRepository
76
import org.stepik.android.model.Course
@@ -22,24 +21,32 @@ constructor(
2221
private fun getCourseInfoUsers(course: Course): Observable<CourseInfoData> {
2322
val emptySource = Observable.just(mapToCourseInfoData(course))
2423

25-
val instructorsSource = userRepository.getUsers(userIds = course.instructors ?: listOf())
26-
val ownerSource = userRepository.getUsers(listOf(course.owner))
24+
val authorIds = course.authors ?: emptyList()
25+
val instructorIds = course.instructors ?: emptyList()
26+
val combinedUserIds = (authorIds + instructorIds).distinct()
2727

2828
val remoteSource =
29-
zip(instructorsSource, ownerSource) { instructors, owners ->
30-
mapToCourseInfoData(course, instructors, owners.firstOrNull())
29+
userRepository.getUsers(userIds = combinedUserIds).map { users ->
30+
val usersById = users.associateBy(User::id)
31+
val filteredAuthorIds = authorIds - instructorIds
32+
33+
val filteredAuthors = filteredAuthorIds.mapNotNull { usersById[it] }
34+
val instructors = instructorIds.mapNotNull { usersById[it] }
35+
mapToCourseInfoData(course, filteredAuthors, instructors)
3136
}
3237

3338
return emptySource
3439
.concatWith(remoteSource.toObservable())
3540
.onErrorReturn {
36-
mapToCourseInfoData(course, instructors = emptyList()) // fallback on network error
41+
mapToCourseInfoData(course, authors = emptyList(), instructors = emptyList()) // fallback on network error
3742
}
3843
}
3944

40-
private fun mapToCourseInfoData(course: Course, instructors: List<User>? = null, organization: User? = null): CourseInfoData =
45+
private fun mapToCourseInfoData(course: Course, authors: List<User>? = null, instructors: List<User>? = null): CourseInfoData =
4146
CourseInfoData(
42-
organization = organization?.takeIf(User::isOrganization),
47+
summary = course.summary?.takeIf(String::isNotBlank),
48+
authors = (authors ?: calculateAuthorIds(course).map { null }).takeIf { it.isNotEmpty() },
49+
acquiredSkills = course.acquiredSkills,
4350
videoMediaData = course.introVideo
4451
?.takeUnless { it.urls.isNullOrEmpty() }
4552
?.let { video ->
@@ -66,4 +73,7 @@ constructor(
6673
},
6774
learnersCount = course.learnersCount
6875
)
76+
77+
private fun calculateAuthorIds(course: Course): List<Long> =
78+
(course.authors ?: emptyList()) - (course.instructors ?: emptyList())
6979
}

0 commit comments

Comments
 (0)