diff options
author | Jussi Kukkonen <jussi.kukkonen@intel.com> | 2013-03-11 15:39:31 +0200 |
---|---|---|
committer | Mark Ryan <mark.d.ryan@intel.com> | 2013-03-21 13:03:39 +0100 |
commit | 5f4e7b4a605527a84f63d3f1cc8f3a18dd34966f (patch) | |
tree | 2389b30c406a9be1adb01345d998d078a011af2c /src | |
parent | c8948af3178a57e84ca7c52a28bec8a9fc25eaa7 (diff) | |
download | dleyna-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>
Diffstat (limited to 'src')
-rw-r--r-- | src/msd/msd_main_window.py | 35 | ||||
-rw-r--r-- | 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: |