bool CWizDatabaseManager::close(const QString& strKbGUID, bool bNotify) { // should close all groups db before close user db. if (strKbGUID.isEmpty()) { Q_ASSERT(m_mapGroups.isEmpty()); m_dbPrivate->Close(); m_dbPrivate->deleteLater(); return true; } qDebug() << "[CWizDatabaseManager] closed database, " << "kb_guid: " << m_mapGroups.value(strKbGUID)->kbGUID() << " name: " << m_mapGroups.value(strKbGUID)->name(); QMap<QString, CWizDatabase*>::const_iterator it = m_mapGroups.find(strKbGUID); if (it != m_mapGroups.end()) { it.value()->Close(); it.value()->deleteLater(); m_mapGroups.remove(strKbGUID); } else { return false; } if (bNotify) { Q_EMIT databaseClosed(strKbGUID); } return true; }
bool CWizDatabaseManager::close(const QString& strKbGUID) { // should close all groups db before close user db. if (!m_dbGroups.isEmpty()) { Q_ASSERT(!strKbGUID.isEmpty()); } bool closed = false; QList<CWizDatabase*>::iterator it; for (it = m_dbGroups.begin(); it != m_dbGroups.end(); it++) { CWizDatabase* db = *it; if (db->kbGUID() == strKbGUID) { db->Close(); m_dbGroups.erase(it); closed = true; break; } } if (!closed && !strKbGUID.isEmpty()) { TOLOG("WARNING: nothing closed, guid not found"); return false; } Q_EMIT databaseClosed(strKbGUID); return true; }
void DatabaseTracker::removeOpenDatabase(Database* database) { { MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); String originString = database->getSecurityOrigin()->toRawString(); ASSERT(m_openDatabaseMap); DatabaseNameMap* nameMap = m_openDatabaseMap->get(originString); if (!nameMap) return; String name(database->stringIdentifier()); DatabaseSet* databaseSet = nameMap->get(name); if (!databaseSet) return; DatabaseSet::iterator found = databaseSet->find(database); if (found == databaseSet->end()) return; databaseSet->remove(found); if (databaseSet->isEmpty()) { nameMap->remove(name); delete databaseSet; if (nameMap->isEmpty()) { m_openDatabaseMap->remove(originString); delete nameMap; } } } databaseClosed(database); }
void LS3DatastoreXML::dbClose(bool saveOnClose) { LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbClose"); QElapsedTimer time; time.restart(); if (data!=NULL) { data->setDoEmitSignals(false); mapper->submit(); } //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: mapper->submit()"; time.restart(); emit disconnectWidgets(); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: emit disconnectWidgets()"; time.restart(); emit databaseLoaded(false); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: emit databaseLoaded(false)"; time.restart(); emit databaseClosed(true); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: emit databaseClosed(true)"; time.restart(); if (!m_currentFile.isEmpty() && saveOnClose) dbSave(m_currentFile); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: dbSave(m_currentFile)"; time.restart(); resetFieldDefinitions(); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: resetFieldDefinitions()"; time.restart(); clearSelection(); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: clearSelection()"; time.restart(); getReferencTreeModel()->clear(); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: getReferencTreeModel()->clear()"; time.restart(); keywordsdata->setStringList(QStringList()); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: keywordsdata->setStringList()"; time.restart(); authorsdata->setStringList(QStringList()); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: authorsdata->setStringList(QStringList())"; time.restart(); topicsdata->setStringList(QStringList()); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: topicsdata->setStringList(QStringList())"; time.restart(); if (data!=NULL) { data->setDoEmitSignals(true); } data->newFile(); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: data->newFile()"; time.restart(); m_currentFile=""; m_databaseLoaded=true; emit filenameChanged(m_currentFile); //qDebug()<<"dbClose(saveOnClose="<<saveOnClose<<"): "<<time.elapsed()<<"ms: emit filenameChanged(m_currentFile)"; time.restart(); }
bool LS3DatastoreXML::dbLoad(const QString &fileName, QProgressBar* progress) { LS3ElapsedAutoTimer timer("LS3DatastoreXML::dbLoad"); // if a database is opened: close it! dbClose(); QDomDocument doc("mydocument"); QFile file(fileName); QString errorMessage; int errorLine; int errorColumn; if (!file.open(QIODevice::ReadOnly)) { emit dbError(tr("Error opening databse '%1': File could not be opened.").arg(fileName)); return m_databaseLoaded=false; } if (!doc.setContent(&file, &errorMessage, &errorLine, &errorColumn)) { file.close(); //file.close(); emit dbError(tr("Error parsing databse '%1': %2 (line %3, column %4).").arg(fileName).arg(errorMessage).arg(errorLine).arg(errorColumn)); return m_databaseLoaded=false; } file.close(); QDomElement docElem = doc.documentElement(); if (docElem.tagName()!="litsoz3database") { emit dbError(tr("Error in databse '%1': This is not a LitSoz 3 databse file (root element is <%2>, but should be <litsoz3database>.").arg(fileName).arg(docElem.tagName())); return m_databaseLoaded=false; } QDomElement n = docElem.firstChildElement("records"); data->loadFromXML(n, progress); timer.showMessage("XML loaded"); //if (keywordsdata) delete keywordsdata //keywordsdata = new QStringListModel(this); // create a stringlist model for the keywords and read its contents from the keywords field in the metadata table // the (possibly changed) model will be written back in the closeDB() method QDomElement metadata = docElem.firstChildElement("metadata"); if (!metadata.isNull()) { n = metadata.firstChildElement("item"); while(!n.isNull()) { QString type=n.attribute("type").toLower(); if (type=="keywords") { QString sdata=n.text().replace("\r\n", "\n"); sdata=sdata.replace("\n\r", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\r\r", ""); QStringList sl=sdata.split("\n", QString::SkipEmptyParts); sl.removeDuplicates(); sl.sort(); keywordsdata->setStringList(sl); } if (type=="topics") { QString sdata=n.text().replace("\r\n", "\n"); sdata=sdata.replace("\n\r", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\n\n", "\n"); sdata=sdata.replace("\r\r", ""); QStringList sl=sdata.split("\n", QString::SkipEmptyParts); sl.removeDuplicates(); sl.sort(); topicsdata->setStringList(sl); } n=n.nextSiblingElement("item"); } } timer.showMessage("METADATA read"); // read the list of selected records QDomElement selectedNode = docElem.firstChildElement("selection_list"); clearSelection(); if (!selectedNode.isNull()) { n = selectedNode.firstChildElement("item"); while(!n.isNull()) { QString uuid=n.attribute("uuid"); select(uuid); n=n.nextSiblingElement("item"); } } timer.showMessage("SELECTION read"); // read the reference tree QDomElement reftreeNode = docElem.firstChildElement("litsoz3_reference_tree"); getReferencTreeModel()->readFromXML(reftreeNode); timer.showMessage("REFTREE read"); // read the authorsdata completer list from a file in config dir //if (authorsdata) delete authorsdata; //authorsdata = new QStringListModel(this); QFile f(settings->GetConfigDirectory()+"/completers/authors.lst"); if (f.open(QIODevice::ReadOnly|QIODevice::Text)) { //std::cout<<"OK\n"; QString s=QString::fromUtf8(f.readAll()); authorsdata->setStringList(s.split('\n', QString::SkipEmptyParts)); } updateCompleters(0, recordCount()-1, false); timer.showMessage("AUTHORS_COMPLETER read"); m_currentFile=fileName; emit filenameChanged(m_currentFile); emit connectWidgets(); timer.showMessage("CONNECTED_WIDGETS"); dbFirst(); timer.showMessage("MOVED FIRST"); emit databaseLoaded(true); emit databaseClosed(false); emit massiveSelectionChange(); timer.showMessage("EMITED SIGNALS"); return m_databaseLoaded=true; }
void DatabaseTracker::failedToOpenDatabase(Database* database) { databaseClosed(database); }