Skip to content

Commit

Permalink
[contacts] Add SeasideAddressBookUtil. JB#51879
Browse files Browse the repository at this point in the history
  • Loading branch information
blammit committed Nov 6, 2020
1 parent c656496 commit 4eb5361
Show file tree
Hide file tree
Showing 4 changed files with 173 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/plugin.cpp
Expand Up @@ -39,6 +39,7 @@

#include "seasideaddressbook.h"
#include "seasideaddressbookmodel.h"
#include "seasideaddressbookutil.h"
#include "seasideperson.h"
#include "seasidefilteredmodel.h"
#include "seasidedisplaylabelgroupmodel.h"
Expand Down Expand Up @@ -99,6 +100,7 @@ class Q_DECL_EXPORT NemoContactsPlugin : public QQmlExtensionPlugin
qmlRegisterType<SeasideMergeCandidateModel>(uri, 1, 0, "MergeCandidateModel");
qmlRegisterUncreatableType<SeasideAddressBook>(uri, 1, 0, "AddressBook", "");
qmlRegisterSingletonType<KnownContacts>(uri, 1, 0, "KnownContacts", singletonApiCallback<KnownContacts>);
qmlRegisterSingletonType<SeasideAddressBookUtil>(uri, 1, 0, "AddressBookUtil", singletonApiCallback<SeasideAddressBookUtil>);
}
};

Expand Down
105 changes: 105 additions & 0 deletions src/seasideaddressbookutil.cpp
@@ -0,0 +1,105 @@
/*
* Copyright (c) 2020 Open Mobile Platform LLC.
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/

#include "seasideaddressbookutil.h"

#include <seasidecache.h>

#include <QtDebug>

SeasideAddressBookUtil::SeasideAddressBookUtil(QObject *parent)
: QObject(parent)
{
const QList<QContactCollection> collections = SeasideCache::manager()->collections();
for (const QContactCollection &collection : collections) {
m_addressBooks.append(QVariant::fromValue(SeasideAddressBook::fromCollectionId(collection.id())));
}

connect(SeasideCache::manager(), &QContactManager::collectionsAdded,
this, &SeasideAddressBookUtil::collectionsAdded);
connect(SeasideCache::manager(), &QContactManager::collectionsRemoved,
this, &SeasideAddressBookUtil::collectionsRemoved);
connect(SeasideCache::manager(), &QContactManager::collectionsChanged,
this, &SeasideAddressBookUtil::collectionsChanged);
}

SeasideAddressBookUtil::~SeasideAddressBookUtil()
{
}

QVariantList SeasideAddressBookUtil::addressBooks() const
{
return m_addressBooks;
}

void SeasideAddressBookUtil::collectionsAdded(const QList<QContactCollectionId> &collectionIds)
{
for (const QContactCollectionId &id : collectionIds) {
m_addressBooks.append(QVariant::fromValue(SeasideAddressBook::fromCollectionId(id)));
}
emit addressBooksChanged();
}

void SeasideAddressBookUtil::collectionsRemoved(const QList<QContactCollectionId> &collectionIds)
{
for (const QContactCollectionId &id : collectionIds) {
const int i = findCollection(id);
if (i >= 0) {
m_addressBooks.removeAt(i);
}
}
emit addressBooksChanged();
}

void SeasideAddressBookUtil::collectionsChanged(const QList<QContactCollectionId> &collectionIds)
{
bool emitChanged = false;
for (const QContactCollectionId &id : collectionIds) {
const int i = findCollection(id);
if (i >= 0) {
emitChanged = true;
m_addressBooks.replace(i, QVariant::fromValue(SeasideAddressBook::fromCollectionId(id)));
}
}
if (emitChanged) {
emit addressBooksChanged();
}
}

int SeasideAddressBookUtil::findCollection(const QContactCollectionId &id) const
{
for (int i = 0; i < m_addressBooks.count(); ++i) {
if (m_addressBooks.at(i).value<SeasideAddressBook>().collectionId == id) {
return i;
}
}
return -1;
}
64 changes: 64 additions & 0 deletions src/seasideaddressbookutil.h
@@ -0,0 +1,64 @@
/*
* Copyright (c) 2020 Open Mobile Platform LLC.
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/

#ifndef SEASIDEADDRESSBOOKUTIL_H
#define SEASIDEADDRESSBOOKUTIL_H

#include "seasideaddressbook.h"

#include <QVariantList>

QTCONTACTS_USE_NAMESPACE

class SeasideAddressBookUtil : public QObject
{
Q_OBJECT
Q_PROPERTY(QVariantList addressBooks READ addressBooks NOTIFY addressBooksChanged)

public:
SeasideAddressBookUtil(QObject *parent = 0);
~SeasideAddressBookUtil();

QVariantList addressBooks() const;

signals:
void addressBooksChanged();

private:
void collectionsAdded(const QList<QContactCollectionId> &collectionIds);
void collectionsRemoved(const QList<QContactCollectionId> &collectionIds);
void collectionsChanged(const QList<QContactCollectionId> &collectionIds);
int findCollection(const QContactCollectionId &id) const;

QVariantList m_addressBooks;
};

#endif
2 changes: 2 additions & 0 deletions src/src.pro
Expand Up @@ -34,6 +34,7 @@ QMAKE_EXTRA_TARGETS += qmltypes
SOURCES += $$PWD/plugin.cpp \
$$PWD/seasideaddressbook.cpp \
$$PWD/seasideaddressbookmodel.cpp \
$$PWD/seasideaddressbookutil.cpp \
$$PWD/seasideperson.cpp \
$$PWD/seasidefilteredmodel.cpp \
$$PWD/seasidedisplaylabelgroupmodel.cpp \
Expand All @@ -47,6 +48,7 @@ SOURCES += $$PWD/plugin.cpp \
HEADERS += $$PWD/seasideperson.h \
$$PWD/seasideaddressbook.h \
$$PWD/seasideaddressbookmodel.h \
$$PWD/seasideaddressbookutil.h \
$$PWD/seasidefilteredmodel.h \
$$PWD/seasidedisplaylabelgroupmodel.h \
$$PWD/seasidestringlistcompressor.h \
Expand Down

0 comments on commit 4eb5361

Please sign in to comment.