Skip to content

Instantly share code, notes, and snippets.

favoritesCache = new Cache<Integer, BehaviorSubject<Boolean>>(new Cache.CacheProvider<>() {
@Override
public BehaviorSubject<Boolean> load(@Nonnull final Integer postId) {
return BehaviorSubject.create(false);
}
});
public Observable<ResponseOrError<String>> addOrRemoveFromFavs(final int postId) {
return getIsFavoriteObservable(postId)
.take(1) // take first value from cache
.doOnNext(isCurrentlyFavorite -> {
updateFavorite(postId, !isCurrentlyFavorite); // toggle value before request for better User Experience
})
.switchMap(isCurrentlyFavorite -> favsApi.addOrRemoveFromFavs(isCurrentlyFavorite)
.compose(ResponseOrError.toResponseOrErrorObservable()) // it's changing error event to onNext event to not finish a chain
.doOnNext(responseOrError -> {
if (responseOrError.isError()) {
favsApi.fetchFavoritesRequest()
.doOnNext(this::updateFavoritesCache);
void updateFavorite(final @NonNull Integer id, final boolean favorite) {
favoritesCache.get(id).onNext(favorite);
}
@marcin-adamczewski
marcin-adamczewski / FileNameUtils.kt
Created November 20, 2020 14:43
removeForbiddenCharactersFromFileName() + tests
import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
object FileNameUtils {
private const val forbiddenFileNameCharsRegexp = "([\\\\<>:?\"*|/])"
fun removeForbiddenCharactersFromFileName(fileName: String): String {
return fileName.replace(forbiddenFileNameCharsRegexp.toRegex(), "")