1
#include <qstringlist.h>
10
Name::Name( const QString & rurl, const Type type )
11
:m_rurl(rurl), m_type(type)
16
Name::Name( const char * rurl, const Type type )
17
:m_rurl(rurl), m_type(type)
26
m_rurl = m_rurl.mid(1);
30
if (m_rurl.endsWith("/"))
31
m_rurl = m_rurl.mid(0, m_rurl.length()-1);
34
if (!m_rurl.endsWith("/"))
38
if (m_rurl.endsWith("/"))
46
QString Name::correctName( const QString & rurl, const Type type )
49
temp = Name::cleanName(temp);
56
if (temp.endsWith("/"))
57
temp = temp.mid(0, temp.length()-1);
60
if (!temp.endsWith("/"))
68
void Name::setRURL( const QString & rurl, const Type type )
75
QString Name::rurl( ) const
80
void Name::addPath( const QString & addendum )
82
QString temp = correctName(addendum, Directory);
83
m_rurl = directory() + temp + fileName();
86
void Name::cleanRURL( )
88
m_rurl = cleanName(m_rurl);
91
QString Name::cleanName( const QString & rurl )
94
bool wasSlash = false;
95
for (unsigned int i = 0; i < rurl.length(); ++i)
97
if (wasSlash && (rurl[i] == '/'))
110
QString Name::extension( bool complete ) const
114
QString temp = fileName();
116
return temp.mid(temp.find('.')+1);
118
return temp.mid(temp.findRev('.')+1);
120
return QString::null;
123
QString Name::fileName( ) const
126
return m_rurl.section('/', -1);
127
return QString::null;
130
QString Name::directory( ) const
132
if ( (m_type == File) && (m_rurl.findRev('/') == -1) )
133
return QString::null;
135
return m_rurl.mid(0, m_rurl.findRev('/')+1);
138
bool Name::isFile( ) const
140
return m_type == File;
143
bool Name::isDirectory( ) const
145
return m_type == Directory;
148
bool Name::operator ==( const Name & rname )
150
return rname.rurl() == m_rurl;
153
bool Name::operator !=( const Name & rname )
155
return rname.rurl() != m_rurl;
158
bool Name::isValid( ) const
160
if (m_rurl.startsWith("/"))
162
if (m_rurl.contains("//"))
164
if ( (m_rurl.endsWith("/")) && (m_type == File) )
166
if ( (!m_rurl.endsWith("/")) && (m_type == Directory) )
174
Name::Type Name::type( ) const
179
void Name::setType( const Type type )
184
Name Name::relativeName( const QString &base, const QString &url )
186
QString dirUrl = base;
187
QString fileUrl = url;
189
if (dirUrl.isEmpty() || (dirUrl == "/"))
190
return Name(fileUrl);
192
QStringList dir = QStringList::split("/", dirUrl, false);
193
QStringList file = QStringList::split("/", fileUrl, false);
195
QString resFileName = file.last();
196
if (url.endsWith("/"))
198
file.remove(file.last());
201
while ( (i < dir.count()) && (i < (file.count())) && (dir[i] == file[i]) )
210
i >= dir.count() ? currDir = "" : currDir = dir[i];
211
i >= file.count() ? currFile = "" : currFile = file[i];
212
// qWarning("i = %d, currDir = %s, currFile = %s", i, currDir.latin1(), currFile.latin1());
213
if (currDir.isEmpty() && currFile.isEmpty())
215
else if (currDir.isEmpty())
216
result_down += file[i] + "/";
217
else if (currFile.isEmpty())
221
result_down += file[i] + "/";
226
while ( (!currDir.isEmpty()) || (!currFile.isEmpty()) );
228
return result_up + result_down + resFileName;
235
URL::URL( KURL base, KURL url, Type type )
236
:Name(Name::relativeName(base.path(), url.path()).rurl(), type), m_base(base)
240
URL::URL( KURL base, QString url, bool isUrlRelative, Type type )
241
:Name(isUrlRelative ? url : Name::relativeName(base.path(), url).rurl(), type), m_base(base)
245
void URL::setBase( const KURL & base )
250
void URL::setBase( const QString & base )
257
KURL URL::base( ) const
262
QString URL::basePath( ) const
264
return m_base.path(1);
267
KURL URL::url( ) const
275
QString URL::urlPath( ) const
282
else if (type() == Directory)
285
return url.path(mod);
288
QString URL::urlDirectory( ) const
293
return url.directory(false, false);
296
URL URL::relativeTo( KURL base )
298
return URL(base, url(), type());
301
URL URL::relativeURL( KURL base, KURL url )
303
return URL(base, url);
306
URL URL::relativeURL( KURL base, QString url, bool isUrlRelative )
308
return URL(base, url, isUrlRelative);
311
bool Relative::URL::operator ==( const URL & url )
313
return (m_base == url.base()) && (rurl() == url.rurl());
316
bool Relative::URL::operator !=( const URL & url )
318
return (m_base != url.base()) || (rurl() != url.rurl());
325
Directory::Directory( KURL base, KURL url )
326
:URL(base, url, Name::Directory)
330
Directory::Directory( KURL base, QString url, bool isRelativeUrl )
331
:URL(base, url, isRelativeUrl, Name::Directory)
335
void Directory::setRURL( QString rurl )
337
URL::setRURL(rurl, Name::Directory);
340
void Directory::setRURL( QString rurl, Type type )
342
URL::setRURL(rurl, type);
349
File::File( KURL base, KURL url )
350
:URL(base, url, Name::File)
354
File::File( KURL base, QString url, bool isRelativeUrl )
355
:URL(base, url, isRelativeUrl, Name::File)
359
void File::setRURL( QString rurl, Type type )
361
URL::setRURL(rurl, type);
364
void File::setRURL( QString rurl )
366
URL::setRURL(rurl, Name::File);