From 987e9046660a09900aff064650158a16d4205f07 Mon Sep 17 00:00:00 2001 From: "Christian F." Date: Tue, 14 May 2024 15:07:02 +0200 Subject: [PATCH] - switch to 14.1.0 due to many changes - rename filters via separate button instead of ComboBox entry - update libraries --- CHANGELOG.md | 3 +- pom.xml | 4 +- .../java/mediathek/config/Konstanten.java | 2 +- .../daten/blacklist/ListeBlacklist.java | 2 +- .../gui/FilterSelectionComboBoxModel.java | 3 +- .../mediathek/gui/tabs/tab_film/GuiFilme.java | 60 ++++++++--------- .../tab_film/helpers/GuiFilmeModelHelper.java | 58 ++++++++--------- .../tabs/tab_film/helpers/GuiModelHelper.java | 8 +-- .../helpers/LuceneGuiFilmeModelHelper.java | 64 +++++++++---------- .../filterpanel/CommonViewSettingsPane.java | 6 +- ...ctionPanel.java => FilterActionPanel.java} | 41 ++++++++++-- .../mediathek/mainwindow/MediathekGui.java | 2 +- .../gui/actions/ResetFilterDialogPosition.kt | 2 +- .../programm/fxml/filter_settings_pane.fxml | 14 +++- 14 files changed, 159 insertions(+), 110 deletions(-) rename src/main/java/mediathek/javafx/filterpanel/{FilmActionPanel.java => FilterActionPanel.java} (91%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1edcb4899e..1394f94b04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# **14.0.1** +# **14.1.0** - JDK 21 wird nun mitgeliefert. Behebt primär Darstellungsfehler von Java Apps unter Windows. - **macOS/Windows:** ffmpeg 7.0 ist nun enthalten. - CVE in xerial-jdbc Bibliothek wurde durch eine neuere Version gefixt. @@ -38,6 +38,7 @@ - **FEATURE:** Der bevorzugte DNS-IP-Auflösungsmodus kann nun via `-dpm ` oder `--dns-preference-mode ` geändert werden. Zulässige Werte sind `system`, `ip_v6`, `ip_v4`, `ip_v6_only`, `ip_v4_only` (Standardwert). Eine Änderung kann bei IPv6-only Internetanschlüssen notwendig sein. - **FEATURE:** Die Suchhistorie kann nun im Kontextmenü editiert werden. - **FEATURE:** Dialog "Filminformation" kann nun vollständig vergrößert oder verkleinert werden. +- **FEATURE:** Die Filter werden nun über einen eigenen Button umbenannt und nicht mehr durch Eingabe in der ComboBox. # **14.0.0** diff --git a/pom.xml b/pom.xml index 00a1f79112..ce3c5accf0 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ de.mediathekview MediathekView - 14.0.1 + 14.1.0 jar ${project.groupId}:${project.artifactId} @@ -122,7 +122,7 @@ 11.3 5.11.0 5.0.0-alpha.14 - 4.7.5 + 4.7.6 3.45.3.0 1.9 diff --git a/src/main/java/mediathek/config/Konstanten.java b/src/main/java/mediathek/config/Konstanten.java index 7acbf27a75..0ab7d45f1b 100644 --- a/src/main/java/mediathek/config/Konstanten.java +++ b/src/main/java/mediathek/config/Konstanten.java @@ -27,7 +27,7 @@ public class Konstanten { public static final long MINIMUM_MEMORY_THRESHOLD = 768 * FileUtils.ONE_MB; - public static final Version MVVERSION = new Version(14,0,1); + public static final Version MVVERSION = new Version(14,1,0); public static final ApplicationType APPLICATION_TYPE = ApplicationType.PRODUCTION; public static final String MACOS_OFFICIAL_APP = "OSX_OFFICIAL_APP"; diff --git a/src/main/java/mediathek/daten/blacklist/ListeBlacklist.java b/src/main/java/mediathek/daten/blacklist/ListeBlacklist.java index 42dc21f97b..5395a80573 100644 --- a/src/main/java/mediathek/daten/blacklist/ListeBlacklist.java +++ b/src/main/java/mediathek/daten/blacklist/ListeBlacklist.java @@ -192,7 +192,7 @@ public synchronized void filterListAndNotifyListeners() { private void calculateZeitraumBoundaries() { try { - var strZeitraum = MediathekGui.ui().tabFilme.filmActionPanel.zeitraumProperty().get(); + var strZeitraum = MediathekGui.ui().tabFilme.getFilterActionPanel().zeitraumProperty().get(); if (strZeitraum.equalsIgnoreCase(ZeitraumSpinner.UNLIMITED_VALUE)) days_lower_boundary = 0; else { diff --git a/src/main/java/mediathek/gui/FilterSelectionComboBoxModel.java b/src/main/java/mediathek/gui/FilterSelectionComboBoxModel.java index 78e6c1d4c3..8fe0f5b802 100644 --- a/src/main/java/mediathek/gui/FilterSelectionComboBoxModel.java +++ b/src/main/java/mediathek/gui/FilterSelectionComboBoxModel.java @@ -1,5 +1,6 @@ package mediathek.gui; +import javafx.application.Platform; import mediathek.tool.FilterConfiguration; import mediathek.tool.FilterDTO; @@ -15,7 +16,7 @@ public class FilterSelectionComboBoxModel extends DefaultComboBoxModel filterConfiguration.setCurrentFilter((FilterDTO) anObject)); } } diff --git a/src/main/java/mediathek/gui/tabs/tab_film/GuiFilme.java b/src/main/java/mediathek/gui/tabs/tab_film/GuiFilme.java index 424b6b6eae..c703a6a8f5 100644 --- a/src/main/java/mediathek/gui/tabs/tab_film/GuiFilme.java +++ b/src/main/java/mediathek/gui/tabs/tab_film/GuiFilme.java @@ -39,7 +39,7 @@ import mediathek.gui.tabs.tab_film.helpers.GuiModelHelper; import mediathek.gui.tabs.tab_film.helpers.LuceneGuiFilmeModelHelper; import mediathek.javafx.bookmark.BookmarkWindowController; -import mediathek.javafx.filterpanel.FilmActionPanel; +import mediathek.javafx.filterpanel.FilterActionPanel; import mediathek.javafx.filterpanel.SearchControlFieldMode; import mediathek.mainwindow.MediathekGui; import mediathek.tool.*; @@ -111,10 +111,15 @@ public class GuiFilme extends AGuiTabPanel { private final JToolBar toolBar = new JToolBar(); private final JCheckBoxMenuItem cbShowButtons = new JCheckBoxMenuItem("Buttons anzeigen"); private final PauseTransition zeitraumTransition = new PauseTransition(Duration.millis(250)); + + public FilterActionPanel getFilterActionPanel() { + return filterActionPanel; + } + /** * The JavaFx Film action popup panel. */ - public FilmActionPanel filmActionPanel; + private final FilterActionPanel filterActionPanel; public ToggleFilterDialogVisibilityAction toggleFilterDialogVisibilityAction = new ToggleFilterDialogVisibilityAction(); protected SearchField searchField; protected JComboBox filterSelectionComboBox = new JComboBox<>(new FilterSelectionComboBoxModel()); @@ -153,7 +158,8 @@ public GuiFilme(Daten aDaten, MediathekGui mediathekGui) { setupFilmSelectionPropertyListener(); setupDescriptionTab(tabelle, cbkShowDescription, ApplicationConfiguration.FILM_SHOW_DESCRIPTION); setupPsetButtonsTab(); - setupFilmActionPanel(); + + filterActionPanel = new FilterActionPanel(btnToggleFilterDialogVisibility); start_init(); // register message bus handler @@ -291,10 +297,6 @@ public void installMenuEntries(JMenu menu) { menu.add(cbkShowDescription); } - private void setupFilmActionPanel() { - filmActionPanel = new FilmActionPanel(btnToggleFilterDialogVisibility); - } - private void setupPsetButtonsTab() { var initialVisibility = ApplicationConfiguration.getConfiguration().getBoolean(ApplicationConfiguration.APPLICATION_BUTTONS_PANEL_VISIBLE, false); setupButtonsMenuItem(initialVisibility); @@ -368,7 +370,7 @@ private void start_init() { daten.getFilmeLaden().addAdListener(new ListenerFilmeLaden() { @Override public void fertig(ListenerFilmeLadenEvent event) { - Platform.runLater(() -> filmActionPanel.updateThemaComboBox()); + Platform.runLater(() -> filterActionPanel.updateThemaComboBox()); } }); @@ -411,7 +413,7 @@ private void setupHeaderPopupMenu() { @Handler private void handleDownloadHistoryChangedEvent(DownloadHistoryChangedEvent e) { SwingUtilities.invokeLater(() -> { - if (filmActionPanel.isShowUnseenOnly()) { + if (filterActionPanel.isShowUnseenOnly()) { Platform.runLater(reloadTableDataTransition::playFromStart); } else { tabelle.fireTableDataChanged(true); @@ -521,7 +523,7 @@ private void saveFilm(@NotNull DatenFilm datenFilm, @NotNull DatenPset pSet) { } else { // dann alle Downloads im Dialog abfragen Optional res = - filmActionPanel.isShowOnlyHighQuality() ? Optional.of(FilmResolution.Enum.HIGH_QUALITY) : Optional.empty(); + filterActionPanel.isShowOnlyHighQuality() ? Optional.of(FilmResolution.Enum.HIGH_QUALITY) : Optional.empty(); DialogAddDownload dialog = new DialogAddDownload(mediathekGui, datenFilm, pSet, res); dialog.setVisible(true); } @@ -569,7 +571,7 @@ public void playerStarten(DatenPset pSet) { } else { // mit dem flvstreamer immer nur einen Filme starten final String aufloesung; - if (filmActionPanel.isShowOnlyHighQuality()) { + if (filterActionPanel.isShowOnlyHighQuality()) { aufloesung = FilmResolution.Enum.HIGH_QUALITY.toString(); } else aufloesung = ""; @@ -657,7 +659,7 @@ private void setupDataTransitions() { zeitraumTransition.setOnFinished(evt -> { // reset sender filter first - filmActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().clearChecks(); + filterActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().clearChecks(); try { SwingUtilities.invokeAndWait(() -> daten.getListeBlacklist().filterListe()); } catch (InterruptedException | InvocationTargetException e) { @@ -677,24 +679,24 @@ private void setupActionListeners() { reloadTableDataTransition.playFromStart(); } }; - filmActionPanel.showOnlyHighQualityProperty().addListener(reloadTableListener); - filmActionPanel.showSubtitlesOnlyProperty().addListener(reloadTableListener); - filmActionPanel.showNewOnlyProperty().addListener(reloadTableListener); - filmActionPanel.showBookMarkedOnlyProperty().addListener(reloadTableListener); - filmActionPanel.showUnseenOnlyProperty().addListener(reloadTableListener); - filmActionPanel.dontShowAbosProperty().addListener(reloadTableListener); - filmActionPanel.dontShowTrailersProperty().addListener(reloadTableListener); - filmActionPanel.dontShowSignLanguageProperty().addListener(reloadTableListener); - filmActionPanel.dontShowAudioVersionsProperty().addListener(reloadTableListener); - filmActionPanel.showLivestreamsOnlyProperty().addListener(reloadTableListener); - var filmLengthSlider = filmActionPanel.getFilmLengthSlider(); + filterActionPanel.showOnlyHighQualityProperty().addListener(reloadTableListener); + filterActionPanel.showSubtitlesOnlyProperty().addListener(reloadTableListener); + filterActionPanel.showNewOnlyProperty().addListener(reloadTableListener); + filterActionPanel.showBookMarkedOnlyProperty().addListener(reloadTableListener); + filterActionPanel.showUnseenOnlyProperty().addListener(reloadTableListener); + filterActionPanel.dontShowAbosProperty().addListener(reloadTableListener); + filterActionPanel.dontShowTrailersProperty().addListener(reloadTableListener); + filterActionPanel.dontShowSignLanguageProperty().addListener(reloadTableListener); + filterActionPanel.dontShowAudioVersionsProperty().addListener(reloadTableListener); + filterActionPanel.showLivestreamsOnlyProperty().addListener(reloadTableListener); + var filmLengthSlider = filterActionPanel.getFilmLengthSlider(); filmLengthSlider.lowValueChangingProperty().addListener(reloadTableListener2); filmLengthSlider.highValueChangingProperty().addListener(reloadTableListener2); - filmActionPanel.zeitraumProperty().addListener((observable, oldValue, newValue) -> zeitraumTransition.playFromStart()); + filterActionPanel.zeitraumProperty().addListener((observable, oldValue, newValue) -> zeitraumTransition.playFromStart()); - filmActionPanel.getViewSettingsPane().themaComboBox.setOnAction(evt -> { - if (!filmActionPanel.getViewSettingsPane().themaComboBox.getItems().isEmpty()) { + filterActionPanel.getViewSettingsPane().themaComboBox.setOnAction(evt -> { + if (!filterActionPanel.getViewSettingsPane().themaComboBox.getItems().isEmpty()) { reloadTableDataTransition.playFromStart(); } }); @@ -738,9 +740,9 @@ private void loadTable(boolean from_search_field) { var searchFieldData = new SearchFieldData(searchField.getText(), searchField.getSearchMode()); if (Daten.getInstance().getListeFilmeNachBlackList() instanceof IndexedFilmList) { - helper = new LuceneGuiFilmeModelHelper(filmActionPanel, historyController, searchFieldData); + helper = new LuceneGuiFilmeModelHelper(filterActionPanel, historyController, searchFieldData); } else { - helper = new GuiFilmeModelHelper(filmActionPanel, historyController, searchFieldData); + helper = new GuiFilmeModelHelper(filterActionPanel, historyController, searchFieldData); } return helper.getFilteredTableModel(); }); @@ -793,7 +795,7 @@ public ToggleFilterDialogVisibilityAction() { @Override public void actionPerformed(ActionEvent e) { - var dlg = filmActionPanel.getFilterDialog(); + var dlg = filterActionPanel.getFilterDialog(); if (dlg != null) { var visible = dlg.isVisible(); visible = !visible; diff --git a/src/main/java/mediathek/gui/tabs/tab_film/helpers/GuiFilmeModelHelper.java b/src/main/java/mediathek/gui/tabs/tab_film/helpers/GuiFilmeModelHelper.java index 1000c3447d..bc12df66c2 100644 --- a/src/main/java/mediathek/gui/tabs/tab_film/helpers/GuiFilmeModelHelper.java +++ b/src/main/java/mediathek/gui/tabs/tab_film/helpers/GuiFilmeModelHelper.java @@ -9,8 +9,8 @@ import mediathek.gui.tabs.tab_film.searchfilters.FinalStageFilterNoPatternWithDescription; import mediathek.gui.tabs.tab_film.searchfilters.FinalStagePatternFilter; import mediathek.gui.tabs.tab_film.searchfilters.FinalStagePatternFilterWithDescription; -import mediathek.javafx.filterpanel.FilmActionPanel; import mediathek.javafx.filterpanel.FilmLengthSlider; +import mediathek.javafx.filterpanel.FilterActionPanel; import mediathek.tool.Filter; import mediathek.tool.models.TModelFilm; import org.jetbrains.annotations.NotNull; @@ -25,16 +25,16 @@ public class GuiFilmeModelHelper extends GuiModelHelper { private TModelFilm filmModel; private String[] arrIrgendwo; - public GuiFilmeModelHelper(@NotNull FilmActionPanel filmActionPanel, + public GuiFilmeModelHelper(@NotNull FilterActionPanel filterActionPanel, @NotNull SeenHistoryController historyController, @NotNull SearchFieldData searchFieldData) { - this.filmActionPanel = filmActionPanel; + this.filterActionPanel = filterActionPanel; this.historyController = historyController; this.searchFieldData = searchFieldData; } private String getFilterThema() { - String filterThema = filmActionPanel.getViewSettingsPane().themaComboBox.getSelectionModel().getSelectedItem(); + String filterThema = filterActionPanel.getViewSettingsPane().themaComboBox.getSelectionModel().getSelectedItem(); if (filterThema == null) { filterThema = ""; } @@ -44,23 +44,23 @@ private String getFilterThema() { @Override protected boolean noFiltersAreSet() { - var filmLengthSlider = filmActionPanel.getFilmLengthSlider(); + var filmLengthSlider = filterActionPanel.getFilmLengthSlider(); - return filmActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().isEmpty() + return filterActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().isEmpty() && getFilterThema().isEmpty() && searchFieldData.isEmpty() && ((int) filmLengthSlider.getLowValue() == 0) && ((int) filmLengthSlider.getHighValue() == FilmLengthSlider.UNLIMITED_VALUE) - && !filmActionPanel.isDontShowAbos() - && !filmActionPanel.isShowUnseenOnly() - && !filmActionPanel.isShowOnlyHighQuality() - && !filmActionPanel.isShowSubtitlesOnly() - && !filmActionPanel.isShowLivestreamsOnly() - && !filmActionPanel.isShowNewOnly() - && !filmActionPanel.isShowBookMarkedOnly() - && !filmActionPanel.isDontShowTrailers() - && !filmActionPanel.isDontShowSignLanguage() - && !filmActionPanel.isDontShowAudioVersions(); + && !filterActionPanel.isDontShowAbos() + && !filterActionPanel.isShowUnseenOnly() + && !filterActionPanel.isShowOnlyHighQuality() + && !filterActionPanel.isShowSubtitlesOnly() + && !filterActionPanel.isShowLivestreamsOnly() + && !filterActionPanel.isShowNewOnly() + && !filterActionPanel.isShowBookMarkedOnly() + && !filterActionPanel.isDontShowTrailers() + && !filterActionPanel.isDontShowSignLanguage() + && !filterActionPanel.isDontShowAudioVersions(); } @@ -70,9 +70,9 @@ private void performTableFiltering() { calculateFilmLengthSliderValues(); final String filterThema = getFilterThema(); - final ObservableList selectedSenders = filmActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().getCheckedItems(); + final ObservableList selectedSenders = filterActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().getCheckedItems(); - if (filmActionPanel.isShowUnseenOnly()) + if (filterActionPanel.isShowUnseenOnly()) historyController.prepareMemoryCache(); var stream = Daten.getInstance().getListeFilmeNachBlackList().parallelStream(); @@ -82,23 +82,23 @@ private void performTableFiltering() { senderSet.addAll(selectedSenders); stream = stream.filter(f -> senderSet.contains(f.getSender())); } - if (filmActionPanel.isShowNewOnly()) + if (filterActionPanel.isShowNewOnly()) stream = stream.filter(DatenFilm::isNew); - if (filmActionPanel.isShowBookMarkedOnly()) + if (filterActionPanel.isShowBookMarkedOnly()) stream = stream.filter(DatenFilm::isBookmarked); - if (filmActionPanel.isShowLivestreamsOnly()) + if (filterActionPanel.isShowLivestreamsOnly()) stream = stream.filter(DatenFilm::isLivestream); - if (filmActionPanel.isShowOnlyHighQuality()) + if (filterActionPanel.isShowOnlyHighQuality()) stream = stream.filter(DatenFilm::isHighQuality); - if (filmActionPanel.isDontShowTrailers()) + if (filterActionPanel.isDontShowTrailers()) stream = stream.filter(film -> !film.isTrailerTeaser()); - if (filmActionPanel.isDontShowSignLanguage()) + if (filterActionPanel.isDontShowSignLanguage()) stream = stream.filter(film -> !film.isSignLanguage()); - if (filmActionPanel.isDontShowAudioVersions()) + if (filterActionPanel.isDontShowAudioVersions()) stream = stream.filter(film -> !film.isAudioVersion()); - if (filmActionPanel.isDontShowAbos()) + if (filterActionPanel.isDontShowAbos()) stream = stream.filter(film -> film.getAbo() == null); - if (filmActionPanel.isShowSubtitlesOnly()) { + if (filterActionPanel.isShowSubtitlesOnly()) { stream = stream.filter(this::subtitleCheck); } if (!filterThema.isEmpty()) { @@ -107,7 +107,7 @@ private void performTableFiltering() { if (maxLength < FilmLengthSlider.UNLIMITED_VALUE) { stream = stream.filter(this::maxLengthCheck); } - if (filmActionPanel.isShowUnseenOnly()) { + if (filterActionPanel.isShowUnseenOnly()) { stream = stream.filter(this::seenCheck); } //perform min length filtering after all others may have reduced the available entries... @@ -128,7 +128,7 @@ private void performTableFiltering() { list.clear(); - if (filmActionPanel.isShowUnseenOnly()) + if (filterActionPanel.isShowUnseenOnly()) historyController.emptyMemoryCache(); } diff --git a/src/main/java/mediathek/gui/tabs/tab_film/helpers/GuiModelHelper.java b/src/main/java/mediathek/gui/tabs/tab_film/helpers/GuiModelHelper.java index 037ead4fef..a6eb4d0b08 100644 --- a/src/main/java/mediathek/gui/tabs/tab_film/helpers/GuiModelHelper.java +++ b/src/main/java/mediathek/gui/tabs/tab_film/helpers/GuiModelHelper.java @@ -3,7 +3,7 @@ import mediathek.controller.history.SeenHistoryController; import mediathek.daten.DatenFilm; import mediathek.gui.tabs.tab_film.SearchFieldData; -import mediathek.javafx.filterpanel.FilmActionPanel; +import mediathek.javafx.filterpanel.FilterActionPanel; import javax.swing.table.TableModel; import java.util.concurrent.TimeUnit; @@ -11,7 +11,7 @@ public abstract class GuiModelHelper { protected SliderRange sliderRange; protected long maxLength; - protected FilmActionPanel filmActionPanel; + protected FilterActionPanel filterActionPanel; protected SeenHistoryController historyController; protected SearchFieldData searchFieldData; @@ -41,8 +41,8 @@ protected boolean seenCheck(DatenFilm film) { } protected void calculateFilmLengthSliderValues() { - final long minLength = (long) filmActionPanel.getFilmLengthSlider().getLowValue(); - maxLength = (long) filmActionPanel.getFilmLengthSlider().getHighValue(); + final long minLength = (long) filterActionPanel.getFilmLengthSlider().getLowValue(); + maxLength = (long) filterActionPanel.getFilmLengthSlider().getHighValue(); var minLengthInSeconds = TimeUnit.SECONDS.convert(minLength, TimeUnit.MINUTES); var maxLengthInSeconds = TimeUnit.SECONDS.convert(maxLength, TimeUnit.MINUTES); sliderRange = new SliderRange(minLengthInSeconds, maxLengthInSeconds); diff --git a/src/main/java/mediathek/gui/tabs/tab_film/helpers/LuceneGuiFilmeModelHelper.java b/src/main/java/mediathek/gui/tabs/tab_film/helpers/LuceneGuiFilmeModelHelper.java index a82e24612f..0e9b4137ec 100644 --- a/src/main/java/mediathek/gui/tabs/tab_film/helpers/LuceneGuiFilmeModelHelper.java +++ b/src/main/java/mediathek/gui/tabs/tab_film/helpers/LuceneGuiFilmeModelHelper.java @@ -8,8 +8,8 @@ import mediathek.daten.IndexedFilmList; import mediathek.gui.tabs.tab_film.SearchFieldData; import mediathek.gui.tasks.LuceneIndexKeys; -import mediathek.javafx.filterpanel.FilmActionPanel; import mediathek.javafx.filterpanel.FilmLengthSlider; +import mediathek.javafx.filterpanel.FilterActionPanel; import mediathek.javafx.filterpanel.ZeitraumSpinner; import mediathek.mainwindow.MediathekGui; import mediathek.tool.SwingErrorDialog; @@ -46,16 +46,16 @@ public class LuceneGuiFilmeModelHelper extends GuiModelHelper{ } - public LuceneGuiFilmeModelHelper(@NotNull FilmActionPanel filmActionPanel, + public LuceneGuiFilmeModelHelper(@NotNull FilterActionPanel filterActionPanel, @NotNull SeenHistoryController historyController, @NotNull SearchFieldData searchFieldData) { - this.filmActionPanel = filmActionPanel; + this.filterActionPanel = filterActionPanel; this.historyController = historyController; this.searchFieldData = searchFieldData; } private String getFilterThema() { - String filterThema = filmActionPanel.getViewSettingsPane().themaComboBox.getSelectionModel().getSelectedItem(); + String filterThema = filterActionPanel.getViewSettingsPane().themaComboBox.getSelectionModel().getSelectedItem(); if (filterThema == null) { filterThema = ""; } @@ -65,24 +65,24 @@ private String getFilterThema() { @Override protected boolean noFiltersAreSet() { - var filmLengthSlider = filmActionPanel.getFilmLengthSlider(); + var filmLengthSlider = filterActionPanel.getFilmLengthSlider(); - return filmActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().isEmpty() + return filterActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().isEmpty() && getFilterThema().isEmpty() && searchFieldData.isEmpty() && ((int) filmLengthSlider.getLowValue() == 0) && ((int) filmLengthSlider.getHighValue() == FilmLengthSlider.UNLIMITED_VALUE) - && !filmActionPanel.isDontShowAbos() - && !filmActionPanel.isShowUnseenOnly() - && !filmActionPanel.isShowOnlyHighQuality() - && !filmActionPanel.isShowSubtitlesOnly() - && !filmActionPanel.isShowLivestreamsOnly() - && !filmActionPanel.isShowNewOnly() - && !filmActionPanel.isShowBookMarkedOnly() - && !filmActionPanel.isDontShowTrailers() - && !filmActionPanel.isDontShowSignLanguage() - && !filmActionPanel.isDontShowAudioVersions() - && filmActionPanel.zeitraumProperty().get().equalsIgnoreCase(ZeitraumSpinner.UNLIMITED_VALUE); + && !filterActionPanel.isDontShowAbos() + && !filterActionPanel.isShowUnseenOnly() + && !filterActionPanel.isShowOnlyHighQuality() + && !filterActionPanel.isShowSubtitlesOnly() + && !filterActionPanel.isShowLivestreamsOnly() + && !filterActionPanel.isShowNewOnly() + && !filterActionPanel.isShowBookMarkedOnly() + && !filterActionPanel.isDontShowTrailers() + && !filterActionPanel.isDontShowSignLanguage() + && !filterActionPanel.isDontShowAudioVersions() + && filterActionPanel.zeitraumProperty().get().equalsIgnoreCase(ZeitraumSpinner.UNLIMITED_VALUE); } @@ -91,7 +91,7 @@ private TModelFilm performTableFiltering() { try { calculateFilmLengthSliderValues(); - if (filmActionPanel.isShowUnseenOnly()) + if (filterActionPanel.isShowUnseenOnly()) historyController.prepareMemoryCache(); String searchText = searchFieldData.searchFieldText(); @@ -117,35 +117,35 @@ private TModelFilm performTableFiltering() { qb.add(initialQuery, BooleanClause.Occur.MUST); //Zeitraum filter on demand... - if (!filmActionPanel.zeitraumProperty().get().equals(ZeitraumSpinner.UNLIMITED_VALUE)) { + if (!filterActionPanel.zeitraumProperty().get().equals(ZeitraumSpinner.UNLIMITED_VALUE)) { try { qb.add(createZeitraumQuery(listeFilme), BooleanClause.Occur.FILTER); } catch (Exception ex) { logger.error("Unable to add zeitraum filter", ex); } } - if (filmActionPanel.isShowLivestreamsOnly()) { + if (filterActionPanel.isShowLivestreamsOnly()) { addLivestreamQuery(qb, analyzer); } - if (filmActionPanel.isShowOnlyHighQuality()) { + if (filterActionPanel.isShowOnlyHighQuality()) { addHighQualityOnlyQuery(qb, analyzer); } - if (filmActionPanel.isDontShowTrailers()) { + if (filterActionPanel.isDontShowTrailers()) { addNoTrailerTeaserQuery(qb, analyzer); } - if (filmActionPanel.isDontShowAudioVersions()) { + if (filterActionPanel.isDontShowAudioVersions()) { addNoAudioVersionQuery(qb, analyzer); } - if (filmActionPanel.isDontShowSignLanguage()) { + if (filterActionPanel.isDontShowSignLanguage()) { addNoSignLanguageQuery(qb, analyzer); } - if (filmActionPanel.isShowSubtitlesOnly()) { + if (filterActionPanel.isShowSubtitlesOnly()) { addSubtitleOnlyQuery(qb, analyzer); } - if (filmActionPanel.isShowNewOnly()) { + if (filterActionPanel.isShowNewOnly()) { addNewOnlyQuery(qb, analyzer); } - final ObservableList selectedSenders = filmActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().getCheckedItems(); + final ObservableList selectedSenders = filterActionPanel.getViewSettingsPane().senderCheckList.getCheckModel().getCheckedItems(); if (!selectedSenders.isEmpty()) { addSenderFilterQuery(qb, analyzer, selectedSenders); } @@ -172,9 +172,9 @@ private TModelFilm performTableFiltering() { .filter(film -> filmNrSet.contains(film.getFilmNr())); } - if (filmActionPanel.isShowBookMarkedOnly()) + if (filterActionPanel.isShowBookMarkedOnly()) stream = stream.filter(DatenFilm::isBookmarked); - if (filmActionPanel.isDontShowAbos()) + if (filterActionPanel.isDontShowAbos()) stream = stream.filter(film -> film.getAbo() == null); final String filterThema = getFilterThema(); @@ -184,7 +184,7 @@ private TModelFilm performTableFiltering() { if (maxLength < FilmLengthSlider.UNLIMITED_VALUE) { stream = stream.filter(this::maxLengthCheck); } - if (filmActionPanel.isShowUnseenOnly()) { + if (filterActionPanel.isShowUnseenOnly()) { stream = stream.filter(this::seenCheck); } //perform min length filtering after all others may have reduced the available entries... @@ -200,7 +200,7 @@ private TModelFilm performTableFiltering() { resultList.clear(); - if (filmActionPanel.isShowUnseenOnly()) + if (filterActionPanel.isShowUnseenOnly()) historyController.emptyMemoryCache(); return filmModel; @@ -262,7 +262,7 @@ private void addHighQualityOnlyQuery(@NotNull BooleanQuery.Builder qb, @NotNull } private Query createZeitraumQuery(@NotNull IndexedFilmList listeFilme) throws ParseException { - var numDays = Integer.parseInt(filmActionPanel.zeitraumProperty().get()); + var numDays = Integer.parseInt(filterActionPanel.zeitraumProperty().get()); var to_Date = LocalDateTime.now(); var from_Date = to_Date.minusDays(numDays); var utcZone = ZoneId.of("UTC"); diff --git a/src/main/java/mediathek/javafx/filterpanel/CommonViewSettingsPane.java b/src/main/java/mediathek/javafx/filterpanel/CommonViewSettingsPane.java index 262cda0189..af4b3e6129 100644 --- a/src/main/java/mediathek/javafx/filterpanel/CommonViewSettingsPane.java +++ b/src/main/java/mediathek/javafx/filterpanel/CommonViewSettingsPane.java @@ -63,6 +63,9 @@ public class CommonViewSettingsPane extends VBox implements Initializable { private ComboBox filterSelect; @FXML private Button btnAddNewFilter; + @FXML + public Button btnRenameFilter; + private boolean deleteCurrentFilterButtonDisabled; public CommonViewSettingsPane() { @@ -107,6 +110,7 @@ private void handleTableModelChangeEvent(TableModelChangeEvent evt) { filterSelect.setDisable(disable); btnDeleteCurrentFilter.setDisable(disable || deleteCurrentFilterButtonDisabled); btnAddNewFilter.setDisable(disable); + btnRenameFilter.setDisable(disable); }); } @@ -136,7 +140,7 @@ public void setAvailableFilters(ObservableList filters) { public void selectFilter(FilterDTO filter) { SingleSelectionModel selectionModel = filterSelect.getSelectionModel(); if (!filter.equals(selectionModel.getSelectedItem())) { - selectionModel.select(filter); + Platform.runLater(() -> selectionModel.select(filter)); } } diff --git a/src/main/java/mediathek/javafx/filterpanel/FilmActionPanel.java b/src/main/java/mediathek/javafx/filterpanel/FilterActionPanel.java similarity index 91% rename from src/main/java/mediathek/javafx/filterpanel/FilmActionPanel.java rename to src/main/java/mediathek/javafx/filterpanel/FilterActionPanel.java index dec37c8237..c803ac098d 100644 --- a/src/main/java/mediathek/javafx/filterpanel/FilmActionPanel.java +++ b/src/main/java/mediathek/javafx/filterpanel/FilterActionPanel.java @@ -5,6 +5,7 @@ import ca.odell.glazedlists.TransactionList; import ca.odell.glazedlists.javafx.EventObservableList; import impl.org.controlsfx.autocompletion.SuggestionProvider; +import javafx.application.Platform; import javafx.beans.property.BooleanProperty; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.collections.FXCollections; @@ -32,7 +33,7 @@ * This class sets up the GuiFilme filter dialog. * property for filtering in GuiFilme. */ -public class FilmActionPanel { +public class FilterActionPanel { private static final Logger logger = LogManager.getLogger(); private final FilterConfiguration filterConfig; private final ObservableList availableFilters; @@ -63,11 +64,12 @@ public class FilmActionPanel { private SuggestionProvider themaSuggestionProvider; private CommonViewSettingsPane viewSettingsPane; - public FilmActionPanel(@NotNull JToggleButton filterToggleBtn) { + public FilterActionPanel(@NotNull JToggleButton filterToggleBtn) { this.filterConfig = new FilterConfiguration(); setupViewSettingsPane(); setupDeleteFilterButton(); + setupRenameFilterButton(); SwingUtilities.invokeLater( () -> filterDialog = new OldSwingJavaFxFilterDialog(MediathekGui.ui(), viewSettingsPane, filterToggleBtn)); @@ -204,10 +206,10 @@ private void setupDeleteCurrentFilterButton() { private void setupFilterSelection() { viewSettingsPane.setAvailableFilters(availableFilters); FilterConfiguration.addAvailableFiltersObserver( - () -> { + () -> Platform.runLater(() -> { availableFilters.clear(); availableFilters.addAll(filterConfig.getAvailableFilters()); - }); + })); FilterConfiguration.addCurrentFiltersObserver( filter -> { viewSettingsPane.selectFilter(filter); @@ -256,6 +258,37 @@ private void setupDeleteFilterButton() { }); } + private void setupRenameFilterButton() { + viewSettingsPane.btnRenameFilter.setOnAction(e -> { + final var fltName = filterConfig.getCurrentFilter().name(); + SwingUtilities.invokeLater(() -> { + String s = (String)JOptionPane.showInputDialog( + MediathekGui.ui(), + "Neuer Name des Filters:", + "Filter umbenennen", + JOptionPane.PLAIN_MESSAGE, + null, + null, + fltName); + if (s != null) { + if (!s.isEmpty()) { + final var fName = s.trim(); + if (!fName.equals(fltName)){ + renameCurrentFilter(fName); + logger.trace("Renamed filter \"{}\" to \"{}\"", fltName, fName); + } + else + logger.warn("New and old filter name are identical...doing nothing"); + } + else + logger.warn("Rename filter text was empty...doing nothing"); + } + else + logger.trace("User cancelled rename"); + }); + }); + } + private void setupViewSettingsPane() { viewSettingsPane = new CommonViewSettingsPane(); diff --git a/src/main/java/mediathek/mainwindow/MediathekGui.java b/src/main/java/mediathek/mainwindow/MediathekGui.java index 7d09484107..aa57fc3a53 100644 --- a/src/main/java/mediathek/mainwindow/MediathekGui.java +++ b/src/main/java/mediathek/mainwindow/MediathekGui.java @@ -1132,7 +1132,7 @@ public boolean quitApplication(boolean shouldDownloadAndQuit) { logger.trace("Save Tab Filme data."); tabFilme.tabelleSpeichern(); tabFilme.saveSettings(); // needs thread pools active! - tabFilme.filmActionPanel.getFilterDialog().dispose(); + tabFilme.getFilterActionPanel().getFilterDialog().dispose(); logger.trace("Save Tab Download data."); tabDownloads.tabelleSpeichern(); diff --git a/src/main/kotlin/mediathek/gui/actions/ResetFilterDialogPosition.kt b/src/main/kotlin/mediathek/gui/actions/ResetFilterDialogPosition.kt index 6f1359c0eb..8fd580baf4 100644 --- a/src/main/kotlin/mediathek/gui/actions/ResetFilterDialogPosition.kt +++ b/src/main/kotlin/mediathek/gui/actions/ResetFilterDialogPosition.kt @@ -10,6 +10,6 @@ class ResetFilterDialogPosition(private val mediathekGui: MediathekGui) : Abstra } override fun actionPerformed(e: ActionEvent) { - mediathekGui.tabFilme?.filmActionPanel?.filterDialog?.setLocation(100, 100) + mediathekGui.tabFilme?.filterActionPanel?.filterDialog?.setLocation(100, 100) } } \ No newline at end of file diff --git a/src/main/resources/mediathek/res/programm/fxml/filter_settings_pane.fxml b/src/main/resources/mediathek/res/programm/fxml/filter_settings_pane.fxml index ccbdca189e..13a189f711 100644 --- a/src/main/resources/mediathek/res/programm/fxml/filter_settings_pane.fxml +++ b/src/main/resources/mediathek/res/programm/fxml/filter_settings_pane.fxml @@ -14,7 +14,15 @@ - + + @@ -37,7 +45,7 @@ - +