summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Kukkonen <jussi.kukkonen@intel.com>2013-03-11 15:39:31 +0200
committerMark Ryan <mark.d.ryan@intel.com>2013-03-21 13:03:39 +0100
commit5f4e7b4a605527a84f63d3f1cc8f3a18dd34966f (patch)
tree2389b30c406a9be1adb01345d998d078a011af2c
parentc8948af3178a57e84ca7c52a28bec8a9fc25eaa7 (diff)
downloaddleyna-control-5f4e7b4a605527a84f63d3f1cc8f3a18dd34966f.tar.gz
[UPnP] Add Server-abstraction, use it in MainWindow
Add the whole Server-object into the server-liststore: This way we don't need to add new columns when we need to use new properties like SortCaps. Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-rw-r--r--src/msd/msd_main_window.py35
-rw-r--r--src/msd/msd_upnp.py30
2 files changed, 37 insertions, 28 deletions
diff --git a/src/msd/msd_main_window.py b/src/msd/msd_main_window.py
index 3ecb2a8..7c4a7b2 100644
--- a/src/msd/msd_main_window.py
+++ b/src/msd/msd_main_window.py
@@ -44,38 +44,37 @@ class MainWindow(object):
self.__overlay.cancel_playback()
Gtk.main_quit()
- def __append_server_list_row(self, list_store, key, value):
- name, image = value
- if image:
- image = image.get_pixbuf()
+ def __append_server_list_row(self, list_store, server):
+ if server.icon:
+ image = server.icon.get_pixbuf()
image = image.scale_simple(32, 32, GdkPixbuf.InterpType.BILINEAR)
- return list_store.append([image, name, key])
+ return list_store.append([image, server.name, server])
def __create_server_list_store(self):
- list_store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str)
- for key, value in self.__state.get_server_list().iteritems():
- self.__append_server_list_row(list_store, key, value)
+ list_store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, GObject.TYPE_PYOBJECT)
+ for server in self.__state.get_server_list().itervalues():
+ self.__append_server_list_row(list_store, server)
return list_store
def __change_server(self, page, sel):
model, row = sel.get_selected()
if row != None:
- path = model.get_value(row, 2)
+ server = model.get_value(row, 2)
if page == 0:
- if self.__search_path != path:
- search_model = SearchModel(Container(path),
+ if self.__search_path != server.path:
+ search_model = SearchModel(Container(server.path),
self.__search_entry.get_text(),
self.__images.get_active(),
self.__videos.get_active(),
self.__music.get_active(),
self.__sort_order)
self.__search_view.set_model(search_model)
- self.__search_path = path
- elif self.__browse_path != path:
- browse_model = BrowseModel(Container(path),
+ self.__search_path = server.path
+ elif self.__browse_path != server.path:
+ browse_model = BrowseModel(Container(server.path),
self.__sort_order)
self.__browse_view.set_model(browse_model)
- self.__browse_path = path
+ self.__browse_path = server.path
def __server_selected(self, sel):
page = self.__notebook.get_current_page()
@@ -298,14 +297,14 @@ class MainWindow(object):
def __found_server(self, path):
liststore = self.__server_view.get_model()
- value = self.__state.get_server_list()[path]
- rowref = self.__append_server_list_row(liststore, path, value)
+ server = self.__state.get_server_list()[path]
+ rowref = self.__append_server_list_row(liststore, server)
self.__select_server(rowref)
def __lost_server(self, path):
liststore = self.__server_view.get_model()
rowref = liststore.get_iter_first()
- while rowref and liststore.get_value(rowref, 2) != path:
+ while rowref and liststore.get_value(rowref, 2).path != path:
rowref = liststore.iter_next(rowref)
if rowref:
path_to_delete = liststore.get_path(rowref)
diff --git a/src/msd/msd_upnp.py b/src/msd/msd_upnp.py
index 8534680..c9c2552 100644
--- a/src/msd/msd_upnp.py
+++ b/src/msd/msd_upnp.py
@@ -52,20 +52,30 @@ class Container(MediaObject):
reply_handler=on_reply,
error_handler=on_error)
-class State(object):
-
- @staticmethod
- def __create_server_tuple(path):
+class Server (object):
+ def __init__(self, path):
server = MediaObject(path)
- folderName = server.get_prop("FriendlyName");
+
+ self.path = path
+ self.name = server.get_prop("FriendlyName");
try:
icon_url = server.get_prop("IconURL");
- image = image_from_file(icon_url)
- except Exception:
- image = None
+ self.icon = image_from_file(icon_url);
+ except:
+ self.icon = None
- return (folderName, image)
+ try:
+ self.__sort_caps = server.get_prop("SortCaps");
+ except:
+ self.__sort_caps = []
+ self.__sort_all = "*" in self.__sort_caps
+
+ def has_sort_capability (self, cap):
+ return self.__sort_all or cap in self.__sort_caps
+
+
+class State(object):
def __on_get_servers_reply (self, servers):
for path in servers:
@@ -77,7 +87,7 @@ class State(object):
def __found_server(self, path):
if not path in self.__servers:
try:
- self.__servers[path] = State.__create_server_tuple(path)
+ self.__servers[path] = Server(path)
if self.__found_server_cb:
self.__found_server_cb(path)
finally: