/*
* Created on Jan 28, 2009
* Created by Paul Gardner
*
* Copyright 2009 Vuze, Inc. All rights reserved.
*
* This program 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; version 2 of the License only.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/
package com.aelitis.azureus.core.devices.impl;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.util.List;
import java.util.Map;
import org.gudy.azureus2.core3.util.Constants;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.IndentWriter;
import com.aelitis.azureus.core.devices.*;
import com.aelitis.net.upnp.UPnPDevice;
import com.aelitis.net.upnp.impl.device.UPnPDeviceImpl;
public class
DeviceMediaRendererImpl
extends DeviceUPnPImpl
implements DeviceMediaRenderer
{
public
DeviceMediaRendererImpl(
DeviceManagerImpl _manager,
UPnPDevice _device )
{
super( _manager, _device, Device.DT_MEDIA_RENDERER );
}
public
DeviceMediaRendererImpl(
DeviceManagerImpl _manager,
String _classification )
{
super( _manager, Device.DT_MEDIA_RENDERER, _classification );
}
public
DeviceMediaRendererImpl(
DeviceManagerImpl _manager,
String _uuid,
String _classification,
boolean _manual,
String _name )
{
super( _manager, Device.DT_MEDIA_RENDERER, _uuid, _classification, _manual, _name );
}
public
DeviceMediaRendererImpl(
DeviceManagerImpl _manager,
String _uuid,
String _classification,
boolean _manual )
{
super( _manager, Device.DT_MEDIA_RENDERER, _uuid, _classification, _manual );
}
protected
DeviceMediaRendererImpl(
DeviceManagerImpl _manager,
Map _map )
throws IOException
{
super(_manager, _map );
}
public void setAddress(InetAddress address) {
super.setAddress(address);
if ( getType() == DT_MEDIA_RENDERER) {
//System.out.println("Set Address " + address.getHostAddress() + "; " + getName() + "/" + getClassification());
boolean hasUPnPDevice = getUPnPDevice() != null;
DeviceImpl[] devices = getManager().getDevices();
for (DeviceImpl device : devices) {
if (device == this || device.getID().equals(getID())
|| !((device instanceof DeviceUPnPImpl))) {
continue;
}
DeviceUPnPImpl deviceUPnP = ((DeviceUPnPImpl) device);
if (!address.equals(device.getAddress()) || !device.isAlive()) {
continue;
}
if (hasUPnPDevice) {
boolean no_auto_hide = device.getPersistentBooleanProperty( DeviceImpl.PP_DONT_AUTO_HIDE, false );
if (device.getType() == DT_MEDIA_RENDERER && !no_auto_hide ) {
// prefer UPnP Device over Manual one added by a Browse event
if (deviceUPnP.getUPnPDevice() != null) {
int fileCount = deviceUPnP.getFileCount();
if (fileCount == 0 && !device.isHidden()) {
log("Hiding " + device.getName() + "/"
+ device.getClassification() + "/" + device.getID()
+ " due to " + getName() + "/" + getClassification() + "/"
+ getID());
device.setHidden(true);
}
}
}
} else {
if (device.getType() == DT_MEDIA_RENDERER ){
boolean no_auto_hide = getPersistentBooleanProperty( DeviceImpl.PP_DONT_AUTO_HIDE, false );
if ( !no_auto_hide ){
int fileCount = getFileCount();
// prefer UPnP Device over Manual one added by a Browse event
if (fileCount == 0 && !isHidden()) {
log("hiding " + getName() + "/" + getClassification() + "/"
+ getID() + " due to " + device.getName() + "/"
+ device.getClassification() + "/" + device.getID());
setHidden(true);
} else if (fileCount > 0 && Constants.IS_CVS_VERSION && isHidden()) {
// Fix beta bug where we hid devices that had files. Remove after 4605
setHidden(false);
}
}
} else {
// Device has UPnP stuff, but did not register itself as
// renderer.
UPnPDevice upnpDevice = deviceUPnP.getUPnPDevice();
if (upnpDevice != null) {
String manufacturer = upnpDevice.getManufacturer();
if (manufacturer == null || !manufacturer.startsWith("Vuze")) {
log("Linked " + getName() + " to UPnP Device " + device.getName());
setUPnPDevice(upnpDevice);
setDirty();
}
}
}
}
break;
}
}
}
@Override
protected boolean
updateFrom(
DeviceImpl _other,
boolean _is_alive )
{
if ( !super.updateFrom( _other, _is_alive )){
return( false );
}
if ( !( _other instanceof DeviceMediaRendererImpl )){
Debug.out( "Inconsistent" );
return( false );
}
DeviceMediaRendererImpl other = (DeviceMediaRendererImpl)_other;
return( true );
}
@Override
protected void
initialise()
{
super.initialise();
}
@Override
protected void
destroy()
{
super.destroy();
}
public boolean
canCopyToDevice()
{
return( false );
}
public boolean
getAutoCopyToDevice()
{
return( false );
}
public void
setAutoCopyToDevice(
boolean auto )
{
}
public int
getCopyToDevicePending()
{
return( 0 );
}
public boolean
canAutoStartDevice()
{
return( false );
}
public boolean
getAutoStartDevice()
{
return( false );
}
public void
setAutoStartDevice(
boolean auto )
{
}
public boolean
canCopyToFolder()
{
return( false );
}
public void
setCanCopyToFolder(
boolean can )
{
// nothing to do
}
public File
getCopyToFolder()
{
return( null );
}
public void
setCopyToFolder(
File file )
{
}
public int
getCopyToFolderPending()
{
return( 0 );
}
public boolean
getAutoCopyToFolder()
{
return( false );
}
public void
setAutoCopyToFolder(
boolean auto )
{
}
public void
manualCopy()
throws DeviceManagerException
{
throw( new DeviceManagerException( "Unsupported" ));
}
public boolean
canShowCategories()
{
return( false );
}
public void
setShowCategories(
boolean b )
{
setPersistentBooleanProperty( PP_REND_SHOW_CAT, b );
}
public boolean
getShowCategories()
{
return( getPersistentBooleanProperty( PP_REND_SHOW_CAT, getShowCategoriesDefault()));
}
protected boolean
getShowCategoriesDefault()
{
return( false );
}
@Override
protected void
getDisplayProperties(
List<String[]> dp )
{
super.getDisplayProperties( dp );
if ( canCopyToFolder()){
addDP( dp, "devices.copy.folder.auto", getAutoCopyToFolder());
addDP( dp, "devices.copy.folder.dest", getCopyToFolder());
}
if ( canCopyToDevice()){
addDP( dp, "devices.copy.device.auto", getAutoCopyToDevice());
}
if ( canShowCategories()){
addDP( dp, "devices.cat.show", getShowCategories());
}
super.getTTDisplayProperties( dp );
}
@Override
public void
generate(
IndentWriter writer )
{
super.generate( writer );
try{
writer.indent();
generateTT( writer );
}finally{
writer.exdent();
}
}
}