From 5f4e7b4a605527a84f63d3f1cc8f3a18dd34966f Mon Sep 17 00:00:00 2001 From: Jussi Kukkonen Date: Mon, 11 Mar 2013 15:39:31 +0200 Subject: [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 --- src/msd/msd_main_window.py | 35 +++++++++++++++++------------------ src/msd/msd_upnp.py | 30 ++++++++++++++++++++---------- 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: -- cgit v1.2.1