Skip to content

Commit

Permalink
#90 #142 #156 feat: MusicSession과 앱 내 레이어들 연결
Browse files Browse the repository at this point in the history
  • Loading branch information
radiantchoi committed Dec 7, 2022
1 parent 760c97e commit 5a0631f
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 10 deletions.
4 changes: 4 additions & 0 deletions Segno/Segno.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
4F4E0D7629252236005ABA8F /* LoginEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D7529252236005ABA8F /* LoginEndpoint.swift */; };
4F4E0D79292522B7005ABA8F /* BaseURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D78292522B7005ABA8F /* BaseURL.swift */; };
4F4E0D7B29252526005ABA8F /* TokenDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D7A29252526005ABA8F /* TokenDTO.swift */; };
4F51A6FD294096480039D86A /* PlayMusicUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F51A6FC294096480039D86A /* PlayMusicUseCase.swift */; };
4F5291DE293F065D00DF930A /* DiaryEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5291DD293F065D00DF930A /* DiaryEditViewModel.swift */; };
4F589DD6293FB9AB00DB39E5 /* ShazamSongDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F589DD5293FB9AB00DB39E5 /* ShazamSongDTO.swift */; };
4F589DD9293FBA0900DB39E5 /* ShazamError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F589DD8293FBA0900DB39E5 /* ShazamError.swift */; };
Expand Down Expand Up @@ -121,6 +122,7 @@
4F4E0D7529252236005ABA8F /* LoginEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginEndpoint.swift; sourceTree = "<group>"; };
4F4E0D78292522B7005ABA8F /* BaseURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseURL.swift; sourceTree = "<group>"; };
4F4E0D7A29252526005ABA8F /* TokenDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenDTO.swift; sourceTree = "<group>"; };
4F51A6FC294096480039D86A /* PlayMusicUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayMusicUseCase.swift; sourceTree = "<group>"; };
4F5291DD293F065D00DF930A /* DiaryEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryEditViewModel.swift; sourceTree = "<group>"; };
4F589DD5293FB9AB00DB39E5 /* ShazamSongDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShazamSongDTO.swift; sourceTree = "<group>"; };
4F589DD8293FBA0900DB39E5 /* ShazamError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShazamError.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -337,6 +339,7 @@
9894EAF429373385005F2B15 /* SettingsUseCase.swift */,
4F307A49293889C200FA36A0 /* SearchMusicUseCase.swift */,
9825F41A29377875005F2163 /* ChangeNicknameUseCase.swift */,
4F51A6FC294096480039D86A /* PlayMusicUseCase.swift */,
);
path = UseCase;
sourceTree = "<group>";
Expand Down Expand Up @@ -627,6 +630,7 @@
66A8CF612935F44100C17F84 /* MyPageViewModel.swift in Sources */,
988414D929235345007C9132 /* DiaryCollectionViewModel.swift in Sources */,
4F589DD6293FB9AB00DB39E5 /* ShazamSongDTO.swift in Sources */,
4F51A6FD294096480039D86A /* PlayMusicUseCase.swift in Sources */,
4FEBFAAF291CF9F300E78139 /* MusicInfo.swift in Sources */,
4FEBFAAB291CF30E00E78139 /* DiaryListItem.swift in Sources */,
7918380829233F7100BC6992 /* UIButton+.swift in Sources */,
Expand Down
16 changes: 13 additions & 3 deletions Segno/Segno/Data/Repository/MusicRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ protocol MusicRepository {

func startSearchingMusic()
func stopSearchingMusic()
func playMusic()
func setupMusic(_ song: MusicInfo?)
func toggleMusicPlayer()
func stopPlayingMusic()
}

