Skip to content
Snippets Groups Projects
Commit 708f9c9a authored by Emmanuel Lepage Vallee's avatar Emmanuel Lepage Vallee
Browse files

collections: Make them more usable form the CollectionModel

Refs #68352
parent 8a9d261c
Branches
No related tags found
No related merge requests found
......@@ -26,6 +26,7 @@
#include "contactmethod.h"
#include "collectioneditor.h"
#include "itembase.h"
#include "delegates/pixmapmanipulationdelegate.h"
//Libstdc++
#include <functional>
......@@ -53,6 +54,10 @@ QVector<CollectionInterface*> CollectionInterface::children() const
return d_ptr->m_lChildren;
}
QVariant CollectionInterface::icon() const
{
return PixmapManipulationDelegate::instance()->collectionIcon(this);
}
bool CollectionInterface::clear()
{
......
......@@ -98,7 +98,7 @@ public:
* This method must return an optinal icon to be used in the
* backend manager is SupportedFeatures::MANAGEABLE is set.
*/
virtual QVariant icon () const = 0;
virtual QVariant icon () const ;
/**
* Return if the backend is currently enabled. An enabled backend
......
......@@ -343,6 +343,7 @@ void CollectionModelPrivate::registerNew(CollectionInterface* col)
cat->collection = nullptr;
m_hCategories[cat->m_AltName] = cat;
m_hBackendsNodes[col] = cat;
q_ptr->beginInsertRows(QModelIndex(),m_lTopLevelBackends.size(),m_lTopLevelBackends.size());
m_lTopLevelBackends << cat;
......@@ -350,7 +351,8 @@ void CollectionModelPrivate::registerNew(CollectionInterface* col)
}
ProxyItem* item = new ProxyItem();
ProxyItem* par = col->parent()?m_hBackendsNodes[col->parent()] : cat;
const bool hasParent = col->parent();
ProxyItem* par = hasParent?m_hBackendsNodes[col->parent()] : cat;
item->parent = par;
item->row = par->m_Children.size();
......
......@@ -89,3 +89,11 @@ QVariant PixmapManipulationDelegate::userActionIcon(const UserActionElement& sta
Q_UNUSED(state)
return QVariant();
}
QVariant PixmapManipulationDelegate::collectionIcon(const CollectionInterface* interface, PixmapManipulationDelegate::CollectionIconHint hint) const
{
Q_UNUSED(interface)
Q_UNUSED(hint)
return QVariant();
}
......@@ -24,9 +24,10 @@
#include <QtCore/QModelIndex>
//Ring
class Person ;
class ContactMethod ;
class Call ;
class Person ;
class ContactMethod ;
class Call ;
class CollectionInterface;
struct UserActionElement;
/**
......@@ -41,6 +42,19 @@ struct UserActionElement;
*/
class LIB_EXPORT PixmapManipulationDelegate {
public:
//Implementation can use random values to extend this
enum CollectionIconHint {
NONE,
HISTORY,
CONTACT,
BOOKMARK,
PHONE_NUMBER,
RINGTONE,
PROFILE,
CERTIFICATE,
ACCOUNT,
};
PixmapManipulationDelegate();
virtual ~PixmapManipulationDelegate() {}
virtual QVariant contactPhoto(Person* c, const QSize& size, bool displayPresence = true);
......@@ -50,6 +64,7 @@ public:
virtual QVariant serurityIssueIcon(const QModelIndex& index);
virtual QByteArray toByteArray(const QVariant& pxm);
virtual QVariant profilePhoto(const QByteArray& data, const QString& type = "PNG");
virtual QVariant collectionIcon(const CollectionInterface* interface, PixmapManipulationDelegate::CollectionIconHint hint = PixmapManipulationDelegate::CollectionIconHint::NONE) const;
/**
* Return the icons associated with the action and its state
......
......@@ -22,21 +22,24 @@
#include <QtCore/QFile>
#include <QtCore/QDir>
#include <QtCore/QHash>
#include <QtCore/QTimer>
#include <QtCore/QUrl>
#include <QtWidgets/QApplication>
#include <QtCore/QStandardPaths>
//Ring
#include "person.h"
#include "personmodel.h"
#include "vcardutils.h"
#include "contactmethod.h"
#include "collectioneditor.h"
#include "delegates/pixmapmanipulationdelegate.h"
class FallbackPersonBackendEditor : public CollectionEditor<Person>
{
public:
FallbackPersonBackendEditor(CollectionMediator<Person>* m) : CollectionEditor<Person>(m) {}
FallbackPersonBackendEditor(CollectionMediator<Person>* m, const QString& path) : CollectionEditor<Person>(m),m_Path(path) {}
virtual bool save ( const Person* item ) override;
virtual bool remove ( const Person* item ) override;
virtual bool edit ( Person* item ) override;
......@@ -44,6 +47,7 @@ public:
virtual bool addExisting( const Person* item ) override;
QVector<Person*> m_lItems;
QString m_Path ;
private:
virtual QVector<Person*> items() const override;
......@@ -52,17 +56,23 @@ private:
class FallbackPersonCollectionPrivate
{
public:
FallbackPersonCollectionPrivate(CollectionMediator<Person>* mediator);
FallbackPersonCollectionPrivate(CollectionMediator<Person>* mediator, const QString& path);
CollectionMediator<Person>* m_pMediator;
QString m_Path ;
QString m_Name ;
};
FallbackPersonCollectionPrivate::FallbackPersonCollectionPrivate(CollectionMediator<Person>* mediator) : m_pMediator(mediator)
FallbackPersonCollectionPrivate::FallbackPersonCollectionPrivate(CollectionMediator<Person>* mediator, const QString& path) : m_pMediator(mediator), m_Path(path)
{
m_Name = path.split('/').last();
if (m_Name.size())
m_Name[0] = m_Name[0].toUpper();
else
m_Name = "vCard";
}
FallbackPersonCollection::FallbackPersonCollection(CollectionMediator<Person>* mediator) :
CollectionInterface(new FallbackPersonBackendEditor(mediator)),d_ptr(new FallbackPersonCollectionPrivate(mediator))
FallbackPersonCollection::FallbackPersonCollection(CollectionMediator<Person>* mediator, const QString& path, FallbackPersonCollection* parent) :
CollectionInterface(new FallbackPersonBackendEditor(mediator,path),parent),d_ptr(new FallbackPersonCollectionPrivate(mediator,path))
{
}
......@@ -73,7 +83,7 @@ FallbackPersonCollection::~FallbackPersonCollection()
bool FallbackPersonBackendEditor::save(const Person* item)
{
QFile file("/tmp/vcard/"+item->uid()+".vcf");
QFile file(m_Path+'/'+item->uid()+".vcf");
file.open(QIODevice::WriteOnly);
file.write(item->toVCard({}));
file.close();
......@@ -112,7 +122,7 @@ QVector<Person*> FallbackPersonBackendEditor::items() const
QString FallbackPersonCollection::name () const
{
return QObject::tr("vCard backend");
return d_ptr->m_Name;
}
QString FallbackPersonCollection::category () const
......@@ -122,7 +132,7 @@ QString FallbackPersonCollection::category () const
QVariant FallbackPersonCollection::icon() const
{
return QVariant();
return PixmapManipulationDelegate::instance()->collectionIcon(this,PixmapManipulationDelegate::CollectionIconHint::CONTACT);
}
bool FallbackPersonCollection::isEnabled() const
......@@ -133,10 +143,19 @@ bool FallbackPersonCollection::isEnabled() const
bool FallbackPersonCollection::load()
{
bool ok;
QList< Person* > ret = VCardUtils::loadDir(QUrl("/tmp/vcard"),ok);
QList< Person* > ret = VCardUtils::loadDir(QUrl(d_ptr->m_Path),ok);
for(Person* p : ret) {
editor<Person>()->addExisting(p);
}
//Add all sub directories as new backends
QTimer::singleShot(0,[this]() {
QDir d(d_ptr->m_Path);
for (const QString& dir : d.entryList(QDir::AllDirs)) {
PersonModel::instance()->addCollection<FallbackPersonCollection,QString,FallbackPersonCollection*>(d_ptr->m_Path+'/'+dir,this);
}
});
return true;
}
......@@ -147,17 +166,18 @@ bool FallbackPersonCollection::reload()
CollectionInterface::SupportedFeatures FallbackPersonCollection::supportedFeatures() const
{
return (CollectionInterface::SupportedFeatures) (
CollectionInterface::SupportedFeatures::NONE |
CollectionInterface::SupportedFeatures::LOAD |
CollectionInterface::SupportedFeatures::CLEAR |
return (CollectionInterface::SupportedFeatures) (
CollectionInterface::SupportedFeatures::NONE |
CollectionInterface::SupportedFeatures::LOAD |
CollectionInterface::SupportedFeatures::CLEAR |
CollectionInterface::SupportedFeatures::MANAGEABLE |
// CollectionInterface::SupportedFeatures::REMOVE|
CollectionInterface::SupportedFeatures::ADD );
CollectionInterface::SupportedFeatures::ADD );
}
bool FallbackPersonCollection::clear()
{
QDir dir("/tmp/vcard");
QDir dir(d_ptr->m_Path);
for (const QString& file : dir.entryList({"*.vcf"},QDir::Files))
dir.remove(file);
return true;
......
......@@ -37,7 +37,7 @@ template<typename T> class CollectionMediator;
class LIB_EXPORT FallbackPersonCollection : public CollectionInterface
{
public:
explicit FallbackPersonCollection(CollectionMediator<Person>* mediator);
explicit FallbackPersonCollection(CollectionMediator<Person>* mediator, const QString& path = "/tmp/vcard", FallbackPersonCollection* parent = nullptr);
virtual ~FallbackPersonCollection();
virtual bool load () override;
......
......@@ -169,7 +169,6 @@ void SecurityValidationModelPrivate::update()
{
if (!m_pAccount)
return; //TODO use the local certificates
qDebug() << "\n\n\nUPDATING";
m_lCurrentFlaws.clear();
......
......@@ -20,6 +20,8 @@
#include <collectioneditor.h>
#include "delegates/pixmapmanipulationdelegate.h"
class TransitionalPersonBackendPrivate
{
......@@ -143,7 +145,7 @@ CollectionInterface::SupportedFeatures TransitionalPersonBackend::supportedFeatu
QString TransitionalPersonBackend::name () const
{
return QObject::tr("Transitional contact backend");
return QObject::tr("Contact placeholders");
}
QString TransitionalPersonBackend::category () const
......@@ -153,7 +155,7 @@ QString TransitionalPersonBackend::category () const
QVariant TransitionalPersonBackend::icon() const
{
return QVariant();
return PixmapManipulationDelegate::instance()->collectionIcon(this,PixmapManipulationDelegate::CollectionIconHint::CONTACT);
}
QByteArray TransitionalPersonBackend::id() const
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment