[SCM] ktp-text-ui packaging branch, master, updated. debian/15.12.1-1-1918-gdf4b0ec

Maximiliano Curia maxy at moszumanska.debian.org
Sat May 28 00:20:12 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-text-ui.git;a=commitdiff;h=cb633a8

The following commit has been merged in the master branch:
commit cb633a8c8fa43fd5455092b2b1f862e8fdfc1c70
Author: Dominik Schmidt <dev at dominik-schmidt.de>
Date:   Tue Sep 20 21:23:34 2011 +0200

    Retrieve latest chat log from telepathy logger
---
 cmake/modules/FindGIO.cmake                |  23 ++++
 cmake/modules/FindGObject.cmake            |  75 ++++++++++++
 cmake/modules/FindQtGLib.cmake             |  46 ++++++++
 cmake/modules/FindTelepathyGlib.cmake      |  54 +++++++++
 cmake/modules/FindTelepathyLogger.cmake    |  53 +++++++++
 cmake/modules/FindTelepathyLoggerQt4.cmake |  44 +++++++
 lib/CMakeLists.txt                         |  14 +++
 lib/chat-widget.cpp                        |  40 +++++--
 lib/chat-widget.h                          |   2 +
 lib/logmanager.cpp                         | 184 +++++++++++++++++++++++++++++
 lib/logmanager.h                           |  70 +++++++++++
 11 files changed, 597 insertions(+), 8 deletions(-)

