From f39e307bc45fa50fc5192d4ca7e044d5856edfd6 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Mon, 19 May 2025 16:36:01 -0500 Subject: [PATCH] fix: adds download preference to form --- src/Command/SeedDatabaseCommand.php | 9 ++++- .../Controller/Web/PreferencesController.php | 34 +++++++++++++++++++ src/User/Framework/Entity/User.php | 9 +++++ templates/user/preferences.html.twig | 18 +++++++--- 4 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/Command/SeedDatabaseCommand.php b/src/Command/SeedDatabaseCommand.php index eb16e7e..042b2c4 100644 --- a/src/Command/SeedDatabaseCommand.php +++ b/src/Command/SeedDatabaseCommand.php @@ -90,7 +90,14 @@ class SeedDatabaseCommand extends Command 'description' => null, 'enabled' => true, 'type' => 'media', - ] + ], + [ + 'id' => 'movie_folder', + 'name' => 'Create new folder for Movies', + 'description' => 'When downloading a movie, store it in a new folder in your base \'movies\' folder. (e.g.: .../movies/Inception/Inception.2160p.h265.mkv)', + 'enabled' => true, + 'type' => 'download' + ], ]; } diff --git a/src/User/Framework/Controller/Web/PreferencesController.php b/src/User/Framework/Controller/Web/PreferencesController.php index fd30aa3..a5c7ca4 100644 --- a/src/User/Framework/Controller/Web/PreferencesController.php +++ b/src/User/Framework/Controller/Web/PreferencesController.php @@ -32,6 +32,7 @@ class PreferencesController extends AbstractController public function mediaPreferences(): Response { $mediaPreferences = $this->getUser()->getMediaPreferences(); + $downloadPreferences = $this->getUser()->getDownloadPreferences(); $languages = CountryLanguages::$languages; sort($languages); @@ -42,6 +43,7 @@ class PreferencesController extends AbstractController 'languages' => $languages, 'providers' => ProviderList::$providers, 'mediaPreferences' => $mediaPreferences, + 'downloadPreferences' => $downloadPreferences, ] ); } @@ -77,4 +79,36 @@ class PreferencesController extends AbstractController ] ); } + + #[Route('/user/preferences/download', 'app_save_download_preferences', methods: ['POST'])] + public function saveDownloadPreferences( + Request $request, + SaveUserMediaPreferencesInput $input, + ): Response + { + $userPreferences = $this->saveUserMediaPreferencesHandler->handle($input->toCommand())->userPreferences; + $userPreferences = Map::from($userPreferences)->rekey(fn($preference) => $preference->getPreference()->getId()); + + $languages = CountryLanguages::$languages; + sort($languages); + + $this->hub->publish(new Update( + $request->getSession()->get('mercure_alert_topic'), + $this->renderView('broadcast/Alert.stream.html.twig', [ + 'alert_id' => uniqid(), + 'title' => 'Success', + 'message' => 'Your media preferences have been saved.', + ]) + )); + + return $this->render( + 'user/preferences.html.twig', + [ + 'preferences' => $this->preferencesRepository->findEnabled(), + 'languages' => $languages, + 'providers' => ProviderList::$providers, + 'userPreferences' => $userPreferences->toArray(), + ] + ); + } } diff --git a/src/User/Framework/Entity/User.php b/src/User/Framework/Entity/User.php index b28e1b6..d894bd5 100644 --- a/src/User/Framework/Entity/User.php +++ b/src/User/Framework/Entity/User.php @@ -281,6 +281,15 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface ; } + public function getDownloadPreferences() + { + return Map::from($this->userPreferences) + ->rekey(fn(UserPreference $userPreference) => $userPreference->getPreference()->getId()) + ->filter(fn(UserPreference $userPreference) => $userPreference->getPreference()->getType() === 'download') + ->toArray() + ; + } + /** * @return Collection */ diff --git a/templates/user/preferences.html.twig b/templates/user/preferences.html.twig index 5f54617..5d7d229 100644 --- a/templates/user/preferences.html.twig +++ b/templates/user/preferences.html.twig @@ -3,9 +3,9 @@ {% block h2 %}Preferences{% endblock %} {% block body %} -
- -

Define a set of filters to apply to your media download option results.

+
+ +

Define a filter to be pre-applied to your download options.

- -
+ + +

Change how your downloads are stored.

+
+
+ + +
+
+
{% endblock %} \ No newline at end of file