final class MusicRepositoryImpl: MusicRepository {
Expand All @@ -30,6 +32,10 @@ final class MusicRepositoryImpl: MusicRepository {
subscribeSearchresult()
}

func setupMusic(_ song: MusicInfo?) {
musicSession.fetchMusic(term: song)
}

func startSearchingMusic() {
shazamSession.start()
}
Expand All @@ -38,8 +44,12 @@ final class MusicRepositoryImpl: MusicRepository {
shazamSession.stop()
}

func playMusic() {

func toggleMusicPlayer() {
musicSession.togglePlayer()
}

func stopPlayingMusic() {
musicSession.stopMusic()
}
}

Expand Down
34 changes: 34 additions & 0 deletions Segno/Segno/Domain/UseCase/PlayMusicUseCase.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
//
// PlayMusicUseCase.swift
// Segno
//
// Created by Gordon Choi on 2022/12/07.
//

import Foundation

protocol PlayMusicUseCase {
func setupPlayer(_ song: MusicInfo?)
func togglePlayer()
func stopPlaying()
}

final class PlayMusicUseCaseImpl: PlayMusicUseCase {
let musicRepository: MusicRepository

init(musicRepository: MusicRepository = MusicRepositoryImpl()) {
self.musicRepository = musicRepository
}

func setupPlayer(_ song: MusicInfo?) {
musicRepository.setupMusic(song)
}

func togglePlayer() {
musicRepository.toggleMusicPlayer()
}

func stopPlaying() {
musicRepository.stopPlayingMusic()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,6 @@ final class DiaryDetailViewController: UIViewController {
setupLayout()
bindDiaryItem()
getDiary()

// 뮤직세션 테스트용으로, 임시로 정해진 데이터를 넣어 두었습니다.
musicSession.fetchMusic(term: MusicInfo.yokohama)
}

override func viewWillDisappear(_ animated: Bool) {
Expand Down Expand Up @@ -222,6 +219,7 @@ final class DiaryDetailViewController: UIViewController {
.observe(on: MainScheduler.instance)
.subscribe(onNext: { [weak self] musicInfo in
self?.musicContentView.setMusic(info: musicInfo)
self?.viewModel.setupMusicPlayer(musicInfo)
})
.disposed(by: disposeBag)

Expand Down
24 changes: 20 additions & 4 deletions Segno/Segno/Presentation/ViewModel/DiaryDetailViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import RxSwift
final class DiaryDetailViewModel {

private let itemIdentifier: String
let useCase: DiaryDetailUseCase
let getDetailUseCase: DiaryDetailUseCase
let playMusicUseCase: PlayMusicUseCase
var diaryItem = PublishSubject<DiaryDetail>()
// TODO: DiaryDetail에 date 추가
// lazy var dateObservable = diaryItem.map { $0.date }
Expand All @@ -25,17 +26,32 @@ final class DiaryDetailViewModel {

private let disposeBag = DisposeBag()

init(itemIdentifier: String, useCase: DiaryDetailUseCase = DiaryDetailUseCaseImpl()) {
init(itemIdentifier: String,
getDetailUseCase: DiaryDetailUseCase = DiaryDetailUseCaseImpl(),
playMusicUseCase: PlayMusicUseCase = PlayMusicUseCaseImpl()) {
self.itemIdentifier = itemIdentifier
self.useCase = useCase
self.getDetailUseCase = getDetailUseCase
self.playMusicUseCase = playMusicUseCase
}

func getDiary() {
useCase.getDiary(id: itemIdentifier)
getDetailUseCase.getDiary(id: itemIdentifier)
.subscribe(onSuccess: { [weak self] diary in
self?.diaryItem.onNext(diary)
}, onFailure: { error in
print(error.localizedDescription)
}).disposed(by: disposeBag)
}

func setupMusicPlayer(_ song: MusicInfo?) {
playMusicUseCase.setupPlayer(song)
}

func toggleMusicPlayer() {
playMusicUseCase.togglePlayer()
}

func stopMusic() {
playMusicUseCase.stopPlaying()
}
}

0 comments on commit 5a0631f

Please sign in to comment.