//----------------------------------------------------------------------------- void KMFolder::readIndex(void) { char line[MAX_LINE]; KMMsgInfo* mi; assert(mIndexStream != NULL); rewind(mIndexStream); mMsgList.clear(); if (!readIndexHeader()) return; mDirty = FALSE; mHeaderOffset = ftell(mIndexStream); mMsgList.clear(); while (!feof(mIndexStream)) { fgets(line, MAX_LINE, mIndexStream); if (feof(mIndexStream)) break; mi = new KMMsgInfo(this); mi->fromIndexString(line); if (mi->status() == KMMsgStatusDeleted) { delete mi; // skip messages that are marked as deleted mDirty = TRUE; needsCompact = true; //We have deleted messages - needs to be compacted continue; } #ifdef OBSOLETE else if (mi->status() == KMMsgStatusNew) { mi->setStatus(KMMsgStatusUnread); mi->setDirty(FALSE); } #endif mMsgList.append(mi); } }
bool KMFolderIndex::readIndex() { qint32 len; KMMsgInfo* mi; assert(mIndexStream != 0); rewind(mIndexStream); clearIndex(); int version; setDirty( false ); if (!readIndexHeader(&version)) return false; mUnreadMsgs = 0; mTotalMsgs = 0; mHeaderOffset = KDE_ftell(mIndexStream); clearIndex(); while (!feof(mIndexStream)) { mi = 0; if(version >= 1505) { if(!fread(&len, sizeof(len), 1, mIndexStream)) break; if (mIndexSwapByteOrder) len = kmail_swap_32(len); off_t offs = KDE_ftell(mIndexStream); if(KDE_fseek(mIndexStream, len, SEEK_CUR)) break; mi = new KMMsgInfo(folder(), offs, len); } else { QByteArray line( MAX_LINE, '\0' ); fgets(line.data(), MAX_LINE, mIndexStream); if (feof(mIndexStream)) break; if (*line.data() == '\0') { fclose(mIndexStream); //kDebug( KMKernel::storageDebug() ) << "fclose(mIndexStream = " << mIndexStream << ")"; mIndexStream = 0; clearIndex(); return false; } mi = new KMMsgInfo(folder()); mi->compat_fromOldIndexString(line, mConvertToUtf8); } if(!mi) break; if (mi->status().isDeleted()) { delete mi; // skip messages that are marked as deleted setDirty( true ); needsCompact = true; //We have deleted messages - needs to be compacted continue; } #ifdef OBSOLETE else if (mi->isNew()) { mi->setStatus(KMMsgStatusUnread); mi->setDirty(false); } #endif if ((mi->status().isNew()) || (mi->status().isUnread()) || (folder() == kmkernel->outboxFolder())) { ++mUnreadMsgs; if (mUnreadMsgs == 0) ++mUnreadMsgs; } mMsgList.append(mi, false); } if( version < 1505) { mConvertToUtf8 = false; setDirty( true ); writeIndex(); } mTotalMsgs = mMsgList.count(); return true; }