package com.talent.allshare.proxy; import java.util.List; import org.cybergarage.upnp.Action; import org.cybergarage.upnp.Argument; import org.cybergarage.upnp.ArgumentList; import org.cybergarage.upnp.Device; import org.cybergarage.upnp.UPnPStatus; import org.cybergarage.util.CommonLog; import org.cybergarage.util.LogFactory; import org.cybergarage.xml.Node; import android.content.Context; import com.talent.allshare.network.Item; import com.talent.allshare.util.ParseUtil; public class ControlRequestProxy { public static interface ControlRequestCallback { public void onGetItems(final List<Item> list); } private static final CommonLog log = LogFactory.createLog(); public static void syncGetDirectory(final Context context, final ControlRequestCallback callback) { Thread thread = new Thread(new Runnable() { @Override public void run() { List<Item> list = null; try { list = getDirectory(context); } catch (Exception e) { e.printStackTrace(); } if (callback != null){ callback.onGetItems(list); } } }); thread.start(); } public static void syncGetItems(final Context context, final String id,final ControlRequestCallback callback) { Thread thread = new Thread(new Runnable() { @Override public void run() { List<Item> list = null; try { list = getItems(context, id); } catch (Exception e) { e.printStackTrace(); } if (callback != null){ callback.onGetItems(list); } } }); thread.start(); } public static List<Item> getDirectory(Context context) throws Exception { Device selDevice = AllShareProxy.getInstance(context).getSelectedDevice(); if (selDevice == null) { log.e("no selDevice!!!"); return null; } // Node selDevNode = selDevice.getDeviceNode(); // if (selDevNode != null){ // selDevNode.print(); // } org.cybergarage.upnp.Service service = selDevice .getService("urn:schemas-upnp-org:service:ContentDirectory:1"); if (selDevice == null) { log.e("no service for ContentDirectory!!!"); return null; } // Node serverNode = service.getServiceNode(); // if (serverNode != null){ // serverNode.print(); // } Action action = service.getAction("Browse"); if(action == null) { log.e("action for Browse is null!!!"); return null; } ArgumentList argumentList = action.getArgumentList(); argumentList.getArgument("ObjectID").setValue(0); argumentList.getArgument("BrowseFlag").setValue("BrowseDirectChildren"); argumentList.getArgument("StartingIndex").setValue("0"); argumentList.getArgument("RequestedCount").setValue("0"); argumentList.getArgument("Filter").setValue("*"); argumentList.getArgument("SortCriteria").setValue(""); ArgumentList actionInputArgList = action.getInputArgumentList(); int size = actionInputArgList.size(); for(int i = 0; i < size; i++){ Argument argument = (Argument) (actionInputArgList.get(i)); // argument.getArgumentNode().print(); } if (action.postControlAction()) { ArgumentList outArgList = action.getOutputArgumentList(); Argument result = outArgList.getArgument("Result"); // log.e("result value = \n" + result.getValue()); List<Item> items = ParseUtil.parseResult(result); return items; } else { UPnPStatus err = action.getControlStatus(); log.e("Error Code = " + err.getCode()); log.e("Error Desc = " + err.getDescription()); } return null; } public static List<Item> getItems(Context context, String id) throws Exception{ Device selDevice = AllShareProxy.getInstance(context).getSelectedDevice(); if (selDevice == null) { log.e("no service for ContentDirectory!!!"); return null; } // Node selDevNode = selDevice.getDeviceNode(); // if (selDevNode != null){ // selDevNode.print(); // } log.e("getItems id = " + id); org.cybergarage.upnp.Service service = selDevice .getService("urn:schemas-upnp-org:service:ContentDirectory:1"); if (selDevice == null) { log.e("no service for ContentDirectory!!!"); return null; } Action action = service.getAction("Browse"); if(action == null) { log.e("action for Browse is null"); return null; } // action.getActionNode().print(); ArgumentList argumentList = action.getArgumentList(); argumentList.getArgument("ObjectID").setValue(id); argumentList.getArgument("BrowseFlag").setValue("BrowseDirectChildren"); argumentList.getArgument("StartingIndex").setValue("0"); argumentList.getArgument("RequestedCount").setValue("0"); argumentList.getArgument("Filter").setValue("*"); argumentList.getArgument("SortCriteria").setValue(""); if (action.postControlAction()) { ArgumentList outArgList = action.getOutputArgumentList(); Argument result = outArgList.getArgument("Result"); // log.e("result value = \n" + result.getValue()); List<Item> items = ParseUtil.parseResult(result); return items; } else { UPnPStatus err = action.getControlStatus(); System.out.println("Error Code = " + err.getCode()); System.out.println("Error Desc = " + err.getDescription()); } return null; } }