diff --git a/Buildsystem/Testing/UI/VLCTestMenu.swift b/Buildsystem/Testing/UI/VLCTestMenu.swift index 86caa920f8388762813a41483b5468e50647d036..168d9e730a5172c639ac364ab595fcd41ad06a58 100644 --- a/Buildsystem/Testing/UI/VLCTestMenu.swift +++ b/Buildsystem/Testing/UI/VLCTestMenu.swift @@ -78,6 +78,5 @@ class VLCTestMenu: XCTestCase { helper.tapTabBarItem(VLCAccessibilityIdentifier.settings) app.navigationBars.buttons[VLCAccessibilityIdentifier.about].tap() XCTAssertNotNil(app.navigationBars.buttons[VLCAccessibilityIdentifier.done]) - XCTAssertNotNil(app.navigationBars.buttons[VLCAccessibilityIdentifier.contribute]) } } diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 628ff8bea04f207afb1b68e38d7200784bc11284..7acb9bef81f9e6a674b65dbfabe40b5f3fb2685a 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -345,7 +345,6 @@ // MARK: - MediaViewController Swipable Header "ALBUMS" = "Albums"; "ARTISTS" = "Artists"; -"EPISODES" = "Episodes"; "GENRES" = "Genres"; "ALL_VIDEOS" = "All videos"; "SONGS" = "Songs"; @@ -563,10 +562,6 @@ // MARK: - Local Network -"SMBV1_WARN_TITLE" = "SMBv1 Connection Warning"; -"SMBV1_WARN_DESCRIPTION" = "We detected an old protocol (SMBv1).\nAre you really sure to continue with SMBv1?\nWe advise upgrading or changing your server settings."; -"SMBV1_CONTINUE" = "Continue with SMBv1"; -"SMBV1_NEXT_PROTOCOL" = "Try SMBv2/v3"; // MARK: - Preview labels diff --git a/Sources/Extensions/Data Structures/NSObject+SettingsReader.swift b/Sources/Extensions/Data Structures/NSObject+SettingsReader.swift index fd03d7c37df109d3c66c6f436cc4f5c682e10cf4..82b16f7c089d9764c69a28ad7c1be89d4829bc68 100644 --- a/Sources/Extensions/Data Structures/NSObject+SettingsReader.swift +++ b/Sources/Extensions/Data Structures/NSObject+SettingsReader.swift @@ -39,7 +39,9 @@ extension NSObject { specifier.append(newSpecifier) } } - let newSpecifierObject = SettingSpecifier(title: title, preferenceKey: preferenceKey, infobuttonvalue: infobuttonvalue, defaultValue: defaultValue, specifier: specifier) + let newSpecifierObject = SettingSpecifier(title: title, + infobuttonvalue: infobuttonvalue, + specifier: specifier) settingsSpecifierDict = newSpecifierObject } else { diff --git a/Sources/Media Library/Editing/EditActions.swift b/Sources/Media Library/Editing/EditActions.swift index 5fd1b8e53550c8804b89baaedcd018c48771ee7a..8224a39c05a2ca39ec4c04e75347bcd9d4265486 100644 --- a/Sources/Media Library/Editing/EditActions.swift +++ b/Sources/Media Library/Editing/EditActions.swift @@ -53,27 +53,6 @@ extension EditActions { rootViewController.present(navigationController, animated: true, completion: nil) } - private func createMediaGroup(from mediaGroupIds: [VLCMLIdentifier], - _ completion: ((completionState) -> Void)? = nil) { - let alertInfo = TextFieldAlertInfo(alertTitle: NSLocalizedString("MEDIA_GROUPS", comment: ""), - placeHolder: NSLocalizedString("MEDIA_GROUPS_PLACEHOLDER", - comment: "")) - - presentTextFieldAlert(with: alertInfo) { - [unowned self] text -> Void in - guard text != "" else { - DispatchQueue.main.async { - VLCAlertViewController.alertViewManager(title: NSLocalizedString("ERROR_EMPTY_NAME", - comment: ""), - viewController: self.rootViewController) - completion?(.fail) - } - return - } - self.createMediaGroup(with: text) - } - } - func addToPlaylist(_ completion: ((completionState) -> Void)? = nil) { self.completion = completion if !mediaLibraryService.playlists().isEmpty { diff --git a/Sources/Media Library/Editing/EditController.swift b/Sources/Media Library/Editing/EditController.swift index 1d832e54a27419115a9016347fa3b25c94933f1e..541fa9180b799a6ad27f964ed4c0ff7d841827de 100644 --- a/Sources/Media Library/Editing/EditController.swift +++ b/Sources/Media Library/Editing/EditController.swift @@ -10,14 +10,11 @@ *****************************************************************************/ protocol EditControllerDelegate: AnyObject { - func editController(editController: EditController, cellforItemAt indexPath: IndexPath) -> BaseCollectionViewCell? - func editController(editController: EditController, present viewController: UIViewController) func editControllerDidSelectMultipleItem(editContrller: EditController) func editControllerDidDeSelectMultipleItem() func editControllerDidFinishEditing(editController: EditController?) func editControllerGetCurrentThumbnail() -> UIImage? func editControllerGetAlbumHeaderSize(with width: CGFloat) -> CGSize - func editControllerUpdateNavigationBar(offset: CGFloat) func editControllerSetNavigationItemTitle(with title: String?) func editControllerUpdateIsAllSelected(with allSelected: Bool) } @@ -26,7 +23,6 @@ class EditController: UIViewController { // Cache selectedIndexPath separately to indexPathsForSelectedItems in order to have persistance private var selectedCellIndexPaths = Set<IndexPath>() private let model: MediaLibraryBaseModel - private let mediaLibraryService: MediaLibraryService private let presentingView: UICollectionView private let searchDataSource: LibrarySearchDataSource private(set) var editActions: EditActions @@ -39,8 +35,8 @@ class EditController: UIViewController { init(mediaLibraryService: MediaLibraryService, model: MediaLibraryBaseModel, - presentingView: UICollectionView, searchDataSource: LibrarySearchDataSource) { - self.mediaLibraryService = mediaLibraryService + presentingView: UICollectionView, + searchDataSource: LibrarySearchDataSource) { self.model = model self.presentingView = presentingView self.editActions = EditActions(model: model, mediaLibraryService: mediaLibraryService) @@ -102,55 +98,6 @@ class EditController: UIViewController { // MARK: - Helpers private extension EditController { - private struct TextFieldAlertInfo { - var alertTitle: String - var alertDescription: String - var placeHolder: String - var textfieldText: String - var confirmActionTitle: String - - init(alertTitle: String = "", - alertDescription: String = "", - placeHolder: String = "", - textfieldText: String = "", - confirmActionTitle: String = NSLocalizedString("BUTTON_DONE", comment: "")) { - self.alertTitle = alertTitle - self.alertDescription = alertDescription - self.placeHolder = placeHolder - self.textfieldText = textfieldText - self.confirmActionTitle = confirmActionTitle - } - } - - private func presentTextFieldAlert(with info: TextFieldAlertInfo, - completionHandler: @escaping (String) -> Void) { - let alertController = UIAlertController(title: info.alertTitle, - message: info.alertDescription, - preferredStyle: .alert) - - alertController.addTextField(configurationHandler: { - textField in - textField.text = info.textfieldText - textField.placeholder = info.placeHolder - }) - - let cancelButton = UIAlertAction(title: NSLocalizedString("BUTTON_CANCEL", comment: ""), - style: .cancel) - - - let confirmAction = UIAlertAction(title: info.confirmActionTitle, style: .default) { - [weak alertController] _ in - guard let alertController = alertController, - let textField = alertController.textFields?.first else { return } - completionHandler(textField.text ?? "") - } - - alertController.addAction(cancelButton) - alertController.addAction(confirmAction) - - present(alertController, animated: true, completion: nil) - } - private func getTitle(for count: Int) -> String { var title = "\(count) " if count == 1 { diff --git a/Sources/Media Library/Editing/EditToolbar.swift b/Sources/Media Library/Editing/EditToolbar.swift index d97d91e7876335ad086c32a56d9ce6c1c2bd26cf..b9b641344dfa02243f68219117a9446f9ae1005a 100644 --- a/Sources/Media Library/Editing/EditToolbar.swift +++ b/Sources/Media Library/Editing/EditToolbar.swift @@ -20,7 +20,6 @@ protocol EditToolbarDelegate: AnyObject { } class EditToolbar: UIView { - static let height: CGFloat = 60 weak var delegate: EditToolbarDelegate? private var stackView: UIStackView = { diff --git a/Sources/Media Library/MediaCategories/AlbumHeader.swift b/Sources/Media Library/MediaCategories/AlbumHeader.swift index 11c8366d6627730c925ab4163b9216930028805f..37b38a402363226c7159a3c868ad838807f16e08 100644 --- a/Sources/Media Library/MediaCategories/AlbumHeader.swift +++ b/Sources/Media Library/MediaCategories/AlbumHeader.swift @@ -25,8 +25,6 @@ class AlbumHeader: UICollectionReusableView { private var playShuffleButton = UIButton(type: .custom) - private var layoutGuide: UILayoutGuide? - // MARK: - Initializers override init(frame: CGRect) { diff --git a/Sources/Media Library/MediaCategories/MediaCategory.swift b/Sources/Media Library/MediaCategories/MediaCategory.swift index 50f247889cb05b1209f4ed1671960c18e62d6cf7..67f17822fc8f6bae90959f9e90236ebf442ae80e 100644 --- a/Sources/Media Library/MediaCategories/MediaCategory.swift +++ b/Sources/Media Library/MediaCategories/MediaCategory.swift @@ -18,14 +18,6 @@ class MovieCategoryViewController: MediaCategoryViewController { } } -class ShowEpisodeCategoryViewController: MediaCategoryViewController { - init(_ mediaLibraryService: MediaLibraryService) { - let model = ShowEpisodeModel(medialibrary: mediaLibraryService) - super.init(mediaLibraryService: mediaLibraryService, model: model) - model.observable.addObserver(self) - } -} - class PlaylistCategoryViewController: MediaCategoryViewController { init(_ mediaLibraryService: MediaLibraryService) { let model = PlaylistModel(medialibrary: mediaLibraryService) diff --git a/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift b/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift index c221da347649b09f85b2e6a0c64177a52a15ceb1..5aa006dbde50433125d8051503776bc508a4c931 100644 --- a/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift +++ b/Sources/Media Library/MediaCategories/MediaCategoryViewController.swift @@ -86,7 +86,6 @@ class MediaCategoryViewController: UICollectionViewController, UISearchBarDelega var header: ActionSheetSortSectionHeader var isVideoModel: Bool = false var collectionModelName: String = "" - var secondSortModel: SortModel? = nil if let model = model as? CollectionModel { if model.mediaCollection is VLCMLMediaGroup || model.mediaCollection is VideoModel { @@ -99,13 +98,11 @@ class MediaCategoryViewController: UICollectionViewController, UISearchBarDelega } else if let model = model as? VideoModel { isVideoModel = true collectionModelName = secondModel.name - secondSortModel = model.sortModel } else { collectionModelName = model.name } header = ActionSheetSortSectionHeader(model: model.sortModel, - secondModel: secondSortModel, isVideoModel: isVideoModel, currentModelType: collectionModelName) @@ -231,7 +228,6 @@ class MediaCategoryViewController: UICollectionViewController, UISearchBarDelega self.mediaLibraryService = mediaLibraryService let videoModel = VideoModel(medialibrary: mediaLibraryService) - videoModel.secondName = model.name if model is MediaGroupViewModel { self.model = userDefaults.bool(forKey: kVLCSettingsDisableGrouping) ? videoModel : model @@ -1584,16 +1580,6 @@ extension MediaCategoryViewController: ActionSheetSortSectionHeaderDelegate { // MARK: - EditControllerDelegate extension MediaCategoryViewController: EditControllerDelegate { - func editController(editController: EditController, cellforItemAt indexPath: IndexPath) -> BaseCollectionViewCell? { - return collectionView.cellForItem(at: indexPath) as? BaseCollectionViewCell - } - - func editController(editController: EditController, - present viewController: UIViewController) { - let newNavigationController = UINavigationController(rootViewController: viewController) - navigationController?.present(newNavigationController, animated: true, completion: nil) - } - func editControllerDidSelectMultipleItem(editContrller: EditController) { searchBar.isUserInteractionEnabled = false searchBar.alpha = 0.5 @@ -1637,39 +1623,6 @@ extension MediaCategoryViewController: EditControllerDelegate { return albumFlowLayout.getHeaderSize(with: width) } - func editControllerUpdateNavigationBar(offset: CGFloat) { - if let model = model as? CollectionModel, - model.mediaCollection is VLCMLAlbum { - - let backgroundColor: UIColor - if offset >= 50 { - backgroundColor = PresentationTheme.current.colors.background.withAlphaComponent(0.4 * (offset / 100)) - } else { - backgroundColor = .clear - } - - if #available(iOS 13.0, *) { - let standardAppearance = navigationItem.standardAppearance - let scrollEdgeAppearance = navigationItem.scrollEdgeAppearance - standardAppearance?.backgroundColor = backgroundColor - scrollEdgeAppearance?.backgroundColor = backgroundColor - } - - if let albumHeader = albumHeader, - let navBar = navigationController?.navigationBar { - let padding = statusBarView.frame.maxY + navBar.frame.maxY - let hideNavigationBarTitle: Bool - if offset >= albumHeader.frame.maxY - padding { - hideNavigationBarTitle = false - } else { - hideNavigationBarTitle = true - } - - navigationItem.titleView?.isHidden = hideNavigationBarTitle - } - } - } - func editControllerSetNavigationItemTitle(with title: String?) { var newTitle = title diff --git a/Sources/Media Library/MediaCategoryCells/MediaGridCollectionCell.swift b/Sources/Media Library/MediaCategoryCells/MediaGridCollectionCell.swift index b77ae39e5d0d0266852d6365b367ab0a1b493c91..889a081c283def5470971aa518a6d4850ef54379 100644 --- a/Sources/Media Library/MediaCategoryCells/MediaGridCollectionCell.swift +++ b/Sources/Media Library/MediaCategoryCells/MediaGridCollectionCell.swift @@ -16,7 +16,6 @@ class MediaGridCollectionCell: BaseCollectionViewCell { private let notificationCenter = NotificationCenter.default private let userDefaults = UserDefaults.standard - private let selectionOverlayColor = UIColor.orange.withAlphaComponent(0.4) private let checkboxImageView: UIImageView = { let imageView = UIImageView() diff --git a/Sources/Media Library/MediaLibraryModel/MediaGroupViewModel.swift b/Sources/Media Library/MediaLibraryModel/MediaGroupViewModel.swift index 43bdd193d32d2842cbb5edc4af7d546c7da2176f..2bf3660ea05b206acc55bd1ea0d82243ebb0c8f2 100644 --- a/Sources/Media Library/MediaLibraryModel/MediaGroupViewModel.swift +++ b/Sources/Media Library/MediaLibraryModel/MediaGroupViewModel.swift @@ -115,28 +115,6 @@ class MediaGroupViewModel: MLBaseModel { } return true } - - func create(with name: String, from mediaContent: [VLCMLMedia]) -> Bool { - let originIds = originMediaGroupsIds(from: mediaContent) - return create(with: name, from: originIds, content: mediaContent) - } - - func unGroupMedia(_ media: [VLCMLMedia], from originMediaGroup: VLCMLMediaGroup) -> Bool { - for medium in media { - medium.removeFromGroup() - guard let newGroup = medialibrary.medialib.createMediaGroup(withName: medium.title) else { - return false - } - newGroup.add(medium) - } - if originMediaGroup.nbTotalMedia() == 0 { - fileArrayQueue.sync { - filterFilesFromDeletion(of: [originMediaGroup]) - } - medialibrary.medialib.deleteMediaGroup(withIdentifier: originMediaGroup.identifier()) - } - return true - } } extension VLCMLMediaGroup { diff --git a/Sources/Media Library/MediaLibraryModel/MediaLibraryBaseModel.swift b/Sources/Media Library/MediaLibraryModel/MediaLibraryBaseModel.swift index 34360210d34ea347de2047d336e1ab25a65e6f44..e8a9692653f4a8938b9305bdddf901c161631a75 100644 --- a/Sources/Media Library/MediaLibraryModel/MediaLibraryBaseModel.swift +++ b/Sources/Media Library/MediaLibraryModel/MediaLibraryBaseModel.swift @@ -28,7 +28,6 @@ protocol MediaLibraryBaseModel { var indicatorName: String { get } var cellType: BaseCollectionViewCell.Type { get } - func anyAppend(_ item: VLCMLObject) func anyDelete(_ items: [VLCMLObject]) func sort(by criteria: VLCMLSortingCriteria, desc: Bool) @@ -46,8 +45,6 @@ protocol MLBaseModel: AnyObject, MediaLibraryBaseModel { var medialibrary: MediaLibraryService { get } - var observable: Observable<MediaLibraryBaseModelObserver> { get } - var indicatorName: String { get } func append(_ item: MLType) @@ -60,13 +57,6 @@ extension MLBaseModel { return files } - func anyAppend(_ item: VLCMLObject) { - guard let item = item as? MLType else { - preconditionFailure("MLBaseModel: Wrong underlying ML type.") - } - append(item) - } - func anyDelete(_ items: [VLCMLObject]) { guard let items = items as? [MLType] else { preconditionFailure("MLBaseModel: Wrong underlying ML type.") diff --git a/Sources/Media Library/MediaLibraryModel/PlaylistModel.swift b/Sources/Media Library/MediaLibraryModel/PlaylistModel.swift index 25c1e973220ac424dfdb39742ded4d9b91322d0e..51cca785d088b29a51d942c50621cc36dc93d239 100644 --- a/Sources/Media Library/MediaLibraryModel/PlaylistModel.swift +++ b/Sources/Media Library/MediaLibraryModel/PlaylistModel.swift @@ -81,34 +81,6 @@ class PlaylistModel: MLBaseModel { $0.mediaLibraryBaseModelReloadView() } } - - // Creates a VLCMLPlaylist appending it and updates linked view - func create(name: String) { - guard let playlist = medialibrary.createPlaylist(with: name) else { - assertionFailure("PlaylistModel: create: Failed to create a playlist.") - return - } - append(playlist) - observable.notifyObservers { - $0.mediaLibraryBaseModelReloadView() - } - } -} - -// MARK: - Sort -extension PlaylistModel { - func sort(by criteria: VLCMLSortingCriteria, desc: Bool) { - defer { - fileArrayLock.unlock() - } - fileArrayLock.lock() - files = medialibrary.playlists(sortingCriteria: criteria, desc: desc) - sortModel.currentSort = criteria - sortModel.desc = desc - observable.notifyObservers { - $0.mediaLibraryBaseModelReloadView() - } - } } // MARK: - Search diff --git a/Sources/Media Library/MediaLibraryModel/ShowEpisodeModel.swift b/Sources/Media Library/MediaLibraryModel/ShowEpisodeModel.swift deleted file mode 100644 index debed46d1d025aa2c664a9e4240eaa9c9b49fe3f..0000000000000000000000000000000000000000 --- a/Sources/Media Library/MediaLibraryModel/ShowEpisodeModel.swift +++ /dev/null @@ -1,73 +0,0 @@ -/***************************************************************************** - * ShowEpisodeModel.swift - * - * Copyright © 2018 VLC authors and VideoLAN - * Copyright © 2018 Videolabs - * - * Authors: Soomin Lee <bubu@mikan.io> - * - * Refer to the COPYING file of the official project for license. - *****************************************************************************/ - -class ShowEpisodeModel: MediaModel { - typealias MLType = VLCMLMedia - - var sortModel = SortModel([.alpha, .duration, .insertionDate, .releaseDate, .fileSize]) - - var observable = Observable<MediaLibraryBaseModelObserver>() - - var files = [VLCMLMedia]() - var fileArrayLock = NSRecursiveLock() - - var cellType: BaseCollectionViewCell.Type { return MovieCollectionViewCell.self } - - var medialibrary: MediaLibraryService - - var name: String = "EPISODES" - - var indicatorName: String = NSLocalizedString("EPISODES", comment: "") - - required init(medialibrary: MediaLibraryService) { - self.medialibrary = medialibrary - medialibrary.observable.addObserver(self) - } - - func append(_ item: VLCMLMedia) { - defer { - fileArrayLock.unlock() - } - fileArrayLock.lock() - files.append(item) - } - - func delete(_ items: [VLCMLMedia]) { - preconditionFailure("ShowEpisodeModel: Cannot delete showEpisode") - } -} - -// MARK: - Sort - -extension ShowEpisodeModel { - func sort(by criteria: VLCMLSortingCriteria, desc: Bool) { - // Currently no show specific getter on medialibrary. - } -} - -// MARK: - MediaLibraryObserver - -extension ShowEpisodeModel: MediaLibraryObserver { - func medialibrary(_ medialibrary: MediaLibraryService, didAddShowEpisodes showEpisodes: [VLCMLMedia]) { - showEpisodes.forEach({ append($0) }) - observable.notifyObservers { - $0.mediaLibraryBaseModelReloadView() - } - } - - func medialibraryDidStartRescan() { - defer { - fileArrayLock.unlock() - } - fileArrayLock.lock() - files.removeAll() - } -} diff --git a/Sources/Media Library/MediaLibraryModel/VideoModel.swift b/Sources/Media Library/MediaLibraryModel/VideoModel.swift index d438d50f4517211bb1a9a81458e8125c1c677af5..85f21c914b3667cdd4d4c7d9b3721f9915325980 100644 --- a/Sources/Media Library/MediaLibraryModel/VideoModel.swift +++ b/Sources/Media Library/MediaLibraryModel/VideoModel.swift @@ -27,8 +27,6 @@ class VideoModel: MediaModel { var name: String = "ALL_VIDEOS" - var secondName: String = "" - var indicatorName: String = NSLocalizedString("ALL_VIDEOS", comment: "") required init(medialibrary: MediaLibraryService) { diff --git a/Sources/Media Library/MediaLibraryService.swift b/Sources/Media Library/MediaLibraryService.swift index 4a218f2e734cc7a1f75419bc1f6f498ec7dd3775..d920c1f1b2ecb6d3e5e8c238e31457d240f41480 100644 --- a/Sources/Media Library/MediaLibraryService.swift +++ b/Sources/Media Library/MediaLibraryService.swift @@ -139,8 +139,6 @@ class MediaLibraryService: NSObject { private static let didForceRescan: String = "MediaLibraryDidForceRescan" private var triedToRecoverFromInitializationErrorOnce = false - private var didFinishDiscovery = false - private var desiredThumbnailWidth = UInt(320) private var desiredThumbnailHeight = UInt(200) @@ -678,23 +676,6 @@ extension MediaLibraryService { } } -// MARK: - VLCMediaLibraryDelegate - Discovery - -extension MediaLibraryService { - func medialibrary(_ medialibrary: VLCMediaLibrary, didStartDiscovery entryPoint: String) { - } - - func medialibrary(_ medialibrary: VLCMediaLibrary, didCompleteDiscovery entryPoint: String) { - didFinishDiscovery = true - } - - func medialibrary(_ medialibrary: VLCMediaLibrary, didProgressDiscovery entryPoint: String) { - } - - func medialibrary(_ medialibrary: VLCMediaLibrary, didUpdateParsingStatsWithPercent percent: UInt32) { - } -} - // MARK: - VLCMediaLibraryDelegate - Exception handling extension MediaLibraryService { diff --git a/Sources/Playback/Control/CustomDialogRendererHandler.swift b/Sources/Playback/Control/CustomDialogRendererHandler.swift index 15ff8a15cc4b0f9fa071a2207884077ad2febf3a..cc730947c9823b19e7ee8c004fcb581ad4221cfc 100644 --- a/Sources/Playback/Control/CustomDialogRendererHandler.swift +++ b/Sources/Playback/Control/CustomDialogRendererHandler.swift @@ -37,29 +37,6 @@ class CustomDialogRendererHandler: NSObject { // MARK: - Private helpers private extension CustomDialogRendererHandler { - private func handleSMBv1(completionHandler: @escaping (Bool) -> Void) { - let alertController = UIAlertController(title: NSLocalizedString("SMBV1_WARN_TITLE", comment: ""), - message: NSLocalizedString("SMBV1_WARN_DESCRIPTION", comment: ""), - preferredStyle: .alert) - - alertController.addAction(UIAlertAction(title: NSLocalizedString("SMBV1_CONTINUE", comment:""), - style: .destructive, handler: { - action in - completionHandler(true) - })) - - alertController.addAction(UIAlertAction(title: NSLocalizedString("SMBV1_NEXT_PROTOCOL", comment:""), - style: .default, handler: { - action in - completionHandler(false) - })) - - if let rootViewController = UIApplication.shared.delegate?.window??.rootViewController { - let presentingController = rootViewController.presentedViewController ?? rootViewController - presentingController.present(alertController, animated: true, completion: nil) - } - } - private func handleLoginAlert(with title: String, message: String, username: String?, askingForStorage: Bool, withReference reference: NSValue) { @@ -156,26 +133,6 @@ extension CustomDialogRendererHandler: VLCCustomDialogRendererProtocol { askingForStorage: false, withReference: reference) - // if !title.contains("SMBv1") || selectedSMBv1 { - // handleLoginAlert(with: title, message: message, - // username: username, - // askingForStorage: askingForStorage, - // withReference: reference) - // return - // } - - // handleSMBv1() { - // [weak self] isSMBv1 in - // if isSMBv1 { - // self?.selectedSMBv1 = true - // self?.handleLoginAlert(with: title, message: message, - // username: username, - // askingForStorage: askingForStorage, - // withReference: reference) - // } else { - // self?.dialogProvider.dismissDialog(withReference: reference) - // } - // } } func showQuestion(withTitle title: String, message: String, diff --git a/Sources/Playback/Control/VLCPlayerDisplayController.m b/Sources/Playback/Control/VLCPlayerDisplayController.m index 0ce8275dcd119767c0c7bec7c3d1cea51d1246d2..fc92640cbe62687257224c603b621a64bebb30e4 100644 --- a/Sources/Playback/Control/VLCPlayerDisplayController.m +++ b/Sources/Playback/Control/VLCPlayerDisplayController.m @@ -449,8 +449,7 @@ NSString *const VLCPlayerDisplayControllerHideMiniPlayer = @"VLCPlayerDisplayCon UIViewController *rootViewController = [[[UIApplication sharedApplication] delegate] window].rootViewController; // Until VideoMiniPlayer is integrated, only AudioMiniPlayer is used. - self.miniPlaybackView = miniPlaybackView = [[VLCAudioMiniPlayer alloc] initWithService:[VLCAppCoordinator sharedInstance].mediaLibraryService - draggingDelegate:self]; + self.miniPlaybackView = miniPlaybackView = [[VLCAudioMiniPlayer alloc] initWithDraggingDelegate:self]; if (!_queueViewController) { [self initQueueViewController]; } diff --git a/Sources/Playback/Control/VLCRendererDiscovererManager.swift b/Sources/Playback/Control/VLCRendererDiscovererManager.swift index 7d1582e1960f1b93562054c22b0cc64872c84fd6..4ba7d17e31a8f9b98a4921f353cd5247c77a25a7 100644 --- a/Sources/Playback/Control/VLCRendererDiscovererManager.swift +++ b/Sources/Playback/Control/VLCRendererDiscovererManager.swift @@ -48,13 +48,6 @@ class VLCRendererDiscovererManager: NSObject { return discoverers.flatMap { $0.renderers } } - fileprivate func isDuplicateDiscoverer(with description: VLCRendererDiscovererDescription) -> Bool { - for discoverer in discoverers where discoverer.name == description.name { - return true - } - return false - } - @objc func start() { // Gather potential renderer discoverers guard let tmpDiscoverersDescription: [VLCRendererDiscovererDescription] = VLCRendererDiscoverer.list() else { diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift index 1b94c4be28f1894c6b8b6f6ff2dcb4cb810176c3..bd67bee380b5f54f5c51469161dfd5ad144c4d29 100644 --- a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift +++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift @@ -23,10 +23,6 @@ protocol AudioPlayerViewDelegate: AnyObject { func audioPlayerViewDelegateDidTapRepeatButton(_ audioPlayerView: AudioPlayerView) func audioPlayerViewDelegateDidTapPlaybackSpeedButton(_ audioPlayerView: AudioPlayerView) func audioPlayerViewDelegateDidLongPressPlaybackSpeedButton(_ audioPlayerView: AudioPlayerView) - #if os(iOS) - func audioPlayerViewDelegateGetVolumeSlider(_ audioPlayerView: AudioPlayerView) -> VolumeControlView - func audioPlayerViewDelegateGetBrightnessSlider(_ audioPlayerView: AudioPlayerView) -> BrightnessControlView - #endif } class AudioPlayerView: UIView, UIGestureRecognizerDelegate { @@ -170,8 +166,6 @@ class AudioPlayerView: UIView, UIGestureRecognizerDelegate { lazy var progressionView: UIView = UIView() - private var thumbnailImageViewWidthConstant: CGFloat = 270.0 - private lazy var progressionViewBottomConstant: CGFloat = { #if os(iOS) let isSmallerScreen: Bool = UIScreen.main.bounds.width <= DeviceDimensions.iPhone4sPortrait.rawValue @@ -248,17 +242,6 @@ class AudioPlayerView: UIView, UIGestureRecognizerDelegate { artistLabel.textColor = .white } - func setupPlayqueueView(with qvc: UIView) { - playqueueView.addSubview(qvc) - playqueueView.bringSubviewToFront(qvc) - NSLayoutConstraint.activate([ - qvc.topAnchor.constraint(equalTo: playqueueView.topAnchor), - qvc.leadingAnchor.constraint(equalTo: playqueueView.leadingAnchor), - qvc.trailingAnchor.constraint(equalTo: playqueueView.trailingAnchor), - qvc.bottomAnchor.constraint(equalTo: playqueueView.bottomAnchor) - ]) - } - func setupProgressView(with view: MediaScrubProgressBar) { view.translatesAutoresizingMaskIntoConstraints = false progressionView.addSubview(view) diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift index 189fcee327eb13635b6ae4146f3daeb0e8f1c067..2016594e3fdb5cfe308f23d190662e5adda5e25e 100644 --- a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift +++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift @@ -60,8 +60,8 @@ class AudioPlayerViewController: PlayerViewController { // MARK: - Init #if os(iOS) - @objc override init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) { - super.init(mediaLibraryService: mediaLibraryService, rendererDiscovererManager: rendererDiscovererManager, playerController: playerController) + @objc init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) { + super.init(mediaLibraryService: mediaLibraryService, rendererDiscovererManager: rendererDiscovererManager, playerController: playerController, isBrightnessControlEnabled: false) NotificationCenter.default.addObserver(self, selector: #selector(playbackSpeedHasChanged(_:)), name: Notification.Name("ChangePlaybackSpeed"), object: nil) self.playerController.delegate = self @@ -435,15 +435,6 @@ extension AudioPlayerViewController: AudioPlayerViewDelegate { } } -#if os(iOS) - func audioPlayerViewDelegateGetBrightnessSlider(_ audioPlayerView: AudioPlayerView) -> BrightnessControlView { - return brightnessControlView - } - - func audioPlayerViewDelegateGetVolumeSlider(_ audioPlayerView: AudioPlayerView) -> VolumeControlView { - return volumeControlView - } -#endif } // MARK: - VLCPlaybackServiceDelegate @@ -501,10 +492,6 @@ extension AudioPlayerViewController { comment: "")) } - if currentState == .buffering { - mediaDuration = playbackService.mediaDuration - } - if currentState == .opening || currentState == .stopped { resetABRepeat() } diff --git a/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift b/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift index 961431cc9d456efdc633ad7b0947205a0c8b285a..41c96f2a131699597bd7b26137bb5cbe35742692 100644 --- a/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift +++ b/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift @@ -61,7 +61,6 @@ class AudioMiniPlayer: UIView, MiniPlayer, QueueViewControllerDelegate { private let animationDuration = 0.2 - private var mediaService: MediaLibraryService private lazy var playbackService = PlaybackService.sharedInstance() private var queueViewController: QueueViewController? @@ -79,8 +78,7 @@ class AudioMiniPlayer: UIView, MiniPlayer, QueueViewControllerDelegate { } } - @objc init(service: MediaLibraryService, draggingDelegate: MiniPlayerDraggingDelegate) { - self.mediaService = service + @objc init(draggingDelegate: MiniPlayerDraggingDelegate) { self.draggingDelegate = draggingDelegate super.init(frame: .zero) initView() diff --git a/Sources/Playback/Player/PlayerViewController.swift b/Sources/Playback/Player/PlayerViewController.swift index c9fa9d1acd4ce09641f874372bcb91a370c2183d..7839579adc629b00a6d8ac9b1a85d14f918a7fc6 100644 --- a/Sources/Playback/Player/PlayerViewController.swift +++ b/Sources/Playback/Player/PlayerViewController.swift @@ -90,7 +90,6 @@ class PlayerViewController: UIViewController { var seekBackwardBySwipe: Int = 0 var forwardBackwardEqual: Bool = true var tapSwipeEqual: Bool = true - var numberOfTapSeek: Int = 0 var previousSeekState: PlayerSeekState = .default // MARK: UI Elements @@ -280,7 +279,7 @@ class PlayerViewController: UIViewController { var addBookmarksView: AddBookmarksView? = nil - var mediaDuration: Int = 0 + private let isBrightnessControlEnabled: Bool private var isGestureActive: Bool = false @@ -368,20 +367,30 @@ class PlayerViewController: UIViewController { // MARK: - Init #if os(iOS) - @objc init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) { + @objc init(mediaLibraryService: MediaLibraryService, + rendererDiscovererManager: VLCRendererDiscovererManager, + playerController: PlayerController, + isBrightnessControlEnabled: Bool) { self.mediaLibraryService = mediaLibraryService self.rendererDiscovererManager = rendererDiscovererManager self.playerController = playerController + self.isBrightnessControlEnabled = isBrightnessControlEnabled + super.init(nibName: nil, bundle: nil) + mediaNavigationBar.chromeCastButton = rendererButton mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer) systemBrightness = UIScreen.main.brightness } #else - @objc init(mediaLibraryService: MediaLibraryService, playerController: PlayerController) { + @objc init(mediaLibraryService: MediaLibraryService, + playerController: PlayerController) { self.mediaLibraryService = mediaLibraryService self.playerController = playerController + self.isBrightnessControlEnabled = false + super.init(nibName: nil, bundle: nil) + mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer) } #endif @@ -425,7 +434,7 @@ class PlayerViewController: UIViewController { //update the value of brightness control view //In case of remember brightness option is disabled, this will update the brightness bar with current brightness. - if !playerController.isRememberBrightnessEnabled && self is VideoPlayerViewController { + if !playerController.isRememberBrightnessEnabled && self.isBrightnessControlEnabled { brightnessControlView.updateIcon(level: brightnessControl.fetchAndGetDeviceValue()) } #endif @@ -435,7 +444,7 @@ class PlayerViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) - if playerController.isRememberBrightnessEnabled && self is VideoPlayerViewController { + if playerController.isRememberBrightnessEnabled && self.isBrightnessControlEnabled { if let brightness = userDefaults.value(forKey: KVLCPlayerBrightness) as? CGFloat { animateBrightness(to: brightness) self.brightnessControl.value = Float(brightness) @@ -656,7 +665,7 @@ class PlayerViewController: UIViewController { resetABRepeatMarks(true) break default: - assertionFailure("VideoPlayerViewController: Unvalid button.") + assertionFailure("PlayerViewController: Invalid button.") } } diff --git a/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift b/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift index 07217a3b4143fdabf3de4928861f82f0081ed154..261fc9c253105b54a1a9b124fbbc09ddc77177fa 100644 --- a/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift +++ b/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift @@ -26,24 +26,14 @@ protocol PlayerControllerDelegate: AnyObject { class PlayerController: NSObject { weak var delegate: PlayerControllerDelegate? - private var playbackService: PlaybackService = PlaybackService.sharedInstance() - // MARK: - States var isControlsHidden: Bool = false - var lockedOrientation: UIInterfaceOrientation = .unknown - var isInterfaceLocked: Bool = false - var isTapSeeking: Bool = false - // MARK: - UserDefaults computed properties getters - var displayRemainingTime: Bool { - return UserDefaults.standard.bool(forKey: kVLCShowRemainingTime) - } - var isVolumeGestureEnabled: Bool { return UserDefaults.standard.bool(forKey: kVLCSettingVolumeGesture) } @@ -91,10 +81,6 @@ class PlayerController: NSObject { setupObservers() } - func updateUserDefaults() { - - } - private func setupObservers() { let notificationCenter = NotificationCenter.default diff --git a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/AddBookmarksView.swift b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/AddBookmarksView.swift index 0a1a6dab0d2cb4ce03bddba5d5a12f7e7f1662e3..13aca341aa5656c04f6692f5d129852aaa49fe1d 100644 --- a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/AddBookmarksView.swift +++ b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/AddBookmarksView.swift @@ -25,7 +25,7 @@ class AddBookmarksView: UIView { private var bookmarksTableView: UITableView = UITableView() - weak var delegate: BookmarksView? + weak var delegate: AddBookmarksViewDelegate? init(frame: CGRect, tableView: UITableView) { super.init(frame: frame) diff --git a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift index bf35ecc10fe1322480ba80117964ef0494c0136d..3d8baefd99bdcfdb060924d54466c70ebbe314b4 100644 --- a/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift +++ b/Sources/Playback/Player/VideoPlayer-iOS/Subviews/BookmarksView.swift @@ -16,7 +16,6 @@ protocol BookmarksViewDelegate: AnyObject { func bookmarksViewDidSelectBookmark(value: Float) func bookmarksViewShouldDisableGestures(_ disable: Bool) func bookmarksViewDisplayAlert(action: BookmarkActionIdentifier, index: Int, isEditing: Bool) - func bookmarksViewOpenBookmarksView() func bookmarksViewOpenAddBookmarksView() func bookmarksViewCloseAddBookmarksView() } @@ -168,11 +167,6 @@ class BookmarksView: UIView { return "" } - func restoreTable() { - bookmarksTableView.delegate = self - bookmarksTableView.dataSource = self - } - func getAddBookmarksView() -> AddBookmarksView { return addBookmarksView } diff --git a/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift b/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift index 33dde55a82f41e053a65dac71833a35e1e15fed4..4b92d25a8371032e032cb9e19e38a21fc9292cf0 100644 --- a/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift +++ b/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift @@ -26,8 +26,6 @@ protocol VideoPlayerViewControllerDelegate: AnyObject { class VideoPlayerViewController: PlayerViewController { @objc weak var delegate: VideoPlayerViewControllerDelegate? - var playAsAudio: Bool = false - // MARK: - Constants private let ZOOM_SENSITIVITY: CGFloat = 5 @@ -145,8 +143,6 @@ class VideoPlayerViewController: PlayerViewController { return aspectRatioActionSheet }() - let notificationCenter = NotificationCenter.default - private(set) lazy var titleSelectionView: TitleSelectionView = { #if os(iOS) let isLandscape = UIDevice.current.orientation.isLandscape @@ -160,8 +156,6 @@ class VideoPlayerViewController: PlayerViewController { return titleSelectionView }() - private var projectionLocation: CGPoint = .zero - private lazy var longPressPlaybackSpeedView: LongPressPlaybackSpeedView = { let view = LongPressPlaybackSpeedView() view.translatesAutoresizingMaskIntoConstraints = false @@ -279,8 +273,6 @@ class VideoPlayerViewController: PlayerViewController { private var isGestureActive: Bool = false - private var minimizationInitialCenter: CGPoint? - // MARK: - Popup Views lazy var trackSelectorPopupView: PopupView = { @@ -319,8 +311,13 @@ class VideoPlayerViewController: PlayerViewController { // MARK: - Init methods #if os(iOS) - @objc override init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) { - super.init(mediaLibraryService: mediaLibraryService, rendererDiscovererManager: rendererDiscovererManager, playerController: playerController) + @objc init(mediaLibraryService: MediaLibraryService, + rendererDiscovererManager: VLCRendererDiscovererManager, + playerController: PlayerController) { + super.init(mediaLibraryService: mediaLibraryService, + rendererDiscovererManager: rendererDiscovererManager, + playerController: playerController, + isBrightnessControlEnabled: true) self.playerController.delegate = self self.mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer) @@ -349,7 +346,6 @@ class VideoPlayerViewController: PlayerViewController { super.viewWillAppear(animated) playbackService.delegate = self playbackService.recoverPlaybackState() - playerController.lockedOrientation = .portrait navigationController?.navigationBar.isHidden = true mediaScrubProgressBar.updateInterfacePosition() @@ -400,16 +396,6 @@ class VideoPlayerViewController: PlayerViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) -#if os(iOS) - let defaults = UserDefaults.standard - if defaults.bool(forKey: kVLCPlayerShouldRememberBrightness) { - if let brightness = defaults.value(forKey: KVLCPlayerBrightness) as? CGFloat { - animateBrightness(to: brightness) - self.brightnessControl.value = Float(brightness) - } - } -#endif - playbackService.recoverDisplayedMetadata() // The video output view is not initialized when the play as audio option was chosen @@ -466,23 +452,8 @@ class VideoPlayerViewController: PlayerViewController { override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) - deviceMotion.stopDeviceMotion() -#if os(iOS) - let defaults = UserDefaults.standard - if defaults.bool(forKey: kVLCPlayerShouldRememberBrightness) { - let currentBrightness = UIScreen.main.brightness - self.brightnessControl.value = Float(currentBrightness) // helper in indicating change in the system brightness - defaults.set(currentBrightness, forKey: KVLCPlayerBrightness) - } - - //set the value of system brightness after closing the app x - //even if the Player Should Remember Brightness option is disabled - animateBrightness(to: systemBrightness!, duration: 0.35) - // remove the observer when the view disappears to avoid breaking the brightness view value - // when the video player is not shown to save the persisted values - removePlayerBrightnessObservers() -#endif + deviceMotion.stopDeviceMotion() } override func viewDidLoad() { @@ -716,51 +687,6 @@ class VideoPlayerViewController: PlayerViewController { titleSelectionView.mainStackView.distribution = isLandscape ? .fillEqually : .fill } -#if os(iOS) - private func addPlayerBrightnessObservers() { - NotificationCenter.default.addObserver( - self, - selector: #selector(systemBrightnessChanged), - name: UIApplication.didBecomeActiveNotification, - object: nil - ) - - NotificationCenter.default.addObserver( - self, - selector: #selector(playerWillResignActive), - name: UIApplication.willResignActiveNotification, - object: nil - ) - - NotificationCenter.default.addObserver( - self, - selector: #selector(playerWillEnterForeground), - name: UIApplication.willEnterForegroundNotification, - object: nil - ) - } - - private func removePlayerBrightnessObservers() { - NotificationCenter.default.removeObserver( - self, - name: UIApplication.didBecomeActiveNotification, - object: nil - ) - - NotificationCenter.default.removeObserver( - self, - name: UIApplication.willResignActiveNotification, - object: nil - ) - - NotificationCenter.default.removeObserver( - self, - name: UIApplication.willEnterForegroundNotification, - object: nil - ) - } -#endif - // MARK: - Private helpers #if os(iOS) @@ -1065,31 +991,6 @@ class VideoPlayerViewController: PlayerViewController { executeSeekFromGesture(.tap) } - private func applyYaw(yaw: CGFloat, pitch: CGFloat) { - //Add and limit new pitch and yaw - deviceMotion.yaw += yaw - deviceMotion.pitch += pitch - - playbackService.updateViewpoint(deviceMotion.yaw, - pitch: deviceMotion.pitch, - roll: 0, - fov: fov, absolute: true) - } - - private func updateProjection(with recognizer: UIPanGestureRecognizer) { - let newLocationInView: CGPoint = recognizer.location(in: view) - - let diffX = newLocationInView.x - projectionLocation.x - let diffY = newLocationInView.y - projectionLocation.y - projectionLocation = newLocationInView - - // ScreenSizePixel width is used twice to get a constant speed on the movement. - let diffYaw = fov * -diffX / screenPixelSize.width - let diffPitch = fov * -diffY / screenPixelSize.width - - applyYaw(yaw: diffYaw, pitch: diffPitch) - } - @objc private func handleLongPressGesture(_ gestureRecognizer: UILongPressGestureRecognizer) { guard playerController.isSpeedUpGestureEnabled, playbackService.isPlaying else { @@ -1384,29 +1285,6 @@ class VideoPlayerViewController: PlayerViewController { displayAndApplySeekDuration(currentSeek) } - private func applyCustomEqualizerProfileIfNeeded() { - let userDefaults = UserDefaults.standard - guard userDefaults.bool(forKey: kVLCCustomProfileEnabled) else { - return - } - - let profileIndex = userDefaults.integer(forKey: kVLCSettingEqualizerProfile) - let encodedData = userDefaults.data(forKey: kVLCCustomEqualizerProfiles) - - guard let encodedData = encodedData, - let customProfiles = NSKeyedUnarchiver(forReadingWith: encodedData).decodeObject(forKey: "root") as? CustomEqualizerProfiles, - profileIndex < customProfiles.profiles.count else { - return - } - - let selectedProfile = customProfiles.profiles[profileIndex] - playbackService.preAmplification = CGFloat(selectedProfile.preAmpLevel) - - for (index, frequency) in selectedProfile.frequencies.enumerated() { - playbackService.setAmplification(CGFloat(frequency), forBand: UInt32(index)) - } - } - private func hideSystemVolumeInfo() { #if os(iOS) volumeView.alpha = 0.00001 @@ -1477,6 +1355,18 @@ class VideoPlayerViewController: PlayerViewController { playerController.isInterfaceLocked = !enabled } + + private func showIcon(button: UIButton) { + UIView.animate(withDuration: 0.5, animations: { + button.isHidden = false + }, completion: nil) + } + + private func hideIcon(button: UIButton) { + UIView.animate(withDuration: 0.5, animations: { + button.isHidden = true + }, completion: nil) + } } // MARK: - Delegation @@ -1806,83 +1696,6 @@ extension VideoPlayerViewController { } } -// MARK: - OptionsNavigationBarDelegate - -extension VideoPlayerViewController { - private func resetVideoFilters() { - hideIcon(button: optionsNavigationBar.videoFiltersButton) - moreOptionsActionSheet.resetVideoFilters() - } - - private func resetPlaybackSpeed() { - hideIcon(button: optionsNavigationBar.playbackSpeedButton) - moreOptionsActionSheet.resetPlaybackSpeed() - } - - private func resetEqualizer() { - moreOptionsActionSheet.resetEqualizer() - hideIcon(button: optionsNavigationBar.equalizerButton) - } - - private func resetSleepTimer() { - hideIcon(button: optionsNavigationBar.sleepTimerButton) - moreOptionsActionSheet.resetSleepTimer() - } - - private func resetABRepeatMarks(_ shouldDisplayView: Bool = false) { - hideIcon(button: optionsNavigationBar.abRepeatMarksButton) - aMark.removeFromSuperview() - aMark.isEnabled = false - - bMark.removeFromSuperview() - bMark.isEnabled = false - - guard let abRepeatView = abRepeatView, - shouldDisplayView else { - return - } - - mediaMoreOptionsActionSheetPresentABRepeatView(with: abRepeatView) - } - - private func showIcon(button: UIButton) { - UIView.animate(withDuration: 0.5, animations: { - button.isHidden = false - }, completion: nil) - } - - private func hideIcon(button: UIButton) { - UIView.animate(withDuration: 0.5, animations: { - button.isHidden = true - }, completion: nil) - } - - private func handleReset(button: UIButton) { - switch button { - case optionsNavigationBar.videoFiltersButton: - resetVideoFilters() - return - case optionsNavigationBar.playbackSpeedButton: - resetPlaybackSpeed() - return - case optionsNavigationBar.equalizerButton: - resetEqualizer() - return - case optionsNavigationBar.sleepTimerButton: - resetSleepTimer() - return - case optionsNavigationBar.abRepeatButton: - resetABRepeat() - return - case optionsNavigationBar.abRepeatMarksButton: - resetABRepeatMarks(true) - return - default: - assertionFailure("VideoPlayerViewController: Invalid button.") - } - } -} - // MARK: - Download More SPU extension VideoPlayerViewController { diff --git a/Sources/Playback/Queue/QueueViewController.swift b/Sources/Playback/Queue/QueueViewController.swift index 7383aaea4b5250150e045a39b96dfbe83eeecf90..50441268bbf2dfd841bc862fdd59a6abd1121025 100644 --- a/Sources/Playback/Queue/QueueViewController.swift +++ b/Sources/Playback/Queue/QueueViewController.swift @@ -50,16 +50,12 @@ class QueueViewController: UIViewController { private var scrolledCellIndex: IndexPath = IndexPath() private var grabbedCellIndex: IndexPath? - private let cellHeight: CGFloat = 56 - private let sidePadding: CGFloat = 10 private let topPadding: CGFloat = 8 private let bottomPadding: CGFloat = 8 private let darkOverlayAlpha: CGFloat = 0.6 - private var originY: CGFloat = 0 - private var playbackService: PlaybackService { get { PlaybackService.sharedInstance() @@ -300,7 +296,7 @@ class QueueViewController: UIViewController { } func dragDidBegin(_ sender: UIPanGestureRecognizer) { - originY = view.frame.origin.y + // nothing to do } func dragStateDidChange(_ sender: UIPanGestureRecognizer) { diff --git a/Sources/Settings/Controller/PasscodeLockController.swift b/Sources/Settings/Controller/PasscodeLockController.swift index 6bfedb1a38c9a6ab1bc756063ada5682d57a77fd..dc76f785539dad814aaa29b5381659cc6a54b0cd 100644 --- a/Sources/Settings/Controller/PasscodeLockController.swift +++ b/Sources/Settings/Controller/PasscodeLockController.swift @@ -24,7 +24,6 @@ enum PasscodeAction { class PasscodeLockController: UIViewController { // - MARK: Properties - private let userDefaults = UserDefaults.standard private let notificationCenter = NotificationCenter.default let action: PasscodeAction diff --git a/Sources/Settings/Model/SettingsSection.swift b/Sources/Settings/Model/SettingsSection.swift index 0522ca9021bc69234d093057df4cdbcad66d5c59..2f34e6208f90b519a3a4fe3ba1778a2dda03ba68 100644 --- a/Sources/Settings/Model/SettingsSection.swift +++ b/Sources/Settings/Model/SettingsSection.swift @@ -131,10 +131,6 @@ struct SettingsSection: Equatable { let title: String? let items: [SettingsItem] - var isEmpty: Bool { - items.isEmpty - } - init(title: String? = nil, items: [SettingsItem]) { self.title = title.flatMap(Localizer.localizedTitle(key:)) self.items = items diff --git a/Sources/Settings/Model/SettingsSpecifier.swift b/Sources/Settings/Model/SettingsSpecifier.swift index baf088a73571445ac8779e3b353200ff5366e95a..1a18152c9206b60118c88e21c8625692a8125062 100644 --- a/Sources/Settings/Model/SettingsSpecifier.swift +++ b/Sources/Settings/Model/SettingsSpecifier.swift @@ -13,9 +13,7 @@ import Foundation struct SettingSpecifier { let title: String - let preferenceKey: String let infobuttonvalue: String - let defaultValue: Any? let specifier: [Specifier] } diff --git a/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift b/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift index 90cd8c75779275443d44814459241b26036d127f..ed4adfc6605440ed0241e5a08510580168d41615 100644 --- a/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift +++ b/Sources/UI Elements/ActionSheet/ActionSheetSectionHeader.swift @@ -10,9 +10,6 @@ *****************************************************************************/ class ActionSheetSectionHeader: UIView { - - static let identifier = "VLCActionSheetSectionHeader" - public var accessoryViewsDelegate: ActionSheetAccessoryViewsDelegate? { didSet { addAccessoryViews() @@ -119,13 +116,6 @@ class ActionSheetSectionHeader: UIView { separator.topAnchor.constraint(equalTo: bottomAnchor, constant: -1) ]) } - - fileprivate func setupTitle() { - addSubview(title) - NSLayoutConstraint.activate([ - title.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor, constant: 20), - ]) - } } protocol ActionSheetAccessoryViewsDelegate { diff --git a/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift b/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift index 0e277e7861afb8db57ee9a9b515b837ce7760e81..5ae442846a8cd255ea24617921b7f262ed0d4dca 100644 --- a/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift +++ b/Sources/UI Elements/ActionSheet/ActionSheetSortSectionHeader.swift @@ -29,8 +29,6 @@ class ActionSheetSortSectionHeader: ActionSheetSectionHeader { } private var sortModel: SortModel - private var secondSortModel: SortModel? - private let userDefaults = UserDefaults.standard private var isAdditionalOptionShown: Bool = false private let descendingStackView: UIStackView = { @@ -187,11 +185,11 @@ class ActionSheetSortSectionHeader: ActionSheetSectionHeader { private var isVideoModel: Bool - init(model: SortModel, secondModel: SortModel?, - isVideoModel: Bool, currentModelType: String) { + init(model: SortModel, + isVideoModel: Bool, + currentModelType: String) { modelType = currentModelType sortModel = model - secondSortModel = secondModel self.isVideoModel = isVideoModel super.init(frame: .zero) actionSwitch.isOn = sortModel.desc diff --git a/Sources/UI Elements/PopupView.swift b/Sources/UI Elements/PopupView.swift index a73e328e31961967a6546462942d262b953e11ea..09e309f565d0d08b7c09f155751c37f030d7521b 100644 --- a/Sources/UI Elements/PopupView.swift +++ b/Sources/UI Elements/PopupView.swift @@ -176,17 +176,6 @@ extension PopupView { ]) NSLayoutConstraint.activate(newConstraints) } - - func updateAccessoryViews() { - while titleStackView.arrangedSubviews.count > 2 { - if let subview = titleStackView.arrangedSubviews.last { - titleStackView.removeArrangedSubview(subview) - subview.removeFromSuperview() - } - } - addAccessoryViews() - titleStackView.layoutSubviews() - } } // MARK: - PopupViewDelegate diff --git a/Sources/UI Elements/View Controller/PagerStripViewController.swift b/Sources/UI Elements/View Controller/PagerStripViewController.swift index 54da32c421e68b6e1a5cb0c96938184b7b0f84eb..6f2a8310a91080270b30b70a66f1dec02716c1db 100644 --- a/Sources/UI Elements/View Controller/PagerStripViewController.swift +++ b/Sources/UI Elements/View Controller/PagerStripViewController.swift @@ -167,17 +167,6 @@ class PagerTabStripViewController: UIViewController, UIScrollViewDelegate { return (CGFloat(index) * containerView.bounds.width) + ((containerView.bounds.width - view.bounds.width) * 0.5) } - enum PagerTabStripError: Error { - case viewControllerOutOfBounds - } - - func offsetForChild(viewController: UIViewController) throws -> CGFloat { - guard let index = viewControllers.firstIndex(of: viewController) else { - throw PagerTabStripError.viewControllerOutOfBounds - } - return offsetForChild(at: index) - } - func pageFor(contentOffset: CGFloat) -> Int { let result = virtualPageFor(contentOffset: contentOffset) return pageFor(virtualPage: result) @@ -240,8 +229,7 @@ class PagerTabStripViewController: UIViewController, UIScrollViewDelegate { preCurrentIndex = currentIndex let changeCurrentIndex = newCurrentIndex != oldCurrentIndex - if let progressiveDelegate = self as? PagerTabStripIsProgressiveDelegate { - + if let progressiveDelegate = delegate { let (fromIndex, toIndex, scrollPercentage) = progressiveIndicatorData(virtualPage) progressiveDelegate.updateIndicator(for: self, fromIndex: fromIndex, toIndex: toIndex, withProgressPercentage: scrollPercentage, indexWasChanged: changeCurrentIndex) } diff --git a/Sources/UI Elements/View Controller/VLCPagingViewController.swift b/Sources/UI Elements/View Controller/VLCPagingViewController.swift index f55e99dc4dbf6c1764c02effb903c3ca7ffb3b7b..3e06f50f36d70543929f15f34bb68ad4d2c25af1 100644 --- a/Sources/UI Elements/View Controller/VLCPagingViewController.swift +++ b/Sources/UI Elements/View Controller/VLCPagingViewController.swift @@ -176,11 +176,6 @@ class VLCPagingViewController<ButtonBarCellType: UICollectionViewCell>: PagerTab return calculateStretchedCellWidths(minimumCellWidths, suggestedStretchedCellWidth: newSuggestedStretchedCellWidth, previousNumberOfLargeCells: numberOfLargeCells) } - func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int) { - guard shouldUpdateButtonBarView else { return } - buttonBarView.moveTo(index: toIndex, animated: true, swipeDirection: toIndex < fromIndex ? .right : .left, pagerScroll: .yes) - } - func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int, withProgressPercentage progressPercentage: CGFloat, indexWasChanged: Bool) { guard shouldUpdateButtonBarView else { return } buttonBarView.move(fromIndex: fromIndex, toIndex: toIndex, progressPercentage: progressPercentage, pagerScroll: .yes) diff --git a/VLC.xcodeproj/project.pbxproj b/VLC.xcodeproj/project.pbxproj index 4f743280f4f004331d3647178a63a614cc99cd41..8b9e6c63fbea5b5678eb4950927e51c7a785d0df 100644 --- a/VLC.xcodeproj/project.pbxproj +++ b/VLC.xcodeproj/project.pbxproj @@ -322,7 +322,6 @@ 7D50C6492BBD20DF00B9F1A0 /* SirikitIntentCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9108342A67AC76007EB0D5 /* SirikitIntentCoordinator.swift */; }; 7D50C64A2BBD20DF00B9F1A0 /* MediaLibraryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D66A47220AC61B900FA5B92 /* MediaLibraryService.swift */; }; 7D50C64B2BBD20DF00B9F1A0 /* VLCExternalDisplayController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D378491183A98BF009EE944 /* VLCExternalDisplayController.m */; }; - 7D50C64C2BBD20DF00B9F1A0 /* ShowEpisodeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1888B210B459000A091D2 /* ShowEpisodeModel.swift */; }; 7D50C64D2BBD20DF00B9F1A0 /* MediaViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4170152B209A1D3600802E44 /* MediaViewController.swift */; }; 7D50C64E2BBD20DF00B9F1A0 /* VLCPlaybackService+MediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8F84301B00EB3B0009138A /* VLCPlaybackService+MediaLibrary.m */; }; 7D50C64F2BBD20DF00B9F1A0 /* MediaCategoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 418B144620179C00000447AA /* MediaCategoryViewController.swift */; }; @@ -707,7 +706,6 @@ 8DE1879A21060DBE00A091D2 /* MediaCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1879921060DBE00A091D2 /* MediaCategory.swift */; }; 8DE1887421089B3A00A091D2 /* MediaLibraryBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1887321089B3A00A091D2 /* MediaLibraryBaseModel.swift */; }; 8DE1887621089BB100A091D2 /* VideoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1887521089BB100A091D2 /* VideoModel.swift */; }; - 8DE1888C210B459000A091D2 /* ShowEpisodeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1888B210B459000A091D2 /* ShowEpisodeModel.swift */; }; 8DE18890210B53E000A091D2 /* TrackModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE1888F210B53E000A091D2 /* TrackModel.swift */; }; 8DE18892210B5BAD00A091D2 /* ArtistModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE18891210B5BAD00A091D2 /* ArtistModel.swift */; }; 8DE18894210B5F8200A091D2 /* AlbumModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DE18893210B5F8200A091D2 /* AlbumModel.swift */; }; @@ -1453,7 +1451,6 @@ 8DE1879921060DBE00A091D2 /* MediaCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaCategory.swift; sourceTree = "<group>"; }; 8DE1887321089B3A00A091D2 /* MediaLibraryBaseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaLibraryBaseModel.swift; sourceTree = "<group>"; }; 8DE1887521089BB100A091D2 /* VideoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoModel.swift; sourceTree = "<group>"; }; - 8DE1888B210B459000A091D2 /* ShowEpisodeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowEpisodeModel.swift; sourceTree = "<group>"; }; 8DE1888F210B53E000A091D2 /* TrackModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackModel.swift; sourceTree = "<group>"; }; 8DE18891210B5BAD00A091D2 /* ArtistModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArtistModel.swift; sourceTree = "<group>"; }; 8DE18893210B5F8200A091D2 /* AlbumModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumModel.swift; sourceTree = "<group>"; }; @@ -3291,7 +3288,6 @@ 6D8E6429234CBF2200EBC8FC /* AudioCollectionModel.swift */, 8DE1887321089B3A00A091D2 /* MediaLibraryBaseModel.swift */, 8DE1887521089BB100A091D2 /* VideoModel.swift */, - 8DE1888B210B459000A091D2 /* ShowEpisodeModel.swift */, 8DE1888F210B53E000A091D2 /* TrackModel.swift */, 8DE18891210B5BAD00A091D2 /* ArtistModel.swift */, 8DE18893210B5F8200A091D2 /* AlbumModel.swift */, @@ -4377,7 +4373,6 @@ 7D50C6492BBD20DF00B9F1A0 /* SirikitIntentCoordinator.swift in Sources */, 7D50C64A2BBD20DF00B9F1A0 /* MediaLibraryService.swift in Sources */, 7D50C64B2BBD20DF00B9F1A0 /* VLCExternalDisplayController.m in Sources */, - 7D50C64C2BBD20DF00B9F1A0 /* ShowEpisodeModel.swift in Sources */, 7D50C64D2BBD20DF00B9F1A0 /* MediaViewController.swift in Sources */, 7D65F2222D2C4D4B0042A6C2 /* VLCMLMedia+isWatched.m in Sources */, 7D50C64E2BBD20DF00B9F1A0 /* VLCPlaybackService+MediaLibrary.m in Sources */, @@ -4631,7 +4626,6 @@ 8D66A47320AC61B900FA5B92 /* MediaLibraryService.swift in Sources */, 91562F5A2CAEBC1500D42986 /* PlayMediaIntent.swift in Sources */, 7D378492183A98BF009EE944 /* VLCExternalDisplayController.m in Sources */, - 8DE1888C210B459000A091D2 /* ShowEpisodeModel.swift in Sources */, 4170152C209A1D3600802E44 /* MediaViewController.swift in Sources */, DD8F84311B00EB3B0009138A /* VLCPlaybackService+MediaLibrary.m in Sources */, 418B144720179C00000447AA /* MediaCategoryViewController.swift in Sources */, @@ -5123,7 +5117,7 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = Buildsystem/Testing/Unit/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.4; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -5166,7 +5160,7 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = Buildsystem/Testing/Unit/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.4; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -5208,7 +5202,7 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = Buildsystem/Testing/Unit/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.4; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks",