[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdepim-runtime/frameworks] /: kdebug--
From: Montel Laurent <montel () kde ! org>
Date: 2014-08-04 5:20:12
Message-ID: E1XEAgu-0000Ff-Sf () scm ! kde ! org
[Download RAW message or body]
Git commit 312b3e276ba6dee92a671f0eccf9d4f81ab03f40 by Montel Laurent.
Committed on 04/08/2014 at 05:20.
Pushed by mlaurent into branch 'frameworks'.
kdebug--
M +1 -1 kioslave/akonadislave.cpp
M +2 -2 plugins/CMakeLists.txt
M +8 -7 plugins/akonadi_serializer_kalarm.cpp
A +23 -0 plugins/akonadi_serializer_kalarm_debug.cpp [License: LGPL (v2+)]
A +27 -0 plugins/akonadi_serializer_kalarm_debug.h [License: LGPL (v2+)]
M +4 -3 plugins/akonadi_serializer_mail.cpp
A +23 -0 plugins/akonadi_serializer_mail_debug.cpp [License: LGPL (v2+)]
A +27 -0 plugins/akonadi_serializer_mail_debug.h [License: LGPL (v2+)]
M +1 -1 plugins/autotests/CMakeLists.txt
M +2 -2 resources/maildir/autotests/synctest.cpp
M +5 -5 resources/maildir/libmaildir/keycache.cpp
M +21 -20 resources/maildir/maildirresource.cpp
http://commits.kde.org/kdepim-runtime/312b3e276ba6dee92a671f0eccf9d4f81ab03f40
diff --git a/kioslave/akonadislave.cpp b/kioslave/akonadislave.cpp
index b08e12d..ccd384d 100644
--- a/kioslave/akonadislave.cpp
+++ b/kioslave/akonadislave.cpp
@@ -31,7 +31,7 @@
#include "akonadislave_debug.h"
#include <kapplication.h>
#include <kcmdlineargs.h>
-#include <kdebug.h>
+#include <QDebug>
#include <klocale.h>
#include <QDateTime>
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index 24bbf75..473e727 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -40,7 +40,7 @@ add_library(akonadi_serializer_addressee MODULE ${SERIALIZER_TYPE} \
${akonadi_ser target_link_libraries(akonadi_serializer_addressee KF5::Abc \
KF5::AkonadiCore KF5::AkonadiAbc) install(TARGETS akonadi_serializer_addressee \
DESTINATION ${PLUGIN_INSTALL_DIR})
-set(akonadi_serializer_mail_PART_SRCS akonadi_serializer_mail.cpp )
+set(akonadi_serializer_mail_PART_SRCS akonadi_serializer_mail.cpp \
akonadi_serializer_mail_debug.cpp) add_library(akonadi_serializer_mail MODULE \
${SERIALIZER_TYPE} ${akonadi_serializer_mail_PART_SRCS}) \
target_link_libraries(akonadi_serializer_mail KF5::Mime KF5::AkonadiCore \
KF5::AkonadiMime ${AKONADI_COMMON_LIBRARIES} Qt5::DBus ) install(TARGETS \
akonadi_serializer_mail DESTINATION ${PLUGIN_INSTALL_DIR}) @@ -66,7 +66,7 @@ \
add_library(akonadi_serializer_microblog MODULE ${SERIALIZER_TYPE} ${akonadi_ser \
target_link_libraries(akonadi_serializer_microblog KF5::AkonadiCore \
${QT_QTXML_LIBRARY} KF5::PimUtils KF5::MicroBlog) install(TARGETS \
akonadi_serializer_microblog DESTINATION ${PLUGIN_INSTALL_DIR})
-set(akonadi_serializer_kalarm_SRCS akonadi_serializer_kalarm.cpp \
kaeventformatter.cpp) +set(akonadi_serializer_kalarm_SRCS \
akonadi_serializer_kalarm.cpp kaeventformatter.cpp \
akonadi_serializer_kalarm_debug.cpp) add_library(akonadi_serializer_kalarm MODULE \
${SERIALIZER_TYPE} ${akonadi_serializer_kalarm_SRCS}) \
target_link_libraries(akonadi_serializer_kalarm KF5::AlarmCalendar
diff --git a/plugins/akonadi_serializer_kalarm.cpp \
b/plugins/akonadi_serializer_kalarm.cpp index b87a67c..a0c144c 100644
--- a/plugins/akonadi_serializer_kalarm.cpp
+++ b/plugins/akonadi_serializer_kalarm.cpp
@@ -30,7 +30,8 @@
#include <AkonadiCore/attributefactory.h>
#include <klocale.h>
-#include <kdebug.h>
+#include <akonadi_serializer_kalarm_debug.h>
+#include <QDebug>
#include <QtCore/qplugin.h>
@@ -49,14 +50,14 @@ bool SerializerPluginKAlarm::deserialize(Item& item, const \
QByteArray& label, QI
KCalCore::Incidence::Ptr i = \
mFormat.fromString(QString::fromUtf8(data.readAll())); if (!i)
{
- kWarning(5954) << "Failed to parse incidence!";
+ qCWarning(AKONADI_SERIALIZER_KALARM_LOG) << "Failed to parse incidence!";
data.seek(0);
- kWarning(5954) << QString::fromUtf8(data.readAll());
+ qCWarning(AKONADI_SERIALIZER_KALARM_LOG) << \
QString::fromUtf8(data.readAll()); return false;
}
if (i->type() != KCalCore::Incidence::TypeEvent)
{
- kWarning(5954) << "Incidence with uid" << i->uid() << "is not an Event!";
+ qCWarning(AKONADI_SERIALIZER_KALARM_LOG) << "Incidence with uid" << i->uid() \
<< "is not an Event!"; data.seek(0);
return false;
}
@@ -64,7 +65,7 @@ bool SerializerPluginKAlarm::deserialize(Item& item, const \
QByteArray& label, QI const QString mime = CalEvent::mimeType(event.category());
if (mime.isEmpty() || !event.isValid())
{
- kWarning(5954) << "Event with uid" << event.id() << "contains no usable \
alarms!"; + qCWarning(AKONADI_SERIALIZER_KALARM_LOG) << "Event with uid" << \
event.id() << "contains no usable alarms!"; data.seek(0);
return false;
}
@@ -81,7 +82,7 @@ bool SerializerPluginKAlarm::deserialize(Item& item, const \
QByteArray& label, QI {
Attribute* a = item.attribute(dummy.type());
if (!a)
- kError(5954) << "deserialize(): Event with uid" << event.id() << \
"contains null attribute"; + qCCritical(AKONADI_SERIALIZER_KALARM_LOG) << \
"deserialize(): Event with uid" << event.id() << "contains null attribute"; else
{
EventAttribute* evAttr = dynamic_cast<EventAttribute*>(a);
@@ -90,7 +91,7 @@ bool SerializerPluginKAlarm::deserialize(Item& item, const \
QByteArray& label, QI
// Registering EventAttribute doesn't work in the serializer
// unless the application also registers it. This doesn't
// matter unless the application uses KAEvent class.
- kError(5954) << "deserialize(): Event with uid" << event.id() << \
"contains unknown type EventAttribute (application must call \
AttributeFactory::registerAttribute())"; + \
qCCritical(AKONADI_SERIALIZER_KALARM_LOG) << "deserialize(): Event with uid" << \
event.id() << "contains unknown type EventAttribute (application must call \
AttributeFactory::registerAttribute())"; }
else
{
diff --git a/plugins/akonadi_serializer_kalarm_debug.cpp \
b/plugins/akonadi_serializer_kalarm_debug.cpp new file mode 100644
index 0000000..ada4c6a
--- /dev/null
+++ b/plugins/akonadi_serializer_kalarm_debug.cpp
@@ -0,0 +1,23 @@
+/* This file is part of the KDE project
+ Copyright (C) 2014 Laurent Montel <montel@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "akonadi_serializer_kalarm_debug.h"
+Q_LOGGING_CATEGORY(AKONADI_SERIALIZER_KALARM_LOG, "log_akonadi_serializer_kalarm")
+
+
diff --git a/plugins/akonadi_serializer_kalarm_debug.h \
b/plugins/akonadi_serializer_kalarm_debug.h new file mode 100644
index 0000000..793b20c
--- /dev/null
+++ b/plugins/akonadi_serializer_kalarm_debug.h
@@ -0,0 +1,27 @@
+/* This file is part of the KDE project
+ Copyright (C) 2014 Laurent Montel <montel@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef AKONADI_SERIALIZER_KALARM_DEBUG_H
+#define AKONADI_SERIALIZER_KALARM_DEBUG_H
+
+#include <QLoggingCategory>
+Q_DECLARE_LOGGING_CATEGORY(AKONADI_SERIALIZER_KALARM_LOG)
+
+#endif
+
diff --git a/plugins/akonadi_serializer_mail.cpp \
b/plugins/akonadi_serializer_mail.cpp index 8e3a91b..96bd958 100644
--- a/plugins/akonadi_serializer_mail.cpp
+++ b/plugins/akonadi_serializer_mail.cpp
@@ -18,10 +18,11 @@
*/
#include "akonadi_serializer_mail.h"
+#include "akonadi_serializer_mail_debug.h"
#include <QtCore/qplugin.h>
-#include <kdebug.h>
+#include <QDebug>
#include <kmime/kmime_message.h>
#include <boost/shared_ptr.hpp>
@@ -51,7 +52,7 @@ template <typename T> static void parseAddrList( const \
QVarLengthArray<QByteArra for ( int i = 0; i < count; ++i ) {
ImapParser::parseParenthesizedList( addrList[ i ], addr );
if ( addr.count() != 4 ) {
- kWarning( 5264 ) << "Error parsing envelope address field: " << addrList[ i ];
+ qCWarning(AKONADI_SERIALIZER_MAIL_LOG) << "Error parsing envelope address \
field: " << addrList[ i ]; continue;
}
KMime::Types::Mailbox addrField;
@@ -97,7 +98,7 @@ bool SerializerPluginMail::deserialize( Item& item, const \
QByteArray& label, QIO QVarLengthArray<QByteArray, 16> env;
ImapParser::parseParenthesizedList( buffer, env );
if ( env.count() < 10 ) {
- kWarning( 5264 ) << "Akonadi KMime Deserializer: Got invalid envelope: " \
<< buffer; + qCWarning(AKONADI_SERIALIZER_MAIL_LOG) << "Akonadi KMime \
Deserializer: Got invalid envelope: " << buffer; return false;
}
Q_ASSERT( env.count() >= 10 );
diff --git a/plugins/akonadi_serializer_mail_debug.cpp \
b/plugins/akonadi_serializer_mail_debug.cpp new file mode 100644
index 0000000..e154a32
--- /dev/null
+++ b/plugins/akonadi_serializer_mail_debug.cpp
@@ -0,0 +1,23 @@
+/* This file is part of the KDE project
+ Copyright (C) 2014 Laurent Montel <montel@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "akonadi_serializer_mail_debug.h"
+Q_LOGGING_CATEGORY(AKONADI_SERIALIZER_MAIL_LOG, "log_akonadi_serializer_mail")
+
+
diff --git a/plugins/akonadi_serializer_mail_debug.h \
b/plugins/akonadi_serializer_mail_debug.h new file mode 100644
index 0000000..fc0eaa3
--- /dev/null
+++ b/plugins/akonadi_serializer_mail_debug.h
@@ -0,0 +1,27 @@
+/* This file is part of the KDE project
+ Copyright (C) 2014 Laurent Montel <montel@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef AKONADI_SERIALIZER_MAIL_DEBUG_H
+#define AKONADI_SERIALIZER_MAIL_DEBUG_H
+
+#include <QLoggingCategory>
+Q_DECLARE_LOGGING_CATEGORY(AKONADI_SERIALIZER_MAIL_LOG)
+
+#endif
+
diff --git a/plugins/autotests/CMakeLists.txt b/plugins/autotests/CMakeLists.txt
index d6d1621..d4c55c0 100644
--- a/plugins/autotests/CMakeLists.txt
+++ b/plugins/autotests/CMakeLists.txt
@@ -27,7 +27,7 @@ macro(add_akonadiplugin_test _source _libs _additionalSources)
endmacro()
# qtestlib unit tests
-add_akonadiplugin_test(mailserializertest.cpp "KF5::Mime" "")
+add_akonadiplugin_test(mailserializertest.cpp "KF5::Mime" \
"../akonadi_serializer_mail_debug.cpp") \
add_akonadiplugin_test(mailserializerplugintest.cpp "KF5::Mime" "") \
add_akonadiplugin_test(kcalcoreserializertest.cpp "KF5::CalendarCore" "") \
add_akonadiplugin_test(addresseeserializertest.cpp "KF5::Abc;KF5::AkonadiAbc" \
"../akonadi_serializer_addressee.cpp")
diff --git a/resources/maildir/autotests/synctest.cpp \
b/resources/maildir/autotests/synctest.cpp index ad448ec..1165d04 100644
--- a/resources/maildir/autotests/synctest.cpp
+++ b/resources/maildir/autotests/synctest.cpp
@@ -22,7 +22,7 @@
#include <QDBusInterface>
#include <QTime>
-#include <KDebug>
+#include <QDebug>
#include <AkonadiCore/AgentInstance>
#include <AkonadiCore/AgentManager>
@@ -54,7 +54,7 @@ void SyncTest::testSync()
t.start();
instance.synchronize();
QVERIFY( QTest::kWaitForSignal( interface, SIGNAL(synchronized()), TIMEOUT * \
1000 ) );
- kDebug() << "Sync attempt" << i << "in" << t.elapsed() << "ms.";
+ qDebug() << "Sync attempt" << i << "in" << t.elapsed() << "ms.";
}
}
diff --git a/resources/maildir/libmaildir/keycache.cpp \
b/resources/maildir/libmaildir/keycache.cpp index 814ce6c..e19def2 100644
--- a/resources/maildir/libmaildir/keycache.cpp
+++ b/resources/maildir/libmaildir/keycache.cpp
@@ -27,12 +27,12 @@ void KeyCache::addKeys( const QString& dir )
{
if ( !mNewKeys.contains( dir ) ) {
mNewKeys.insert( dir, listNew( dir ) );
- //kDebug() << "Added new keys for: " << dir;
+ //qDebug() << "Added new keys for: " << dir;
}
if ( !mCurKeys.contains( dir ) ) {
mCurKeys.insert( dir, listCurrent( dir ) );
- //kDebug() << "Added cur keys for: " << dir;
+ //qDebug() << "Added cur keys for: " << dir;
}
}
@@ -46,18 +46,18 @@ void KeyCache::refreshKeys( const QString& dir )
void KeyCache::addNewKey( const QString& dir, const QString& key )
{
mNewKeys[dir].insert( key );
- // kDebug() << "Added new key for : " << dir << " key: " << key;
+ // qDebug() << "Added new key for : " << dir << " key: " << key;
}
void KeyCache::addCurKey( const QString& dir, const QString& key )
{
mCurKeys[dir].insert( key );
- // kDebug() << "Added cur key for : " << dir << " key:" << key;
+ // qDebug() << "Added cur key for : " << dir << " key:" << key;
}
void KeyCache::removeKey( const QString& dir, const QString& key )
{
- //kDebug() << "Removed new and cur key for: " << dir << " key:" << key;
+ //qDebug() << "Removed new and cur key for: " << dir << " key:" << key;
mNewKeys[dir].remove( key );
mCurKeys[dir].remove( key );
}
diff --git a/resources/maildir/maildirresource.cpp \
b/resources/maildir/maildirresource.cpp index e75afa1..d63e3eb 100644
--- a/resources/maildir/maildirresource.cpp
+++ b/resources/maildir/maildirresource.cpp
@@ -38,7 +38,7 @@
#include <kmime/kmime_message.h>
-#include <kdebug.h>
+#include <QDebug>
#include <kdirwatch.h>
#include <kurl.h>
#include <kfiledialog.h>
@@ -64,12 +64,13 @@ Maildir MaildirResource::maildirForCollection( const Collection& \
col ) }
if ( col.remoteId().isEmpty() ) {
- kWarning() << "Got incomplete ancestor chain:" << col;
+ qWarning() << "Got incomplete ancestor chain:" << col;
return Maildir();
}
if ( col.parentCollection() == Collection::root() ) {
- kWarning( col.remoteId() != mSettings->path() ) << "RID mismatch, is " << \
col.remoteId() << " expected " << mSettings->path(); + if (col.remoteId() != \
mSettings->path()) + qWarning() << "RID mismatch, is " << col.remoteId() << " \
expected " << mSettings->path(); Maildir maildir( col.remoteId(), \
mSettings->topLevelIsContainer() ); mMaildirsForCollection.insert( path, maildir );
return maildir;
@@ -152,7 +153,7 @@ MaildirResource::MaildirResource( const QString &id )
void MaildirResource::attemptConfigRestoring( KJob * job )
{
if ( job->error() ) {
- kDebug() << job->errorString();
+ qDebug() << job->errorString();
return;
}
// we cannot be sure that a config file is existing
@@ -161,24 +162,24 @@ void MaildirResource::attemptConfigRestoring( KJob * job )
// we test it again, to be sure
if ( configFile.isEmpty() ) {
// it is still empty, create it
- kWarning() << "the resource is not properly configured:";
- kWarning() << "there is no config file for the resource.";
- kWarning() << "we create a new one.";
+ qWarning() << "the resource is not properly configured:";
+ qWarning() << "there is no config file for the resource.";
+ qWarning() << "we create a new one.";
const Collection::List cols = qobject_cast<CollectionFetchJob*>( job \
)->collections(); QString path;
if ( !cols.isEmpty() ) {
- kDebug() << "the collections list is not empty";
+ qDebug() << "the collections list is not empty";
Collection col = cols.first();
// get the path of the collection
path = col.remoteId();
}
// test the path
if ( path.isEmpty() ) {
- kDebug() << "build a new path";
+ qDebug() << "build a new path";
const QString dataDir = \
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + '/'; // we \
use "id" to get an unique path path = dataDir + id;
- kDebug() << "set the path" << path;
+ qDebug() << "set the path" << path;
mSettings->setPath( path );
// set the resource into container mode for its top level
mSettings->setTopLevelIsContainer( true );
@@ -187,7 +188,7 @@ void MaildirResource::attemptConfigRestoring( KJob * job )
Maildir root( mSettings->path(), true );
mSettings->setTopLevelIsContainer( root.isValid() );
}
- kDebug() << "synchronize";
+ qDebug() << "synchronize";
configurationChanged();
}
}
@@ -456,7 +457,7 @@ void MaildirResource::itemRemoved(const Akonadi::Item & item)
}
restartMaildirScan( dir );
}
- kDebug() << "Item removed" << item.id() << " in collection :" << \
item.parentCollection().id(); + qDebug() << "Item removed" << item.id() << " in \
collection :" << item.parentCollection().id(); changeProcessed();
}
@@ -564,7 +565,7 @@ void MaildirResource::collectionAdded(const Collection & \
collection, const Colle }
Maildir md = maildirForCollection( parent );
- kDebug( 5254 ) << md.subFolderList() << md.entryList();
+ qDebug() << md.subFolderList() << md.entryList();
if ( mSettings->readOnly() || !md.isValid() ) {
changeProcessed();
return;
@@ -576,7 +577,7 @@ void MaildirResource::collectionAdded(const Collection & \
collection, const Colle return;
}
- kDebug( 5254 ) << md.subFolderList() << md.entryList();
+ qDebug() << md.subFolderList() << md.entryList();
Collection col = collection;
col.setRemoteId( collectionName );
@@ -628,7 +629,7 @@ void MaildirResource::collectionChanged(const Collection & \
collection)
void MaildirResource::collectionMoved( const Collection &collection, const \
Collection &source, const Collection &dest ) {
- kDebug() << collection << source << dest;
+ qDebug() << collection << source << dest;
if ( !ensureSaneConfiguration() ) {
emit error( i18n( "Unusable configuration." ) );
@@ -741,7 +742,7 @@ void MaildirResource::slotDirChanged(const QString& dir)
const Collection col = collectionForMaildir( md );
if ( col.remoteId().isEmpty() ) {
- kDebug() << "unable to find collection for path" << dir;
+ qDebug() << "unable to find collection for path" << dir;
return;
}
@@ -752,7 +753,7 @@ void MaildirResource::slotDirChanged(const QString& dir)
void MaildirResource::fsWatchDirFetchResult(KJob* job)
{
if ( job->error() ) {
- kDebug() << job->errorString();
+ qDebug() << job->errorString();
return;
}
const Collection::List cols = qobject_cast<CollectionFetchJob*>( job \
)->collections(); @@ -783,7 +784,7 @@ void MaildirResource::slotFileChanged( const \
QFileInfo& fileInfo )
const Collection col = collectionForMaildir( md );
if ( col.remoteId().isEmpty() ) {
- kDebug() << "unable to find collection for path" << fileInfo.path();
+ qDebug() << "unable to find collection for path" << fileInfo.path();
return;
}
@@ -800,7 +801,7 @@ void MaildirResource::slotFileChanged( const QFileInfo& fileInfo \
) void MaildirResource::fsWatchFileFetchResult( KJob* job )
{
if ( job->error() ) {
- kDebug() << job->errorString();
+ qDebug() << job->errorString();
return;
}
Item::List items = qobject_cast<ItemFetchJob*>( job )->items();
@@ -837,7 +838,7 @@ void MaildirResource::fsWatchFileFetchResult( KJob* job )
void MaildirResource::fsWatchFileModifyResult(KJob* job)
{
if ( job->error() ) {
- kDebug() << job->errorString();
+ qDebug() << job->errorString();
return;
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic