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);
    }
}
Exemple #2
0
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);
}
Exemple #8
0
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();
}
Exemple #10
0
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;
}
Exemple #14
0
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;
}
Exemple #15
0
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);
    }
}
Exemple #17
0
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);
        }
    }
}
Exemple #18
0
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);
}
Exemple #25
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;
}