libbluray | branch: master | hpi1 <h...@anonymous.org> | Tue Apr 5 13:06:48 2016 +0300| [eb09c83e29832e83e6b5a4268f90d8da8d3b8fd1] | committer: hpi1
SIElementFilter: rewrite > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=eb09c83e29832e83e6b5a4268f90d8da8d3b8fd1 --- .../tv/service/navigation/SIElementFilter.java | 59 +++++++++++++++++++- .../bdj/java/org/bluray/ti/PlayItemImpl.java | 8 +++ 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/libbluray/bdj/java/javax/tv/service/navigation/SIElementFilter.java b/src/libbluray/bdj/java/javax/tv/service/navigation/SIElementFilter.java index f0dc97c..2b9249a 100644 --- a/src/libbluray/bdj/java/javax/tv/service/navigation/SIElementFilter.java +++ b/src/libbluray/bdj/java/javax/tv/service/navigation/SIElementFilter.java @@ -1,7 +1,7 @@ /* * This file is part of libbluray * Copyright (C) 2010 William Hahne - * Copyright (C) 2015 Petri Hintukainen + * Copyright (C) 2015-2016 Petri Hintukainen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -28,11 +28,19 @@ import javax.tv.service.SIRequestorImpl; import org.bluray.net.BDLocator; +import org.bluray.ti.PlayItem; +import org.bluray.ti.PlayItemImpl; +import org.bluray.ti.PlayList; +import org.bluray.ti.PlayListImpl; +import org.bluray.ti.TitleImpl; + public final class SIElementFilter extends ServiceFilter { public SIElementFilter(SIElement element) throws FilterNotSupportedException { - if (element == null) + if (element == null) { + System.err.println("null element"); throw new NullPointerException(); + } try { new BDLocator(element.getLocator().toExternalForm()); @@ -49,6 +57,52 @@ public final class SIElementFilter extends ServiceFilter } public boolean accept(Service service) { + + if (service == null) { + System.err.println("null service"); + throw new NullPointerException(); + } + + if (!(service instanceof TitleImpl)) + return false; + TitleImpl title = (TitleImpl)service; + + if (element instanceof PlayListImpl) { + int id = ((PlayListImpl)element).getId(); + PlayList[] pls = title.getPlayLists(); + for (int i = 0; i < pls.length; i++) { + if (id == pls[i].getId()) { + return true; + } + } + return false; + + } else if (element instanceof PlayItemImpl) { + + int piId = ((PlayItemImpl)element).getPlayItemId(); + int plId = ((PlayItemImpl)element).getPlayListId(); + + PlayList[] pls = title.getPlayLists(); + for (int i = 0; i < pls.length; i++) { + if (plId == pls[i].getId()) { + + PlayItem pis[] = pls[i].getPlayItems(); + for (int j = 0; j < pis.length; j++) { + if (piId == ((PlayItemImpl)pis[j]).getPlayItemId()) { + return true; + } + } + } + } + return false; + + } else if (element instanceof ServiceDetails) { + return element.getLocator() == service.getLocator(); + } + + System.err.println("Unsupported SI element"); + return false; + /* SIRequestorImpl requestor = new SIRequestorImpl(); SIRequest req = service.retrieveDetails(requestor); @@ -81,6 +135,7 @@ public final class SIElementFilter extends ServiceFilter } return false; + */ } SIElement element; diff --git a/src/libbluray/bdj/java/org/bluray/ti/PlayItemImpl.java b/src/libbluray/bdj/java/org/bluray/ti/PlayItemImpl.java index cde7c5e..7ffbf67 100644 --- a/src/libbluray/bdj/java/org/bluray/ti/PlayItemImpl.java +++ b/src/libbluray/bdj/java/org/bluray/ti/PlayItemImpl.java @@ -41,6 +41,14 @@ public class PlayItemImpl implements PlayItem { this.service = service; } + public int getPlayItemId() { + return playitemId; + } + + public int getPlayListId() { + return playlistId; + } + public Locator getLocator() { int title = Libbluray.getCurrentTitle(); _______________________________________________ libbluray-devel mailing list libbluray-devel@videolan.org https://mailman.videolan.org/listinfo/libbluray-devel