Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

๐Ÿ”€ :: (#704) ์ปค์Šคํ…€ ํ”Œ๋ ˆ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐค๋Ÿฌ๋ฆฌ์—์„œ ๊ฐ€์ ธ์™€ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค (Pending) #719

Merged
merged 16 commits into from
Jul 2, 2024
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
bff0076
:bulb: :: ์นด๋ฉ”๋ผ ์ฝ”๋“œ ์ฃผ์„
yongbeomkwak Jun 29, 2024
5d5b468
:zap: :: 1์ฐจ ์ด๋ฏธ์ง€ ๊ต์ฒด ์ž‘์—…
yongbeomkwak Jun 30, 2024
377fd61
๐ŸŽจ :: ์ฝ”๋“œ Formatting ์ ์šฉ
yongbeomkwak Jun 30, 2024
7fd53c8
:zap: :: ์„ ํƒํ•œ ๊ณณ๋งŒ ๋„˜๊ธฐ๊ธฐ
yongbeomkwak Jun 30, 2024
ef3864a
:zap: :: overfullscreen
yongbeomkwak Jun 30, 2024
4451a6d
๐ŸŽจ :: ์ฝ”๋“œ Formatting ์ ์šฉ
yongbeomkwak Jun 30, 2024
8a7bfc0
:zap: :: ๊ฐ•์ œ ํŽธ์ง‘ ์ข…๋ฃŒ ์ด๋ฒคํŠธ
yongbeomkwak Jun 30, 2024
1732dc0
๐ŸŽจ :: ์ฝ”๋“œ Formatting ์ ์šฉ
yongbeomkwak Jun 30, 2024
9e7cddc
:fire: :: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ œ๊ฑฐ
yongbeomkwak Jun 30, 2024
92179a3
๐ŸŽจ :: ์ฝ”๋“œ Formatting ์ ์šฉ
yongbeomkwak Jun 30, 2024
17b406c
Merge branch '692-inject-dependency-on-myplaylist' into 704-implementโ€ฆ
yongbeomkwak Jun 30, 2024
6a78660
:fire: :: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์ œ๊ฑฐ
yongbeomkwak Jul 1, 2024
c5cdf2a
๐ŸŽจ :: ์ฝ”๋“œ Formatting ์ ์šฉ
yongbeomkwak Jul 1, 2024
c3ef157
Merge branch 'develop' into 704-implement-upload-playlist-image
yongbeomkwak Jul 2, 2024
289b2dc
:zap: :: ๊ถŒํ•œ ์š”์ฒญ์œผ๋กœ ๋ณ€๊ฒฝ
yongbeomkwak Jul 2, 2024
7a3da93
๐ŸŽจ :: ์ฝ”๋“œ Formatting ์ ์šฉ
yongbeomkwak Jul 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import Utility

public protocol PlaylistImageEditSheetViewType: AnyObject {
var playlistImageEditSheetView: PlaylistImageEditSheetView! { get set }
var bottomSheetView: BottomSheetView! { get set }
var playlistImageBottomSheetView: BottomSheetView! { get set }
}

public enum PlaylistImageEditType {
Expand All @@ -22,21 +22,21 @@ public extension PlaylistImageEditSheetViewType where Self: UIViewController {
in view: UIView,
contentHeight: CGFloat = 56
) {
if self.playlistImageEditSheetView == nil || self.bottomSheetView == nil {
if self.playlistImageEditSheetView == nil || self.playlistImageBottomSheetView == nil {
self.playlistImageEditSheetView = PlaylistImageEditSheetView()
self.bottomSheetView = BottomSheetView(
self.playlistImageBottomSheetView = BottomSheetView(
contentView: self.playlistImageEditSheetView,
contentHeights: [contentHeight]
)
}

guard
let bottomSheetView = self.bottomSheetView
let bottomSheetView = self.playlistImageBottomSheetView
else { return }

// bottomSheetView๊ฐ€ ํ•ด๋‹น ๋ทฐ์— ๋ถ™์ง€ ์•Š์•˜์„๋•Œ๋งŒ present ํ•ฉ๋‹ˆ๋‹ค.
guard
!view.subviews.contains(self.bottomSheetView)
!view.subviews.contains(self.playlistImageBottomSheetView)
else { return }
yongbeomkwak marked this conversation as resolved.
Show resolved Hide resolved

bottomSheetView.present(in: view)
Expand All @@ -48,13 +48,13 @@ public extension PlaylistImageEditSheetViewType where Self: UIViewController {
/// ํŽธ์ง‘ํ•˜๊ธฐ ํŒ์—…์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
func hideplaylistImageEditSheet() {
guard
let bottomSheetView = self.bottomSheetView
let bottomSheetView = self.playlistImageBottomSheetView
else { return }
bottomSheetView.dismiss()
playlistImageBottomSheetView.dismiss()

// nil ํ• ๋‹น์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ
self.playlistImageEditSheetView = nil
self.bottomSheetView = nil
self.playlistImageBottomSheetView = nil

// ๋ฉ”์ธ ์ปจํ…Œ์ด๋„ˆ ๋ทฐ์ปจ์—์„œ ํ•ด๋‹น ๋…ธํ‹ฐ๋ฅผ ์ˆ˜์‹ , ํŒ์—…์ด ์˜ฌ๋ผ์˜ค๋ฉด ๋ฏธ๋‹ˆ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋‹ค์‹œ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
NotificationCenter.default.post(name: .hideSongCart, object: nil)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,58 +1,50 @@
//
// RequestPermissionable.swift
// BaseFeature
//
// Created by KTH on 2023/04/09.
// Copyright ยฉ 2023 yongbeomkwak. All rights reserved.
//

import AVFoundation
import Foundation
import Photos
import UIKit
import Utility

public enum RequestPermissionType {
case camera
/// case camera
case photoLibrary
}

public protocol RequestPermissionable: AnyObject {
func requestCameraPermission()
/// func requestCameraPermission()
yongbeomkwak marked this conversation as resolved.
Show resolved Hide resolved
func requestPhotoLibraryPermission()
func showErrorMessage(type: RequestPermissionType)
func showCamera()
/// func showCamera()
func showPhotoLibrary()
}

public extension RequestPermissionable {
func showCamera() {}
/// func showCamera() {}
func showPhotoLibrary() {}
}

public extension RequestPermissionable where Self: UIViewController {
func requestCameraPermission() {
let cameraMediaType = AVMediaType.video
let cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)

switch cameraAuthorizationStatus {
case .denied, .restricted:
self.showErrorMessage(type: .camera)
case .authorized:
self.showCamera()
case .notDetermined:
AVCaptureDevice.requestAccess(for: cameraMediaType) { granted in
if granted {
DispatchQueue.main.async {
self.showCamera()
}
} else {
self.showErrorMessage(type: .camera)
}
}
default: return
}
}
// func requestCameraPermission() {
// let cameraMediaType = AVMediaType.video
// let cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)
//
// switch cameraAuthorizationStatus {
// case .denied, .restricted:
// self.showErrorMessage(type: .camera)
// case .authorized:
// self.showCamera()
// case .notDetermined:
// AVCaptureDevice.requestAccess(for: cameraMediaType) { granted in
// if granted {
// DispatchQueue.main.async {
// self.showCamera()
// }
// } else {
// self.showErrorMessage(type: .camera)
// }
// }
// default: return
// }
// }

func requestPhotoLibraryPermission() {
let status = PHPhotoLibrary.authorizationStatus()
Expand Down Expand Up @@ -80,8 +72,6 @@ public extension RequestPermissionable where Self: UIViewController {
func showErrorMessage(type: RequestPermissionType) {
var message: String = ""
switch type {
case .camera:
message = "[์„ ํƒ๊ถŒํ•œ] ์นด๋ฉ”๋ผ ์ดฌ์˜์„ ํ•˜๋ ค๋ฉด ๊ถŒํ•œ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค."
case .photoLibrary:
message = "[์„ ํƒ๊ถŒํ•œ] ์•จ๋ฒ” ์‚ฌ์ง„์„ ์ฒจ๋ถ€ํ•˜๊ฑฐ๋‚˜, ์ €์žฅ ํ•˜๋ ค๋ฉด ๊ถŒํ•œ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค."
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ final class MyPlaylistDetailReactor: Reactor {
case restore
case itemDidMoved(Int, Int)
case forceSave
case forceEndEditing
case changeTitle(String)
case selectAll
case deselectAll
case removeSongs
case changeThumnail(Data?)
}

enum Mutation {
Expand All @@ -32,6 +34,7 @@ final class MyPlaylistDetailReactor: Reactor {
case updateLoadingState(Bool)
case updateSelectedCount(Int)
case updateSelectingStateByIndex([SongEntity])
case updateThumbnail(Data?)
case showtoastMessage(String)
}

Expand All @@ -42,6 +45,7 @@ final class MyPlaylistDetailReactor: Reactor {
var backUpDataSource: [SongEntity]
var isLoading: Bool
var selectedCount: Int
var replaceThumnbnailData: Data?
@Pulse var toastMessage: String?
}

Expand Down Expand Up @@ -84,7 +88,8 @@ final class MyPlaylistDetailReactor: Reactor {
dataSource: [],
backUpDataSource: [],
isLoading: false,
selectedCount: 0
selectedCount: 0,
replaceThumnbnailData: nil
)
}

Expand All @@ -99,6 +104,9 @@ final class MyPlaylistDetailReactor: Reactor {
return updatePrivate()

case .forceSave, .completeButtonDidTap:
return endEditingWithSave()

case .forceEndEditing:
return endEditing()

case let .itemDidTap(index):
Expand All @@ -119,6 +127,8 @@ final class MyPlaylistDetailReactor: Reactor {

case .removeSongs:
return removeSongs()
case let .changeThumnail(data):
return updateThumbnail(data)
}
}

Expand Down Expand Up @@ -148,6 +158,9 @@ final class MyPlaylistDetailReactor: Reactor {

case let .showtoastMessage(message):
newState.toastMessage = message

case let .updateThumbnail(data):
newState.replaceThumnbnailData = data
}

return newState
Expand Down Expand Up @@ -185,8 +198,7 @@ private extension MyPlaylistDetailReactor {
])
}

func endEditing() -> Observable<Mutation> {
#warning("์ €์žฅ ์œ ์ฆˆ ์ผ€์ด์Šค")
func endEditingWithSave() -> Observable<Mutation> {
let state = currentState
var currentDataSoruce = state.dataSource

Expand All @@ -205,6 +217,23 @@ private extension MyPlaylistDetailReactor {
])
}

func endEditing() -> Observable<Mutation> {
let state = currentState
var currentDataSoruce = state.dataSource

for i in 0 ..< currentDataSoruce.count {
currentDataSoruce[i].isSelected = false
}

return .concat([
.just(.updateEditingState(false)),
.just(.updateDataSource(currentDataSoruce)),
.just(.updateBackUpDataSource(currentDataSoruce)),
.just(.updateSelectedCount(0)),

])
}

func updatePrivate() -> Observable<Mutation> {
let state = currentState

Expand Down Expand Up @@ -338,4 +367,8 @@ private extension MyPlaylistDetailReactor {

])
}

func updateThumbnail(_ data: Data?) -> Observable<Mutation> {
return .just(.updateThumbnail(data))
}
}
Loading