diff --git a/cmake/modules/FindGIO.cmake b/cmake/modules/FindGIO.cmake
new file mode 100644
index 0000000..247fa42
--- /dev/null
+++ b/cmake/modules/FindGIO.cmake
@@ -0,0 +1,23 @@
+# - Try to find GIO
+# Once done this will define
+#  GIO_FOUND - System has GIO
+#  GIO_INCLUDE_DIRS - The GIO include directories
+#  GIO_LIBRARIES - The libraries needed to use GIO
+#  GIO_DEFINITIONS - Compiler switches required for using GIO
+
+set(GIO_DEFINITIONS "")
+
+find_path(GIO_INCLUDE_DIR glib-2.0/gio/gio.h)
+
+find_library(GIO_LIBRARY NAMES gio-2.0)
+
+set(GIO_LIBRARIES ${GIO_LIBRARY} )
+set(GIO_INCLUDE_DIRS ${GIO_INCLUDE_DIR} ${GIO_INCLUDE_DIR}/glib-2.0/ )
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args(GIO  DEFAULT_MSG
+                                  GIO_LIBRARY GIO_INCLUDE_DIR)
+
+mark_as_advanced(GIO_INCLUDE_DIR GIO_LIBRARY )
diff --git a/cmake/modules/FindGObject.cmake b/cmake/modules/FindGObject.cmake
new file mode 100644
index 0000000..1507b43
--- /dev/null
+++ b/cmake/modules/FindGObject.cmake
@@ -0,0 +1,75 @@
+# - Try to find GObject
+# Once done this will define
+#
+#  GOBJECT_FOUND - system has GObject
+#  GOBJECT_INCLUDE_DIR - the GObject include directory
+#  GOBJECT_LIBRARIES - the libraries needed to use GObject
+#  GOBJECT_DEFINITIONS - Compiler switches required for using GObject
+
+# Copyright (c) 2008 Helio Chissini de Castro, <helio at kde.org>
+#  (c)2006, Tim Beaulen <tbscope at gmail.com>
+
+
+IF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
+   # in cache already
+   SET(GObject_FIND_QUIETLY TRUE)
+ELSE (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
+   SET(GObject_FIND_QUIETLY FALSE)
+ENDIF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
+
+IF (NOT WIN32)
+   FIND_PACKAGE(PkgConfig REQUIRED)
+   # use pkg-config to get the directories and then use these values
+   # in the FIND_PATH() and FIND_LIBRARY() calls
+   PKG_CHECK_MODULES(PKG_GOBJECT2 REQUIRED gobject-2.0)
+   SET(GOBJECT_DEFINITIONS ${PKG_GOBJECT2_CFLAGS})
+ENDIF (NOT WIN32)
+
+FIND_PATH(GOBJECT_INCLUDE_DIR gobject/gobject.h
+   PATHS
+   ${PKG_GOBJECT2_INCLUDE_DIRS}
+   /usr/include/glib-2.0/
+   PATH_SUFFIXES glib-2.0
+   )
+
+FIND_LIBRARY(_GObjectLibs NAMES gobject-2.0
+   PATHS
+   ${PKG_GOBJECT2_LIBRARY_DIRS}
+   )
+FIND_LIBRARY(_GModuleLibs NAMES gmodule-2.0
+   PATHS
+   ${PKG_GOBJECT2_LIBRARY_DIRS}
+   )
+FIND_LIBRARY(_GThreadLibs NAMES gthread-2.0
+   PATHS
+   ${PKG_GOBJECT2_LIBRARY_DIRS}
+   )
+FIND_LIBRARY(_GLibs NAMES glib-2.0
+   PATHS
+   ${PKG_GOBJECT2_LIBRARY_DIRS}
+   )
+
+IF (WIN32)
+SET (GOBJECT_LIBRARIES ${_GObjectLibs} ${_GModuleLibs} ${_GThreadLibs} ${_GLibs})
+ELSE (WIN32)
+SET (GOBJECT_LIBRARIES ${PKG_GOBJECT2_LIBRARIES})
+ENDIF (WIN32)
+
+IF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
+   SET(GOBJECT_FOUND TRUE)
+ELSE (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
+   SET(GOBJECT_FOUND FALSE)
+ENDIF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES)
+
+IF (GOBJECT_FOUND)
+   IF (NOT GObject_FIND_QUIETLY)
+      MESSAGE(STATUS "Found GObject libraries: ${GOBJECT_LIBRARIES}")
+      MESSAGE(STATUS "Found GObject includes : ${GOBJECT_INCLUDE_DIR}")
+   ENDIF (NOT GObject_FIND_QUIETLY)
+ELSE (GOBJECT_FOUND)
+    IF (GObject_FIND_REQUIRED)
+      MESSAGE(STATUS "Could NOT find GObject")
+    ENDIF(GObject_FIND_REQUIRED)
+ENDIF (GOBJECT_FOUND)
+
+MARK_AS_ADVANCED(GOBJECT_INCLUDE_DIR GOBJECT_LIBRARIES)
diff --git a/cmake/modules/FindQtGLib.cmake b/cmake/modules/FindQtGLib.cmake
new file mode 100644
index 0000000..0713164
--- /dev/null
+++ b/cmake/modules/FindQtGLib.cmake
@@ -0,0 +1,46 @@
+# - Try to find QtGLib
+# Once done this will define
+#
+#  QTGLIB_FOUND - system has QtGLib
+#  QTGLIB_INCLUDE_DIR - the QtGLib include directory
+#  QTGLIB_LIBRARIES - the libraries needed to use QtGLib
+#  QTGLIB_DEFINITIONS - Compiler switches required for using QtGLib
+
+# Copyright (c) 2011 Collabora Ltd <http://www.collabora.co.uk>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+
+if (QTGLIB_INCLUDE_DIR AND QTGLIB_LIBRARIES)
+   # in cache already
+   set(QtGLib_FIND_QUIETLY TRUE)
+else (QTGLIB_INCLUDE_DIR AND QTGLIB_LIBRARIES)
+   set(QtGLib_FIND_QUIETLY FALSE)
+endif (QTGLIB_INCLUDE_DIR AND QTGLIB_LIBRARIES)
+
+if (NOT WIN32)
+    # use pkg-config to get the directories and then use these values
+    # in the find_path() and find_library() calls
+    find_package(PkgConfig)
+    if (QTGLIB_MIN_VERSION)
+        PKG_CHECK_MODULES(PC_QTGLIB QtGLib-2.0>=${QTGLIB_MIN_VERSION})
+    else (QTGLIB_MIN_VERSION)
+        PKG_CHECK_MODULES(PC_QTGLIB QtGLib-2.0)
+    endif (QTGLIB_MIN_VERSION)
+    set(QTGLIB_DEFINITIONS ${PC_QTGLIB_CFLAGS_OTHER})
+endif (NOT WIN32)
+
+find_path(QTGLIB_INCLUDE_DIR 
+   NAMES QGlib/Object
+   PATHS ${PC_QTGLIB_INCLUDEDIR} ${PC_QTGLIB_INCLUDE_DIRS} 
+   PATH_SUFFIXES QtGStreamer
+   )
+
+find_library(QTGLIB_LIBRARIES 
+   NAMES QtGLib-2.0
+   PATHS ${PC_QTGLIB_LIBDIR} ${PC_QTGLIB_LIBRARY_DIRS}
+   )
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(QtGLib-2.0 DEFAULT_MSG QTGLIB_LIBRARIES QTGLIB_INCLUDE_DIR)
+
+mark_as_advanced(QTGLIB_INCLUDE_DIR QTGLIB_LIBRARIES)
diff --git a/cmake/modules/FindTelepathyGlib.cmake b/cmake/modules/FindTelepathyGlib.cmake
new file mode 100644
index 0000000..8728dab
--- /dev/null
+++ b/cmake/modules/FindTelepathyGlib.cmake
@@ -0,0 +1,54 @@
+# - Try to find Telepathy-Glib
+# Once done this will define
+#
+#  TELEPATHY_GLIB_FOUND - system has Telepathy-Glib
+#  TELEPATHY_GLIB_INCLUDE_DIR - the Telepathy-Glib include directory
+#  TELEPATHY_GLIB_LIBRARIES - the libraries needed to use Telepathy-Glib
+#  TELEPATHY_GLIB_DEFINITIONS - Compiler switches required for using Telepathy-Glib
+
+# Copyright (c) 2010, Dario Freddi <dario.freddi at collabora.co.uk>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+
+if (TELEPATHY_GLIB_INCLUDE_DIR AND TELEPATHY_GLIB_LIBRARIES)
+   # in cache already
+   set(TELEPATHYGLIB_FIND_QUIETLY TRUE)
+else (TELEPATHY_GLIB_INCLUDE_DIR AND TELEPATHY_GLIB_LIBRARIES)
+   set(TELEPATHYGLIB_FIND_QUIETLY FALSE)
+endif (TELEPATHY_GLIB_INCLUDE_DIR AND TELEPATHY_GLIB_LIBRARIES)
+
+if (NOT WIN32)
+    # use pkg-config to get the directories and then use these values
+    # in the find_path() and find_library() calls
+    find_package(PkgConfig)
+    if (TELEPATHY_GLIB_MIN_VERSION)
+        PKG_CHECK_MODULES(PC_TELEPATHY_GLIB telepathy-glib>=${TELEPATHY_GLIB_MIN_VERSION})
+    else (TELEPATHY_GLIB_MIN_VERSION)
+        PKG_CHECK_MODULES(PC_TELEPATHY_GLIB telepathy-glib)
+    endif (TELEPATHY_GLIB_MIN_VERSION)
+    set(TELEPATHY_GLIB_DEFINITIONS ${PC_TELEPATHY_GLIB_CFLAGS_OTHER})
+endif (NOT WIN32)
+
+if (TELEPATHY_GLIB_MIN_VERSION AND PKG_CONFIG_FOUND AND NOT PC_TELEPATHY_GLIB_FOUND)
+    message(STATUS "Telepathy-glib not found or its version is < ${TELEPATHY_GLIB_MIN_VERSION}")
+else (TELEPATHY_GLIB_MIN_VERSION AND PKG_CONFIG_FOUND AND NOT PC_TELEPATHY_GLIB_FOUND)
+    find_path(TELEPATHY_GLIB_INCLUDE_DIR telepathy-glib/client.h
+       PATHS
+       ${PC_TELEPATHY_GLIB_INCLUDEDIR}
+       ${PC_TELEPATHY_GLIB_INCLUDE_DIRS}
+       PATH_SUFFIXES telepathy-1.0
+    )
+
+    find_library(TELEPATHY_GLIB_LIBRARIES NAMES telepathy-glib
+       PATHS
+       ${PC_TELEPATHY_GLIB_LIBDIR}
+       ${PC_TELEPATHY_GLIB_LIBRARY_DIRS}
+    )
+
+    include(FindPackageHandleStandardArgs)
+    find_package_handle_standard_args(TelepathyGlib DEFAULT_MSG TELEPATHY_GLIB_LIBRARIES
+                                                                TELEPATHY_GLIB_INCLUDE_DIR)
+
+    mark_as_advanced(TELEPATHY_GLIB_INCLUDE_DIR TELEPATHY_GLIB_LIBRARIES)
+
+endif (TELEPATHY_GLIB_MIN_VERSION AND PKG_CONFIG_FOUND AND NOT PC_TELEPATHY_GLIB_FOUND)
diff --git a/cmake/modules/FindTelepathyLogger.cmake b/cmake/modules/FindTelepathyLogger.cmake
new file mode 100644
index 0000000..19de2e3
--- /dev/null
+++ b/cmake/modules/FindTelepathyLogger.cmake
@@ -0,0 +1,53 @@
+# - Try to find Telepathy-Logger
+# Once done this will define
+#
+#  TELEPATHY_LOGGER_FOUND - system has Telepathy-Logger
+#  TELEPATHY_LOGGER_INCLUDE_DIR - the Telepathy-Logger include directory
+#  TELEPATHY_LOGGER_LIBRARIES - the libraries needed to use Telepathy-Logger
+#  TELEPATHY_LOGGER_DEFINITIONS - Compiler switches required for using Telepathy-Logger
+
+# Copyright (c) 2011 Collabora Ltd <http://www.collabora.co.uk>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+
+if (TELEPATHY_LOGGER_INCLUDE_DIR AND TELEPATHY_LOGGER_LIBRARIES)
+   # in cache already
+   set(TELEPATHYLOGGER_FIND_QUIETLY TRUE)
+else (TELEPATHY_LOGGER_INCLUDE_DIR AND TELEPATHY_LOGGER_LIBRARIES)
+   set(TELEPATHYLOGGER_FIND_QUIETLY FALSE)
+endif (TELEPATHY_LOGGER_INCLUDE_DIR AND TELEPATHY_LOGGER_LIBRARIES)
+
+if (NOT WIN32)
+    # use pkg-config to get the directories and then use these values
+    # in the find_path() and find_library() calls
+    find_package(PkgConfig)
+    if (TELEPATHY_LOGGER_MIN_VERSION)
+        PKG_CHECK_MODULES(PC_TELEPATHY_LOGGER telepathy-logger-0.2>=${TELEPATHY_LOGGER_MIN_VERSION})
+    else (TELEPATHY_LOGGER_MIN_VERSION)
+        PKG_CHECK_MODULES(PC_TELEPATHY_LOGGER telepathy-logger-0.2)
+    endif (TELEPATHY_LOGGER_MIN_VERSION)
+    set(TELEPATHY_LOGGER_DEFINITIONS ${PC_TELEPATHY_LOGGER_CFLAGS_OTHER})
+endif (NOT WIN32)
+
+if (TELEPATHY_LOGGER_MIN_VERSION AND PKG_CONFIG_FOUND AND NOT PC_TELEPATHY_LOGGER_FOUND)
+    message(STATUS "Telepathy-logger not found or its version is < ${TELEPATHY_LOGGER_MIN_VERSION}")
+else (TELEPATHY_LOGGER_MIN_VERSION AND PKG_CONFIG_FOUND AND NOT PC_TELEPATHY_LOGGER_FOUND)
+    find_path(TELEPATHY_LOGGER_INCLUDE_DIR telepathy-logger/log-manager.h
+       PATHS
+       ${PC_TELEPATHY_LOGGER_INCLUDEDIR}
+       ${PC_TELEPATHY_LOGGER_INCLUDE_DIRS}
+    )
+
+    find_library(TELEPATHY_LOGGER_LIBRARIES NAMES telepathy-logger
+       PATHS
+       ${PC_TELEPATHY_LOGGER_LIBDIR}
+       ${PC_TELEPATHY_LOGGER_LIBRARY_DIRS}
+    )
+
+    include(FindPackageHandleStandardArgs)
+    find_package_handle_standard_args(TelepathyLogger DEFAULT_MSG TELEPATHY_LOGGER_LIBRARIES
+                                                                TELEPATHY_LOGGER_INCLUDE_DIR)
+
+    mark_as_advanced(TELEPATHY_LOGGER_INCLUDE_DIR TELEPATHY_LOGGER_LIBRARIES)
+
+endif (TELEPATHY_LOGGER_MIN_VERSION AND PKG_CONFIG_FOUND AND NOT PC_TELEPATHY_LOGGER_FOUND)
diff --git a/cmake/modules/FindTelepathyLoggerQt4.cmake b/cmake/modules/FindTelepathyLoggerQt4.cmake
new file mode 100644
index 0000000..19cae90
--- /dev/null
+++ b/cmake/modules/FindTelepathyLoggerQt4.cmake
@@ -0,0 +1,44 @@
+# - Try to find TelepathyLoggerQt4
+# Once done this will define
+#  TELEPATHY_LOGGER_QT4_FOUND - System has TelepathyLoggerQt4
+#  TELEPATHY_LOGGER_QT4_INCLUDE_DIRS - The TelepathyLoggerQt4 include directories
+#  TELEPATHY_LOGGER_QT4_LIBRARIES - The libraries needed to use TelepathyLoggerQt4
+#  TELEPATHY_LOGGER_QT4_DEFINITIONS - Compiler switches required for using TelepathyLoggerQt4
+
+
+set(TELEPATHY_LOGGER_QT4_DEFINITIONS "-fexceptions")
+
+find_path(TELEPATHY_LOGGER_QT4_INCLUDE_DIR telepathy-logger-0.2/TelepathyLoggerQt4/init.h)
+
+find_library(TELEPATHY_LOGGER_QT4_LIBRARY NAMES libtelepathy-logger-qt4 telepathy-logger-qt4)
+
+set(TELEPATHY_LOGGER_QT4_LIBRARIES ${TELEPATHY_LOGGER_QT4_LIBRARY} )
+set(TELEPATHY_LOGGER_QT4_INCLUDE_DIRS ${TELEPATHY_LOGGER_QT4_INCLUDE_DIR} ${TELEPATHY_LOGGER_QT4_INCLUDE_DIR}/telepathy-logger-0.2 )
+
+find_package(TelepathyLogger)
+find_package(TelepathyGlib)
+find_package(GObject)
+find_package(GIO)
+find_package(GLIB2)
+
+list(APPEND TELEPATHY_LOGGER_QT4_LIBRARIES
+    ${TELEPATHY_LOGGER_LIBRARIES}
+    ${TELEPATHY_GLIB_LIBRARIES}
+    ${GLIB2_LIBRARIES}
+    ${GOBJECT_LIBRARIES}
+    ${QTGLIB_LIBRARIES}
+    ${GIO_LIBRARIES}
+)
+
+list(APPEND TELEPATHY_LOGGER_QT4_INCLUDE_DIRS
+    ${GLIB2_INCLUDE_DIR}
+    ${QTGLIB_INCLUDE_DIR}
+)
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args(TelepathyLoggerQt4  DEFAULT_MSG
+                                  TELEPATHY_LOGGER_QT4_LIBRARY TELEPATHY_LOGGER_QT4_INCLUDE_DIR)
+
+mark_as_advanced(TELEPATHY_LOGGER_QT4_INCLUDE_DIR TELEPATHY_LOGGER_QT4_LIBRARY )
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 801749e..4bae13d 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -1,3 +1,7 @@
+macro_optional_find_package(TelepathyLoggerQt4)
+macro_log_feature(TELEPATHY_LOGGER_QT4_FOUND "TelepathyLoggerQt4" "Qt4 wrapper around telepathy-logger" FALSE "" "Needed for optional backlog support in the chat-window")
+macro_display_feature_log()
+
 set(telepathy_chat_handler_lib_SRCS
         chat-widget.cpp
         chat-window-style.cpp
@@ -11,6 +15,7 @@ set(telepathy_chat_handler_lib_SRCS
         chat-style-plist-file-reader.cpp
         chat-text-edit.cpp
         chat-search-bar.cpp
+        logmanager.cpp
 )
 
 set(telepathy_chat_handler_lib_HDRS
@@ -44,7 +49,16 @@ kde4_add_ui_files(telepathy_chat_handler_lib_SRCS ${telepathy_chat_handler_lib_U
 
 kde4_add_library(ktelepathy_chat_lib SHARED ${telepathy_chat_handler_lib_SRCS})
 
+# telepathy-logger-qt4 related stuff
+SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TELEPATHY_LOGGER_QT4_DEFINITIONS}" )
+include_directories(
+    ${TELEPATHY_LOGGER_QT4_INCLUDE_DIRS}
+)
+
+
 target_link_libraries(ktelepathy_chat_lib
+    ${TELEPATHY_LOGGER_QT4_LIBRARIES}
+
     ${KDE4_KDECORE_LIBS}
     ${KDE4_KIO_LIBS}
     ${KDE4_KDEUI_LIBS}
diff --git a/lib/chat-widget.cpp b/lib/chat-widget.cpp
index f0d618e..ae9b5aa 100644
--- a/lib/chat-widget.cpp
+++ b/lib/chat-widget.cpp
@@ -25,6 +25,7 @@
 #include "adium-theme-message-info.h"
 #include "adium-theme-status-info.h"
 #include "channel-contact-model.h"
+#include "logmanager.h"
 
 #include <QtGui/QKeyEvent>
 #include <QtGui/QAction>
@@ -110,6 +111,7 @@ public:
     Tp::AccountPtr account;
     Ui::ChatWidget ui;
     ChannelContactModel *contactModel;
+    LogManager* logManager;
 
     KComponentData telepathyComponentData();
 };
@@ -229,8 +231,16 @@ ChatWidget::ChatWidget(const Tp::TextChannelPtr & channel, const Tp::AccountPtr
 
     connect(this, SIGNAL(searchTextComplete(bool)), d->ui.searchBar, SLOT(onSearchTextComplete(bool)));
 
-        // to make PgUp and PgDown keys work properly
-        connect(d->ui.sendMessageBox, SIGNAL(scrollEventRecieved(QKeyEvent*)), d->ui.chatArea, SLOT(onScrollEvent(QKeyEvent*)));
+    // to make PgUp and PgDown keys work properly
+    connect(d->ui.sendMessageBox, SIGNAL(scrollEventRecieved(QKeyEvent*)), d->ui.chatArea, SLOT(onScrollEvent(QKeyEvent*)));
+
+    // initialize LogManager
+    d->logManager = new LogManager(account, channel->targetContact());
+    d->logManager->setFetchAmount(3);
+    d->logManager->setTextChannel(channel);
+
+    connect(d->logManager, SIGNAL(fetched(QList<AdiumThemeContentInfo>)), SLOT(onHistoryFetched(QList<AdiumThemeContentInfo>)));
+    d->logManager->fetchLast();
 }
 
 ChatWidget::~ChatWidget()
@@ -452,6 +462,26 @@ void ChatWidget::windowActivated()
     }
 }
 
+void ChatWidget::onHistoryFetched(const QList<AdiumThemeContentInfo> &messages)
+{
+    kDebug() << "found" << messages.count() << "messages in history";
+    Q_FOREACH(const AdiumThemeContentInfo &message, messages)
+    {
+        d->ui.chatArea->addContentMessage(message);
+    }
+
+    d->chatviewlInitialised = true;
+
+    //process any messages we've 'missed' whilst initialising.
+    Q_FOREACH(const Tp::ReceivedMessage &message, d->channel->messageQueue()) {
+        handleIncomingMessage(message);
+    }
+
+    delete d->logManager;
+    d->logManager = 0;
+}
+
+
 void ChatWidget::resetUnreadMessageCount()
 {
     kDebug();
@@ -671,12 +701,6 @@ void ChatWidget::handleMessageSent(const Tp::Message &message, Tp::MessageSendin
 
 void ChatWidget::chatViewReady()
 {
-    d->chatviewlInitialised = true;
-
-    //process any messages we've 'missed' whilst initialising.
-    Q_FOREACH(const Tp::ReceivedMessage &message, d->channel->messageQueue()) {
-        handleIncomingMessage(message);
-    }
 }
 
 
diff --git a/lib/chat-widget.h b/lib/chat-widget.h
index 0fe5d86..630538b 100644
--- a/lib/chat-widget.h
+++ b/lib/chat-widget.h
@@ -32,6 +32,7 @@
 
 #include <TelepathyQt4/ReceivedMessage>
 
+class AdiumThemeContentInfo;
 class ChatSearchBar;
 class ChatWidgetPrivate;
 class QShowEvent;
@@ -143,6 +144,7 @@ private Q_SLOTS:
     void findPreviousTextInChat(const QString &text, QWebPage::FindFlags flags);
     void onFormatColorReleased();
     void windowActivated();
+    void onHistoryFetched(const QList<AdiumThemeContentInfo> &messages);
 
 private:
     /** connects necessary signals for the channel */
diff --git a/lib/logmanager.cpp b/lib/logmanager.cpp
new file mode 100644
index 0000000..6d62ff3
--- /dev/null
+++ b/lib/logmanager.cpp
@@ -0,0 +1,184 @@
+/*
+    <one line to give the library's name and an idea of what it does.>
+    Copyright (C) 2011  Dominik Schmidt <kde at dominik-schmidt.de>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+
+#include "logmanager.h"
+
+#include "adium-theme-content-info.h"
+
+#include <KDebug>
+
+#include <TelepathyLoggerQt4/Init>
+#include <TelepathyLoggerQt4/Entity>
+#include <TelepathyLoggerQt4/PendingDates>
+#include <TelepathyLoggerQt4/PendingEvents>
+#include <TelepathyLoggerQt4/Event>
+#include <TelepathyLoggerQt4/TextEvent>
+#include <TelepathyLoggerQt4/CallEvent>
+#include <TelepathyLoggerQt4/LogManager>
+
+#include <glib-object.h>
+#include <QGlib/Init>
+
+#include <TelepathyQt4/Types>
+#include <TelepathyQt4/AvatarData>
+#include <TelepathyQt4/TextChannel>
+#include <TelepathyQt4/ReceivedMessage>
+
+LogManager::LogManager(const Tp::AccountPtr &account, const Tp::ContactPtr &contact, QObject *parent)
+    : m_account(account)
+    , m_contact(contact)
+    , m_fetchAmount(10)
+{
+    g_type_init();
+    QGlib::init();
+    Tpl::init();
+
+    m_logManager = Tpl::LogManager::instance();
+    if (m_logManager.isNull()) {
+        qWarning() << "LogManager not found";
+        Q_ASSERT(false);
+    }
+
+    m_contactEntity = Tpl::Entity::create(m_contact->id().toStdString().c_str(),
+                                            Tpl::EntityTypeContact,
+                                            NULL,
+                                            NULL);
+}
+
+LogManager::~LogManager()
+{
+
+}
+
+bool LogManager::exists() const
+{
+    return m_logManager->exists(m_account, m_contactEntity, Tpl::EventTypeMaskText);
+}
+
+void LogManager::setTextChannel(const Tp::TextChannelPtr& textChannel)
+{
+    m_textChannel = textChannel;
+}
+
+void LogManager::setFetchAmount(int n)
+{
+    m_fetchAmount = n;
+}
+
+void LogManager::fetchLast()
+{
+    kDebug() << "get log for: " << m_contactEntity->identifier();
+
+    Tpl::PendingDates* dates = m_logManager->queryDates( m_account, m_contactEntity, Tpl::EventTypeMaskText);
+    connect(dates, SIGNAL(finished(Tpl::PendingOperation*)), SLOT(onDatesFinished(Tpl::PendingOperation*)));
+}
+
+void LogManager::onDatesFinished(Tpl::PendingOperation* po)
+{
+    Tpl::PendingDates *pd = (Tpl::PendingDates*) po;
+
+    if (pd->isError()) {
+        qWarning() << "error in PendingDates:" << pd->errorMessage();
+        return;
+    }
+
+    QList<QDate> dates = pd->dates();
+
+    if( !dates.isEmpty() ) {
+        QDate date = dates.last();
+
+        kDebug() << pd->account()->uniqueIdentifier() << pd->entity()->identifier() << dates;
+
+        kWarning() << "requesting log for" << pd->account()->uniqueIdentifier() << pd->entity()->identifier() << "on" << date;
+        Tpl::PendingEvents* events = m_logManager->queryEvents( pd->account(), pd->entity(), Tpl::EventTypeMaskAny, date);
+
+        connect(events, SIGNAL(finished(Tpl::PendingOperation*)), SLOT(onEventsFinished(Tpl::PendingOperation*)));
+    } else {
+        QList<AdiumThemeContentInfo> messages;
+        emit fetched(messages);
+    }
+}
+
+void LogManager::onEventsFinished(Tpl::PendingOperation* po)
+{
+    Tpl::PendingEvents *pe = (Tpl::PendingEvents*) po;
+
+    if (pe->isError()) {
+        qWarning() << "error in PendingEvents" << pe->errorMessage();
+        ::exit(-1);
+        return;
+    }
+
+    QStringList queuedMessageTokens;
+    if(!m_textChannel.isNull()) {
+        Q_FOREACH(const Tp::ReceivedMessage &message, m_textChannel->messageQueue())
+        {
+            queuedMessageTokens.append(message.messageToken());
+        }
+    }
+    kDebug() << "queuedMessageTokens" << queuedMessageTokens;
+
+
+    // get last n (m_fetchLast) messages that are not queued
+    QList<Tpl::EventPtr> allEvents = pe->events();
+    QList<Tpl::TextEventPtr> events;
+    QList<Tpl::EventPtr>::iterator i = allEvents.end();
+    while (i-- != allEvents.begin() && (events.count() <= m_fetchAmount)) {
+        Tpl::TextEventPtr textEvent = (*i).dynamicCast<Tpl::TextEvent>();
+        if(!textEvent.isNull()) {
+            if(!queuedMessageTokens.contains(textEvent->messageToken())) {
+                events.prepend( textEvent );
+            }
+        }
+    }
+
+
+    QList<AdiumThemeContentInfo> messages;
+    Q_FOREACH(const Tpl::TextEventPtr& event, events) {
+        AdiumThemeMessageInfo::MessageType type;
+        QString iconPath;
+        Tp::ContactPtr targetContact;
+        if(event->sender()->identifier() == m_account->normalizedName()) {
+            type = AdiumThemeMessageInfo::HistoryLocalToRemote;
+            targetContact = m_account->connection()->selfContact();
+        } else {
+            type = AdiumThemeMessageInfo::HistoryRemoteToLocal;
+            targetContact = m_contact;
+        }
+        iconPath = targetContact->avatarData().fileName;
+
+        AdiumThemeContentInfo message(AdiumThemeMessageInfo::HistoryLocalToRemote);
+        message.setMessage(event->message());
+        message.setService(m_account->serviceName());
+        message.setSenderDisplayName(event->sender()->alias());
+        message.setSenderScreenName(event->sender()->alias());
+        message.setTime(event->timestamp());
+        message.setUserIconPath(iconPath);
+        kDebug()    << event->timestamp()
+                    << "from" << event->sender()->identifier()
+                    << "to" << event->receiver()->identifier()
+                    << event->message();
+
+        messages.append(message);
+    }
+
+    kDebug() << "emit all messages" << messages.count();
+    emit fetched(messages);
+}
diff --git a/lib/logmanager.h b/lib/logmanager.h
new file mode 100644
index 0000000..e8f3413
--- /dev/null
+++ b/lib/logmanager.h
@@ -0,0 +1,70 @@
+/*
+    <one line to give the library's name and an idea of what it does.>
+    Copyright (C) 2011  Dominik Schmidt <kde at dominik-schmidt.de>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+
+#ifndef LOGMANAGER_H
+#define LOGMANAGER_H
+
+#include "adium-theme-content-info.h"
+
+#include <TelepathyLoggerQt4/LogManager>
+#include <TelepathyLoggerQt4/Entity>
+
+#include <TelepathyQt4/Types>
+#include <TelepathyQt4/Account>
+#include <TelepathyQt4/Contact>
+
+
+namespace Tpl {
+    class PendingOperation;
+}
+
+
+class LogManager : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit LogManager(const Tp::AccountPtr &account, const Tp::ContactPtr &contact, QObject *parent = 0);
+    virtual ~LogManager();
+
+    bool exists() const;
+
+    void setTextChannel(const Tp::TextChannelPtr &textChannel);
+    void setFetchAmount(int n);
+    void fetchLast();
+
+Q_SIGNALS:
+    void fetched(const QList<AdiumThemeContentInfo> &messages);
+
+private Q_SLOTS:
+    void onDatesFinished(Tpl::PendingOperation* po);
+    void onEventsFinished(Tpl::PendingOperation* po);
+
+private:
+    Tp::AccountPtr m_account;
+    Tp::ContactPtr m_contact;
+    Tpl::EntityPtr m_contactEntity;
+    Tp::TextChannelPtr m_textChannel;
+    Tpl::LogManagerPtr m_logManager;
+
+    int m_fetchAmount;
+};
+
+#endif // LOGMANAGER_H

-- 
ktp-text-ui packaging



More information about the pkg-kde-commits mailing list