public virtual void Populate()
{
Trace.Call();
Name = SyncedName;
// sync messages
// cleanup, be sure the output is empty
_OutputMessageTextView.Clear();
if (!Frontend.IsLocalEngine && Frontend.UseLowBandwidthMode) {
var msg = new MessageBuilder();
msg.AppendEventPrefix();
msg.AppendMessage(_("Low Bandwidth Mode is active: no messages synced."));
AddMessage(msg.ToMessage());
} else {
if (SyncedMessages != null) {
// TODO: push messages in batches and give back control to
// GTK+ in between for blocking the GUI thread less
foreach (MessageModel msg in SyncedMessages) {
AddMessage(msg);
if (msg.TimeStamp <= SyncedLastSeenMessage) {
// let the user know at which position new messages start
_OutputMessageTextView.UpdateMarkerline();
}
}
}
}
// as we don't track which events have already been seen it would
// show all chats with unseen events after the frontend connect
if (!HasHighlight) {
HasEvent = false;
// Smuxi protocol < 0.13 does not support remembering seen
// messages thus we mark all message as seen as we can't tell
// which ones are new
if (Frontend.EngineProtocolVersion < new Version(0, 13)) {
HasActivity = false;
}
}
// reset tab icon to normal
TabImage.Pixbuf = DefaultTabImage.Pixbuf;
OnStatusChanged(EventArgs.Empty);
SyncedMessages = null;
IsSynced = true;
}