if kwds is None:
kwds = {}
- self._indexing.clear_tasks()
self._indexing.add_task(
getattr(self._backend, func),
args,
elif source == SOURCE_CONFERENCES:
assert langId is not None
node = ConferencesNode(self._connection, langId)
+ elif source == SOURCE_MAGAZINES:
+ assert langId is not None
+ node = MagazinesNode(self._connection, langId)
+ elif source == SOURCE_SCRIPTURES:
+ assert langId is not None
+ node = ScripturesNode(self._connection, langId)
else:
raise NotImplementedError(source)
self._sources[key] = node
assert self._languagesRequest is not None
r = self._languagesRequest
self._languagesRequest = None
- r[1](self._languages)
+ r[1](e)
class Node(object):
def __init__(self, connection, parent, data, id):
Node.__init__(self, connection, parent, data, id)
- self._request = None
def is_leaf(self):
return False
def _get_children(self, on_success, on_error):
- assert self._request is None
assert self._children is None
- self._request = on_success, on_error
func, args, kwds = self._get_func()
self._connection.download(
func,
- self._on_success,
- self._on_error,
+ lambda data: self._on_success(data, on_success, on_error),
+ on_error,
args,
kwds,
)
raise NotImplementedError()
@misc_utils.log_exception(_moduleLogger)
- def _on_success(self, data):
- r = self._request
- self._request = None
+ def _on_success(self, data, on_success, on_error):
try:
self._children = [
self._create_child(child, i)
except Exception, e:
_moduleLogger.exception("Translating error")
self._children = None
- r[1](e)
+ on_error(e)
else:
- r[0](self._children)
-
- @misc_utils.log_exception(_moduleLogger)
- def _on_error(self, error):
- r = self._request
- self._request = None
- r[1](error)
+ on_success(self._children)
class LeafNode(Node):
return self._data["url"]
+class MagazinesNode(ParentNode):
+
+ def __init__(self, connection, langId):
+ ParentNode.__init__(self, connection, None, {}, SOURCE_MAGAZINES)
+ self._langId = langId
+
+ @property
+ def title(self):
+ return "Magazines"
+
+ def _get_func(self):
+ return "get_magazines", (self._langId, ), {}
+
+ def _create_child(self, data, id):
+ return MagazineNode(self._connection, self, data, id)
+
+
+class MagazineNode(ParentNode):
+
+ def __init__(self, connection, parent, data, id):
+ ParentNode.__init__(self, connection, parent, data, id)
+
+ @property
+ def title(self):
+ return self._data["title"]
+
+ def _get_func(self):
+ return "get_magazine_issues", (self._data["id"], ), {}
+
+ def _create_child(self, data, id):
+ return IssueNode(self._connection, self, data, id)
+
+
+class IssueNode(ParentNode):
+
+ def __init__(self, connection, parent, data, id):
+ ParentNode.__init__(self, connection, parent, data, id)
+
+ @property
+ def title(self):
+ return self._data["title"]
+
+ def _get_func(self):
+ return "get_magazine_articles", (self._data["id"], ), {}
+
+ def _create_child(self, data, id):
+ return ArticleNode(self._connection, self, data, id)
+
+
+class ArticleNode(LeafNode):
+
+ def __init__(self, connection, parent, data, id):
+ LeafNode.__init__(self, connection, parent, data, id)
+
+ @property
+ def can_navigate(self):
+ return True
+
+ @property
+ def title(self):
+ return self._data["title"]
+
+ @property
+ def subtitle(self):
+ speaker = self._data["author"]
+ if speaker is not None:
+ return speaker
+ else:
+ return ""
+
+ @property
+ def uri(self):
+ return self._data["url"]
+
+
+class ScripturesNode(ParentNode):
+
+ def __init__(self, connection, langId):
+ ParentNode.__init__(self, connection, None, {}, SOURCE_SCRIPTURES)
+ self._langId = langId
+
+ @property
+ def title(self):
+ return "Scriptures"
+
+ def _get_func(self):
+ return "get_scriptures", (self._langId, ), {}
+
+ def _create_child(self, data, id):
+ return ScriptureNode(self._connection, self, data, id)
+
+
+class ScriptureNode(ParentNode):
+
+ def __init__(self, connection, parent, data, id):
+ ParentNode.__init__(self, connection, parent, data, id)
+
+ @property
+ def title(self):
+ return self._data["title"]
+
+ def _get_func(self):
+ return "get_scripture_books", (self._data["id"], ), {}
+
+ def _create_child(self, data, id):
+ return BookNode(self._connection, self, data, id)
+
+
+class BookNode(ParentNode):
+
+ def __init__(self, connection, parent, data, id):
+ ParentNode.__init__(self, connection, parent, data, id)
+
+ @property
+ def title(self):
+ return self._data["title"]
+
+ def _get_func(self):
+ return "get_scripture_chapters", (self._data["id"], ), {}
+
+ def _create_child(self, data, id):
+ return ChapterNode(self._connection, self, data, id)
+
+
+class ChapterNode(LeafNode):
+
+ def __init__(self, connection, parent, data, id):
+ LeafNode.__init__(self, connection, parent, data, id)
+
+ @property
+ def can_navigate(self):
+ return True
+
+ @property
+ def title(self):
+ return self._data["title"]
+
+ @property
+ def subtitle(self):
+ return ""
+
+ @property
+ def uri(self):
+ return self._data["url"]
+
+
def walk_ancestors(node):
while True:
yield node