From 2bcc14888c946b287fe1e0df9109a2fc2298cb82 Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Thu, 31 Jan 2019 16:48:21 -0600 Subject: [PATCH] Added view and presenter for topic displayer. Needs some more methods yet --- src/presenters/postDisplayer.py | 84 ++++++++++++++++++++++++++++++++ src/views/dialogs/postDisplay.py | 35 +++++++++++++ 2 files changed, 119 insertions(+) diff --git a/src/presenters/postDisplayer.py b/src/presenters/postDisplayer.py index 81350e0..c216392 100644 --- a/src/presenters/postDisplayer.py +++ b/src/presenters/postDisplayer.py @@ -502,6 +502,90 @@ class displayCommentPresenter(displayPostPresenter): a = displayCommentPresenter(session=self.session, postObject=c, interactor=interactors.displayPostInteractor(), view=views.displayComment()) self.clear_comments_list() +class displayTopicPresenter(displayPostPresenter): + + def __init__(self, session, postObject, group_id, view, interactor): + self.type = "topic" + self.modulename = "display_topic" + self.interactor = interactor + self.view = view + self.interactor.install(view=view, presenter=self, modulename=self.modulename) + self.session = session + self.post = postObject + self.group_id = group_id + self.load_images = False + # We'll put images here, so it will be easier to work with them. + self.images = [] + self.imageIndex = 0 + result = self.get_post_information() + # Stop loading everything else if post was deleted. + if result == False: + self.interactor.uninstall() + return + self.worker = threading.Thread(target=self.load_all_components) + self.worker.finished = threading.Event() + self.worker.start() + self.attachments = [] + self.run() + + def load_all_components(self): + self.get_comments() + + def get_post_information(self): + title = self.post["title"] + self.send_message("set_title", value=title) + return True + + def get_comments(self): + """ Get comments and insert them in a list.""" + self.comments = self.session.vk.client.board.getComments(group_id=self.group_id, topic_id=self.post["id"], need_likes=1, count=100, extended=1) +# print(self.comments["items"]) +# print(self.post) + comments_ = [] + for i in self.comments["items"]: + # If comment has a "deleted" key it should not be displayed, obviously. + if "deleted" in i: + continue + from_ = get_user(i["from_id"], self.comments["profiles"]) + # match user mentions inside text comment. + matched_data = re.match(".*(\[id\d+:bp-\d+_\d+\|)(\D+)(\])", i["text"]) + # If matched data exists we should modify the title. +# if len(matched_data.groups()) > 2: +# from_ = "{from_} > {to_}".format(from_=from_, to_=matched_data.groups()[1]) + original_date = arrow.get(i["date"]) + created_at = original_date.humanize(locale=languageHandler.curLang[:2]) + likes = str(i["likes"]["count"]) + if matched_data != None: + text = re.sub("\[id\d+:bp-\d+_\d+\|\D+\]", matched_data.groups()[1]+", ", i["text"]) + else: + text = i["text"] + comments_.append((from_, text, created_at, likes)) + self.send_message("add_items", control="comments", items=comments_) + + def post_like(self): + c = self.interactor.view.comments.get_selected() + id = self.comments["items"][c]["id"] + if self.comments["items"][c]["likes"]["user_likes"] == 1: + l = self.session.vk.client.likes.delete(owner_id=-1*self.group_id, item_id=id, type="topic_comment") + output.speak(_("You don't like this")) + self.comments["items"][c]["likes"]["count"] = l["likes"] + self.comments["items"][c]["likes"]["user_likes"] = 2 + self.send_message("set_label", control="like", label=_("&Like")) + else: + l = self.session.vk.client.likes.add(owner_id=-1*self.group_id, item_id=id, type="topic_comment") + output.speak(_("You liked this")) + self.send_message("set_label", control="like", label=_("&Dislike")) + self.comments["items"][c]["likes"]["count"] = l["likes"] + self.comments["items"][c]["likes"]["user_likes"] = 1 + self.clear_comments_list() + + def change_comment(self, comment): + comment = self.comments["items"][comment] + if comment["likes"]["user_likes"] == 1: + self.send_message("set_label", control="like", label=_("&Dislike")) + else: + self.send_message("set_label", control="like", label=_("&Like")) + class displayAudioPresenter(base.basePresenter): def __init__(self, session, postObject, view, interactor): super(displayAudioPresenter, self).__init__(view=view, interactor=interactor, modulename="display_audio") diff --git a/src/views/dialogs/postDisplay.py b/src/views/dialogs/postDisplay.py index c6659df..dbb874e 100644 --- a/src/views/dialogs/postDisplay.py +++ b/src/views/dialogs/postDisplay.py @@ -193,6 +193,41 @@ class displayComment(displayBasicPost): if comment: box.Add(self.comment, 0, wx.ALL, 5) return box +class displayTopic(displayBasicPost): + def __init__(self, *args, **kwargs): + super(displayTopic, self).__init__(*args, **kwargs) + comments_box = self.create_comments_list() + self.sizer.Add(comments_box, 0, wx.ALL, 5) + attachments_box = self.create_attachments() + self.sizer.Add(attachments_box, 0, wx.ALL, 5) + self.attachments.list.Enable(False) + self.create_photo_viewer() + self.image.Enable(False) + self.create_tools_button() + self.sizer.Add(self.tools, 0, wx.ALL, 5) + actions_box = self.create_action_buttons() + self.sizer.Add(actions_box, 0, wx.ALL, 5) + self.sizer.Add(self.create_dialog_buttons()) + self.done() + + def create_action_buttons(self, comment=True): + self.like = wx.Button(self.panel, -1, _("&Like")) + if comment: self.comment = wx.Button(self.panel, -1, _("Add comment")) + box = wx.BoxSizer(wx.HORIZONTAL) + box.Add(self.like, 0, wx.ALL, 5) + if comment: box.Add(self.comment, 0, wx.ALL, 5) + return box + + def create_comments_list(self): + lbl = wx.StaticText(self.panel, -1, _("Posts")) + self.comments = widgetUtils.list(self.panel, _("User"), _("Comment"), _("Date"), _("Likes"), style=wx.LC_REPORT) + self.reply = wx.Button(self.panel, -1, _("Reply")) + box = wx.BoxSizer(wx.HORIZONTAL) + box.Add(lbl, 0, wx.ALL, 5) + box.Add(self.comments.list, 0, wx.ALL, 5) + box.Add(self.reply, 0, wx.ALL, 5) + return box + class displayAudio(widgetUtils.BaseDialog): def __init__(self, *args, **kwargs): super(displayAudio, self).__init__(parent=None, *args, **kwargs)