📄 contentdirectoryservice.java
字号:
*/
public void invoke(UPnPActionArgument[] args) throws UPnPActionInvocationException {
try{
int objectId = Integer.parseInt((String)args[0].getValue());
String browseFlag = (String)args[1].getValue();
int startingIndex = Integer.parseInt((String)args[3].getValue());
int requestCount = Integer.parseInt((String)args[4].getValue());
int updateId = objectId;
if (objectId < 0 || requestCount < 0) {
throw new UPnPActionFailedException("OBJECTID FAULT.");
}
System.out.println("ObjectID: " + objectId + "; BrowseFlag: " + browseFlag + "; startingIndex: " + startingIndex + "; requestCount: " + requestCount);
byte[] doSerialized = null;
if (objectId == 0) {
//objectId = 1;
doSerialized = rs.getRecord(1);
} else {
doSerialized = rs.getRecord(objectId);
}
// XXX If getRecord throws "unknown record ID" exception here
// then we should throw UPnPActionInvocationException with
// 701 (No such object).
//byte[] doSerialized = rs.getRecord(objectId);
ByteArrayInputStream bais = new ByteArrayInputStream(
doSerialized);
DataInputStream dis = new DataInputStream(bais);
//
// Variables for output
//
int numberReturned = Integer.MIN_VALUE;
int totalMatches = Integer.MIN_VALUE;
ByteArrayOutputStream baos = new ByteArrayOutputStream(256);
PrintStream ps = new PrintStream(baos);
ps.print("<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\"");
ps.print(" xmlns:upnp=\"urn:schemas-upnporg:metadata-1-0/upnp/\"");
ps.print(" xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\">");
String classType = dis.readUTF();
if (browseFlag.equals("BrowseMetadata")) {
numberReturned = 1;
totalMatches = 1;
serializeDidlObjectToStream(ps, dis, classType);
} else if (browseFlag.equals("BrowseDirectChildren")) {
if (!classType.startsWith("object.container")) {
throw new UPnPActionFailedException(
"requested object does not contain any children");
}
RecordEnumeration re = rs.enumerateRecords(
new DidlObjectContentFilter(objectId),
null, // Might need something here later :/
false);
//
// Take care of StartingIndex
//
if (startingIndex > 0) {
while(startingIndex-- > 0 && re.hasNextElement()) {
re.nextRecordId();
}
}
totalMatches = re.numRecords();
if (requestCount == 0) {
requestCount = totalMatches;
}
for (numberReturned = 0;
re.hasNextElement() &&
numberReturned < requestCount;
numberReturned++)
{
dis = new DataInputStream(
new ByteArrayInputStream(re.nextRecord()));
serializeDidlObjectToStream(ps, dis, dis.readUTF());
}
} else {
throw new UPnPActionFailedException(
"Error with browse flag");
}
ps.print("</DIDL-Lite>");
args[6].setValue(StringEscapeUtils.escapeXml(baos.toString()));
args[7].setValue(new Integer(numberReturned));
args[8].setValue(new Integer(totalMatches));
args[9].setValue(new Integer(updateId));
} catch (RecordStoreException rse) {
//throw new UPnPActionFailedException(ae.getMessage());
LOG.warn("Error with RS");
LOG.warn(rse);
rse.printStackTrace();
} catch (IOException ioe) {
LOG.warn("IOException occured...");
LOG.warn(ioe);
ioe.printStackTrace();
} catch (NumberFormatException nfe) {
LOG.warn(nfe);
System.out.println(nfe);
nfe.printStackTrace();
throw new UPnPActionFailedException("Generic error...");
}
LOG.debug("Finished :)");
}
private final void serializeDidlObjectToStream(
PrintStream ps,
DataInput di,
String classType) throws IOException
{
if (classType.endsWith(".item")) {
Item dido = new Item(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".audioItem")) {
AudioItem dido = new AudioItem(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".musicTrack")) {
MusicTrack dido = new MusicTrack(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".imageItem")) {
ImageItem dido = new ImageItem(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".photo")) {
Photo dido = new Photo(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".container")) {
Container dido = new Container(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".album")) {
Album dido = new Album(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".musicAlbum")) {
MusicAlbum dido = new MusicAlbum(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".photoAlbum")) {
PhotoAlbum dido = new PhotoAlbum(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
} else if (classType.endsWith(".storageFolder")) {
StorageFolder dido = new StorageFolder(di);
dido.serializeXml(ps);
dido.serializeXmlEndMarker(ps);
}
}
}
/**
* Search---------O
*
*/
/*
private class SearchAction extends UPnPAction{
public SearchAction() {
super("Search",new UPnPActionArgument[]{
new UPnPActionArgument("ContainerID",UPnPActionArgument.ARGUMENT_DIRECTION_IN,"A_ARG_TYPE_ObjectID"),
new UPnPActionArgument("SearchCriteria",UPnPActionArgument.ARGUMENT_DIRECTION_IN,"A_ARG_TYPE_SearchCriteria"),
new UPnPActionArgument("Filter",UPnPActionArgument.ARGUMENT_DIRECTION_IN,"A_ARG_TYPE_Filter"),
new UPnPActionArgument("StartingIndex",UPnPActionArgument.ARGUMENT_DIRECTION_IN,"A_ARG_TYPE_Index"),
new UPnPActionArgument("RequestCount",UPnPActionArgument.ARGUMENT_DIRECTION_IN,"A_ARG_TYPE_Count"),
new UPnPActionArgument("SortCriteria",UPnPActionArgument.ARGUMENT_DIRECTION_IN,"A_ARG_TYPE_SortCriteria"),
new UPnPActionArgument("Result",UPnPActionArgument.ARGUMENT_DIRECTION_OUT,"A_ARG_TYPE_Result"),
new UPnPActionArgument("NumberReturned",UPnPActionArgument.ARGUMENT_DIRECTION_OUT,"A_ARG_TYPE_Count"),
new UPnPActionArgument("TotalMatch",UPnPActionArgument.ARGUMENT_DIRECTION_OUT,"A_ARG_TYPE_Count"),
new UPnPActionArgument("UpdateID",UPnPActionArgument.ARGUMENT_DIRECTION_OUT,"A_ARG_TYPE_UpdateID")
});
}
public String getName(){
return "Search";
}
public void invoke(UPnPActionArgument[] args) throws UPnPActionInvocationException {
SourceContainer sc=new SourceContainer();
System.out.println("111");
MusicContainer musicContainer=sc.musicContainerList()[0];
AllTrackContainer allTrackContainer=musicContainer.allTrackList()[0];
try{
int containerId = Integer.parseInt((String)args[0].getValue());
String searchCriteria=(String)args[1].getValue();
String filter=(String)args[2].getValue();
int startingIndex = Integer.parseInt((String)args[3].getValue());
int requestCount=Integer.parseInt((String)args[4].getValue());
String sortCriteria=(String)args[5].getValue();
String seu=null;
if(containerId==12){
StringBuffer sb=new StringBuffer();
sb.append("<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\r\n");
sb.append("xmlns:upnp=\"urn:schemas-upnporg:metadata-1-0/upnp/\"\r\n");
sb.append("xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\">\r\n");
int numberReturned = 0;
//XXX:
for(int i=startingIndex;i<allTrackContainer.songList()[0].number;i++){
String s=allTrackContainer.songList()[0].songName(i);
if(searchCriteria==s){
numberReturned++;
sb.append("<item id="+allTrackContainer.songList()[0].songId(i)+
" refID="+""+" parentID="+allTrackContainer.songList()[0].songParentsId()+" restricted="
+allTrackContainer.songList()[0].songRestricted()+">\r\n");
sb.append("<dc:title>"+s+"<dc:title>\r\n");
sb.append("<dc:date>"+""+"<dc:date>\r\n");
sb.append("<upnp:class>"+"</upnp:class>");
sb.append("<res size="+allTrackContainer.songList()[0].songSize(i)+
"duration="+""+
//XXX:
" protocolInfo=\"http=get:*:audio/mpeg:*\">"+allTrackContainer.songList()[0].songUrl(i)+
"<res>\r\n");
sb.append("<upnp:class>"+
"object.container.musicContainer.allTrack.songItem"+
"</upnp:class>\r\n");
sb.append("</DIDL-Lite>\r\n");
}else{
System.out.println("Could not find the song you want");
}
}
seu=StringEscapeUtils.escapeXml(sb.toString());
System.out.println("The String is....:"+seu);
args[6].setValue(seu);
args[7].setValue(new Integer(numberReturned));
args[8].setValue(new Integer(numberReturned));
args[9].setValue(new Integer(containerId));
}else {
StringBuffer sb=new StringBuffer();
sb.append("<DIDL-Lite xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\r\n");
sb.append("xmlns:upnp=\"urn:schemas-upnporg:metadata-1-0/upnp/\"\r\n");
sb.append("xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\">\r\n");
sb.append("</DIDL-Lite>\r\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -