Smuxi.Frontend.Gnome.ChatViewManager.OnChatSynced C# (CSharp) Method

OnChatSynced() private method

private OnChatSynced ( object sender, Smuxi.Frontend.ChatViewSyncedEventArgs e ) : void
sender object
e Smuxi.Frontend.ChatViewSyncedEventArgs
return void
        void OnChatSynced(object sender, ChatViewSyncedEventArgs e)
        {
            Trace.Call(sender, e);

            // FIXME: should we tell the FrontendManager before we sync?
            // no problem making remoting calls here as this event is called
            // from worker threads
            // REMOTING CALL 1
            Frontend.FrontendManager.AddSyncedChat(e.ChatView.ChatModel);

            GLib.Idle.Add(delegate {
                var chatView = (ChatView) e.ChatView;

                // we need to bailt out in case the chat was closed during the sync
                // else chatView.Populate() will die hard, see #635
                if (!Chats.Contains(chatView)) {
            #if LOG4NET
                    f_Logger.Debug("OnChatSynced(): detected closed chat: " +
                                   chatView.ID + " during sync, bailing out...");
            #endif
                    return false;
                }

                // HACK: patch chat position as OnChatAdded is not honoring the
                // AddChat order nor the complete range of chats
                if (chatView.Position != -1) {
                    f_Notebook.ReorderChild(chatView, chatView.Position);
                }

            #if LOG4NET
                DateTime start = DateTime.UtcNow;
            #endif
                chatView.Populate();
            #if LOG4NET
                DateTime stop = DateTime.UtcNow;
                double duration = stop.Subtract(start).TotalMilliseconds;
                f_Logger.Debug("OnChatSynced(): " +
                               "<" + chatView.ID + ">.Populate() " +
                               "Position: " + chatView.Position +
                               " done, took: " + Math.Round(duration) + " ms");
            #endif

                chatView.ScrollToEnd();

                if (ChatSynced != null) {
                    ChatSynced(this, new ChatViewManagerChatSyncedEventArgs(chatView));
                }
                return false;
            });
        }