From b82c94bf51a02fa303610d8965f6fc4e221f3d8f Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Tue, 11 Dec 2018 11:45:38 -0600 Subject: [PATCH] Added chat settings in the config dialog --- src/controller/configuration.py | 9 +++++++ src/controller/mainController.py | 22 ++++++++++++------ src/session.defaults | 9 ++++++- .../{chat.ogg => message_received.ogg} | Bin src/sounds/default/message_unread.ogg | Bin 0 -> 7780 bytes src/wxUI/dialogs/configuration.py | 19 +++++++++++++++ 6 files changed, 51 insertions(+), 8 deletions(-) rename src/sounds/default/{chat.ogg => message_received.ogg} (100%) create mode 100644 src/sounds/default/message_unread.ogg diff --git a/src/controller/configuration.py b/src/controller/configuration.py index f1ad98e..65eecc6 100644 --- a/src/controller/configuration.py +++ b/src/controller/configuration.py @@ -14,6 +14,11 @@ class configuration(object): self.dialog.set_value("general", "wall_buffer_count", self.session.settings["buffers"]["count_for_wall_buffers"]) self.dialog.set_value("general", "video_buffers_count", self.session.settings["buffers"]["count_for_video_buffers"]) self.dialog.set_value("general", "load_images", self.session.settings["general"]["load_images"]) + self.dialog.create_chat() + self.dialog.set_value("chat", "notify_online", self.session.settings["chat"]["notify_online"]) + self.dialog.set_value("chat", "notify_offline", self.session.settings["chat"]["notify_offline"]) + self.dialog.set_value("chat", "open_unread_conversations", self.session.settings["chat"]["open_unread_conversations"]) + self.dialog.set_value("chat", "automove_to_conversations", self.session.settings["chat"]["automove_to_conversations"]) self.dialog.realize() self.response = self.dialog.get_response() @@ -21,4 +26,8 @@ class configuration(object): self.session.settings["buffers"]["count_for_audio_buffers"] = self.dialog.get_value("general", "audio_buffers_count") self.session.settings["buffers"]["count_for_video_buffers"] = self.dialog.get_value("general", "video_buffers_count") self.session.settings["general"]["load_images"] = self.dialog.get_value("general", "load_images") + self.session.settings["chat"]["notify_online"] = self.dialog.get_value("chat", "notify_online") + self.session.settings["chat"]["notify_offline"] = self.dialog.get_value("chat", "notify_offline") + self.session.settings["chat"]["open_unread_conversations"] = self.dialog.get_value("chat", "open_unread_conversations") + self.session.settings["chat"]["automove_to_conversations"] = self.dialog.get_value("chat", "automove_to_conversations") self.session.settings.write() diff --git a/src/controller/mainController.py b/src/controller/mainController.py index 1a7d4b7..3a64e03 100644 --- a/src/controller/mainController.py +++ b/src/controller/mainController.py @@ -377,11 +377,15 @@ class Controller(object): return True def user_online(self, event): + if self.session.settings["chat"]["notify_online"] == False: + return user_name = self.session.get_user_name(event.user_id, "nom") msg = _(u"{0} is online.").format(user_name,) self.window.notify(_("Socializer"), msg) def user_offline(self, event): + if self.session.settings["chat"]["notify_offline"] == False: + return user_name = self.session.get_user_name(event.user_id, "nom") msg = _(u"{0} is offline.").format(user_name,) self.window.notify(_("Socializer"), msg) @@ -389,15 +393,18 @@ class Controller(object): def get_chat(self, obj=None): """ Searches or creates a chat buffer with the id of the user that is sending or receiving a message. obj vk_api.longpoll.EventType: an event wich defines some data from the vk's long poll server.""" + # If someone else sends a message to the current user. if obj.to_me: buffer = self.search_chat_buffer(obj.user_id) uid = obj.user_id + # If the current user sends a message to someone else. else: buffer = self.search_chat_buffer(obj.peer_id) uid = obj.peer_id + # If there is no buffer, we must create one in a wxThread so it will not crash. if buffer == None: - wx.CallAfter(self.chat_from_id, uid) - self.session.soundplayer.play("chat.ogg") + wx.CallAfter(self.chat_from_id, uid, setfocus=self.session.settings["chat"]["automove_to_conversations"]) + self.session.soundplayer.play("message_received.ogg") return # If the chat already exists, let's create a dictionary wich will contains data of the received message. message = {"id": obj.message_id, "user_id": uid, "date": obj.timestamp, "body": obj.text, "attachments": obj.attachments} @@ -407,7 +414,6 @@ class Controller(object): message_ids = message["id"] results = self.session.vk.client.messages.getById(message_ids=message_ids) message = results["items"][0] - # If outbox it's true, it means that message["from_id"] should be the current user. If not, the obj.user_id should be taken. if obj.from_me: message["from_id"] = self.session.user_id else: @@ -417,7 +423,7 @@ class Controller(object): # ToDo: Clean this code and test how is the database working with this set to True. num = self.session.order_buffer(buffer.name, data, True) buffer.insert(self.session.db[buffer.name]["items"][-1], False) - self.session.soundplayer.play("chat.ogg") + self.session.soundplayer.play("message_received.ogg") def set_online(self): try: @@ -432,6 +438,8 @@ class Controller(object): log.error("Error in setting offline status for the current user") def create_unread_messages(self): + if self.session.settings["chat"]["open_unread_conversations"] == False: + return try: log.debug("Getting possible unread messages.") msgs = self.session.vk.client.messages.getDialogs(count=200, unread=1) @@ -456,7 +464,7 @@ class Controller(object): def get_audio_albums(self, user_id=None): try: log.debug("Create audio albums...") - albums = self.session.vk.client.audio.getAlbums(owner_id=user_id) + albums = self.session.vk.client_audio.get_albums(owner_id=user_id) except VkApiError as ex: if ex.code == 6: log.exception("Something went wrong when getting albums. Waiting a second to retry") @@ -464,8 +472,8 @@ class Controller(object): return self.get_audio_albums(user_id=user_id) elif ex.code == 10: return - self.session.audio_albums = albums["items"] - for i in albums["items"]: + self.session.audio_albums = albums + for i in albums: buffer = buffers.audioAlbum(parent=self.window.tb, name="{0}_audio_album".format(i["id"],), composefunc="render_audio", session=self.session, endpoint="get", parent_endpoint="audio", full_list=True, count=self.session.settings["buffers"]["count_for_audio_buffers"], user_id=user_id, album_id=i["id"]) buffer.can_get_items = False # Translators: {0} Will be replaced with an audio album's title. diff --git a/src/session.defaults b/src/session.defaults index 517e4b6..c8d7c35 100644 --- a/src/session.defaults +++ b/src/session.defaults @@ -2,6 +2,7 @@ user = string(default="") password = string(default="") token = string(default="") + [general] reverse_timelines = boolean(default=False) load_images = boolean(default=True) @@ -15,4 +16,10 @@ volume = float(default=1.0) input_device = string(default="Default") output_device = string(default="Default") session_mute = boolean(default=False) -current_soundpack = string(default="default") \ No newline at end of file +current_soundpack = string(default="default") + +[chat] +notify_online = boolean(default=True) +notify_offline = boolean(default=True) +open_unread_conversations = boolean(default=True) +automove_to_conversations = boolean(default=True) \ No newline at end of file diff --git a/src/sounds/default/chat.ogg b/src/sounds/default/message_received.ogg similarity index 100% rename from src/sounds/default/chat.ogg rename to src/sounds/default/message_received.ogg diff --git a/src/sounds/default/message_unread.ogg b/src/sounds/default/message_unread.ogg new file mode 100644 index 0000000000000000000000000000000000000000..56caee844533bd1ffed3c447237427bd36ae6bc6 GIT binary patch literal 7780 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 literal 0 HcmV?d00001 diff --git a/src/wxUI/dialogs/configuration.py b/src/wxUI/dialogs/configuration.py index 504c098..74cf9b0 100644 --- a/src/wxUI/dialogs/configuration.py +++ b/src/wxUI/dialogs/configuration.py @@ -24,6 +24,20 @@ class general(wx.Panel, widgetUtils.BaseDialog): sizer.Add(self.load_images, 0, wx.ALL, 5) self.SetSizer(sizer) +class chat(wx.Panel, widgetUtils.BaseDialog): + def __init__(self, panel): + super(chat, self).__init__(panel) + sizer = wx.BoxSizer(wx.VERTICAL) + self.notify_online = wx.CheckBox(self, wx.NewId(), _(u"Show notifications when users are online")) + sizer.Add(self.notify_online, 0, wx.ALL, 5) + self.notify_offline = wx.CheckBox(self, wx.NewId(), _(u"Show notifications when users are offline")) + sizer.Add(self.notify_offline, 0, wx.ALL, 5) + self.open_unread_conversations = wx.CheckBox(self, wx.NewId(), _(u"Open unread conversations at startup")) + sizer.Add(self.open_unread_conversations, 0, wx.ALL, 5) + self.automove_to_conversations = wx.CheckBox(self, wx.NewId(), _(u"Move focus to new conversations")) + sizer.Add(self.automove_to_conversations, 0, wx.ALL, 5) + self.SetSizer(sizer) + class configurationDialog(widgetUtils.BaseDialog): def __init__(self, title): @@ -37,6 +51,11 @@ class configurationDialog(widgetUtils.BaseDialog): self.notebook.AddPage(self.general, _(u"General")) self.general.SetFocus() + def create_chat(self): + self.chat = chat(self.notebook) + self.notebook.AddPage(self.chat, _(u"Chat settings")) + + def realize(self): self.sizer.Add(self.notebook, 0, wx.ALL, 5) ok_cancel_box = wx.BoxSizer(wx.HORIZONTAL)