diff --git a/SodaLive/Resources/Assets.xcassets/ic_roulette.imageset/Contents.json b/SodaLive/Resources/Assets.xcassets/ic_roulette.imageset/Contents.json new file mode 100644 index 0000000..6d9115d --- /dev/null +++ b/SodaLive/Resources/Assets.xcassets/ic_roulette.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "ic_roulette.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SodaLive/Resources/Assets.xcassets/ic_roulette.imageset/ic_roulette.png b/SodaLive/Resources/Assets.xcassets/ic_roulette.imageset/ic_roulette.png new file mode 100644 index 0000000..1ab555e Binary files /dev/null and b/SodaLive/Resources/Assets.xcassets/ic_roulette.imageset/ic_roulette.png differ diff --git a/SodaLive/Resources/Assets.xcassets/ic_roulette_settings.imageset/Contents.json b/SodaLive/Resources/Assets.xcassets/ic_roulette_settings.imageset/Contents.json new file mode 100644 index 0000000..d0af39f --- /dev/null +++ b/SodaLive/Resources/Assets.xcassets/ic_roulette_settings.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "ic_roulette_settings.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SodaLive/Resources/Assets.xcassets/ic_roulette_settings.imageset/ic_roulette_settings.png b/SodaLive/Resources/Assets.xcassets/ic_roulette_settings.imageset/ic_roulette_settings.png new file mode 100644 index 0000000..8d10a95 Binary files /dev/null and b/SodaLive/Resources/Assets.xcassets/ic_roulette_settings.imageset/ic_roulette_settings.png differ diff --git a/SodaLive/Sources/Live/Room/GetRoomInfoResponse.swift b/SodaLive/Sources/Live/Room/GetRoomInfoResponse.swift index 3999f7b..d2b3f45 100644 --- a/SodaLive/Sources/Live/Room/GetRoomInfoResponse.swift +++ b/SodaLive/Sources/Live/Room/GetRoomInfoResponse.swift @@ -24,6 +24,7 @@ struct GetRoomInfoResponse: Decodable { let listenerList: [LiveRoomMember] let managerList: [LiveRoomMember] let donationRankingTop3UserIds: [Int] + let isActiveRoulette: Bool let isPrivateRoom: Bool let password: String? } diff --git a/SodaLive/Sources/Live/Room/LiveRoomView.swift b/SodaLive/Sources/Live/Room/LiveRoomView.swift index 0b0ebbd..0961f0e 100644 --- a/SodaLive/Sources/Live/Room/LiveRoomView.swift +++ b/SodaLive/Sources/Live/Room/LiveRoomView.swift @@ -307,6 +307,26 @@ struct LiveRoomView: View { } VStack(spacing: 13.3) { + if let liveRoomInfo = viewModel.liveRoomInfo { + if liveRoomInfo.creatorId == UserDefaults.int(forKey: .userId) { + Image("ic_roulette_settings") + .resizable() + .frame(width: 26.7, height: 26.7) + .padding(11) + .background(Color(hex: "525252").opacity(0.6)) + .cornerRadius(10) + .padding(.bottom, 13.3) + } else if liveRoomInfo.creatorId != UserDefaults.int(forKey: .userId) && viewModel.isActiveRoulette { + Image("ic_roulette") + .resizable() + .frame(width: 26.7, height: 26.7) + .padding(11) + .background(Color(hex: "525252").opacity(0.6)) + .cornerRadius(10) + .padding(.bottom, 13.3) + } + } + if viewModel.role == .SPEAKER { Image(viewModel.isMute ? "ic_mic_off" : "ic_mic_on") .resizable() diff --git a/SodaLive/Sources/Live/Room/LiveRoomViewModel.swift b/SodaLive/Sources/Live/Room/LiveRoomViewModel.swift index 694df17..440078b 100644 --- a/SodaLive/Sources/Live/Room/LiveRoomViewModel.swift +++ b/SodaLive/Sources/Live/Room/LiveRoomViewModel.swift @@ -132,6 +132,8 @@ final class LiveRoomViewModel: NSObject, ObservableObject { @Published var isNoChatting = false @Published var remainingNoChattingTime = 0 + @Published var isActiveRoulette = false + var timer: DispatchSourceTimer? func setOriginOffset(_ offset: CGFloat) { @@ -243,6 +245,7 @@ final class LiveRoomViewModel: NSObject, ObservableObject { if let data = decoded.data, decoded.success { self.liveRoomInfo = data + self.isActiveRoulette = data.isActiveRoulette self.isLoading = true self.agora.joinChannel( roomInfo: data,