[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