From 977cb9dcd1164282e9ed9a1edb700098bfad2fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Est=C3=AAv=C3=A3o?= Date: Thu, 21 Mar 2024 17:27:03 +0000 Subject: [PATCH 1/2] Implement bookmark share --- .../Episode/BookmarkEpisodeListController.swift | 9 +++++++++ podcasts/Bookmarks/List/BookmarkListRouter.swift | 1 + podcasts/Bookmarks/List/BookmarkListViewModel.swift | 7 +++++++ podcasts/Bookmarks/List/BookmarksListView.swift | 3 +++ .../Bookmarks/Player/BookmarksPlayerTabController.swift | 9 +++++++++ .../Podcast/BookmarksPodcastListController.swift | 9 +++++++++ .../Profile/BookmarksProfileListController.swift | 9 +++++++++ 7 files changed, 47 insertions(+) diff --git a/podcasts/Bookmarks/Episode/BookmarkEpisodeListController.swift b/podcasts/Bookmarks/Episode/BookmarkEpisodeListController.swift index f7956aa00..d63312077 100644 --- a/podcasts/Bookmarks/Episode/BookmarkEpisodeListController.swift +++ b/podcasts/Bookmarks/Episode/BookmarkEpisodeListController.swift @@ -54,6 +54,15 @@ extension BookmarkEpisodeListController: BookmarkListRouter { present(controller, animated: true) } + func bookmarkShare(_ bookmark: Bookmark) { + guard let episode = bookmark.episode as? Episode else { + return + } + let controller = SharingHelper.shared.createActivityController(episode: episode, shareTime: bookmark.time) + + present(controller, animated: true) + } + func dismissBookmarksList() { dismiss(animated: true) } diff --git a/podcasts/Bookmarks/List/BookmarkListRouter.swift b/podcasts/Bookmarks/List/BookmarkListRouter.swift index 89275ef77..addc9bc6a 100644 --- a/podcasts/Bookmarks/List/BookmarkListRouter.swift +++ b/podcasts/Bookmarks/List/BookmarkListRouter.swift @@ -4,6 +4,7 @@ import UIKit protocol BookmarkListRouter: AnyObject { func bookmarkPlay(_ bookmark: Bookmark) func bookmarkEdit(_ bookmark: Bookmark) + func bookmarkShare(_ bookmark: Bookmark) /// Optional: Dismisses the presented bookmark list, if applicable. func dismissBookmarksList() diff --git a/podcasts/Bookmarks/List/BookmarkListViewModel.swift b/podcasts/Bookmarks/List/BookmarkListViewModel.swift index 3b5869ee3..2a267e24d 100644 --- a/podcasts/Bookmarks/List/BookmarkListViewModel.swift +++ b/podcasts/Bookmarks/List/BookmarkListViewModel.swift @@ -105,6 +105,13 @@ extension BookmarkListViewModel { toggleMultiSelection() } + func shareSelectedBookmarks() { + guard let bookmark = selectedItems.first else { return } + + router?.bookmarkShare(bookmark) + toggleMultiSelection() + } + func sorted(by option: BookmarkSortOption) { sortOption = option reload() diff --git a/podcasts/Bookmarks/List/BookmarksListView.swift b/podcasts/Bookmarks/List/BookmarksListView.swift index c2894322a..95e06d80e 100644 --- a/podcasts/Bookmarks/List/BookmarksListView.swift +++ b/podcasts/Bookmarks/List/BookmarksListView.swift @@ -147,6 +147,9 @@ struct BookmarksListView: View { ActionBarOverlayView(actionBarVisible: actionBarVisible, title: title, style: style.actionBarStyle, content: { content() }, actions: [ + .init(imageName: "podcast-share", title: L10n.share, visible: editVisible, action: { + viewModel.shareSelectedBookmarks() + }), .init(imageName: "folder-edit", title: L10n.edit, visible: editVisible, action: { viewModel.editSelectedBookmarks() }), diff --git a/podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift b/podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift index 444be3fd5..8304cb570 100644 --- a/podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift +++ b/podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift @@ -136,4 +136,13 @@ extension BookmarksPlayerTabController: BookmarkListRouter { func bookmarkEdit(_ bookmark: Bookmark) { showBookmarkEdit(isNew: false, bookmark: bookmark) } + + func bookmarkShare(_ bookmark: Bookmark) { + guard let episode = bookmark.episode as? Episode else { + return + } + let controller = SharingHelper.shared.createActivityController(episode: episode, shareTime: bookmark.time) + + present(controller, animated: true) + } } diff --git a/podcasts/Bookmarks/Podcast/BookmarksPodcastListController.swift b/podcasts/Bookmarks/Podcast/BookmarksPodcastListController.swift index caf9e83b9..c4344b03f 100644 --- a/podcasts/Bookmarks/Podcast/BookmarksPodcastListController.swift +++ b/podcasts/Bookmarks/Podcast/BookmarksPodcastListController.swift @@ -45,6 +45,15 @@ extension BookmarksPodcastListController: BookmarkListRouter { present(controller, animated: true) } + func bookmarkShare(_ bookmark: Bookmark) { + guard let episode = bookmark.episode as? Episode else { + return + } + let controller = SharingHelper.shared.createActivityController(episode: episode, shareTime: bookmark.time) + + present(controller, animated: true) + } + func dismissBookmarksList() { dismiss(animated: true) } diff --git a/podcasts/Bookmarks/Profile/BookmarksProfileListController.swift b/podcasts/Bookmarks/Profile/BookmarksProfileListController.swift index c06350edb..4e98128f2 100644 --- a/podcasts/Bookmarks/Profile/BookmarksProfileListController.swift +++ b/podcasts/Bookmarks/Profile/BookmarksProfileListController.swift @@ -48,6 +48,15 @@ extension BookmarksProfileListController: BookmarkListRouter { present(controller, animated: true) } + func bookmarkShare(_ bookmark: Bookmark) { + guard let episode = bookmark.episode as? Episode else { + return + } + let controller = SharingHelper.shared.createActivityController(episode: episode, shareTime: bookmark.time) + + present(controller, animated: true) + } + func dismissBookmarksList() { dismiss(animated: true) } From c1f848944101f718a89d40035165afc6d01653d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Est=C3=AAv=C3=A3o?= Date: Fri, 22 Mar 2024 10:14:02 +0000 Subject: [PATCH 2/2] Get episode from local view model --- podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift b/podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift index 8304cb570..2e880ce12 100644 --- a/podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift +++ b/podcasts/Bookmarks/Player/BookmarksPlayerTabController.swift @@ -138,7 +138,7 @@ extension BookmarksPlayerTabController: BookmarkListRouter { } func bookmarkShare(_ bookmark: Bookmark) { - guard let episode = bookmark.episode as? Episode else { + guard let episode = viewModel.episode as? Episode else { return } let controller = SharingHelper.shared.createActivityController(episode: episode, shareTime: bookmark.time)