From 73159748cd79622b25f64ea538ccff527a2a0109 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Wed, 25 Jul 2018 13:40:30 +0200 Subject: [PATCH] You can now filter by resolution If the display of stream resolution is enabled in the settings, the filtering now takes the resolution into account. So you can filter for "1080" and only get streams with a resolution of 1080p. --- src/main/java/ctbrec/Model.java | 9 +++ src/main/java/ctbrec/ui/ThumbCell.java | 22 +++++-- src/main/java/ctbrec/ui/ThumbOverviewTab.java | 57 ++++++++++--------- 3 files changed, 56 insertions(+), 32 deletions(-) diff --git a/src/main/java/ctbrec/Model.java b/src/main/java/ctbrec/Model.java index dd6094a2..7850459d 100644 --- a/src/main/java/ctbrec/Model.java +++ b/src/main/java/ctbrec/Model.java @@ -11,6 +11,7 @@ public class Model { private List tags = new ArrayList<>(); private boolean online = false; private int streamUrlIndex = -1; + private int streamResolution = -1; public String getUrl() { return url; @@ -68,6 +69,14 @@ public class Model { this.streamUrlIndex = streamUrlIndex; } + public int getStreamResolution() { + return streamResolution; + } + + public void setStreamResolution(int streamResolution) { + this.streamResolution = streamResolution; + } + @Override public int hashCode() { final int prime = 31; diff --git a/src/main/java/ctbrec/ui/ThumbCell.java b/src/main/java/ctbrec/ui/ThumbCell.java index cc16b33f..895dd680 100644 --- a/src/main/java/ctbrec/ui/ThumbCell.java +++ b/src/main/java/ctbrec/ui/ThumbCell.java @@ -45,6 +45,8 @@ import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.input.Clipboard; +import javafx.scene.input.ClipboardContent; import javafx.scene.input.ContextMenuEvent; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; @@ -222,10 +224,12 @@ public class ThumbCell extends StackPane { LOG.trace("Resolution queue size: {}", ThumbOverviewTab.queue.size()); final int w = resolution[1]; Platform.runLater(() -> { - resolutionTag.setText(Integer.toString(w)); + String _res = Integer.toString(w); + resolutionTag.setText(_res); resolutionTag.setVisible(true); resolutionBackground.setVisible(true); resolutionBackground.setWidth(resolutionTag.getBoundsInLocal().getWidth() + 4); + model.setStreamResolution(w); }); } } catch (IOException | ParseException | PlaylistException | InterruptedException e) { @@ -236,8 +240,10 @@ public class ThumbCell extends StackPane { }); } else { ThumbOverviewTab.resolutionProcessing.remove(model); + String _res = Integer.toString(res[1]); + model.setStreamResolution(res[1]); Platform.runLater(() -> { - resolutionTag.setText(Integer.toString(res[1])); + resolutionTag.setText(_res); resolutionTag.setVisible(true); resolutionBackground.setVisible(true); resolutionBackground.setWidth(resolutionTag.getBoundsInLocal().getWidth() + 4); @@ -246,7 +252,7 @@ public class ThumbCell extends StackPane { } private void setImage(String url) { - if(!Objects.equals(System.getenv("CTBREC_THUMBS"), "0")) { + if(!Objects.equals(System.getenv("CTBREC_DEV"), "1")) { Image img = new Image(url, true); // wait for the image to load, otherwise the ImageView replaces the current image with an "empty" image, @@ -277,12 +283,20 @@ public class ThumbCell extends StackPane { MenuItem unfollow = new MenuItem("Unfollow"); unfollow.setOnAction((e) -> follow(false)); + MenuItem copyUrl = new MenuItem("Copy URL"); + copyUrl.setOnAction((e) -> { + final Clipboard clipboard = Clipboard.getSystemClipboard(); + final ClipboardContent content = new ClipboardContent(); + content.putString(model.getUrl()); + clipboard.setContent(content); + }); + ContextMenu contextMenu = new ContextMenu(); contextMenu.setAutoHide(true); contextMenu.setHideOnEscape(true); contextMenu.setAutoFix(true); MenuItem followOrUnFollow = parent instanceof FollowedTab ? unfollow : follow; - contextMenu.getItems().addAll(openInPlayer, startStop , followOrUnFollow); + contextMenu.getItems().addAll(openInPlayer, startStop , followOrUnFollow, copyUrl); return contextMenu; } diff --git a/src/main/java/ctbrec/ui/ThumbOverviewTab.java b/src/main/java/ctbrec/ui/ThumbOverviewTab.java index 9d8f33eb..aeefc90b 100644 --- a/src/main/java/ctbrec/ui/ThumbOverviewTab.java +++ b/src/main/java/ctbrec/ui/ThumbOverviewTab.java @@ -85,7 +85,12 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { search.setPromptText("Filter"); search.textProperty().addListener( (observableValue, oldValue, newValue) -> { filter = search.getText(); - filter(); + gridLock.lock(); + try { + filter(); + } finally { + gridLock.unlock(); + } }); BorderPane.setMargin(search, new Insets(5)); @@ -238,38 +243,32 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { } }); - - gridLock.lock(); - try { - if (filter == null || filter.isEmpty()) { - for (ThumbCell thumbCell : filteredThumbCells) { - insert(thumbCell); - } - return; + if (filter == null || filter.isEmpty()) { + for (ThumbCell thumbCell : filteredThumbCells) { + insert(thumbCell); } + return; + } - // remove the ones from grid, which don't match - for (Iterator iterator = grid.getChildren().iterator(); iterator.hasNext();) { - Node node = iterator.next(); - ThumbCell cell = (ThumbCell) node; - Model m = cell.getModel(); - if(!matches(m, filter)) { - iterator.remove(); - filteredThumbCells.add(cell); - } + // remove the ones from grid, which don't match + for (Iterator iterator = grid.getChildren().iterator(); iterator.hasNext();) { + Node node = iterator.next(); + ThumbCell cell = (ThumbCell) node; + Model m = cell.getModel(); + if(!matches(m, filter)) { + iterator.remove(); + filteredThumbCells.add(cell); } + } - // add the ones, which might have been filtered before, but now match - for (Iterator iterator = filteredThumbCells.iterator(); iterator.hasNext();) { - ThumbCell thumbCell = iterator.next(); - Model m = thumbCell.getModel(); - if(matches(m, filter)) { - iterator.remove(); - insert(thumbCell); - } + // add the ones, which might have been filtered before, but now match + for (Iterator iterator = filteredThumbCells.iterator(); iterator.hasNext();) { + ThumbCell thumbCell = iterator.next(); + Model m = thumbCell.getModel(); + if(matches(m, filter)) { + iterator.remove(); + insert(thumbCell); } - } finally { - gridLock.unlock(); } } @@ -305,7 +304,9 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { for (String tag : m.getTags()) { searchTextBuilder.append(tag).append(' '); } + searchTextBuilder.append(m.getStreamResolution()); String searchText = searchTextBuilder.toString().trim(); + LOG.debug("{} -> {}", m.getName(), searchText); boolean tokensMissing = false; for (String token : tokens) { if(!searchText.contains(token)) {