Android Open Source - DroidUPnP Content Directory Command






From Project

Back to project page DroidUPnP.

License

The source code is released under:

GNU General Public License

If you think the Android project DroidUPnP listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * Copyright (C) 2013 Aurlien Chabot <aurelien@chabot.fr>
 * /*from  w  w  w .  j a  v a 2  s. co m*/
 * This file is part of DroidUPNP.
 * 
 * DroidUPNP is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * DroidUPNP is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with DroidUPNP.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.droidupnp.controller.cling;

import org.droidupnp.Main;
import org.droidupnp.model.cling.CDevice;
import org.droidupnp.model.cling.didl.ClingAudioItem;
import org.droidupnp.model.cling.didl.ClingDIDLContainer;
import org.droidupnp.model.cling.didl.ClingDIDLItem;
import org.droidupnp.model.cling.didl.ClingDIDLParentContainer;
import org.droidupnp.model.cling.didl.ClingImageItem;
import org.droidupnp.model.cling.didl.ClingVideoItem;
import org.droidupnp.model.upnp.IContentDirectoryCommand;
import org.droidupnp.view.ContentDirectoryFragment;
import org.droidupnp.view.DIDLObjectDisplay;
import org.fourthline.cling.controlpoint.ControlPoint;
import org.fourthline.cling.model.action.ActionInvocation;
import org.fourthline.cling.model.message.UpnpResponse;
import org.fourthline.cling.model.meta.Service;
import org.fourthline.cling.model.types.UDAServiceType;
import org.fourthline.cling.support.contentdirectory.callback.Browse;
import org.fourthline.cling.support.contentdirectory.callback.Search;
import org.fourthline.cling.support.model.BrowseFlag;
import org.fourthline.cling.support.model.DIDLContent;
import org.fourthline.cling.support.model.DIDLObject;
import org.fourthline.cling.support.model.SortCriterion;
import org.fourthline.cling.support.model.container.Container;
import org.fourthline.cling.support.model.item.AudioItem;
import org.fourthline.cling.support.model.item.ImageItem;
import org.fourthline.cling.support.model.item.Item;
import org.fourthline.cling.support.model.item.VideoItem;

import android.util.Log;

import java.util.ArrayList;

@SuppressWarnings("rawtypes")
public class ContentDirectoryCommand implements IContentDirectoryCommand
{
  private static final String TAG = "ContentDirectoryCommand";

  private final ControlPoint controlPoint;

  public ContentDirectoryCommand(ControlPoint controlPoint)
  {
    this.controlPoint = controlPoint;
  }

  @SuppressWarnings("unused")
  private Service getMediaReceiverRegistarService()
  {
    if (Main.upnpServiceController.getSelectedContentDirectory() == null)
      return null;

    return ((CDevice) Main.upnpServiceController.getSelectedContentDirectory()).getDevice().findService(
        new UDAServiceType("X_MS_MediaReceiverRegistar"));
  }

  private Service getContentDirectoryService()
  {
    if (Main.upnpServiceController.getSelectedContentDirectory() == null)
      return null;

    return ((CDevice) Main.upnpServiceController.getSelectedContentDirectory()).getDevice().findService(
        new UDAServiceType("ContentDirectory"));
  }

  private ArrayList<DIDLObjectDisplay> buildContentList(String parent, DIDLContent didl)
  {
    ArrayList<DIDLObjectDisplay> list = new ArrayList<DIDLObjectDisplay>();

    if (parent != null)
      list.add(new DIDLObjectDisplay(new ClingDIDLParentContainer(parent)));

    for (Container item : didl.getContainers())
    {
      list.add(new DIDLObjectDisplay(new ClingDIDLContainer(item)));
      Log.v(TAG, "Add container : " + item.getTitle());
    }

    for (Item item : didl.getItems())
    {
      ClingDIDLItem clingItem = null;
      if(item instanceof VideoItem)
        clingItem = new ClingVideoItem((VideoItem)item);
      else if(item instanceof AudioItem)
        clingItem = new ClingAudioItem((AudioItem)item);
      else if(item instanceof ImageItem)
        clingItem = new ClingImageItem((ImageItem)item);
      else
        clingItem = new ClingDIDLItem(item);

      list.add(new DIDLObjectDisplay(clingItem));
      Log.v(TAG, "Add item : " + item.getTitle());

      for (DIDLObject.Property p : item.getProperties())
        Log.v(TAG, p.getDescriptorName() + " " + p.toString());
    }

    return list;
  }

