|
Packit Service |
ce9802 |
# mediaconsole
|
|
Packit Service |
ce9802 |
#
|
|
Packit Service |
ce9802 |
# Copyright (C) 2012-2017 Intel Corporation. All rights reserved.
|
|
Packit Service |
ce9802 |
#
|
|
Packit Service |
ce9802 |
# This program is free software; you can redistribute it and/or modify it
|
|
Packit Service |
ce9802 |
# under the terms and conditions of the GNU Lesser General Public License,
|
|
Packit Service |
ce9802 |
# version 2.1, as published by the Free Software Foundation.
|
|
Packit Service |
ce9802 |
#
|
|
Packit Service |
ce9802 |
# This program is distributed in the hope it will be useful, but WITHOUT
|
|
Packit Service |
ce9802 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
Packit Service |
ce9802 |
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
Packit Service |
ce9802 |
# for more details.
|
|
Packit Service |
ce9802 |
#
|
|
Packit Service |
ce9802 |
# You should have received a copy of the GNU Lesser General Public License
|
|
Packit Service |
ce9802 |
# along with this program; if not, write to the Free Software Foundation, Inc.,
|
|
Packit Service |
ce9802 |
# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
|
Packit Service |
ce9802 |
#
|
|
Packit Service |
ce9802 |
# Mark Ryan <mark.d.ryan@intel.com>
|
|
Packit Service |
ce9802 |
#
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
import dbus
|
|
Packit Service |
ce9802 |
import sys
|
|
Packit Service |
ce9802 |
import json
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
from xml.dom import minidom
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_properties(props):
|
|
Packit Service |
ce9802 |
print json.dumps(props, indent=4, sort_keys=True)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
class MediaObject(object):
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def __init__(self, path):
|
|
Packit Service |
ce9802 |
bus = dbus.SessionBus()
|
|
Packit Service |
ce9802 |
self._propsIF = dbus.Interface(bus.get_object(
|
|
Packit Service |
ce9802 |
'com.intel.dleyna-server', path),
|
|
Packit Service |
ce9802 |
'org.freedesktop.DBus.Properties')
|
|
Packit Service |
ce9802 |
self.__objIF = dbus.Interface(bus.get_object(
|
|
Packit Service |
ce9802 |
'com.intel.dleyna-server', path),
|
|
Packit Service |
ce9802 |
'org.gnome.UPnP.MediaObject2')
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def get_props(self, iface = ""):
|
|
Packit Service |
ce9802 |
return self._propsIF.GetAll(iface)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def get_prop(self, prop_name, iface = ""):
|
|
Packit Service |
ce9802 |
return self._propsIF.Get(iface, prop_name)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_prop(self, prop_name, iface = ""):
|
|
Packit Service |
ce9802 |
print_properties(self._propsIF.Get(iface, prop_name))
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_props(self, iface = ""):
|
|
Packit Service |
ce9802 |
print_properties(self._propsIF.GetAll(iface))
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_dms_id(self):
|
|
Packit Service |
ce9802 |
path = self._propsIF.Get("", "Path")
|
|
Packit Service |
ce9802 |
dms_id = path[path.rfind("/") + 1:]
|
|
Packit Service |
ce9802 |
i = 0
|
|
Packit Service |
ce9802 |
while i+1 < len(dms_id):
|
|
Packit Service |
ce9802 |
num = dms_id[i] + dms_id[i+1]
|
|
Packit Service |
ce9802 |
sys.stdout.write(unichr(int(num, 16)))
|
|
Packit Service |
ce9802 |
i = i + 2
|
|
Packit Service |
ce9802 |
print
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_metadata(self):
|
|
Packit Service |
ce9802 |
metadata = self.__objIF.GetMetaData()
|
|
Packit Service |
ce9802 |
print minidom.parseString(metadata).toprettyxml(indent=' '*4)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def delete(self):
|
|
Packit Service |
ce9802 |
return self.__objIF.Delete()
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def update(self, to_add_update, to_delete):
|
|
Packit Service |
ce9802 |
return self.__objIF.Update(to_add_update, to_delete)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def get_metadata(self):
|
|
Packit Service |
ce9802 |
return self.__objIF.GetMetaData()
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
class Item(MediaObject):
|
|
Packit Service |
ce9802 |
def __init__(self, path):
|
|
Packit Service |
ce9802 |
MediaObject.__init__(self, path)
|
|
Packit Service |
ce9802 |
bus = dbus.SessionBus()
|
|
Packit Service |
ce9802 |
self._itemIF = dbus.Interface(bus.get_object(
|
|
Packit Service |
ce9802 |
'com.intel.dleyna-server', path),
|
|
Packit Service |
ce9802 |
'org.gnome.UPnP.MediaItem2')
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_compatible_resource(self, protocol_info, fltr):
|
|
Packit Service |
ce9802 |
print_properties(self._itemIF.GetCompatibleResource(protocol_info,
|
|
Packit Service |
ce9802 |
fltr))
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
class Container(MediaObject):
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def __init__(self, path):
|
|
Packit Service |
ce9802 |
MediaObject.__init__(self, path)
|
|
Packit Service |
ce9802 |
bus = dbus.SessionBus()
|
|
Packit Service |
ce9802 |
self._containerIF = dbus.Interface(bus.get_object(
|
|
Packit Service |
ce9802 |
'com.intel.dleyna-server', path),
|
|
Packit Service |
ce9802 |
'org.gnome.UPnP.MediaContainer2')
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def list_children(self, offset, count, fltr, sort=""):
|
|
Packit Service |
ce9802 |
objects = self._containerIF.ListChildrenEx(offset, count, fltr, sort)
|
|
Packit Service |
ce9802 |
for item in objects:
|
|
Packit Service |
ce9802 |
print_properties(item)
|
|
Packit Service |
ce9802 |
print ""
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def list_containers(self, offset, count, fltr, sort=""):
|
|
Packit Service |
ce9802 |
objects = self._containerIF.ListContainersEx(offset, count, fltr, sort)
|
|
Packit Service |
ce9802 |
for item in objects:
|
|
Packit Service |
ce9802 |
print_properties(item)
|
|
Packit Service |
ce9802 |
print ""
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def list_items(self, offset, count, fltr, sort=""):
|
|
Packit Service |
ce9802 |
objects = self._containerIF.ListItemsEx(offset, count, fltr, sort)
|
|
Packit Service |
ce9802 |
for item in objects:
|
|
Packit Service |
ce9802 |
print_properties(item)
|
|
Packit Service |
ce9802 |
print ""
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def search(self, query, offset, count, fltr, sort=""):
|
|
Packit Service |
ce9802 |
objects, total = self._containerIF.SearchObjectsEx(query, offset,
|
|
Packit Service |
ce9802 |
count, fltr, sort)
|
|
Packit Service |
ce9802 |
print "Total Items: " + str(total)
|
|
Packit Service |
ce9802 |
print
|
|
Packit Service |
ce9802 |
for item in objects:
|
|
Packit Service |
ce9802 |
print_properties(item)
|
|
Packit Service |
ce9802 |
print ""
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def tree(self, level=0):
|
|
Packit Service |
ce9802 |
objects = self._containerIF.ListChildren(
|
|
Packit Service |
ce9802 |
0, 0, ["DisplayName", "Path", "Type"])
|
|
Packit Service |
ce9802 |
for props in objects:
|
|
Packit Service |
ce9802 |
print (" " * (level * 4) + props["DisplayName"] +
|
|
Packit Service |
ce9802 |
" : (" + props["Path"]+ ")")
|
|
Packit Service |
ce9802 |
if props["Type"] == "container":
|
|
Packit Service |
ce9802 |
Container(props["Path"]).tree(level + 1)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def upload(self, name, file_path):
|
|
Packit Service |
ce9802 |
(tid, path) = self._containerIF.Upload(name, file_path)
|
|
Packit Service |
ce9802 |
print "Transfer ID: " + str(tid)
|
|
Packit Service |
ce9802 |
print u"Path: " + path
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def create_container(self, name, type, child_types):
|
|
Packit Service |
ce9802 |
path = self._containerIF.CreateContainer(name, type, child_types)
|
|
Packit Service |
ce9802 |
print u"New container path: " + path
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_compatible_resource(self, protocol_info, fltr):
|
|
Packit Service |
ce9802 |
print_properties(self._containerIF.GetCompatibleResource(protocol_info,
|
|
Packit Service |
ce9802 |
fltr))
|
|
Packit Service |
ce9802 |
def create_reference(self, file_path):
|
|
Packit Service |
ce9802 |
path = self._containerIF.CreateReference(file_path)
|
|
Packit Service |
ce9802 |
print u"Reference Path: " + path
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
class Device(Container):
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def __init__(self, path):
|
|
Packit Service |
ce9802 |
Container.__init__(self, path)
|
|
Packit Service |
ce9802 |
bus = dbus.SessionBus()
|
|
Packit Service |
ce9802 |
self._deviceIF = dbus.Interface(bus.get_object(
|
|
Packit Service |
ce9802 |
'com.intel.dleyna-server', path),
|
|
Packit Service |
ce9802 |
'com.intel.dLeynaServer.MediaDevice')
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def browse_objects(self, paths, fltr=['*']):
|
|
Packit Service |
ce9802 |
objects = self._deviceIF.BrowseObjects(paths, fltr)
|
|
Packit Service |
ce9802 |
for item in objects:
|
|
Packit Service |
ce9802 |
print_properties(item)
|
|
Packit Service |
ce9802 |
print ""
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def upload_to_any(self, name, file_path):
|
|
Packit Service |
ce9802 |
(tid, path) = self._deviceIF.UploadToAnyContainer(name, file_path)
|
|
Packit Service |
ce9802 |
print "Transfer ID: " + str(tid)
|
|
Packit Service |
ce9802 |
print u"Path: " + path
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def create_container_in_any(self, name, type, child_types):
|
|
Packit Service |
ce9802 |
path = self._deviceIF.CreateContainerInAnyContainer(name, type,
|
|
Packit Service |
ce9802 |
child_types)
|
|
Packit Service |
ce9802 |
print u"New container path: " + path
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def get_upload_status(self, id):
|
|
Packit Service |
ce9802 |
(status, length, total) = self._deviceIF.GetUploadStatus(id)
|
|
Packit Service |
ce9802 |
print "Status: " + status
|
|
Packit Service |
ce9802 |
print "Length: " + str(length)
|
|
Packit Service |
ce9802 |
print "Total: " + str(total)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def get_upload_ids(self):
|
|
Packit Service |
ce9802 |
upload_ids = self._deviceIF.GetUploadIDs()
|
|
Packit Service |
ce9802 |
print_properties(upload_ids)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def cancel_upload(self, id):
|
|
Packit Service |
ce9802 |
self._deviceIF.CancelUpload(id)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def cancel(self):
|
|
Packit Service |
ce9802 |
return self._deviceIF.Cancel()
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_icon(self, mime_type, resolution):
|
|
Packit Service |
ce9802 |
bytes, mime = self._deviceIF.GetIcon(mime_type, resolution)
|
|
Packit Service |
ce9802 |
print "Icon mime type: " + mime
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def wake(self):
|
|
Packit Service |
ce9802 |
return self._deviceIF.Wake()
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
class UPNP(object):
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def __init__(self):
|
|
Packit Service |
ce9802 |
bus = dbus.SessionBus()
|
|
Packit Service |
ce9802 |
self._manager = dbus.Interface(bus.get_object(
|
|
Packit Service |
ce9802 |
'com.intel.dleyna-server',
|
|
Packit Service |
ce9802 |
'/com/intel/dLeynaServer'),
|
|
Packit Service |
ce9802 |
'com.intel.dLeynaServer.Manager')
|
|
Packit Service |
ce9802 |
self._propsIF = dbus.Interface(bus.get_object(
|
|
Packit Service |
ce9802 |
'com.intel.dleyna-server',
|
|
Packit Service |
ce9802 |
'/com/intel/dLeynaServer'),
|
|
Packit Service |
ce9802 |
'org.freedesktop.DBus.Properties')
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def get_props(self, iface = ""):
|
|
Packit Service |
ce9802 |
return self._propsIF.GetAll(iface)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def get_prop(self, prop_name, iface = ""):
|
|
Packit Service |
ce9802 |
return self._propsIF.Get(iface, prop_name)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def set_prop(self, prop_name, val, iface = ""):
|
|
Packit Service |
ce9802 |
return self._propsIF.Set(iface, prop_name, val)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_prop(self, prop_name, iface = ""):
|
|
Packit Service |
ce9802 |
print_properties(self._propsIF.Get(iface, prop_name))
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def print_props(self, iface = ""):
|
|
Packit Service |
ce9802 |
print_properties(self._propsIF.GetAll(iface))
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def server_from_name(self, friendly_name):
|
|
Packit Service |
ce9802 |
retval = None
|
|
Packit Service |
ce9802 |
for i in self._manager.GetServers():
|
|
Packit Service |
ce9802 |
server = Device(i)
|
|
Packit Service |
ce9802 |
server_name = server.get_prop("FriendlyName").lower()
|
|
Packit Service |
ce9802 |
if server_name.find(friendly_name.lower()) != -1:
|
|
Packit Service |
ce9802 |
retval = server
|
|
Packit Service |
ce9802 |
break
|
|
Packit Service |
ce9802 |
return retval
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def server_from_udn(self, udn):
|
|
Packit Service |
ce9802 |
retval = None
|
|
Packit Service |
ce9802 |
for i in self._manager.GetServers():
|
|
Packit Service |
ce9802 |
server = Device(i)
|
|
Packit Service |
ce9802 |
if server.get_prop("UDN") == udn:
|
|
Packit Service |
ce9802 |
retval = server
|
|
Packit Service |
ce9802 |
break
|
|
Packit Service |
ce9802 |
return retval
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def servers(self):
|
|
Packit Service |
ce9802 |
for i in self._manager.GetServers():
|
|
Packit Service |
ce9802 |
try:
|
|
Packit Service |
ce9802 |
server = Container(i)
|
|
Packit Service |
ce9802 |
try:
|
|
Packit Service |
ce9802 |
folderName = server.get_prop("FriendlyName");
|
|
Packit Service |
ce9802 |
except Exception:
|
|
Packit Service |
ce9802 |
folderName = server.get_prop("DisplayName");
|
|
Packit Service |
ce9802 |
print u'{0:<30}{1:<30}'.format(folderName , i)
|
|
Packit Service |
ce9802 |
except dbus.exceptions.DBusException, err:
|
|
Packit Service |
ce9802 |
print u"Cannot retrieve properties for " + i
|
|
Packit Service |
ce9802 |
print str(err).strip()[:-1]
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def version(self):
|
|
Packit Service |
ce9802 |
print self._manager.GetVersion()
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def set_protocol_info(self, protocol_info):
|
|
Packit Service |
ce9802 |
self._manager.SetProtocolInfo(protocol_info)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def prefer_local_addresses(self, prefer):
|
|
Packit Service |
ce9802 |
self._manager.PreferLocalAddresses(prefer)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def rescan(self):
|
|
Packit Service |
ce9802 |
self._manager.Rescan()
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def white_list_enable(self, enable):
|
|
Packit Service |
ce9802 |
self.set_prop("WhiteListEnabled", enable)
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def white_list_add(self, entries):
|
|
Packit Service |
ce9802 |
white_list = set(self.get_prop('WhiteListEntries'))
|
|
Packit Service |
ce9802 |
white_list = white_list | set(entries)
|
|
Packit Service |
ce9802 |
self.set_prop("WhiteListEntries", list(white_list))
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def white_list_remove(self, entries):
|
|
Packit Service |
ce9802 |
white_list = set(self.get_prop('WhiteListEntries'))
|
|
Packit Service |
ce9802 |
white_list = white_list - set(entries)
|
|
Packit Service |
ce9802 |
self.set_prop("WhiteListEntries", list(white_list))
|
|
Packit Service |
ce9802 |
|
|
Packit Service |
ce9802 |
def white_list_clear(self):
|
|
Packit Service |
ce9802 |
self.set_prop("WhiteListEntries", [''])
|