From b470c7875f79563ffc0c05f68c917866c2ca4d54 Mon Sep 17 00:00:00 2001
From: Florent Le Coz <louiz@louiz.org>
Date: Mon, 27 Jun 2011 22:01:57 +0200
Subject: Beep() on highlight/message/private-messages (configurable)

---
 data/default_config.cfg | 10 ++++++++++
 src/core.py             |  6 ++++++
 src/room.py             |  5 +++++
 3 files changed, 21 insertions(+)

diff --git a/data/default_config.cfg b/data/default_config.cfg
index c376a73c..80ce9f35 100644
--- a/data/default_config.cfg
+++ b/data/default_config.cfg
@@ -136,6 +136,16 @@ log_dir =
 # with no activity, set to true. Else, set to false
 show_inactive_tabs = true
 
+# The terminal can beep on various event. Put the event you want in a list
+# (separated by spaces).
+# The events can be
+# - highlight (when you are highlighted in a MUC)
+# - private (when a new private message is received, from your contacts or
+#            someone from a MUC)
+# - message (any message from a MUC)
+beep_on = highlight private
+
+
 # Theme
 
 # If themes_dir is not set, logs will searched for in $XDG_DATA_HOME/poezio/themes,
diff --git a/src/core.py b/src/core.py
index f3c406ad..c4c0edaa 100644
--- a/src/core.py
+++ b/src/core.py
@@ -516,6 +516,8 @@ class Core(object):
                 conversation.remote_wants_chatstates = True
             else:
                 conversation.remote_wants_chatstates = False
+        if 'private' in config.get('beep_on', 'highlight private').split():
+            curses.beep()
         logger.log_message(jid.full.replace('/', '\\'), nick_from, body)
         if conversation is self.current_tab():
             self.refresh_window()
@@ -568,6 +570,8 @@ class Core(object):
             else:
                 conversation.remote_wants_chatstates = False
         logger.log_message(jid.bare, remote_nick, body)
+        if 'private' in config.get('beep_on', 'highlight private').split():
+            curses.beep()
         if self.current_tab() is not conversation:
             conversation.set_color_state(theme.COLOR_TAB_PRIVATE)
             self.refresh_tab_win()
@@ -986,6 +990,8 @@ class Core(object):
             if tab is self.current_tab():
                 tab.text_win.refresh(tab._room)
             self.refresh_tab_win()
+            if 'message' in config.get('beep_on', 'highlight private').split():
+                curses.beep()
 
     def add_message_to_text_buffer(self, room, txt, time=None, nickname=None, history=None):
         """
diff --git a/src/room.py b/src/room.py
index a112fc7b..5d4c4ce6 100644
--- a/src/room.py
+++ b/src/room.py
@@ -24,6 +24,7 @@ import common
 import theme
 
 import logging
+import curses
 
 log = logging.getLogger(__name__)
 
@@ -77,6 +78,10 @@ class Room(TextBuffer):
                             self.set_color_state(theme.COLOR_TAB_HIGHLIGHT)
                         color = theme.COLOR_HIGHLIGHT_NICK
                         break
+        if color:
+            beep_on = config.get('beep_on', 'highlight private').split()
+            if 'highlight' in beep_on and 'message' not in beep_on:
+                curses.beep()
         return color
 
     def get_user_by_name(self, nick):
-- 
cgit v1.2.3