Some slight refactoring, test filtering books

This commit is contained in:
Bradlee Speice
2014-11-08 00:22:13 -05:00
parent 24f639a024
commit cc15e9219d
4 changed files with 114 additions and 28 deletions

View File

@ -1,23 +1,31 @@
package org.bspeice.minimalbible.activity.downloader.manager
import org.crosswire.common.util.Language
import rx.Observable
class LocaleManager(val rM: RefreshManager) {
val currentLanguage = Language.DEFAULT_LANG.getName()
val languageModuleMap = rM.flatModules
.map { it.getLanguage() ?: Language(Language.UNKNOWN_LANG_CODE) }
.groupBy { it.getName() }
val currentLanguage = Language.DEFAULT_LANG
val availableLanguages = languageModuleMap.map { it.getKey() }
val sortedLanguagesList: List<String> =
val languageModuleMap = rM.flatModules
// Language doesn't have hashCode(), so we actually group by its String
.groupBy { FixedLanguage(it.getLanguage()) }
// Cast back to the original Language implementation
val availableLanguages: Observable<Language> = languageModuleMap.map { it.getKey() }
val sortedLanguagesList =
availableLanguages.toSortedList {(left, right) ->
// Prioritize our current language first
if (left == currentLanguage)
if (left.getName() == currentLanguage.getName())
-1
else if (right == currentLanguage)
else if (right.getName() == currentLanguage.getName())
1
else
left.compareTo(right)
left.getName().compareTo(right.getName())
}.toBlocking().first()
}
class FixedLanguage(language: Language?) :
Language(language?.getCode() ?: Language.UNKNOWN_LANG_CODE) {
override fun hashCode() = this.getName().hashCode()
}