void CWizDocumentListView::resetPermission() { CWizDocumentDataArray arrayDocument; QList<QListWidgetItem*> items = selectedItems(); foreach (QListWidgetItem* it, items) { if (CWizDocumentListViewItem* item = dynamic_cast<CWizDocumentListViewItem*>(it)) { arrayDocument.push_back(item->document()); } } bool bGroup = isDocumentsWithGroupDocument(arrayDocument); bool bDeleted = isDocumentsWithDeleted(arrayDocument); bool bCanDelete = isDocumentsAllCanDelete(arrayDocument); // if group documents or deleted documents selected if (bGroup || bDeleted) { findAction(WIZACTION_LIST_TAGS)->setEnabled(false); } else { findAction(WIZACTION_LIST_TAGS)->setEnabled(true); } // deleted user private documents if (!bGroup) { findAction(WIZACTION_LIST_MOVE_DOCUMENT)->setEnabled(true); } else { findAction(WIZACTION_LIST_MOVE_DOCUMENT)->setEnabled(false); } // disable delete if permission is not enough if (!bCanDelete) { findAction(WIZACTION_LIST_DELETE)->setEnabled(false); } else { findAction(WIZACTION_LIST_DELETE)->setEnabled(true); } }
bool CWizIndexBase::DocumentFromGUID(const CString& strDocumentGUID, WIZDOCUMENTDATA& data) { if (!strDocumentGUID || !*strDocumentGUID) { TOLOG(_T("DocumentGUID is empty")); return false; } CString strWhere; strWhere.Format(_T("DOCUMENT_GUID=%s"), STR2SQL(strDocumentGUID).utf16() ); CString strSQL = FormatQuerySQL(TABLE_NAME_WIZ_DOCUMENT, FIELD_LIST_WIZ_DOCUMENT, strWhere); CWizDocumentDataArray arrayDocument; if (!SQLToDocumentDataArray(strSQL, arrayDocument)) { TOLOG(_T("Failed to get document by guid")); return false; } if (arrayDocument.empty()) { //TOLOG(_T("Failed to get document by guid, result is empty")); return false; } data = arrayDocument[0]; return true; }
void CWizDocumentListView::startDrag(Qt::DropActions supportedActions) { Q_UNUSED(supportedActions); CWizDocumentDataArray arrayDocument; QList<QListWidgetItem*> items = selectedItems(); foreach (QListWidgetItem* it, items) { if (CWizDocumentListViewItem* item = dynamic_cast<CWizDocumentListViewItem*>(it)) { arrayDocument.push_back(item->document()); } } if (!arrayDocument.size()) return; QString strMime = note2Mime(arrayDocument); QDrag* drag = new QDrag(this); QMimeData* mimeData = new QMimeData(); mimeData->setData(WIZNOTE_MIMEFORMAT_DOCUMENTS, strMime.toUtf8()); drag->setMimeData(mimeData); drag->setPixmap(WizGetDocumentDragBadget(items.size())); drag->exec(); }
void CWizDocumentListView::getSelectedDocuments(CWizDocumentDataArray& arrayDocument) { QList<QListWidgetItem*> items = selectedItems(); QList<QListWidgetItem*>::const_iterator it; for (it = items.begin(); it != items.end(); it++) { QListWidgetItem* pItem = *it; CWizDocumentListViewItem* pDocumentItem = dynamic_cast<CWizDocumentListViewItem*>(pItem); if (!pDocumentItem) continue; // if document is message type if (pDocumentItem->type() == CWizDocumentListViewItem::MessageDocument) { QString strKbGUID = pDocumentItem->message().kbGUID; QString strGUID = pDocumentItem->message().documentGUID; // document must have record in database. WIZDOCUMENTDATA doc; if (!m_dbMgr.db(strKbGUID).DocumentFromGUID(strGUID, doc)) { qDebug() << "[getSelectedDocuments] failed to query document from guid"; continue; } // no matter document exist or not, just push it arrayDocument.push_back(doc); } else { arrayDocument.push_back(pDocumentItem->document()); } } }
bool CWizSearchIndexer::updateDocuments(const CWizDocumentDataArray& arrayDocuments) { Q_ASSERT(!arrayDocuments.empty()); void* pHandle = NULL; bool ret = WizFTSBeginUpdateDocument(m_strIndexPath.toStdWString().c_str(), &pHandle); if (!ret) { TOLOG("begin update failed while update FTS index"); return false; } int nErrors = 0; for (int i = 0; i < arrayDocuments.size(); i++) { WIZDOCUMENTDATAEX doc = arrayDocuments.at(i); if (!_updateDocumentImpl(pHandle, doc)) nErrors++; } ret = WizFTSEndUpdateDocument(pHandle); if (!ret) { TOLOG("end update failed while update FTS index"); return false; } if (nErrors >= 5) { return false; } return true; }
void CWizDocumentListView::resetPermission() { CWizDocumentDataArray arrayDocument; //QList<QListWidgetItem*> items = selectedItems(); foreach (CWizDocumentListViewItem* item, m_rightButtonFocusedItems) { arrayDocument.push_back(item->document()); }
bool CWizSearchIndexer::deleteDocument(const WIZDOCUMENTDATAEX& doc) { Q_ASSERT(!doc.strGUID.isEmpty()); CWizDocumentDataArray arrayDocuments; arrayDocuments.push_back(doc); return deleteDocuments(arrayDocuments); }
bool CWizIndexBase::SQLToDocumentDataArray(const CString& strSQL, CWizDocumentDataArray& arrayDocument) { try { CppSQLite3Query query = m_db.execQuery(strSQL); CWizStdStringArray arrayGUID; std::map<CString, int> mapDocumentIndex; while (!query.eof()) { WIZDOCUMENTDATA data; data.strKbGUID = kbGUID(); data.strGUID = query.getStringField(documentDOCUMENT_GUID); data.strTitle = query.getStringField(documentDOCUMENT_TITLE); data.strLocation = query.getStringField(documentDOCUMENT_LOCATION); data.strName = query.getStringField(documentDOCUMENT_NAME); data.strSEO = query.getStringField(documentDOCUMENT_SEO); data.strURL = query.getStringField(documentDOCUMENT_URL); data.strAuthor = query.getStringField(documentDOCUMENT_AUTHOR); data.strKeywords = query.getStringField(documentDOCUMENT_KEYWORDS); data.strType = query.getStringField(documentDOCUMENT_TYPE); data.strOwner = query.getStringField(documentDOCUMENT_OWNER); data.strFileType = query.getStringField(documentDOCUMENT_FILE_TYPE); data.strStyleGUID = query.getStringField(documentSTYLE_GUID); data.tCreated = query.getTimeField(documentDT_CREATED); data.tModified = query.getTimeField(documentDT_MODIFIED); data.tAccessed = query.getTimeField(documentDT_ACCESSED); data.nIconIndex = query.getIntField(documentDOCUMENT_ICON_INDEX); data.nSync = query.getIntField(documentDOCUMENT_SYNC); data.nProtected = query.getIntField(documentDOCUMENT_PROTECT); data.nReadCount = query.getIntField(documentDOCUMENT_READ_COUNT); data.nAttachmentCount = query.getIntField(documentDOCUMENT_ATTACHEMENT_COUNT); data.nIndexed = query.getIntField(documentDOCUMENT_INDEXED); data.tInfoModified = query.getTimeField(documentDT_INFO_MODIFIED); data.strInfoMD5 = query.getStringField(documentDOCUMENT_INFO_MD5); data.tDataModified = query.getTimeField(documentDT_DATA_MODIFIED); data.strDataMD5 = query.getStringField(documentDOCUMENT_DATA_MD5); data.tParamModified = query.getTimeField(documentDT_PARAM_MODIFIED); data.strParamMD5 = query.getStringField(documentDOCUMENT_PARAM_MD5); data.nVersion = query.getInt64Field(documentVersion); arrayGUID.push_back(data.strGUID); arrayDocument.push_back(data); mapDocumentIndex[data.strGUID] = int(arrayDocument.size() - 1); query.nextRow(); } if (!arrayGUID.empty()) { InitDocumentExFields(arrayDocument, arrayGUID, mapDocumentIndex); } return true; } catch (const CppSQLite3Exception& e) { return LogSQLException(e, strSQL); } }
void CWizDocumentListView::addDocuments(const CWizDocumentDataArray& arrayDocument) { CWizDocumentDataArray::const_iterator it; for (it = arrayDocument.begin(); it != arrayDocument.end(); it++) { addDocument(*it, false); } sortItems(); }
void MainWindow::on_category_itemSelectionChanged() { CWizDocumentDataArray arrayDocument; CWizCategoryBaseView* category = qobject_cast<CWizCategoryBaseView *>(sender()); if (!category) return; CWizCategoryViewMessageItem* pItem = category->currentCategoryItem<CWizCategoryViewMessageItem>(); if (pItem) { if (!m_msgList->isVisible()) { m_msgList->show(); m_noteList->hide(); } CWizMessageDataArray arrayMsg; pItem->getMessages(m_dbMgr.db(), arrayMsg); m_msgList->setMessages(arrayMsg); return; // FIXME: use id instead of name. //QString strName = category->currentItem()->text(0); //if (strName == CATEGORY_MESSAGES_ALL || // strName == CATEGORY_MESSAGES_SEND_TO_ME || // strName == CATEGORY_MESSAGES_MODIFY || // strName == CATEGORY_MESSAGES_COMMENTS || // strName == CATEGORY_MESSAGES_SEND_FROM_ME) { // m_msgList->show(); // m_noteList->hide(); // CWizMessageDataArray arrayMsg; // m_dbMgr.db().getLastestMessages(arrayMsg); // m_msgList->setMessages(arrayMsg); // return; } else { if (!m_noteList->isVisible()) { m_noteList->show(); m_msgList->hide(); } QString kbGUID = category->selectedItemKbGUID(); if (!kbGUID.isEmpty()) { resetPermission(kbGUID, ""); } category->getDocuments(arrayDocument); m_documents->setDocuments(arrayDocument); if (arrayDocument.empty()) { on_documents_itemSelectionChanged(); } } }
void CWizDocumentListView::addDocuments(const CWizDocumentDataArray& arrayDocument) { CWizDocumentDataArray::const_iterator it; for (it = arrayDocument.begin(); it != arrayDocument.end(); it++) { addDocument(*it); } sortItems(); Q_EMIT documentCountChanged(); }
void CWizDocumentListView::addDocuments(const CWizDocumentDataArray& arrayDocument) { CWizDocumentDataArray::const_iterator it; for (it = arrayDocument.begin(); it != arrayDocument.end(); it++) { addDocument(*it, false); //QCoreApplication::processEvents(QEventLoop::AllEvents); } sortItems(); }
CWizDocumentDataArray WizCombineNotesDialog::getResultDocuments() { CWizDocumentDataArray ret; for (int i = 0; i < ui->listNotes->count(); i++) { QListWidgetItem* item = ui->listNotes->item(i); QVariant data = item->data(Qt::UserRole); WIZDOCUMENTDATA* doc = data.value<WIZDOCUMENTDATA *>(); ret.push_back(*doc); } return ret; }
bool CWizDatabase::GetAllObjectsNeedToBeDownloaded(std::deque<WIZOBJECTDATA>& arrayData) { CWizDocumentDataArray arrayDocument; CWizDocumentAttachmentDataArray arrayAttachment; GetNeedToBeDownloadedDocuments(arrayDocument); GetNeedToBeDownloadedAttachments(arrayAttachment); arrayData.assign(arrayAttachment.begin(), arrayAttachment.end()); arrayData.insert(arrayData.begin(), arrayDocument.begin(), arrayDocument.end()); return true; }
void CWizDocumentListView::addDocuments(const CWizDocumentDataArray& arrayDocument) { CWizDocumentDataArray::const_iterator it; for (it = arrayDocument.begin(); it != arrayDocument.end(); it++) { addDocument(*it, false); } sortItems(); //if (selectedItems().empty()) { // setCurrentRow(0); //} }
void CWizDocumentSelectionView::requestDocuments(const CWizDocumentDataArray& arrayDocument) { int nTotal = qMin((int)arrayDocument.size(), WIZ_SELECTION_ITEM_MAX); m_docs.clear(); CWizDocumentDataArray::const_reverse_iterator rit = arrayDocument.rbegin(); m_docs.insert(m_docs.begin(), rit, rit + nTotal); CWizDocumentDataArray::iterator it; for(it = m_docs.begin(); it != m_docs.end(); it++) { const WIZDOCUMENTDATAEX& doc = *it; m_thumbCache->load(doc.strKbGUID, doc.strGUID); } }
void MainWindow::on_documents_itemSelectionChanged() { // hide other form m_cipherForm->hide(); CWizDocumentDataArray arrayDocument; m_documents->getSelectedDocuments(arrayDocument); if (arrayDocument.size() == 1) { if (!m_bUpdatingSelection) { viewDocument(arrayDocument[0], true); } } }
void CWizFolder::MoveToLocation(const CString& strDestLocation) { Q_ASSERT(strDestLocation.right(1) == "/"); Q_ASSERT(strDestLocation.left(1) == "/"); if (!CanMove(Location(), strDestLocation)) return; CString strOldLocation = Location(); //CString strNewLocation; // //CString strLocationName = CWizDatabase::GetLocationName(strOldLocation); // //if (strDestLocation.IsEmpty()) { // strNewLocation = "/" + strLocationName + "/"; //} else { // strNewLocation = strDestLocation + strLocationName + "/"; //} CWizDocumentDataArray arrayDocument; if (!m_db.GetDocumentsByLocationIncludeSubFolders(strOldLocation, arrayDocument)) { TOLOG1(_T("Failed to get documents by location (include sub folders): %1"), strOldLocation); return; } CWizDocumentDataArray::const_iterator it; for (it = arrayDocument.begin(); it != arrayDocument.end(); it++) { WIZDOCUMENTDATA data = *it; Q_ASSERT(data.strLocation.startsWith(strOldLocation)); if (!data.strLocation.startsWith(strOldLocation)) { TOLOG(_T("Error location of document!")); continue; } data.strLocation.Delete(0, strOldLocation.GetLength()); data.strLocation.Insert(0, strDestLocation); if (!m_db.ModifyDocumentInfo(data)) { TOLOG(_T("Failed to move document to new folder!")); continue; } } m_db.LogDeletedFolder(strOldLocation); }
bool CWizSearchIndexer::deleteDocuments(const CWizDocumentDataArray& arrayDocuments) { Q_ASSERT(!arrayDocuments.empty()); bool ret = true; for (int i = 0; i < arrayDocuments.size(); i++) { WIZDOCUMENTDATAEX doc = arrayDocuments.at(i); int ret = WizFTSDeleteDocument(m_strIndexPath.toStdWString().c_str(), doc.strGUID.toStdWString().c_str()); if (!ret) { TOLOG("delete FTS index failed: " + doc.strTitle); ret = false; } } return ret; }
QString note2Mime(const CWizDocumentDataArray& arrayDocument) { CWizStdStringArray arrayGUID; for (CWizDocumentDataArray::const_iterator it = arrayDocument.begin(); it != arrayDocument.end(); it++) { const WIZDOCUMENTDATA& data = *it; arrayGUID.push_back(data.strKbGUID + ":" + data.strGUID); } CString strMime; ::WizStringArrayToText(arrayGUID, strMime, ";"); return strMime; }
void CWizCategoryViewGroupsRootItem::getDocuments(CWizDatabase& db, CWizDocumentDataArray& arrayDocument) { Q_UNUSED(db); for (int i = 0; i < childCount(); i++) { CWizCategoryViewGroupRootItem* pGroup = dynamic_cast<CWizCategoryViewGroupRootItem*>(child(i)); Q_ASSERT(pGroup); if (!pGroup) return; CWizDatabase& db = CWizDatabaseManager::instance()->db(pGroup->kbGUID()); CWizDocumentDataArray arrayDoc; if (db.GetDocumentsByTime(QDateTime::currentDateTime().addDays(-3), arrayDocument)) { arrayDocument.insert(arrayDocument.begin(), arrayDoc.begin(), arrayDoc.end()); } } }
void CWizSearchIndexer::on_searchTimeout() { int total = m_arrayDocument.size(); if (!total && m_bSearchEnd) { m_timerSearch.stop(); return; } CWizDocumentDataArray docs; if (total >= m_nMaxResult) { docs.assign(m_arrayDocument.begin(), m_arrayDocument.begin() + m_nMaxResult); m_arrayDocument.erase(m_arrayDocument.begin(), m_arrayDocument.begin() + m_nMaxResult); } else { docs.assign(m_arrayDocument.begin(), m_arrayDocument.end()); m_arrayDocument.clear(); } Q_EMIT documentFind(docs); }
bool CWizSearchIndexer::buildFTSIndexByDatabase(CWizDatabase& db) { CWizDocumentDataArray arrayDocuments; if (!db.getAllDocumentsNeedToBeSearchIndexed(arrayDocuments)) return false; if (arrayDocuments.empty()) { return true; } bool ret = updateDocuments(arrayDocuments); if (ret) { db.setDocumentFTSEnabled(true); return true; } else { db.setDocumentFTSEnabled(false); return false; } }
void CWizFolder::MoveToLocation(const QString& strDestLocation) { Q_ASSERT(strDestLocation.right(1) == "/"); Q_ASSERT(strDestLocation.left(1) == "/"); if (!CanMove(Location(), strDestLocation)) return; QString strOldLocation = Location(); CWizDocumentDataArray arrayDocument; if (!m_db.GetDocumentsByLocation(strOldLocation, arrayDocument, true)) { TOLOG1("Failed to get documents by location (include sub folders): %1", strOldLocation); return; } int i = 0; CWizDocumentDataArray::const_iterator it; for (it = arrayDocument.begin(); it != arrayDocument.end(); it++) { WIZDOCUMENTDATA data = *it; if (!data.strLocation.startsWith(strOldLocation)) { TOLOG("Error location of document!"); continue; } data.strLocation.remove(0, strOldLocation.length()); data.strLocation.insert(0, strDestLocation); if (!m_db.ModifyDocumentInfo(data)) { TOLOG("Failed to move document to new folder!"); continue; } Q_EMIT moveDocument(arrayDocument.size(), i++, strOldLocation, strDestLocation, data); } m_db.LogDeletedFolder(strOldLocation); m_db.SetObjectVersion("folder", 0); }
void CWizDocumentListView::getSelectedDocuments(CWizDocumentDataArray& arrayDocument) { QList<QListWidgetItem*> items = selectedItems(); QList<QListWidgetItem*>::const_iterator it; for (it = items.begin(); it != items.end(); it++) { QListWidgetItem* pItem = *it; CWizDocumentListViewItem* pDocumentItem = dynamic_cast<CWizDocumentListViewItem*>(pItem); if (pDocumentItem) { arrayDocument.push_back(pDocumentItem->document()); } } }
void CWizCategoryViewMessageItem::getDocuments(CWizDatabase& db, CWizDocumentDataArray& arrayDocument) { CWizMessageDataArray arrayMsg; db.getLastestMessages(arrayMsg); for (CWizMessageDataArray::const_iterator it = arrayMsg.begin(); it != arrayMsg.end(); it++) { const WIZMESSAGEDATA& msg = *it; WIZDOCUMENTDATAEX doc; doc.strKbGUID = msg.kbGUID; doc.strGUID = msg.documentGUID; doc.strTitle = msg.title; // CWizCategoryView responsible for converting to full field message data // refer to CWizCategoryView::setDocuments() arrayDocument.push_back(doc); } }
bool WizKMCombineDocumentsToHtmlFile(WizDatabaseManager& dbMgr, const CWizDocumentDataArray& arrayDocument, QString splitter, bool addTitle, QString& strResultFileName, CWizDocumentAttachmentDataArray& arrayAttachment, QString& strError) { QString strTempPath = Utils::WizPathResolve::tempPath() + WizGenGUIDLowerCaseLetterOnly() + "/"; ::WizEnsurePathExists(strTempPath); // CWizStdStringArray htmls; // size_t nCount = arrayDocument.size(); for (size_t i = 0; i < nCount; i++) { WIZDOCUMENTDATA doc = arrayDocument[i]; // WizDatabase& db = dbMgr.db(doc.strKbGUID); if (!db.isDocumentDownloaded(doc.strGUID)) { strError = QObject::tr("Note has not been downloaded"); return false; } // if (!db.documentToHtmlFile(doc, strTempPath)) { strError = QObject::tr("Failed to get note data"); return false; } // QString htmlFileName = strTempPath + "index.html"; if (!QFileInfo::exists(htmlFileName)) { strError = QObject::tr("Failed to get note data"); return false; } // QString html; if (!WizLoadUnicodeTextFromFile(htmlFileName, html)) { strError = QObject::tr("Failed to read note data"); return false; } // htmls.push_back(html); // CWizDocumentAttachmentDataArray atts; db.getDocumentAttachments(doc.strGUID, atts); for (WIZDOCUMENTATTACHMENTDATA att : atts) { if (!db.isAttachmentDownloaded(att.strGUID)) { strError = QObject::tr("Note attachment %1 has not been downloaded").arg(att.strName); return false; } // arrayAttachment.push_back(att); } } // CString strAllHTML; // for (size_t i = 0; i < nCount; i++) { CString html = htmls[i]; WIZDOCUMENTDATA doc = arrayDocument[i]; if (-1 != WizStrStrI_Pos(html, CString(_T("<frameset")))) { strError = QObject::tr("Cannot combine html because html contains frame set"); return false; } // CString strTitle = doc.strTitle; WizOleDateTime t = doc.tCreated; CString strDate = t.toLocalLongDate(); // if (addTitle) { CString strInfoHtml = WizFormatString2(_T("<h2>%1 (%2)</h2>"), strTitle, strDate); ::WizHTMLInsertTextBeforeBody(strInfoHtml, html); } // if (!WizCombineHtmlText(strAllHTML, html)) { strError = QObject::tr("Cannot combine html"); return false; } // if (i < nCount - 1) { if (!splitter.isEmpty()) { WizCombineHtmlText(strAllHTML, splitter); } } } // strResultFileName = strTempPath + "index.html"; // bool ret = ::WizSaveUnicodeTextToUtf8File(strResultFileName, strAllHTML); if (!ret) { strError = QObject::tr("Cannot save note html"); return false; } return true; }