File indexing completed on 2024-05-12 16:59:36

0001 /*
0002  * SPDX-FileCopyrightText: 2014 David Edmundson <david@davidedmundson.co.uk>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-or-later
0005  *
0006  */
0007 
0008 #include "notemanager.h"
0009 
0010 #include <QDebug>
0011 #include <QMutex>
0012 #include <QQmlEngine>
0013 
0014 #include "filesystemnoteloader.h"
0015 #include "note.h"
0016 
0017 NoteManager::NoteManager(QObject *parent)
0018     : QObject(parent)
0019     , m_backend(loadBackend())
0020 {
0021 }
0022 
0023 Note *NoteManager::loadNote(const QString &id)
0024 {
0025     Note *note = m_backend->loadNote(id);
0026     QQmlEngine::setObjectOwnership(note, QQmlEngine::JavaScriptOwnership);
0027     return note;
0028 }
0029 
0030 void NoteManager::deleteNoteResources(const QString &id)
0031 {
0032     m_backend->deleteNoteResources(id);
0033 }
0034 
0035 QSharedPointer<AbstractNoteLoader> NoteManager::loadBackend()
0036 {
0037     static QMutex mutex;
0038     static QWeakPointer<AbstractNoteLoader> s_backend;
0039 
0040     mutex.lock();
0041     QSharedPointer<AbstractNoteLoader> manager = s_backend.toStrongRef();
0042     if (manager.isNull()) {
0043         manager.reset(new FileSystemNoteLoader);
0044         s_backend = manager;
0045     }
0046     mutex.unlock();
0047     return manager;
0048 }