From 1252b7feac6d036329844c8e10aa9e5b94987a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Cort=C3=A9z?= Date: Wed, 25 May 2016 11:33:57 -0500 Subject: [PATCH] View friends and send chats to them with a button in the buffer --- src/controller/buffers.py | 15 +++++++++++- src/controller/longpoolthread.py | 6 ++--- src/controller/mainController.py | 42 ++++++++++++-------------------- src/sessionmanager/session.py | 20 +++++++++++++-- src/wxUI/mainWindow.py | 2 +- src/wxUI/tabs/home.py | 16 ++++++++++++ 6 files changed, 68 insertions(+), 33 deletions(-) diff --git a/src/controller/buffers.py b/src/controller/buffers.py index 1f06427..255df3c 100644 --- a/src/controller/buffers.py +++ b/src/controller/buffers.py @@ -288,4 +288,17 @@ class chatBuffer(baseBuffer): def send_chat_to_user(self, *args, **kwargs): text = self.tab.text.GetValue() if text == "": return - response = self.session.vk.client.messages.send(user_id=self.kwargs["user_id"], message=text) \ No newline at end of file + response = self.session.vk.client.messages.send(user_id=self.kwargs["user_id"], message=text) + +class peopleBuffer(feedBuffer): + + def create_tab(self, parent): + self.tab = home.peopleTab(parent) + + def connect_events(self): + super(peopleBuffer, self).connect_events() + widgetUtils.connect_event(self.tab.new_chat, widgetUtils.BUTTON_PRESSED, self.new_chat) + + def new_chat(self, *args, **kwargs): + user_id = self.session.db[self.name]["items"][self.tab.list.get_selected()]["id"] + pub.sendMessage("new-chat", user_id=user_id) \ No newline at end of file diff --git a/src/controller/longpoolthread.py b/src/controller/longpoolthread.py index bfeaafa..3a8d8a2 100644 --- a/src/controller/longpoolthread.py +++ b/src/controller/longpoolthread.py @@ -13,10 +13,10 @@ class worker(threading.Thread): while self.session.is_logged == True: p = self.l.check() for i in p: - print i.message_id, i.flags, i.from_id, i.user_id, i.mask, i.byself, i.message_flags +# print i.message_id, i.flags, i.from_id, i.user_id, i.mask, i.byself, i.message_flags # if i.flags == 4 or i.flags == 51 or i.flags == 49: if i.text != None and i.from_id != None and i.flags != None and i.message_flags != None: - print i.message_id, i.flags, i.from_id, i.user_id, i.mask, i.byself, i.message_flags +# print i.message_id, i.flags, i.from_id, i.user_id, i.mask, i.byself, i.message_flags # if i.from_id != None: - print "ordering sent stuff" +# print "ordering sent stuff" pub.sendMessage("order-sent-message", obj=i) diff --git a/src/controller/mainController.py b/src/controller/mainController.py index b315b3b..26fc5b8 100644 --- a/src/controller/mainController.py +++ b/src/controller/mainController.py @@ -76,6 +76,12 @@ class Controller(object): r_audio = buffers.audioBuffer(parent=self.window.tb, name="recommended_audio", composefunc="compose_audio", session=self.session, endpoint="getRecommendations", parent_endpoint="audio", full_list=True, count=self.session.settings["buffers"]["count_for_audio_buffers"]) self.buffers.append(r_audio) self.window.insert_buffer(r_audio.tab, _(u"Recommendations"), self.window.search("audios")) + people = buffers.empty(parent=self.window.tb, name="people") + self.buffers.append(people) + self.window.add_buffer(people.tab, _(u"People")) + friends = buffers.peopleBuffer(parent=self.window.tb, name="friends_", composefunc="compose_person", session=self.session, endpoint="get", parent_endpoint="friends", count=5000, fields="uid, first_name, last_name, last_seen") + self.buffers.append(friends) + self.window.insert_buffer(friends.tab, _(u"Friends"), self.window.search("people")) chats = buffers.empty(parent=self.window.tb, name="chats") self.buffers.append(chats) self.window.add_buffer(chats.tab, _(u"Chats")) @@ -91,6 +97,7 @@ class Controller(object): pub.subscribe(self.play_audios, "play-audios") pub.subscribe(self.view_post, "open-post") pub.subscribe(self.update_status_bar, "update-status-bar") + pub.subscribe(self.chat_from_id, "new-chat") widgetUtils.connect_event(self.window, widgetUtils.CLOSE_EVENT, self.exit) widgetUtils.connect_event(self.window, widgetUtils.MENU, self.update_buffer, menuitem=self.window.update_buffer) widgetUtils.connect_event(self.window, widgetUtils.MENU, self.check_for_updates, menuitem=self.window.check_for_updates) @@ -251,31 +258,6 @@ class Controller(object): return self.window.insert_buffer(buffer.tab, name_, position) - def new_chat(self, *args, **kwargs): - b = self.get_current_buffer() - if not hasattr(b, "get_users"): - b = self.search("home_timeline") - d = [] - for i in self.session.db["users"]: - d.append((i, self.session.get_user_name(i))) - for i in self.session.db["groups"]: - d.append((-i, self.session.get_user_name(-i))) - a = timeline.timelineDialog([i[1] for i in d]) - if a.get_response() == widgetUtils.OK: - user = a.get_user() - buffertype = a.get_buffer_type() - user_id = "" - for i in d: - if i[1] == user: - user_id = i[0] - if user_id == None: - commonMessages.no_user_exist() - return - buffer = buffers.chatBuffer(parent=self.window.tb, name="{0}_messages".format(user_id,), composefunc="compose_message", session=self.session, count=200, user_id=user_id, rev=1) - self.buffers.append(buffer) - self.window.insert_buffer(buffer.tab, _(u"Chat with {0}").format(self.session.get_user_name(user_id,)), self.window.search("chats")) - buffer.get_items() - def search_chat_buffer(self, user_id): for i in self.buffers: if "_messages" in i.name: @@ -283,10 +265,18 @@ class Controller(object): return None def chat_from_id(self, user_id): + b = self.search_chat_buffer(user_id) + if b != None: + pos = self.window.search(b.name) + self.window.change_buffer(pos) + return b.tab.text.SetFocus() buffer = buffers.chatBuffer(parent=self.window.tb, name="{0}_messages".format(user_id,), composefunc="compose_message", session=self.session, count=200, user_id=user_id, rev=1) self.buffers.append(buffer) self.window.insert_buffer(buffer.tab, _(u"Chat with {0}").format(self.session.get_user_name(user_id,)), self.window.search("chats")) - buffer.get_items() + pos = self.window.search(buffer.name) + self.window.change_buffer(pos) + wx.CallAfter(buffer.get_items) + buffer.tab.text.SetFocus() return True def get_chat(self, obj=None): diff --git a/src/sessionmanager/session.py b/src/sessionmanager/session.py index 03b6491..7e53215 100644 --- a/src/sessionmanager/session.py +++ b/src/sessionmanager/session.py @@ -17,6 +17,15 @@ sessions = {} # I've added the Date identifier (this is a field in unix time format), for special objects (like friendship indicators) because these objects doesn't have an own identifier. identifiers = ["aid", "gid", "uid", "pid", "id", "post_id", "nid", "date"] +platforms = {1: _(u"Movile application"), +2: _(u"iPhone"), +3: _(u"iPad"), +4: _(u"Android"), +5: _(u"Windows phone"), +6: _(u"Windows 8"), +7: _(u"Web or desktop app") +} + def find_item(list, item): """ Finds an item in a list by taking an identifier""" # determines the kind of identifier that we are using @@ -61,6 +70,12 @@ def add_text(status): message = utils.clean_text(txt[:139]) return message +def compose_person(status, session): + global platforms + original_date = arrow.get(status["last_seen"]["time"]) + last_seen = _(u"{0} from {1}").format(original_date.humanize(locale=languageHandler.getLanguage()), platforms[status["last_seen"]["platform"]]) + return [u"{0} {1}".format(status["first_name"], status["last_name"]), last_seen] + def compose_new(status, session): """ This method is used to compose an item of the news feed.""" user = session.get_user_name(status["source_id"]) @@ -243,6 +258,9 @@ class vkSession(object): if data != None: if type(data) == dict: num = self.order_buffer(name, data["items"], show_nextpage) + if data["items"][0].has_key("first_name"): + for i in data["items"]: + self.db["users"][i["id"]] = u"{0} {1}".format(i["first_name"], i["last_name"]) if data.has_key("profiles") and data.has_key("groups"): self.process_usernames(data) else: @@ -252,11 +270,9 @@ class vkSession(object): def get_messages(self, name="", *args, **kwargs): data = self.vk.client.messages.getHistory(*args, **kwargs) if data != None: - print data num = self.order_buffer(name, data["items"], False) return num - def get_user_name(self, user_id): if user_id > 0: if self.db["users"].has_key(user_id): diff --git a/src/wxUI/mainWindow.py b/src/wxUI/mainWindow.py index 78a727e..21d4913 100644 --- a/src/wxUI/mainWindow.py +++ b/src/wxUI/mainWindow.py @@ -50,7 +50,7 @@ class mainWindow(wx.Frame): self.tb.AddPage(buffer, name) def insert_buffer(self, buffer, name, pos): - self.tb.InsertSubPage(pos, buffer, name) + return self.tb.InsertSubPage(pos, buffer, name) def search(self, name_): for i in xrange(0, self.tb.GetPageCount()): diff --git a/src/wxUI/tabs/home.py b/src/wxUI/tabs/home.py index 8b42eec..08df84a 100644 --- a/src/wxUI/tabs/home.py +++ b/src/wxUI/tabs/home.py @@ -139,3 +139,19 @@ class chatTab(wx.Panel): box.Add(self.text, 0, wx.ALL, 5) return box +class peopleTab(homeTab): + + def create_list(self): + self.lbl = wx.StaticText(self, wx.NewId(), _(u"Friends")) + self.list = widgetUtils.list(self, *[_(u"Name"), _(u"Last seen")], style=wx.LC_REPORT) + self.list.set_windows_size(0, 190) + self.list.set_windows_size(1, 100) + self.list.set_size() + self.list.list.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnKeyDown) + + def create_post_buttons(self): + self.post = wx.Button(self, -1, _(u"&Post")) + self.new_chat = wx.Button(self, wx.NewId(), _(u"Send message")) + self.postBox = wx.BoxSizer(wx.HORIZONTAL) + self.postBox.Add(self.post, 0, wx.ALL, 5) + self.postBox.Add(self.new_chat, 0, wx.ALL, 5)