void UBExportDocumentSetAdaptor::persist(UBDocumentProxy* pDocumentProxy) { QModelIndex treeViewParentIndex; UBPersistenceManager *persistenceManager = UBPersistenceManager::persistenceManager(); UBDocumentTreeModel *treeModel = persistenceManager->mDocumentTreeStructureModel; QString filename; if (pDocumentProxy) { treeViewParentIndex = treeModel->indexForProxy(pDocumentProxy); if (!treeViewParentIndex.isValid()) { qDebug() << "failed to export"; UBApplication::showMessage(tr("Failed to export...")); return; } filename = askForFileName(pDocumentProxy, tr("Export as UBX File")); } else { treeViewParentIndex = UBApplication::documentController->firstSelectedTreeIndex(); if (!treeViewParentIndex.isValid()) { qDebug() << "failed to export"; UBApplication::showMessage(tr("Failed to export...")); return; } UBDocumentTreeNode* node = treeModel->nodeFromIndex(treeViewParentIndex); UBDocumentProxy proxy; proxy.setMetaData(UBSettings::documentName,node->displayName()); filename = askForFileName(&proxy, tr("Export as UBX File")); } if (filename.length() > 0) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); if (mIsVerbose) UBApplication::showMessage(tr("Exporting document...")); if (persistData(treeViewParentIndex, filename)) { if (mIsVerbose) { UBApplication::showMessage(tr("Export successful.")); } } else { if (mIsVerbose) { UBApplication::showMessage(tr("Export failed.")); } } QApplication::restoreOverrideCursor(); } }
bool UBImportCFF::addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile) { QFileInfo fi(pFile); UBApplication::showMessage(tr("Importing file %1...").arg(fi.baseName()), true); // first unzip the file to the correct place //TODO create temporary path for iwb file content QString path = QDir::tempPath(); QString documentRootFolder = expandFileToDir(pFile, path); QString contentFile; if (documentRootFolder.isEmpty()) //if file has failed to unzip it is probably just xml file contentFile = pFile.fileName(); else //get path to content xml (according to iwbcff specification) contentFile = documentRootFolder.append("/content.xml"); if(!contentFile.length()){ UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName())); return false; } else{ //TODO convert expanded CFF file content to the destination document //create destination document proxy //fill metadata and save UBDocumentProxy* destDocument = new UBDocumentProxy(UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath()); QDir dir; dir.mkdir(destDocument->persistencePath()); //try to import cff to document if (UBCFFSubsetAdaptor::ConvertCFFFileToUbz(contentFile, destDocument)) { UBPersistenceManager::persistenceManager()->addDirectoryContentToDocument(destDocument->persistencePath(), pDocument); UBFileSystemUtils::deleteDir(destDocument->persistencePath()); delete destDocument; UBApplication::showMessage(tr("Import successful.")); return true; } else { UBFileSystemUtils::deleteDir(destDocument->persistencePath()); delete destDocument; UBApplication::showMessage(tr("Import failed.")); return false; } } }
QString UBWidgetUniboardAPI::pageThumbnail(const int pageNumber) { if (UBApplication::boardController->activeScene() != mScene) return ""; UBDocumentProxy *doc = UBApplication::boardController->selectedDocument(); if (!doc) return ""; if (pageNumber > doc->pageCount()) return ""; QUrl url = UBThumbnailAdaptor::thumbnailUrl(doc, pageNumber - 1); return url.toString(); }
UBDocumentProxy* UBImportCFF::importFile(const QFile& pFile, const QString& pGroup) { Q_UNUSED(pGroup); // group is defined in the imported file QFileInfo fi(pFile); UBApplication::showMessage(tr("Importing file %1...").arg(fi.baseName()), true); // first unzip the file to the correct place //TODO create temporary path for iwb file content QString path = QDir::tempPath(); QString documentRootFolder = expandFileToDir(pFile, path); QString contentFile; if (documentRootFolder.isEmpty()) //if file has failed to umzip it is probably just xml file contentFile = pFile.fileName(); else //get path to content xml contentFile = QString("%1/content.xml").arg(documentRootFolder); if(!contentFile.length()){ UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName())); return 0; } else{ //create destination document proxy //fill metadata and save UBDocumentProxy* destDocument = new UBDocumentProxy(UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath()); QDir dir; dir.mkdir(destDocument->persistencePath()); if (pGroup.length() > 0) destDocument->setMetaData(UBSettings::documentGroupName, pGroup); if (fi.baseName() > 0) destDocument->setMetaData(UBSettings::documentName, fi.baseName()); destDocument->setMetaData(UBSettings::documentVersion, UBSettings::currentFileVersion); destDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); UBDocumentProxy* newDocument = NULL; //try to import cff to document if (UBCFFSubsetAdaptor::ConvertCFFFileToUbz(contentFile, destDocument)) { newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(destDocument->persistencePath()); UBApplication::showMessage(tr("Import successful.")); } else { UBFileSystemUtils::deleteDir(destDocument->persistencePath()); UBApplication::showMessage(tr("Import failed.")); } delete destDocument; if (documentRootFolder.length() != 0) UBFileSystemUtils::deleteDir(documentRootFolder); return newDocument; } }
bool UBExportDocumentSetAdaptor::addDocumentToZip(const QModelIndex &pIndex, UBDocumentTreeModel *model, QuaZip &zip) { static int i = 0; i++; QModelIndex parentIndex = pIndex; if (!parentIndex.isValid()) { return false; } UBDocumentProxy *pDocumentProxy = model->proxyForIndex(parentIndex); if (pDocumentProxy) { // Q_ASSERT(QFileInfo(pDocumentProxy->persistencePath()).exists()); // UBForeighnObjectsHandler cleaner; // cleaner.cure(pDocumentProxy->persistencePath()); UniboardSankoreTransition document; QString documentPath(pDocumentProxy->persistencePath()); document.checkDocumentDirectory(documentPath); QDir documentDir = QDir(pDocumentProxy->persistencePath()); QuaZipFile zipFile(&zip); UBFileSystemUtils::compressDirInZip(documentDir, QFileInfo(documentPath).fileName() + "/", &zipFile, false); if(zip.getZipError() != 0) { qWarning("Export failed. Cause: zip.close(): %d", zip.getZipError()); } } for (int i = 0; i < model->rowCount(parentIndex); ++i) { QModelIndex curIndex = model->index(i, 0, parentIndex); if (!addDocumentToZip(curIndex, model, zip)) { return false; } } return true; }
UBDocumentProxy* UBDocumentManager::importFile(const QFile& pFile, const QString& pGroup) { QFileInfo fileInfo(pFile); foreach (UBImportAdaptor *adaptor, mImportAdaptors) { if (adaptor->supportedExtentions().lastIndexOf(fileInfo.suffix().toLower()) != -1) { UBDocumentProxy* document; UBApplication::setDisabled(true); if (adaptor->isDocumentBased()) { UBDocumentBasedImportAdaptor* importAdaptor = (UBDocumentBasedImportAdaptor*)adaptor; document = importAdaptor->importFile(pFile, pGroup); } else { UBPageBasedImportAdaptor* importAdaptor = (UBPageBasedImportAdaptor*)adaptor; // Document import procedure..... QString documentName = QFileInfo(pFile.fileName()).completeBaseName(); document = UBPersistenceManager::persistenceManager()->createDocument(pGroup, documentName,false); QUuid uuid = QUuid::createUuid(); QString filepath = pFile.fileName(); if (importAdaptor->folderToCopy() != "") { bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(document, pFile.fileName(), importAdaptor->folderToCopy() , uuid, filepath); if (!b) { UBPersistenceManager::persistenceManager()->deleteDocument(document); UBApplication::setDisabled(false); return NULL; } } QList<UBGraphicsItem*> pages = importAdaptor->import(uuid, filepath); int nPage = 0; foreach(UBGraphicsItem* page, pages) { UBApplication::showMessage(tr("Inserting page %1 of %2").arg(++nPage).arg(pages.size()), true); #ifdef Q_WS_MACX //Workaround for issue 912 QApplication::processEvents(); #endif int pageIndex = document->pageCount(); UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(document, pageIndex); importAdaptor->placeImportedItemToScene(scene, page); UBPersistenceManager::persistenceManager()->persistDocumentScene(document, scene, pageIndex); } UBPersistenceManager::persistenceManager()->persistDocumentMetadata(document); UBApplication::showMessage(tr("Import successful.")); } UBApplication::setDisabled(false); return document; }