Automated merge with http://hg.louiz.org/poezio
This commit is contained in:
commit
85d645b7d2
5 changed files with 33 additions and 21 deletions
|
@ -141,6 +141,12 @@ send_os_info = true
|
|||
# Set to false if you don't want people to know that information
|
||||
send_time = true
|
||||
|
||||
# Configure the number of maximum lines and messages (for each tab) that
|
||||
# can be kept in memory. If poezio consumes too much memory, lower these
|
||||
# values
|
||||
max_messages_in_memory = 2048
|
||||
max_lines_in_memory = 2048
|
||||
|
||||
[var]
|
||||
# You should not edit this section, it is just used by poezio
|
||||
# to save various data across restarts
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with Poezio. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from text_buffer import TextBuffer, MESSAGE_NB_LIMIT
|
||||
from text_buffer import TextBuffer
|
||||
from datetime import datetime
|
||||
from random import randrange
|
||||
from config import config
|
||||
|
@ -29,8 +29,8 @@ import logging
|
|||
log = logging.getLogger(__name__)
|
||||
|
||||
class Room(TextBuffer):
|
||||
def __init__(self, name, nick):
|
||||
TextBuffer.__init__(self)
|
||||
def __init__(self, name, nick, messages_nb_limit=config.get('max_messages_in_memory', 2048)):
|
||||
TextBuffer.__init__(self, messages_nb_limit)
|
||||
self.name = name
|
||||
self.own_nick = nick
|
||||
self.color_state = theme.COLOR_TAB_NORMAL # color used in RoomInfo
|
||||
|
@ -115,7 +115,7 @@ class Room(TextBuffer):
|
|||
time = time if time is not None else datetime.now()
|
||||
nick_color = nick_color or user.color if user else None
|
||||
message = Message(txt, time, nickname, nick_color, color, colorized, user=user)
|
||||
while len(self.messages) > MESSAGE_NB_LIMIT:
|
||||
while len(self.messages) > self.messages_nb_limit:
|
||||
self.messages.pop(0)
|
||||
self.messages.append(message)
|
||||
for window in self.windows: # make the associated windows
|
||||
|
|
27
src/tabs.py
27
src/tabs.py
|
@ -259,6 +259,16 @@ class ChatTab(Tab):
|
|||
def command_say(self, line):
|
||||
raise NotImplementedError
|
||||
|
||||
class TabWithInfoWin(Tab):
|
||||
def __init__(self):
|
||||
self.info_win = windows.TextWin(20)
|
||||
self.core.information_buffer.add_window(self.info_win)
|
||||
|
||||
def __del__(self):
|
||||
self.core.information_buffer.del_window(self.info_win)
|
||||
del self.info_win
|
||||
Tab.__del__(self)
|
||||
|
||||
class InfoTab(ChatTab):
|
||||
"""
|
||||
The information tab, used to display global informations
|
||||
|
@ -267,8 +277,6 @@ class InfoTab(ChatTab):
|
|||
def __init__(self, core):
|
||||
Tab.__init__(self, core)
|
||||
self.tab_win = windows.GlobalInfoBar()
|
||||
self.info_win = windows.TextWin()
|
||||
self.core.information_buffer.add_window(self.info_win)
|
||||
self.input = windows.Input()
|
||||
self.name = "Info"
|
||||
self.color_state = theme.COLOR_TAB_NORMAL
|
||||
|
@ -338,21 +346,20 @@ class InfoTab(ChatTab):
|
|||
def on_close(self):
|
||||
return
|
||||
|
||||
class MucTab(ChatTab):
|
||||
class MucTab(ChatTab, TabWithInfoWin):
|
||||
"""
|
||||
The tab containing a multi-user-chat room.
|
||||
It contains an userlist, an input, a topic, an information and a chat zone
|
||||
"""
|
||||
def __init__(self, core, room):
|
||||
ChatTab.__init__(self, core, room)
|
||||
TabWithInfoWin.__init__(self)
|
||||
self.topic_win = windows.Topic()
|
||||
self.text_win = windows.TextWin()
|
||||
room.add_window(self.text_win)
|
||||
self.v_separator = windows.VerticalSeparator()
|
||||
self.user_win = windows.UserList()
|
||||
self.info_header = windows.MucInfoWin()
|
||||
self.info_win = windows.TextWin()
|
||||
self.core.information_buffer.add_window(self.info_win)
|
||||
self.tab_win = windows.GlobalInfoBar()
|
||||
self.input = windows.MessageInput()
|
||||
self.ignores = [] # set of Users
|
||||
|
@ -662,17 +669,16 @@ class MucTab(ChatTab):
|
|||
def on_close(self):
|
||||
return
|
||||
|
||||
class PrivateTab(ChatTab):
|
||||
class PrivateTab(ChatTab, TabWithInfoWin):
|
||||
"""
|
||||
The tab containg a private conversation (someone from a MUC)
|
||||
"""
|
||||
def __init__(self, core, room):
|
||||
ChatTab.__init__(self, core, room)
|
||||
TabWithInfoWin.__init__(self)
|
||||
self.text_win = windows.TextWin()
|
||||
room.add_window(self.text_win)
|
||||
self.info_header = windows.PrivateInfoWin()
|
||||
self.info_win = windows.TextWin()
|
||||
self.core.information_buffer.add_window(self.info_win)
|
||||
self.tab_win = windows.GlobalInfoBar()
|
||||
self.input = windows.MessageInput()
|
||||
# keys
|
||||
|
@ -1043,21 +1049,20 @@ class RosterInfoTab(Tab):
|
|||
def on_close(self):
|
||||
return
|
||||
|
||||
class ConversationTab(ChatTab):
|
||||
class ConversationTab(ChatTab, TabWithInfoWin):
|
||||
"""
|
||||
The tab containg a normal conversation (not from a MUC)
|
||||
"""
|
||||
def __init__(self, core, jid):
|
||||
txt_buff = text_buffer.TextBuffer()
|
||||
ChatTab.__init__(self, core, txt_buff)
|
||||
TabWithInfoWin.__init__(self)
|
||||
self.color_state = theme.COLOR_TAB_NORMAL
|
||||
self._name = jid # a conversation tab is linked to one specific full jid OR bare jid
|
||||
self.text_win = windows.TextWin()
|
||||
txt_buff.add_window(self.text_win)
|
||||
self.upper_bar = windows.ConversationStatusMessageWin()
|
||||
self.info_header = windows.ConversationInfoWin()
|
||||
self.info_win = windows.TextWin()
|
||||
self.core.information_buffer.add_window(self.info_win)
|
||||
self.tab_win = windows.GlobalInfoBar()
|
||||
self.input = windows.MessageInput()
|
||||
# keys
|
||||
|
|
|
@ -24,15 +24,15 @@ log = logging.getLogger(__name__)
|
|||
from message import Message
|
||||
from datetime import datetime
|
||||
import theme
|
||||
|
||||
MESSAGE_NB_LIMIT = 8192
|
||||
from config import config
|
||||
|
||||
class TextBuffer(object):
|
||||
"""
|
||||
This class just keep trace of messages, in a list with various
|
||||
informations and attributes.
|
||||
"""
|
||||
def __init__(self):
|
||||
def __init__(self, messages_nb_limit=config.get('max_messages_in_memory', 2048)):
|
||||
self.messages_nb_limit = messages_nb_limit
|
||||
self.messages = [] # Message objects
|
||||
self.windows = [] # we keep track of one or more windows
|
||||
# so we can pass the new messages to them, as they are added, so
|
||||
|
@ -47,7 +47,7 @@ class TextBuffer(object):
|
|||
time = time or datetime.now()
|
||||
msg = Message(txt, time, nickname, nick_color, color, colorized)
|
||||
self.messages.append(msg)
|
||||
while len(self.messages) > MESSAGE_NB_LIMIT:
|
||||
while len(self.messages) > self.messages_nb_limit:
|
||||
self.messages.pop(0)
|
||||
for window in self.windows: # make the associated windows
|
||||
# build the lines from the new message
|
||||
|
|
|
@ -433,8 +433,9 @@ class MucInfoWin(InfoWin):
|
|||
self.addstr(txt, common.curses_color_pair(theme.COLOR_INFORMATION_BAR))
|
||||
|
||||
class TextWin(Win):
|
||||
def __init__(self):
|
||||
def __init__(self, lines_nb_limit=config.get('max_lines_in_memory', 2048)):
|
||||
Win.__init__(self)
|
||||
self.lines_nb_limit = lines_nb_limit
|
||||
self.pos = 0
|
||||
self.built_lines = [] # Each new message is built and kept here.
|
||||
# on resize, we rebuild all the messages
|
||||
|
@ -526,7 +527,7 @@ class TextWin(Win):
|
|||
if txt.startswith('\n'):
|
||||
txt = txt[1:]
|
||||
first = False
|
||||
while len(self.built_lines) > LINES_NB_LIMIT:
|
||||
while len(self.built_lines) > self.lines_nb_limit:
|
||||
self.built_lines.pop(0)
|
||||
return nb
|
||||
|
||||
|
|
Loading…
Reference in a new issue