/* * Copyright (C) 2012 Webdoc SA * * This file is part of Open-Sankoré. * * Open-Sankoré 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, version 2, * with a specific linking exception for the OpenSSL project's * "OpenSSL" library (or with modified versions of it that use the * same license as the "OpenSSL" library). * * Open-Sankoré 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 Open-Sankoré; if not, see * . */ #include "UBDocumentProxy.h" #include "frameworks/UBStringUtils.h" #include "core/UBApplication.h" #include "core/UBPersistenceManager.h" #include "core/UBSettings.h" #include "core/UBDocumentManager.h" #include "core/memcheck.h" UBDocumentProxy::UBDocumentProxy() : mPageCount(0) { init(); } UBDocumentProxy::UBDocumentProxy(const QString& pPersistancePath) : mPageCount(0) { init(); setPersistencePath(pPersistancePath); } void UBDocumentProxy::init() { setMetaData(UBSettings::documentGroupName, ""); QDateTime now = QDateTime::currentDateTime(); setMetaData(UBSettings::documentName, now.toString(Qt::SystemLocaleShortDate)); setUuid(QUuid::createUuid()); setDefaultDocumentSize(UBSettings::settings()->pageSize->get().toSize()); //teacherGuide metadata setMetaData(UBSettings::sessionTitle,""); setMetaData(UBSettings::sessionAuthors,""); setMetaData(UBSettings::sessionObjectives,""); setMetaData(UBSettings::sessionKeywords,""); setMetaData(UBSettings::sessionGradeLevel,""); setMetaData(UBSettings::sessionSubjects,""); setMetaData(UBSettings::sessionType,""); setMetaData(UBSettings::sessionLicence,""); } UBDocumentProxy::~UBDocumentProxy() { // NOOP } int UBDocumentProxy::pageCount() { return mPageCount; } void UBDocumentProxy::setPageCount(int pPageCount) { mPageCount = pPageCount; } int UBDocumentProxy::incPageCount() { if (mPageCount <= 0) { mPageCount = 1; } else { mPageCount++; } return mPageCount; } int UBDocumentProxy::decPageCount() { mPageCount --; if (mPageCount < 0) { mPageCount = 0; } return mPageCount; } QString UBDocumentProxy::persistencePath() const { return mPersistencePath; } void UBDocumentProxy::setPersistencePath(const QString& pPersistencePath) { if (pPersistencePath != mPersistencePath) { mIsModified = true; mPersistencePath = pPersistencePath; } } void UBDocumentProxy::setMetaData(const QString& pKey, const QVariant& pValue) { if (mMetaDatas.contains(pKey) && mMetaDatas.value(pKey) == pValue) return; else { mIsModified = true; mMetaDatas.insert(pKey, pValue); if (pKey == UBSettings::documentUpdatedAt) { UBDocumentManager *documentManager = UBDocumentManager::documentManager(); if (documentManager) documentManager->emitDocumentUpdated(this); } } } QVariant UBDocumentProxy::metaData(const QString& pKey) const { if (mMetaDatas.contains(pKey)) { return mMetaDatas.value(pKey); } else { qDebug() << "Unknown metadata key" << pKey; return QString(""); // failsafe } } QHash UBDocumentProxy::metaDatas() const { return mMetaDatas; } QString UBDocumentProxy::name() const { return metaData(UBSettings::documentName).toString(); } QString UBDocumentProxy::groupName() const { return metaData(UBSettings::documentGroupName).toString(); } QSize UBDocumentProxy::defaultDocumentSize() const { if (mMetaDatas.contains(UBSettings::documentSize)) return metaData(UBSettings::documentSize).toSize(); else return UBSettings::settings()->pageSize->get().toSize(); } void UBDocumentProxy::setDefaultDocumentSize(QSize pSize) { if (defaultDocumentSize() != pSize) { setMetaData(UBSettings::documentSize, QVariant(pSize)); emit defaultDocumentSizeChanged(); mIsModified = true; } } void UBDocumentProxy::setDefaultDocumentSize(int pWidth, int pHeight) { setDefaultDocumentSize(QSize(pWidth, pHeight)); } QUuid UBDocumentProxy::uuid() const { QString id = metaData(UBSettings::documentIdentifer).toString(); QString sUuid = id.replace(UBSettings::uniboardDocumentNamespaceUri + "/", ""); return QUuid(sUuid); } void UBDocumentProxy::setUuid(const QUuid& uuid) { setMetaData(UBSettings::documentIdentifer, UBSettings::uniboardDocumentNamespaceUri + "/" + UBStringUtils::toCanonicalUuid(uuid)); } QDateTime UBDocumentProxy::documentDate() { if(mMetaDatas.contains(UBSettings::documentDate)) return UBStringUtils::fromUtcIsoDate(metaData(UBSettings::documentDate).toString()); return QDateTime::currentDateTime(); } QDateTime UBDocumentProxy::lastUpdate() { if(mMetaDatas.contains(UBSettings::documentUpdatedAt)) return UBStringUtils::fromUtcIsoDate(metaData(UBSettings::documentUpdatedAt).toString()); return QDateTime().currentDateTime(); } bool UBDocumentProxy::isModified() const { return mIsModified; }