Skip to content

Commit

Permalink
feat: Patrons badges support; Multiple fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
feelfreelinux committed Jan 24, 2019
1 parent c8a0265 commit 679e506
Show file tree
Hide file tree
Showing 30 changed files with 513 additions and 334 deletions.
28 changes: 14 additions & 14 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -98,25 +98,25 @@ dependencies {

// Support library
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
implementation 'androidx.recyclerview:recyclerview:1.0.0-beta01'
implementation "android.arch.work:work-runtime:1.0.0-alpha04"
implementation 'androidx.exifinterface:exifinterface:1.0.0-beta01'
implementation 'androidx.cardview:cardview:1.0.0-beta01'
implementation 'androidx.preference:preference:1.0.0-beta01'
implementation 'androidx.legacy:legacy-preference-v14:1.0.0-beta01'
implementation 'com.google.android.material:material:1.0.0-beta01'
implementation "androidx.preference:preference:1.0.0-beta01"
implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha01'
implementation "android.arch.work:work-runtime:1.0.0-beta02"
implementation 'androidx.exifinterface:exifinterface:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.preference:preference:1.1.0-alpha02'
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha02'
implementation "androidx.preference:preference:1.1.0-alpha02"
implementation 'com.takisoft.preferencex:preferencex:1.0.0-alpha2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0-beta01'
implementation 'androidx.browser:browser:1.0.0-beta01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
implementation 'com.google.android.gms:play-services-gcm:16.0.0' // DO NOT DOWNGRADE, GOOGLE'S FAULT GH#415
implementation 'androidx.multidex:multidex:2.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.browser:browser:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.gms:play-services-gcm:11.8.0' // DO NOT DOWNGRADE, GOOGLE'S FAULT GH#415
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.devbrackets.android:exomedia:4.1.0'
implementation 'com.google.android.exoplayer:extension-okhttp:2.6.0'
implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'androidx.core:core-ktx:1.0.0-beta01'
implementation 'androidx.core:core-ktx:1.1.0-alpha03'

// Utils
implementation 'com.bugsnag:bugsnag-android:4.5.0'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ import retrofit2.Retrofit
import toRequestBody

class EntriesRepository(
val retrofit: Retrofit,
val userTokenRefresher: UserTokenRefresher,
val owmContentFilter: OWMContentFilter,
val patronsApi: PatronsApi
val retrofit: Retrofit,
val userTokenRefresher: UserTokenRefresher,
val owmContentFilter: OWMContentFilter,
val patronsApi: PatronsApi
) : EntriesApi {

private val entriesApi by lazy { retrofit.create(EntriesRetrofitApi::class.java) }
Expand All @@ -32,110 +32,115 @@ class EntriesRepository(
override val entryUnVoteSubject = PublishSubject.create<EntryVotePublishModel>()

override fun voteEntry(entryId: Int, notifySubject: Boolean) = entriesApi.voteEntry(entryId)
.retryWhen(userTokenRefresher)
.compose<VoteResponse>(ErrorHandlerTransformer())
.doOnSuccess {
if (notifySubject) entryVoteSubject.onNext(EntryVotePublishModel(entryId, it))
}
.retryWhen(userTokenRefresher)
.compose<VoteResponse>(ErrorHandlerTransformer())
.doOnSuccess {
if (notifySubject) entryVoteSubject.onNext(EntryVotePublishModel(entryId, it))
}

override fun unvoteEntry(entryId: Int, notifySubject: Boolean) = entriesApi.unvoteEntry(entryId)
.retryWhen(userTokenRefresher)
.compose<VoteResponse>(ErrorHandlerTransformer())
.doOnSuccess {
if (notifySubject) entryUnVoteSubject.onNext(EntryVotePublishModel(entryId, it))
}
.retryWhen(userTokenRefresher)
.compose<VoteResponse>(ErrorHandlerTransformer())
.doOnSuccess {
if (notifySubject) entryUnVoteSubject.onNext(EntryVotePublishModel(entryId, it))
}

override fun voteComment(commentId: Int) = entriesApi.voteComment(commentId)
.retryWhen(userTokenRefresher)
.compose<VoteResponse>(ErrorHandlerTransformer())
.retryWhen(userTokenRefresher)
.compose<VoteResponse>(ErrorHandlerTransformer())


override fun unvoteComment(commentId: Int) = entriesApi.unvoteComment(commentId)
.retryWhen(userTokenRefresher)
.compose<VoteResponse>(ErrorHandlerTransformer())
.retryWhen(userTokenRefresher)
.compose<VoteResponse>(ErrorHandlerTransformer())


override fun addEntry(body: String, wykopImageFile: WykopImageFile, plus18: Boolean) =
entriesApi.addEntry(body.toRequestBody(), plus18.toRequestBody(), wykopImageFile.getFileMultipart())
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())
entriesApi.addEntry(body.toRequestBody(), plus18.toRequestBody(), wykopImageFile.getFileMultipart())
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())

override fun addEntry(body: String, embed: String?, plus18: Boolean) = entriesApi.addEntry(body, embed, plus18)
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())

