From bf5b924058fec1b18823e0e0e49366a926e71e7c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 16 Nov 2007 17:59:16 +0000 Subject: [PATCH] Fix bugs in sort for series-to-collection feature. Handle sending multiple copies of book to device correctly. --- src/libprs500/devices/prs500/books.py | 18 ++++++++++++++---- src/libprs500/devices/prs505/books.py | 20 ++++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/libprs500/devices/prs500/books.py b/src/libprs500/devices/prs500/books.py index 30a64da3a6..fa90bf8ec0 100644 --- a/src/libprs500/devices/prs500/books.py +++ b/src/libprs500/devices/prs500/books.py @@ -235,7 +235,7 @@ class BookList(_BookList): Also remove book from any collections it is part of. ''' for book in self: - if path.endswith(book.path): + if path.endswith(book.rpath): self.remove(book) self._delete_book(book.elem) break @@ -255,8 +255,18 @@ class BookList(_BookList): max = nid return max + def book_by_path(self, path): + for child in self.root_element.childNodes: + if child.nodeType == child.ELEMENT_NODE and child.hasAttribute("path"): + if path == child.getAttribute('path'): + return child + return None + def add_book(self, info, name, size, ctime): """ Add a node into DOM tree representing a book """ + book = self.book_by_path(name) + if book is not None: + self.remove_book(name) node = self.document.createElement(self.prefix + "text") mime = MIME_MAP[name[name.rfind(".")+1:]] cid = self.max_id()+1 @@ -357,8 +367,8 @@ class BookList(_BookList): pl = self.playlist_by_title(title) if not pl: continue - db_ids = [i.getAttribute('id') for i in pl.childNodes] - pl_book_ids = [self.book_by_id(i.getAttribute('id')).db_id for i in pl.childNodes] + db_ids = [i.getAttribute('id') for i in pl.childNodes if hasattr(i, 'getAttribute')] + pl_book_ids = [self.book_by_id(i.getAttribute('id')).db_id for i in pl.childNodes if hasattr(i, 'getAttribute')] map = {} for i, j in zip(pl_book_ids, db_ids): map[i] = j @@ -367,7 +377,7 @@ class BookList(_BookList): if len(ordered_ids) < len(pl.childNodes): continue - children = [i for i in pl.childNodes] + children = [i for i in pl.childNodes if hasattr(i, 'getAttribute')] for child in children: pl.removeChild(child) child.unlink() diff --git a/src/libprs500/devices/prs505/books.py b/src/libprs500/devices/prs505/books.py index 28833aa5c1..cfb9f60574 100644 --- a/src/libprs500/devices/prs505/books.py +++ b/src/libprs500/devices/prs505/books.py @@ -180,8 +180,20 @@ class BookList(_BookList): def supports_tags(self): return True + def book_by_path(self, path): + for child in self.root_element.childNodes: + if child.nodeType == child.ELEMENT_NODE and child.hasAttribute("path"): + if path == child.getAttribute('path'): + return child + return None + def add_book(self, info, name, size, ctime): """ Add a node into the DOM tree, representing a book """ + book = self.book_by_path(name) + if book is not None: + print name + self.remove_book(name) + node = self.document.createElement(self.prefix + "text") mime = MIME_MAP[name.rpartition('.')[-1]] cid = self.max_id()+1 @@ -242,7 +254,7 @@ class BookList(_BookList): Also remove book from any collections it is part of. ''' for book in self: - if path.endswith(book.path): + if path.endswith(book.rpath): self.remove(book) self._delete_book(book.elem) break @@ -354,8 +366,8 @@ class BookList(_BookList): pl = self.playlist_by_title(title) if not pl: continue - db_ids = [i.getAttribute('id') for i in pl.childNodes] - pl_book_ids = [self.book_by_id(i.getAttribute('id')).db_id for i in pl.childNodes] + db_ids = [i.getAttribute('id') for i in pl.childNodes if hasattr(i, 'getAttribute')] + pl_book_ids = [self.book_by_id(i.getAttribute('id')).db_id for i in pl.childNodes if hasattr(i, 'getAttribute')] map = {} for i, j in zip(pl_book_ids, db_ids): map[i] = j @@ -364,7 +376,7 @@ class BookList(_BookList): if len(ordered_ids) < len(pl.childNodes): continue - children = [i for i in pl.childNodes] + children = [i for i in pl.childNodes if hasattr(i, 'getAttribute')] for child in children: pl.removeChild(child) child.unlink()