Source Code (Use browser search to find items of interest.)

Class Index

kmail'KMFolderDir (./kdenetwork/kmail/kmfolderdir.h:12)

class KMFolderDir: public KMFolderNode, public KMFolderNodeList
{
  Q_OBJECT

public:
  KMFolderDir(KMFolderDir* parent=NULL, const QString& path=0);
  virtual ~KMFolderDir();

  virtual bool isDir() const { return TRUE; }

  /** Read contents of directory. */
  virtual bool reload();

  /** Return full pathname of this directory. */
  virtual const QString path() const;

  /** Create a mail folder in this directory with given name. If sysFldr==TRUE
   the folder is marked as a (KMail) system folder. 
   Returns Folder on success. */
  virtual KMFolder* createFolder(const QString& folderName,
				 bool sysFldr=FALSE);

  /** Returns folder with given name or zero if it does not exist */
  virtual KMFolderNode* hasNamedFolder(const QString& name);

};


//-----------------------------------------------------------------------------


kmail'KMFolderDir::KMFolderDir() (./kdenetwork/kmail/kmfolderdir.cpp:54)

KMFolderDir::KMFolderDir(KMFolderDir* parent, const QString& name):
  KMFolderNode(parent,name), KMFolderNodeList()
{
  initMetaObject();

  setAutoDelete(TRUE);

  mType = "dir";
}


//-----------------------------------------------------------------------------

kmail'KMFolderDir::~KMFolderDir() (./kdenetwork/kmail/kmfolderdir.cpp:66)

KMFolderDir::~KMFolderDir()
{
  clear();
}


//-----------------------------------------------------------------------------

kmail'KMFolderDir::createFolder() (./kdenetwork/kmail/kmfolderdir.cpp:73)

KMFolder* KMFolderDir::createFolder(const QString& aFolderName, bool aSysFldr)
{
  KMFolder* fld;
  int rc;

  assert(!aFolderName.isEmpty());
  fld = new KMFolder(this, aFolderName);
  assert(fld != NULL);

  fld->setSystemFolder(aSysFldr);

  rc = fld->create();
  if (rc)
  {
    QString wmsg = QString(" `%1':\n%2").arg(aFolderName).arg(strerror(rc));
    KMessageBox::information(0,i18n("Error while creating folder") + wmsg );
    delete fld;
    return NULL;
  }

  KMFolderNode* fNode;
  int index = 0;
  for (fNode=first(); fNode; fNode=next()) {
    if (fNode->name().lower() > fld->name().lower()) {
      insert( index, fld );
      break;
    }
    ++index;
  }

  if (!fNode)
    append(fld);

  fld->correctUnreadMsgsCount();
  return fld;
}


//-----------------------------------------------------------------------------

kmail'KMFolderDir::path() (./kdenetwork/kmail/kmfolderdir.cpp:112)

const QString KMFolderDir::path() const
{
  static QString p;

  if (parent())
  {
    p = parent()->path();
    p.append("/");
    p.append(name());
  }
  else p = "";

  return p;
}


//-----------------------------------------------------------------------------

kmail'KMFolderDir::reload() (./kdenetwork/kmail/kmfolderdir.cpp:129)

bool KMFolderDir::reload(void)
{
  QDir      dir;
  KMFolder* folder;
  QFileInfo* fileInfo;
  QFileInfoList* fiList;
  QStringList diList;
  QList<KMFolder> folderList;
  QString fname;
  QString fldPath;

  clear();
  
  fldPath = path();
  dir.setFilter(QDir::Files | QDir::Dirs | QDir::Hidden);
  dir.setNameFilter("*");
  
  if (!dir.cd(fldPath, TRUE))
  {
    KMessageBox::information(0,i18n("Cannot enter directory '") + 
			     fldPath + "'.\n");
    return FALSE;
  }

  if (!(fiList=(QFileInfoList*)dir.entryInfoList()))
  {
    KMessageBox::information(0,i18n("Directory '") + fldPath + i18n("' is unreadable.\n"));
    return FALSE;
  }

  for (fileInfo=fiList->first(); fileInfo; fileInfo=fiList->next())
  {
    fname = fileInfo->fileName();

    if ((fname[0]=='.') && 
	!(fname.right(10)==".directory"))
      continue;
    else if (fname == ".directory")
      continue;    
    else if (fileInfo->isDir()) // a directory
      diList.append(fname);
    
    else // all other files are folders (at the moment ;-)
    {
      folder = new KMFolder(this, fname);
      append(folder);
      folderList.append(folder);
    }
  }

  for (folder=folderList.first(); folder; folder=folderList.next())
  {
    for(QStringList::Iterator it = diList.begin(); 
	it != diList.end(); 
	++it)
      if (*it == "." + folder->name() + ".directory") {
	KMFolderDir* folderDir = new KMFolderDir(this, (*it).local8Bit());
	folderDir->reload();
	append(folderDir);
	folder->setChild(folderDir);
	break;
      }
  }

  return TRUE;
}


kmail'KMFolderDir::hasNamedFolder() (./kdenetwork/kmail/kmfolderdir.cpp:196)

KMFolderNode* KMFolderDir::hasNamedFolder(const QString& aName)
{
  KMFolderNode* fNode;
  for (fNode=first(); fNode; fNode=next()) {
    if (fNode->name() == aName)
      return fNode;
  }
  return 0;
}