diff --git a/src/controller/buffers.py b/src/controller/buffers.py index ef2fb29..932b92b 100644 --- a/src/controller/buffers.py +++ b/src/controller/buffers.py @@ -130,7 +130,7 @@ class baseBuffer(object): attachments = [] if hasattr(p, "attachments"): attachments = p.attachments - call_threaded(pub.sendMessage, "post", parent_endpoint="wall", child_endpoint="post", attachments_list=attachments, post_arguments=post_arguments) + call_threaded(pub.sendMessage, "post", parent_endpoint="wall", child_endpoint="post", from_buffer=self.name, attachments_list=attachments, post_arguments=post_arguments) def connect_events(self): """ Bind all events to this buffer""" @@ -417,7 +417,7 @@ class feedBuffer(baseBuffer): attachments = [] if hasattr(p, "attachments"): attachments = p.attachments - call_threaded(pub.sendMessage, "post", parent_endpoint="wall", child_endpoint="post", attachments_list=attachments, post_arguments=post_arguments) + call_threaded(pub.sendMessage, "post", parent_endpoint="wall", child_endpoint="post", from_buffer=self.name, attachments_list=attachments, post_arguments=post_arguments) def open_in_browser(self, *args, **kwargs): post = self.get_post() @@ -478,7 +478,7 @@ class communityBuffer(feedBuffer): attachments = [] if hasattr(p, "attachments"): attachments = p.attachments - call_threaded(pub.sendMessage, "post", parent_endpoint="wall", child_endpoint="post", attachments_list=attachments, post_arguments=post_arguments) + call_threaded(pub.sendMessage, "post", parent_endpoint="wall", child_endpoint="post", from_buffer=self.name, attachments_list=attachments, post_arguments=post_arguments) class topicBuffer(feedBuffer): @@ -531,7 +531,7 @@ class topicBuffer(feedBuffer): attachments = [] if hasattr(p, "attachments"): attachments = p.attachments - call_threaded(pub.sendMessage, "post", parent_endpoint="board", child_endpoint="addTopic", attachments_list=attachments, post_arguments=post_arguments) + call_threaded(pub.sendMessage, "post", parent_endpoint="board", child_endpoint="addTopic", from_buffer=self.name, attachments_list=attachments, post_arguments=post_arguments) class documentBuffer(feedBuffer): can_get_items = False diff --git a/src/controller/mainController.py b/src/controller/mainController.py index a28509f..80f9d08 100644 --- a/src/controller/mainController.py +++ b/src/controller/mainController.py @@ -332,15 +332,11 @@ class Controller(object): pub.unsubscribe(self.notify, "notify") pub.subscribe(self.create_timeline, "create-timeline") - def in_post(self, buffer): - """ This event is triggered whenever an user requires an update in their buffers. For example after sending a post successfully. - The function updates the main newsfeed buffer, and the buffer from where the post was sent. - @buffer str: name of the buffer where the post has been generated. - """ - buffer = self.search(buffer) - buffer.get_items() - buffer = self.search("home_timeline") - buffer.get_items() + def in_post(self, from_buffer=None): + if from_buffer != None: + log.debug("Post received in buffer %s, updating... " % (from_buffer,)) + buffer = self.search(from_buffer) + buffer.get_items() def download(self, url, filename): """ Download a file to te current user's computer. diff --git a/src/sessionmanager/session.py b/src/sessionmanager/session.py index b882606..2d7c5e2 100644 --- a/src/sessionmanager/session.py +++ b/src/sessionmanager/session.py @@ -308,14 +308,18 @@ class vkSession(object): user = self.vk.client.users.get(fields="uid, first_name, last_name") self.user_id = user[0]["id"] - def post(self, parent_endpoint, child_endpoint, attachments_list=[], post_arguments={}): + def post(self, parent_endpoint, child_endpoint, from_buffer=None, attachments_list=[], post_arguments={}): """ Generic function to be called whenever user wants to post something to VK. This function should be capable of uploading all attachments before posting, and send a special event in case the post has failed, So the program can recreate the post and show it back to the user.""" attachments = "" - print(attachments_list) if len(attachments_list) > 0: - attachments = self.upload_attachments(attachments_list, post_arguments.get("peer_id")) + try: + attachments = self.upload_attachments(attachments_list, post_arguments.get("peer_id")) + except Exception as error: + log.exception("Error calling method %s.%s with arguments: %r. Failed during loading attachments. Error: %s" % (parent_endpoint, child_endpoint, post_arguments, str(error))) + # Report a failed function here too with same arguments so the client should be able to recreate it again. + pub.sendMessage("postFailed", parent_endpoint=parent_endpoint, child_endpoint=child_endpoint, from_buffer=from_buffer, attachments_list=attachments_list, post_arguments=post_arguments) # VK generally defines all kind of messages under "text", "message" or "body" so let's try with all of those possible_message_keys = ["text", "message", "body"] for i in possible_message_keys: @@ -334,9 +338,16 @@ class vkSession(object): else: post_arguments.update(attachments=attachments) # Determines the correct functions to call here. - parent_endpoint = getattr(self.vk.client, parent_endpoint) - endpoint = getattr(parent_endpoint, child_endpoint) - post = endpoint(**post_arguments) + endpoint = getattr(self.vk.client, parent_endpoint) + endpoint = getattr(endpoint, child_endpoint) + try: + post = endpoint(**post_arguments) + # Once the post has been send, let's report it to the interested objects. + pub.sendMessage("posted", from_buffer=from_buffer) + except Exception as error: + log.exception("Error calling method %s.%s with arguments: %r. Error: %s" % (parent_endpoint, child_endpoint, post_arguments, str(error))) + # Report a failed function here too with same arguments so the client should be able to recreate it again. + pub.sendMessage("postFailed", parent_endpoint=parent_endpoint, child_endpoint=child_endpoint, from_buffer=from_buffer, attachments_list=attachments_list, post_arguments=post_arguments) def upload_attachments(self, attachments, peer_id=None): """ Upload attachments to VK before posting them.