Skip to content

Commit

Permalink
Merge branch 'jb44707-core-apps' into 'master'
Browse files Browse the repository at this point in the history
Jb44707 core apps

See merge request mer-core/qtcontacts-sqlite!15
  • Loading branch information
chriadam committed Apr 15, 2019
2 parents 1b709ae + e0a0fc6 commit 3b97cb9
Show file tree
Hide file tree
Showing 28 changed files with 2,430 additions and 577 deletions.
5 changes: 3 additions & 2 deletions rpm/qtcontacts-sqlite-qt5.spec
Expand Up @@ -10,6 +10,7 @@ BuildRequires: pkgconfig(Qt5Core)
BuildRequires: pkgconfig(Qt5Sql)
BuildRequires: pkgconfig(Qt5DBus)
BuildRequires: pkgconfig(Qt5Contacts)
BuildRequires: pkgconfig(mlite5)
Requires: qt5-plugin-sqldriver-sqlite

%description
Expand All @@ -23,7 +24,6 @@ Requires: qt5-plugin-sqldriver-sqlite
Summary: Unit tests for qtcontacts-sqlite-qt5
Group: System/Libraries
BuildRequires: pkgconfig(Qt5Test)
Requires: blts-tools
Requires: %{name} = %{version}-%{release}

%description tests
Expand All @@ -32,6 +32,7 @@ This package contains unit tests for the qtcontacts-sqlite-qt5 library.
%files tests
%defattr(-,root,root,-)
/opt/tests/qtcontacts-sqlite-qt5/*
%{_libdir}/qtcontacts-sqlite-qt5/libtestdlgg.so

%package extensions
Summary: QtContacts extension headers for qtcontacts-sqlite-qt5
Expand All @@ -51,7 +52,7 @@ This package contains extension headers for the qtcontacts-sqlite-qt5 library.
%setup -q -n %{name}-%{version}

%build
%qmake5
%qmake5 "VERSION=%{version}"
make %{?_smp_mflags}

%install
Expand Down
75 changes: 51 additions & 24 deletions src/engine/contactreader.cpp
Expand Up @@ -142,7 +142,8 @@ static QVariant dateValue(const QVariant &columnValue)

static const FieldInfo displayLabelFields[] =
{
{ QContactDisplayLabel::FieldLabel, "displayLabel", LocalizedField }
{ QContactDisplayLabel::FieldLabel, "displayLabel", LocalizedField },
{ QContactDisplayLabel__FieldLabelGroup, "displayLabelGroup", LocalizedField }
};

static const FieldInfo nameFields[] =
Expand Down Expand Up @@ -1410,7 +1411,10 @@ static QString buildOrderBy(const QContactSortOrder &order, QStringList *joins,
return QString();
}

QString sortExpression(QStringLiteral("%1.%2").arg(detail.joinToSort ? detail.table : QStringLiteral("Contacts")).arg(field.column));
const bool isDisplayLabelGroup = detail.detailType == QContactDisplayLabel::Type && field.field == QContactDisplayLabel__FieldLabelGroup;
QString sortExpression(QStringLiteral("%1.%2")
.arg(detail.joinToSort ? detail.table : QStringLiteral("Contacts"))
.arg(isDisplayLabelGroup ? QStringLiteral("DisplayLabelGroupSortOrder") : field.column));
bool sortBlanks = true;
bool collate = true;
bool localized = field.fieldType == LocalizedField;
Expand Down Expand Up @@ -1457,7 +1461,7 @@ static QString buildOrderBy(const QContactSortOrder &order, QStringList *joins,

result.append(sortExpression);

if (collate) {
if (!isDisplayLabelGroup && collate) {
if (localized && useLocale) {
result.append(QLatin1String(" COLLATE localeCollation"));
} else {
Expand Down Expand Up @@ -1935,7 +1939,30 @@ QContactManager::Error ContactReader::queryContacts(
QContactManager::Error err = QContactManager::NoError;

const QString idsQueryStatement(QString::fromLatin1(
"SELECT Contacts.* "
"SELECT " // order and content can change due to schema upgrades, so list manually.
"Contacts.contactId, "
"Contacts.displayLabel, "
"Contacts.displayLabelGroup, "
"Contacts.firstName, "
"Contacts.lowerFirstName, "
"Contacts.lastName, "
"Contacts.lowerLastName, "
"Contacts.middleName, "
"Contacts.prefix, "
"Contacts.suffix, "
"Contacts.customLabel, "
"Contacts.syncTarget, "
"Contacts.created, "
"Contacts.modified, "
"Contacts.gender, "
"Contacts.isFavorite, "
"Contacts.hasPhoneNumber, "
"Contacts.hasEmailAddress, "
"Contacts.hasOnlineAccount, "
"Contacts.isOnline, "
"Contacts.isDeactivated, "
"Contacts.isIncidental, "
"Contacts.type "
"FROM temp.%1 "
"CROSS JOIN Contacts ON temp.%1.contactId = Contacts.contactId " // Cross join ensures we scan the temp table first
"ORDER BY temp.%1.rowId ASC").arg(tableName));
Expand Down Expand Up @@ -2117,50 +2144,50 @@ QContactManager::Error ContactReader::queryContacts(
contact.setId(id);

QString persistedDL = contactQuery.value(1).toString();
if (!persistedDL.isEmpty())
ContactsEngine::setContactDisplayLabel(&contact, persistedDL);
QString displayLabelGroup = contactQuery.value(2).toString();
ContactsEngine::setContactDisplayLabel(&contact, persistedDL, displayLabelGroup);

QContactName name;
setValue(&name, QContactName::FieldFirstName , contactQuery.value(2));
setValue(&name, QContactName::FieldFirstName , contactQuery.value(3));
// ignore lowerFirstName
setValue(&name, QContactName::FieldLastName , contactQuery.value(4));
setValue(&name, QContactName::FieldLastName , contactQuery.value(5));
// ignore lowerLastName
setValue(&name, QContactName::FieldMiddleName , contactQuery.value(6));
setValue(&name, QContactName::FieldPrefix , contactQuery.value(7));
setValue(&name, QContactName::FieldSuffix , contactQuery.value(8));
setValue(&name, QContactName__FieldCustomLabel, contactQuery.value(9));
setValue(&name, QContactName::FieldMiddleName , contactQuery.value(7));
setValue(&name, QContactName::FieldPrefix , contactQuery.value(8));
setValue(&name, QContactName::FieldSuffix , contactQuery.value(9));
setValue(&name, QContactName__FieldCustomLabel, contactQuery.value(10));
if (!name.isEmpty())
contact.saveDetail(&name);

const QString syncTarget(contactQuery.value(10).toString());
const QString syncTarget(contactQuery.value(11).toString());

QContactSyncTarget starget;
setValue(&starget, QContactSyncTarget::FieldSyncTarget, syncTarget);
if (!starget.isEmpty())
contact.saveDetail(&starget);

QContactTimestamp timestamp;
setValue(&timestamp, QContactTimestamp::FieldCreationTimestamp , ContactsDatabase::fromDateTimeString(contactQuery.value(11).toString()));
setValue(&timestamp, QContactTimestamp::FieldModificationTimestamp, ContactsDatabase::fromDateTimeString(contactQuery.value(12).toString()));
setValue(&timestamp, QContactTimestamp::FieldCreationTimestamp , ContactsDatabase::fromDateTimeString(contactQuery.value(12).toString()));
setValue(&timestamp, QContactTimestamp::FieldModificationTimestamp, ContactsDatabase::fromDateTimeString(contactQuery.value(13).toString()));

QContactGender gender;
// Gender is an enum in qtpim
QString genderText = contactQuery.value(13).toString();
QString genderText = contactQuery.value(14).toString();
gender.setGender(static_cast<QContactGender::GenderField>(genderText.toInt()));
contact.saveDetail(&gender);

QContactFavorite favorite;
setValue(&favorite, QContactFavorite::FieldFavorite, contactQuery.value(14).toBool());
setValue(&favorite, QContactFavorite::FieldFavorite, contactQuery.value(15).toBool());
if (!favorite.isEmpty())
contact.saveDetail(&favorite);

QContactStatusFlags flags;
flags.setFlag(QContactStatusFlags::HasPhoneNumber, contactQuery.value(15).toBool());
flags.setFlag(QContactStatusFlags::HasEmailAddress, contactQuery.value(16).toBool());
flags.setFlag(QContactStatusFlags::HasOnlineAccount, contactQuery.value(17).toBool());
flags.setFlag(QContactStatusFlags::IsOnline, contactQuery.value(18).toBool());
flags.setFlag(QContactStatusFlags::IsDeactivated, contactQuery.value(19).toBool());
flags.setFlag(QContactStatusFlags::IsIncidental, contactQuery.value(20).toBool());
flags.setFlag(QContactStatusFlags::HasPhoneNumber, contactQuery.value(16).toBool());
flags.setFlag(QContactStatusFlags::HasEmailAddress, contactQuery.value(17).toBool());
flags.setFlag(QContactStatusFlags::HasOnlineAccount, contactQuery.value(18).toBool());
flags.setFlag(QContactStatusFlags::IsOnline, contactQuery.value(19).toBool());
flags.setFlag(QContactStatusFlags::IsDeactivated, contactQuery.value(20).toBool());
flags.setFlag(QContactStatusFlags::IsIncidental, contactQuery.value(21).toBool());

if (flags.testFlag(QContactStatusFlags::IsDeactivated)) {
QContactDeactivated deactivated;
Expand All @@ -2171,7 +2198,7 @@ QContactManager::Error ContactReader::queryContacts(
contact.saveDetail(&incidental);
}

int contactType = contactQuery.value(21).toInt();
int contactType = contactQuery.value(22).toInt();
QContactType typeDetail = contact.detail<QContactType>();
typeDetail.setType(static_cast<QContactType::TypeValues>(contactType));
contact.saveDetail(&typeDetail);
Expand Down

0 comments on commit 3b97cb9

Please sign in to comment.