override fun addEntryComment(body: String, entryId: Int, wykopImageFile: WykopImageFile, plus18: Boolean) =
entriesApi.addEntryComment(
body.toRequestBody(),
plus18.toRequestBody(),
entryId,
wykopImageFile.getFileMultipart()
)
.retryWhen(userTokenRefresher)
.compose<EntryCommentResponse>(ErrorHandlerTransformer())
entriesApi.addEntryComment(
body.toRequestBody(),
plus18.toRequestBody(),
entryId,
wykopImageFile.getFileMultipart()
)
.retryWhen(userTokenRefresher)
.compose<EntryCommentResponse>(ErrorHandlerTransformer())

override fun addEntryComment(body: String, entryId: Int, embed: String?, plus18: Boolean) =
entriesApi.addEntryComment(body, embed, plus18, entryId)
.retryWhen(userTokenRefresher)
.compose<EntryCommentResponse>(ErrorHandlerTransformer())
entriesApi.addEntryComment(body, embed, plus18, entryId)
.retryWhen(userTokenRefresher)
.compose<EntryCommentResponse>(ErrorHandlerTransformer())

override fun editEntry(body: String, entryId: Int) = entriesApi.editEntry(body, entryId)
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())

override fun markFavorite(entryId: Int) = entriesApi.markFavorite(entryId)
.retryWhen(userTokenRefresher)
.compose<FavoriteResponse>(ErrorHandlerTransformer())
.retryWhen(userTokenRefresher)
.compose<FavoriteResponse>(ErrorHandlerTransformer())

override fun deleteEntry(entryId: Int) = entriesApi.deleteEntry(entryId)
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())

override fun editEntryComment(body: String, commentId: Int) = entriesApi.editEntryComment(body, commentId)
.retryWhen(userTokenRefresher)
.compose<EntryCommentResponse>(ErrorHandlerTransformer())
.retryWhen(userTokenRefresher)
.compose<EntryCommentResponse>(ErrorHandlerTransformer())

override fun deleteEntryComment(commentId: Int) = entriesApi.deleteEntryComment(commentId)
.retryWhen(userTokenRefresher)
.compose<EntryCommentResponse>(ErrorHandlerTransformer())
.retryWhen(userTokenRefresher)
.compose<EntryCommentResponse>(ErrorHandlerTransformer())

override fun voteSurvey(entryId: Int, answerId: Int) = entriesApi.voteSurvey(entryId, answerId)
.retryWhen(userTokenRefresher)
.compose<SurveyResponse>(ErrorHandlerTransformer())
.map { SurveyMapper.map(it) }
.retryWhen(userTokenRefresher)
.compose<SurveyResponse>(ErrorHandlerTransformer())
.map { SurveyMapper.map(it) }

override fun getHot(page: Int, period: String) = entriesApi.getHot(page, period)
.retryWhen(userTokenRefresher)
.compose<List<EntryResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> EntryMapper.map(response, owmContentFilter) } }
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<EntryResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> EntryMapper.map(response, owmContentFilter) } }

override fun getStream(page: Int) = entriesApi.getStream(page)
.retryWhen(userTokenRefresher)
.compose<List<EntryResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> EntryMapper.map(response, owmContentFilter) } }
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<EntryResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> EntryMapper.map(response, owmContentFilter) } }

override fun getActive(page: Int) = entriesApi.getActive(page)
.retryWhen(userTokenRefresher)
.compose<List<EntryResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> EntryMapper.map(response, owmContentFilter) } }
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<EntryResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> EntryMapper.map(response, owmContentFilter) } }

override fun getObserved(page: Int) = entriesApi.getObserved(page)
.retryWhen(userTokenRefresher)
.compose<List<EntryResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> EntryMapper.map(response, owmContentFilter) } }
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<EntryResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> EntryMapper.map(response, owmContentFilter) } }

override fun getEntry(id: Int) = entriesApi.getEntry(id)
.retryWhen(userTokenRefresher)
.compose<EntryResponse>(ErrorHandlerTransformer())
.map { EntryMapper.map(it, owmContentFilter) }
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<EntryResponse>(ErrorHandlerTransformer())
.map { EntryMapper.map(it, owmContentFilter) }

override fun getEntryVoters(id: Int) = entriesApi.getEntryVoters(id)
.retryWhen(userTokenRefresher)
.compose<List<VoterResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> VoterMapper.map(response) } }
.retryWhen(userTokenRefresher)
.compose<List<VoterResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> VoterMapper.map(response) } }

override fun getEntryCommentVoters(id: Int) = entriesApi.getCommentUpvoters(id)
.retryWhen(userTokenRefresher)
.compose<List<VoterResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> VoterMapper.map(response) } }
.retryWhen(userTokenRefresher)
.compose<List<VoterResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> VoterMapper.map(response) } }
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ class OWMContentFilter @Inject constructor(
) {

fun getBadgeFor(author: Author): PatronBadge? {
return patronsApi.patrons.firstOrNull { it.username == author.nick }?.badge
return try {
patronsApi.patrons.firstOrNull { it.username == author.nick }?.badge
} catch (e: Throwable) {
null
}
}

fun filterEntry(entry: Entry) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,45 +11,50 @@ import io.reactivex.Single
import retrofit2.Retrofit

class HitsRepository(
val retrofit: Retrofit,
val userTokenRefresher: UserTokenRefresher,
val owmContentFilter: OWMContentFilter,
val patronsApi: PatronsApi
val retrofit: Retrofit,
val userTokenRefresher: UserTokenRefresher,
val owmContentFilter: OWMContentFilter,
val patronsApi: PatronsApi
) : HitsApi {

private val hitsApi by lazy { retrofit.create(HitsRetrofitApi::class.java) }

override fun byMonth(year: Int, month: Int): Single<List<Link>> =
hitsApi.byMonth(year, month)
.retryWhen(userTokenRefresher)
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }
hitsApi.byMonth(year, month)
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }


override fun currentDay(): Single<List<Link>> =
hitsApi.currentDay()
.retryWhen(userTokenRefresher)
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }
hitsApi.currentDay()
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }


override fun byYear(year: Int): Single<List<Link>> =
hitsApi.byYear(year)
.retryWhen(userTokenRefresher)
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }
hitsApi.byYear(year)
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }


override fun currentWeek(): Single<List<Link>> =
hitsApi.currentWeek()
.retryWhen(userTokenRefresher)
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }
hitsApi.currentWeek()
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }


override fun popular(): Single<List<Link>> =
hitsApi.popular()
.retryWhen(userTokenRefresher)
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }
hitsApi.popular()
.retryWhen(userTokenRefresher)
.flatMap { patronsApi.ensurePatrons(it) }
.compose<List<LinkResponse>>(ErrorHandlerTransformer())
.map { it.map { response -> LinkMapper.map(response, owmContentFilter) } }
}
Loading

0 comments on commit 679e506

Please sign in to comment.