  @Override
  public void browse(String directoryID, final String parent, final ContentDirectoryFragment.ContentCallback callback)
  {
    if (getContentDirectoryService() == null)
      return;

    controlPoint.execute(new Browse(getContentDirectoryService(), directoryID, BrowseFlag.DIRECT_CHILDREN, "*", 0,
        null, new SortCriterion(true, "dc:title"))
    {
      @Override
      public void received(ActionInvocation actionInvocation, final DIDLContent didl)
      {
        callBack(didl);
      }

      @Override
      public void updateStatus(Status status)
      {
        Log.v(TAG, "updateStatus ! ");
      }

      @Override
      public void failure(ActionInvocation invocation, UpnpResponse operation, String defaultMsg)
      {
        Log.w(TAG, "Fail to browse ! " + defaultMsg);
        callBack(null);
      }

      public void callBack(final DIDLContent didl)
      {
        if(callback!=null)
        {
          try {
            if(didl!=null)
              callback.setContent(buildContentList(parent, didl));
            callback.call();
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
    });
  }

  public void search(String search, final String parent, final ContentDirectoryFragment.ContentCallback callback)
  {
    if (getContentDirectoryService() == null)
      return;

    controlPoint.execute(new Search(getContentDirectoryService(), parent, search)
    {
      @Override
      public void received(ActionInvocation actionInvocation, final DIDLContent didl)
      {
        if(callback!=null)
        {
          try {
            callback.setContent(buildContentList(parent, didl));
            callback.call();
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      }

      @Override
      public void updateStatus(Status status)
      {
        Log.v(TAG, "updateStatus ! ");
      }

      @Override
      public void failure(ActionInvocation invocation, UpnpResponse operation, String defaultMsg)
      {
        Log.w(TAG, "Fail to browse ! " + defaultMsg);
      }
    });
  }

  public boolean isSearchAvailable()
  {
    if (getContentDirectoryService() == null)
      return false;

    return false;
  }
}




Java Source Code List

fi.iki.elonen.NanoHTTPD.java
fi.iki.elonen.ServerRunner.java
fi.iki.elonen.SimpleWebServer.java
org.droidupnp.DrawerFragment.java
org.droidupnp.Main.java
org.droidupnp.controller.cling.ContentDirectoryCommand.java
org.droidupnp.controller.cling.Factory.java
org.droidupnp.controller.cling.RendererCommand.java
org.droidupnp.controller.cling.ServiceController.java
org.droidupnp.controller.cling.ServiceListener.java
org.droidupnp.controller.upnp.IUpnpServiceController.java
org.droidupnp.controller.upnp.UpnpDebugListener.java
org.droidupnp.model.CObservable.java
org.droidupnp.model.cling.CDevice.java
org.droidupnp.model.cling.CRegistryListener.java
org.droidupnp.model.cling.RendererState.java
org.droidupnp.model.cling.TrackMetadata.java
org.droidupnp.model.cling.UpnpRegistry.java
org.droidupnp.model.cling.UpnpServiceController.java
org.droidupnp.model.cling.UpnpService.java
org.droidupnp.model.cling.didl.ClingAudioItem.java
org.droidupnp.model.cling.didl.ClingDIDLContainer.java
org.droidupnp.model.cling.didl.ClingDIDLItem.java
org.droidupnp.model.cling.didl.ClingDIDLObject.java
org.droidupnp.model.cling.didl.ClingDIDLParentContainer.java
org.droidupnp.model.cling.didl.ClingImageItem.java
org.droidupnp.model.cling.didl.ClingVideoItem.java
org.droidupnp.model.cling.localContent.AlbumContainer.java
org.droidupnp.model.cling.localContent.ArtistContainer.java
org.droidupnp.model.cling.localContent.AudioContainer.java
org.droidupnp.model.cling.localContent.CustomContainer.java
org.droidupnp.model.cling.localContent.DynamicContainer.java
org.droidupnp.model.cling.localContent.ImageContainer.java
org.droidupnp.model.cling.localContent.VideoContainer.java
org.droidupnp.model.mediaserver.ContentDirectoryService.java
org.droidupnp.model.mediaserver.MediaServer.java
org.droidupnp.model.upnp.ARendererState.java
org.droidupnp.model.upnp.CallableContentDirectoryFilter.java
org.droidupnp.model.upnp.CallableRendererFilter.java
org.droidupnp.model.upnp.ContentDirectoryDiscovery.java
org.droidupnp.model.upnp.DeviceDiscovery.java
org.droidupnp.model.upnp.DeviceListener.java
org.droidupnp.model.upnp.ICallableFilter.java
org.droidupnp.model.upnp.IContentDirectoryCommand.java
org.droidupnp.model.upnp.IDeviceDiscoveryObserver.java
org.droidupnp.model.upnp.IFactory.java
org.droidupnp.model.upnp.IRegistryListener.java
org.droidupnp.model.upnp.IRendererCommand.java
org.droidupnp.model.upnp.IRendererState.java
org.droidupnp.model.upnp.IServiceListener.java
org.droidupnp.model.upnp.IUpnpDevice.java
org.droidupnp.model.upnp.IUpnpRegistry.java
org.droidupnp.model.upnp.PeeringConnectionManager.java
org.droidupnp.model.upnp.RendererDiscovery.java
org.droidupnp.model.upnp.didl.DIDLDevice.java
org.droidupnp.model.upnp.didl.IDIDLContainer.java
org.droidupnp.model.upnp.didl.IDIDLItem.java
org.droidupnp.model.upnp.didl.IDIDLObject.java
org.droidupnp.model.upnp.didl.IDIDLParentContainer.java
org.droidupnp.view.ContentDirectoryDeviceFragment.java
org.droidupnp.view.ContentDirectoryDialog.java
org.droidupnp.view.ContentDirectoryEnabler.java
org.droidupnp.view.ContentDirectoryFragment.java
org.droidupnp.view.Content.java
org.droidupnp.view.DIDLObjectDisplay.java
org.droidupnp.view.DeviceDisplay.java
org.droidupnp.view.DeviceFragment.java
org.droidupnp.view.DeviceInfoDialog.java
org.droidupnp.view.PlaylistFragment.java
org.droidupnp.view.RendererDeviceFragment.java
org.droidupnp.view.RendererDialog.java
org.droidupnp.view.RendererFragment.java
org.droidupnp.view.ServiceDiscoveryFragment.java
org.droidupnp.view.SettingsActivity.java
org.droidupnp.view.UpnpDeviceListFragment.java