From a77ba76a39cf4f2a32395f7f22527f7bfab8900b Mon Sep 17 00:00:00 2001 From: eastshine2741 Date: Sat, 23 Mar 2024 22:15:28 +0900 Subject: [PATCH 1/6] release snutt 3.5.3-rc.1 --- version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.properties b/version.properties index ec3851215..103530bf0 100644 --- a/version.properties +++ b/version.properties @@ -1 +1 @@ -snuttVersionName=3.5.2 +snuttVersionName=3.5.3-rc.1 From 02a56c8ca37840e505747f113cd097b861900066 Mon Sep 17 00:00:00 2001 From: eastshine2741 Date: Sat, 23 Mar 2024 22:47:38 +0900 Subject: [PATCH 2/6] =?UTF-8?q?GET=20/themes=20ThemeConfigPage=20=EB=93=A4?= =?UTF-8?q?=EC=96=B4=EA=B0=88=EB=95=8C=EB=A7=88=EB=8B=A4=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snutt2/views/logged_in/home/HomePage.kt | 2 -- .../logged_in/home/settings/theme/ThemeConfigPage.kt | 7 +++++++ .../home/settings/theme/ThemeListViewModel.kt | 12 ++---------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/HomePage.kt b/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/HomePage.kt index 89a4590f5..d151f4cb5 100644 --- a/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/HomePage.kt +++ b/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/HomePage.kt @@ -28,7 +28,6 @@ import com.wafflestudio.snutt2.views.logged_in.home.search.SearchPage import com.wafflestudio.snutt2.views.logged_in.home.search.SearchViewModel import com.wafflestudio.snutt2.views.logged_in.home.settings.SettingsPage import com.wafflestudio.snutt2.views.logged_in.home.settings.UserViewModel -import com.wafflestudio.snutt2.views.logged_in.home.settings.theme.ThemeListViewModel import com.wafflestudio.snutt2.views.logged_in.home.timetable.TableState import com.wafflestudio.snutt2.views.logged_in.home.timetable.TimetablePage import com.wafflestudio.snutt2.views.logged_in.home.timetable.TimetableViewModel @@ -53,7 +52,6 @@ fun HomePage() { val timetableViewModel = hiltViewModel() val tableListViewModel = hiltViewModel() val searchViewModel = hiltViewModel() - val themeListViewModel = hiltViewModel() val uncheckedNotification by homeViewModel.unCheckedNotificationExist.collectAsState() val table by timetableViewModel.currentTable.collectAsState() diff --git a/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/settings/theme/ThemeConfigPage.kt b/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/settings/theme/ThemeConfigPage.kt index fd2f872c7..f163f4462 100644 --- a/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/settings/theme/ThemeConfigPage.kt +++ b/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/settings/theme/ThemeConfigPage.kt @@ -26,6 +26,7 @@ import androidx.compose.material.MaterialTheme import androidx.compose.material.ModalBottomSheetLayout import androidx.compose.material.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope @@ -96,6 +97,12 @@ fun ThemeConfigPage( onBackPressed() } + LaunchedEffect(Unit) { + runCatching { + themeListViewModel.fetchThemes() + }.onFailure(apiOnError) + } + ModalBottomSheetLayout( sheetState = bottomSheet.state, sheetContent = bottomSheet.content, diff --git a/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/settings/theme/ThemeListViewModel.kt b/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/settings/theme/ThemeListViewModel.kt index cff3a1ce4..36a0a5c36 100644 --- a/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/settings/theme/ThemeListViewModel.kt +++ b/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/settings/theme/ThemeListViewModel.kt @@ -1,16 +1,13 @@ package com.wafflestudio.snutt2.views.logged_in.home.settings.theme import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope import com.wafflestudio.snutt2.data.current_table.CurrentTableRepository import com.wafflestudio.snutt2.data.tables.TableRepository import com.wafflestudio.snutt2.data.themes.ThemeRepository -import com.wafflestudio.snutt2.lib.network.ApiOnError import com.wafflestudio.snutt2.model.BuiltInTheme import com.wafflestudio.snutt2.model.CustomTheme import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel @@ -18,7 +15,6 @@ class ThemeListViewModel @Inject constructor( private val themeRepository: ThemeRepository, private val tableRepository: TableRepository, currentTableRepository: CurrentTableRepository, - private val apiOnError: ApiOnError, ) : ViewModel() { val customThemes: StateFlow> get() = themeRepository.customThemes @@ -26,12 +22,8 @@ class ThemeListViewModel @Inject constructor( val currentTable = currentTableRepository.currentTable - init { - viewModelScope.launch { - runCatching { - themeRepository.fetchThemes() - }.onFailure(apiOnError) - } + suspend fun fetchThemes() { + themeRepository.fetchThemes() } suspend fun deleteThemeAndRefreshTableIfNeeded(themeId: String) { // 현재 선택된 시간표의 테마라면 서버에서 변경된 색 배치를 불러옴 From b39e8a3f3c083fa36b05e37965b491777acaaedd Mon Sep 17 00:00:00 2001 From: eastshine2741 Date: Sat, 23 Mar 2024 23:14:53 +0900 Subject: [PATCH 3/6] release snutt 3.5.3-rc.2 --- version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.properties b/version.properties index 103530bf0..a4ce48b04 100644 --- a/version.properties +++ b/version.properties @@ -1 +1 @@ -snuttVersionName=3.5.3-rc.1 +snuttVersionName=3.5.3-rc.2 From db0d7471c6a98bed153a57b0c4ba50a220000d49 Mon Sep 17 00:00:00 2001 From: eastshine2741 Date: Sun, 24 Mar 2024 14:53:07 +0900 Subject: [PATCH 4/6] =?UTF-8?q?GET=20/themes=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=98=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snutt2/data/themes/ThemeRepository.kt | 2 +- .../snutt2/data/themes/ThemeRepositoryImpl.kt | 35 ++++++------------- .../views/logged_in/home/HomeViewModel.kt | 3 ++ 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/wafflestudio/snutt2/data/themes/ThemeRepository.kt b/app/src/main/java/com/wafflestudio/snutt2/data/themes/ThemeRepository.kt index ccf052e7f..0820ea7da 100644 --- a/app/src/main/java/com/wafflestudio/snutt2/data/themes/ThemeRepository.kt +++ b/app/src/main/java/com/wafflestudio/snutt2/data/themes/ThemeRepository.kt @@ -12,7 +12,7 @@ interface ThemeRepository { val builtInThemes: StateFlow> - val currentTableTheme: StateFlow + val currentTableTheme: StateFlow // FIXME: 이게 ThemeRepository에 있는 게 맞나... ThemeRepository와 CurrentTableRepository에 의존하는 UseCase를 만들어야 할까? suspend fun fetchThemes() diff --git a/app/src/main/java/com/wafflestudio/snutt2/data/themes/ThemeRepositoryImpl.kt b/app/src/main/java/com/wafflestudio/snutt2/data/themes/ThemeRepositoryImpl.kt index 66f908819..1e249a32f 100644 --- a/app/src/main/java/com/wafflestudio/snutt2/data/themes/ThemeRepositoryImpl.kt +++ b/app/src/main/java/com/wafflestudio/snutt2/data/themes/ThemeRepositoryImpl.kt @@ -1,20 +1,18 @@ package com.wafflestudio.snutt2.data.themes import com.wafflestudio.snutt2.data.SNUTTStorage -import com.wafflestudio.snutt2.lib.map -import com.wafflestudio.snutt2.lib.network.ApiOnError import com.wafflestudio.snutt2.lib.network.SNUTTRestApi import com.wafflestudio.snutt2.lib.network.dto.PatchThemeParams import com.wafflestudio.snutt2.lib.network.dto.PostThemeParams import com.wafflestudio.snutt2.lib.network.dto.core.ColorDto import com.wafflestudio.snutt2.model.BuiltInTheme import com.wafflestudio.snutt2.model.CustomTheme -import com.wafflestudio.snutt2.model.TableTheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.launch +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.stateIn import javax.inject.Inject import javax.inject.Singleton @@ -23,7 +21,6 @@ class ThemeRepositoryImpl @Inject constructor( private val api: SNUTTRestApi, private val storage: SNUTTStorage, externalScope: CoroutineScope, - private val apiOnError: ApiOnError, ) : ThemeRepository { private val _customThemes = MutableStateFlow>(emptyList()) @@ -32,25 +29,13 @@ class ThemeRepositoryImpl @Inject constructor( private val _builtInThemes = MutableStateFlow>(emptyList()) override val builtInThemes: StateFlow> = _builtInThemes - private val _currentTableTheme = MutableStateFlow(BuiltInTheme.SNUTT) - override val currentTableTheme = _currentTableTheme // FIXME: themeRepository에 넣기보다는 currentTableRepository와 themeRepository에 의존하는 UseCase를 만드는 게 낫지 않을까 - - init { - externalScope.launch { - runCatching { - fetchThemes() - }.onFailure(apiOnError) - storage.lastViewedTable.asStateFlow().map { table -> - table.value?.themeId?.let { - getTheme(it) - } ?: table.value?.theme?.let { - BuiltInTheme.fromCode(it) - } ?: BuiltInTheme.SNUTT - }.collect { - _currentTableTheme.value = it - } - } - } + override val currentTableTheme = combine(storage.lastViewedTable.asStateFlow(), _customThemes) { table, _ -> + table.value?.themeId?.let { themeId -> + getTheme(themeId) + } ?: table.value?.theme?.let { + BuiltInTheme.fromCode(it) + } ?: BuiltInTheme.SNUTT + }.stateIn(externalScope, SharingStarted.Eagerly, BuiltInTheme.SNUTT) override suspend fun fetchThemes() { api._getThemes().let { themes -> diff --git a/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/HomeViewModel.kt b/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/HomeViewModel.kt index bccdb9f58..93f9b780a 100644 --- a/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/HomeViewModel.kt +++ b/app/src/main/java/com/wafflestudio/snutt2/views/logged_in/home/HomeViewModel.kt @@ -5,6 +5,7 @@ import com.wafflestudio.snutt2.RemoteConfig import com.wafflestudio.snutt2.data.current_table.CurrentTableRepository import com.wafflestudio.snutt2.data.notifications.NotificationRepository import com.wafflestudio.snutt2.data.tables.TableRepository +import com.wafflestudio.snutt2.data.themes.ThemeRepository import com.wafflestudio.snutt2.data.user.UserRepository import com.wafflestudio.snutt2.lib.network.call_adapter.ErrorParsedHttpException import dagger.hilt.android.lifecycle.HiltViewModel @@ -21,6 +22,7 @@ class HomeViewModel @Inject constructor( private val tableRepository: TableRepository, private val userRepository: UserRepository, private val notificationRepository: NotificationRepository, + private val themeRepository: ThemeRepository, private val remoteConfig: RemoteConfig, ) : ViewModel() { @@ -41,6 +43,7 @@ class HomeViewModel @Inject constructor( } ?: tableRepository.fetchDefaultTable() }, async { userRepository.fetchUserInfo() }, + async { themeRepository.fetchThemes() }, ) } } catch (e: Exception) { From 6f3065212e350f646ff4e53fc7d3401131ba21fd Mon Sep 17 00:00:00 2001 From: eastshine2741 Date: Sun, 24 Mar 2024 14:53:30 +0900 Subject: [PATCH 5/6] release snutt 3.5.3-rc.3 --- version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.properties b/version.properties index a4ce48b04..2645c0a15 100644 --- a/version.properties +++ b/version.properties @@ -1 +1 @@ -snuttVersionName=3.5.3-rc.2 +snuttVersionName=3.5.3-rc.3 From 31461322c1f7de42b04112df65526a2c7820b705 Mon Sep 17 00:00:00 2001 From: eastshine2741 Date: Sun, 24 Mar 2024 15:46:33 +0900 Subject: [PATCH 6/6] release snutt 3.5.3 --- version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.properties b/version.properties index 2645c0a15..5f97714a6 100644 --- a/version.properties +++ b/version.properties @@ -1 +1 @@ -snuttVersionName=3.5.3-rc.3 +snuttVersionName=3.5.3