4 #include "kmfolderdir.h"
5 #include "kmfoldersearch.h"
6 #include "kmfoldercachedimap.h"
12 #include <kmessagebox.h>
14 #include <kstandarddirs.h>
20 //=============================================================================
21 //=============================================================================
22 KMFolderRootDir::KMFolderRootDir(KMFolderMgr
* manager
, const QString
& path
,
23 KMFolderDirType dirType
)
24 : KMFolderDir( 0, 0, path
, dirType
),
30 //-----------------------------------------------------------------------------
31 KMFolderRootDir::~KMFolderRootDir()
33 // WABA: We can't let KMFolderDir do this because by the time its
34 // desctructor gets called, KMFolderRootDir is already destructed
35 // Most notably the path.
39 //-----------------------------------------------------------------------------
40 void KMFolderRootDir::setPath(const QString
& aPath
)
46 //-----------------------------------------------------------------------------
47 QString
KMFolderRootDir::path() const
53 //-----------------------------------------------------------------------------
54 QString
KMFolderRootDir::prettyUrl() const
56 if ( !mBaseURL
.isEmpty() )
57 return i18n( mBaseURL
.data() );
63 //-----------------------------------------------------------------------------
64 void KMFolderRootDir::setBaseURL( const QByteArray
&baseURL
)
70 //-----------------------------------------------------------------------------
71 KMFolderMgr
* KMFolderRootDir::manager() const
77 //=============================================================================
78 //=============================================================================
79 KMFolderDir::KMFolderDir( KMFolder
* owner
, KMFolderDir
* parent
,
80 const QString
& name
, KMFolderDirType dirType
)
81 : KMFolderNode( parent
, name
), KMFolderNodeList(),
82 mOwner( owner
), mDirType( dirType
)
86 //-----------------------------------------------------------------------------
87 KMFolderDir::~KMFolderDir()
94 //-----------------------------------------------------------------------------
95 KMFolder
* KMFolderDir::createFolder(const QString
& aFolderName
, bool aSysFldr
, KMFolderType aFolderType
)
99 assert(!aFolderName
.isEmpty());
100 // FIXME urgs, is this still needed
101 if (mDirType
== KMImapDir
)
102 fld
= new KMFolder( this, aFolderName
, KMFolderTypeImap
);
104 fld
= new KMFolder( this, aFolderName
, aFolderType
);
107 fld
->setSystemFolder(aSysFldr
);
109 bool inserted
= false;
110 QListIterator
<KMFolderNode
*> it( *this);
112 while ( it
.hasNext() ) {
113 KMFolderNode
* fNode
= it
.next();
114 if (fNode
->name().toLower() > fld
->name().toLower()) {
115 insert( index
, fld
);
125 fld
->correctUnreadMsgsCount();
130 //----------------------------------------------------------------------------
131 QString
KMFolderDir::path() const
137 p
= parent()->path();
147 //----------------------------------------------------------------------------
148 QString
KMFolderDir::label() const
151 return mOwner
->label();
157 //-----------------------------------------------------------------------------
158 QString
KMFolderDir::prettyUrl() const
162 parentUrl
= parent()->prettyUrl();
163 if ( !parentUrl
.isEmpty() )
164 return parentUrl
+ '/' + label();
170 //-----------------------------------------------------------------------------
171 bool KMFolderDir::reload(void)
177 QList
<KMFolder
*> folderList
;
181 const QString fldPath
= path();
182 dir
.setFilter(QDir::Files
| QDir::Dirs
| QDir::Hidden
);
183 dir
.setNameFilters(QStringList("*"));
185 if (!dir
.cd(fldPath
))
187 QString msg
= i18n("<qt>Cannot enter folder <b>%1</b>.</qt>", fldPath
);
188 KMessageBox::information(0, msg
);
192 const QFileInfoList fiList
= dir
.entryInfoList();
193 if (fiList
.isEmpty())
195 QString msg
= i18n("<qt>Folder <b>%1</b> is unreadable.</qt>", fldPath
);
196 KMessageBox::information(0, msg
);
200 Q_FOREACH( fileInfo
, fiList
)
202 const QString fname
= fileInfo
.fileName();
203 if( ( fname
[0] == '.' ) && !fname
.endsWith( ".directory" ) ) {
204 // ignore all hidden files except our subfolder containers
207 if( fname
== ".directory" ) {
208 // ignore .directory files (not created by us)
211 // Collect subdirectories.
212 if ( fileInfo
.isDir() &&
213 fname
.startsWith( '.' ) && fname
.endsWith( ".directory" ) ) {
214 diList
.append(fname
);
218 if ( mDirType
== KMImapDir
219 && path().startsWith( KMFolderImap::cacheLocation() ) )
221 // Is the below needed for dimap as well?
222 if ( KMFolderImap::encodeFileName(
223 KMFolderImap::decodeFileName( fname
) ) == fname
)
225 folder
= new KMFolder( this, KMFolderImap::decodeFileName( fname
),
228 folderList
.append(folder
);
231 else if ( mDirType
== KMDImapDir
232 && path().startsWith( KMFolderCachedImap::cacheLocation() ) )
234 if (fileInfo
.isDir()) // a directory
236 // For this to be a cached IMAP folder, it must be in the KMail dimap
237 // subdir and must be have a uidcache file or be a maildir folder
238 QString
maildir(fname
+ "/new");
239 QString imapcachefile
= QString::fromLatin1(".%1.uidcache").arg(fname
);
240 if ( dir
.exists( imapcachefile
) || dir
.exists( maildir
) )
242 folder
= new KMFolder( this, fname
, KMFolderTypeCachedImap
);
244 folderList
.append(folder
);
248 else if ( mDirType
== KMSearchDir
)
250 folder
= new KMFolder( this, fname
, KMFolderTypeSearch
);
252 folderList
.append(folder
);
254 else if ( mDirType
== KMStandardDir
)
256 // This is neither an imap, dimap nor a search folder. Can be either
258 if (fileInfo
.isDir())
261 if( dir
.exists( fname
+ "/new" ) )
263 folder
= new KMFolder( this, fname
, KMFolderTypeMaildir
);
265 folderList
.append(folder
);
270 // all other files are folders (at the moment ;-)
271 folder
= new KMFolder( this, fname
, KMFolderTypeMbox
);
273 folderList
.append(folder
);
278 QList
<KMFolder
*>::const_iterator jt
;
279 for ( jt
= folderList
.constBegin(); jt
!= folderList
.constEnd(); ++jt
)
282 for(QStringList::const_iterator it
= diList
.constBegin();
283 it
!= diList
.constEnd();
285 if (*it
== '.' + folder
->fileName() + ".directory")
287 KMFolderDir
* folderDir
= new KMFolderDir( folder
, this, *it
, mDirType
);
290 folder
->setChild(folderDir
);
298 //-----------------------------------------------------------------------------
299 KMFolderNode
* KMFolderDir::hasNamedFolder(const QString
& aName
)
301 QListIterator
<KMFolderNode
*> it(*this);
302 while ( it
.hasNext() ) {
303 KMFolderNode
* node
= it
.next();
304 if ( node
&& node
->name() == aName
) {
312 //-----------------------------------------------------------------------------
313 KMFolderMgr
* KMFolderDir::manager() const
315 return parent()->manager();
319 #include "kmfolderdir.moc"