Blame test/dbus/mediaconsole.py

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", [''])